home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / warptlk3.zip / TOOLKIT / BOOK / MMAPG.INF (.txt) < prev    next >
OS/2 Help File  |  1995-10-23  |  618KB  |  15,084 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. Related Publications ΓòÉΓòÉΓòÉ
  11.  
  12. The following diagram provides an overview of the OS/2 Technical Library. 
  13.  
  14. Books can be ordered by calling toll free 1-800-879-2755 weekdays between 8:00 
  15. a.m. and 8:00 p.m. (EST). In Canada, call 1-800-465-4234. 
  16.  
  17.  
  18. ΓòÉΓòÉΓòÉ 1.2. Additional Multimedia Information ΓòÉΓòÉΓòÉ
  19.  
  20.  Multimedia REXX - (online) 
  21.            Describes REXX functions that enable media control interface string 
  22.            commands to be sent from an OS/2 command file to control multimedia 
  23.            devices.  This online book is provided with OS/2 multimedia. 
  24.  
  25.  Guide to Multimedia User Interface Design - (41G2922) 
  26.            Describes design concepts to be considered when designing a CUA 
  27.            multimedia interface that is consistent within a particular 
  28.            multimedia product and across other products. 
  29.  
  30.  
  31. ΓòÉΓòÉΓòÉ 1.3. Using This Online Book ΓòÉΓòÉΓòÉ
  32.  
  33. Before you begin to use this online book, it would be helpful to understand how 
  34. you can: 
  35.  
  36.      Expand the Contents to see all available topics 
  37.      Obtain additional information for a highlighted word or phrase 
  38.      Use action bar choices. 
  39.  
  40.  How To Use the Contents 
  41.  
  42.  When the Contents window first appears, some topics have a plus (+) sign 
  43.  beside them.  The plus sign indicates that additional topics are available. 
  44.  
  45.  To expand the Contents if you are using a mouse, select the plus sign (+).  If 
  46.  you are using a keyboard, use the Up or Down Arrow key to highlight the topic, 
  47.  and press the plus key (+). 
  48.  
  49.  To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  50.  to highlight the topic, and then press Enter). 
  51.  
  52.  How To Obtain Additional Information 
  53.  
  54.  After you select a topic, the information for that topic appears in a window. 
  55.  Highlighted words or phrases indicate that additional information is 
  56.  available.  You will notice that certain words in the following paragraph are 
  57.  highlighted in green letters, or in white letters on a black background. These 
  58.  are called hypertext terms.  If you are using a mouse, double-click on the 
  59.  highlighted word.  If you are using a keyboard, press the Tab key to move to 
  60.  the highlighted word, and then press the Enter key.  Additional information 
  61.  will appear in a window. 
  62.  
  63.  How To Use Action Bar Choices 
  64.  
  65.  Several choices are available for managing information presented in the 
  66.  M-Control Program/2 Programming Reference.  There are three pull-down menus on 
  67.  the action bar:  the Services menu, the Options menu, and the Help menu. 
  68.  
  69.  The actions that are selectable from the Services menu operate on the active 
  70.  window currently displayed on the screen.  These actions include the 
  71.  following: 
  72.  
  73.  Bookmark 
  74.     Sets a place holder so you can retrieve information of interest to you. 
  75.  
  76.     When you place a bookmark on a topic, it is added to a list of bookmarks 
  77.     you have previously set.  You can view the list, and you can remove one or 
  78.     all bookmarks from the list.  If you have not set any bookmarks, the list 
  79.     is empty. 
  80.  
  81.     To set a bookmark, do the following: 
  82.  
  83.       1. Select a topic from the Contents. 
  84.  
  85.       2. When that topic appears, choose the Bookmark option from the Services 
  86.          menu. 
  87.  
  88.       3. If you want to change the name used for the bookmark, type the new 
  89.          name in the field. 
  90.  
  91.       4. Select the Place radio button (or press the Up or Down Arrow key to 
  92.          select it). 
  93.  
  94.       5. Select OK.  The bookmark is then added to the bookmark list. 
  95.  
  96.  Search 
  97.     Finds occurrences of a word or phrase in the current topic, selected 
  98.     topics, or all topics. 
  99.  
  100.     You can specify a word or phrase to be searched.  You can also limit the 
  101.     search to a set of topics by first marking the topics in the Contents list. 
  102.  
  103.     To search for a word or phrase in all topics, do the following: 
  104.  
  105.       1. Choose the Search option from the Services pull-down. 
  106.  
  107.       2. Type the word or words to be searched. 
  108.  
  109.       3. Select All sections. 
  110.  
  111.       4. Select Search to begin the search. 
  112.  
  113.       5. The list of topics where the word or phrase appears is displayed. 
  114.  
  115.  Print 
  116.     Prints one or more topics.  You can also print a set of topics by first 
  117.     marking the topics in the Contents list. 
  118.  
  119.     You can print one or more topics.  You can also print a set of topics by 
  120.     first marking the topics on the Contents list. 
  121.  
  122.     To print the document Contents list, do the following: 
  123.  
  124.       1. Select Print from the Services menu. 
  125.  
  126.       2. Select Contents. 
  127.  
  128.       3. Select Print. 
  129.  
  130.       4. The Contents list is printed on your printer. 
  131.  
  132.  Copy 
  133.     Copies a topic you are viewing to a file you can edit. 
  134.  
  135.     You can copy a topic you are viewing into a temporary file named TEXT.TMP. 
  136.     You can later edit that file by using an editor such as the System Editor. 
  137.  
  138.     To copy a topic, do the following: 
  139.  
  140.       1. Expand the Contents list and select a topic. 
  141.  
  142.       2. When the topic appears, select Copy to file from the Services menu. 
  143.  
  144.     The system copies the text pertaining to that topic into the temporary 
  145.     TEXT.TMP file. 
  146.  
  147.     For information on any of the other choices in the Services menu, highlight 
  148.     the choice and press the F1 key. 
  149.  
  150.  Options 
  151.     Changes the way the Contents is displayed. 
  152.  
  153.     You can control the appearance of the Contents list. 
  154.  
  155.     To expand the Contents and show all levels for all topics, select Expand 
  156.     all from the Options menu. 
  157.  
  158.     For information on any of the other choices in the Options menu, highlight 
  159.     the choice and press the F1 key. 
  160.  
  161.  
  162. ΓòÉΓòÉΓòÉ 2. Multimedia Application Programming Environment ΓòÉΓòÉΓòÉ
  163.  
  164. OS/2 multimedia (referred to as MMPM/2 or Multimedia Presentation Manager/2 in 
  165. previous releases) is the multimedia platform for today because it takes 
  166. advantage of OS/2 features to provide an effective multimedia environment. OS/2 
  167. multitasking capability supports synchronization and concurrent playback of 
  168. multiple devices. The flat memory model supports the management of large data 
  169. objects. 
  170.  
  171. OS/2 multimedia is also the multimedia platform for tomorrow because of its 
  172. extendable architecture, which enables new functions, devices, and multimedia 
  173. data types to be added as the technology of multimedia advances. 
  174.  
  175. Because OS/2 multimedia and its devices are architected to support 
  176. synchronization activities, Presentation Manager (PM) applications can easily 
  177. incorporate multimedia function for playing multiple devices concurrently and 
  178. synchronizing audio and video as media drivers become available. 
  179.  
  180.  
  181. ΓòÉΓòÉΓòÉ 2.1. Application Programming Model ΓòÉΓòÉΓòÉ
  182.  
  183. The application programming model for an OS/2 multimedia application is an 
  184. extension of the OS/2 Presentation Manager programming model, providing both 
  185. messaging and procedural programming interfaces. OS/2 multimedia API procedures 
  186. allow applications to manage data and control devices while messages from the 
  187. OS/2 multimedia system notify applications of asynchronous events. 
  188.  
  189. The media control interface provides a view of the OS/2 multimedia system to 
  190. both application developers and users that is similar to that of a video and 
  191. audio home entertainment system. Operations are performed by controlling the 
  192. processors of media information, known as media devices.  Media devices can be 
  193. internal or external hardware devices, or they can be software libraries that 
  194. perform a defined set of operations by manipulating lower-level hardware 
  195. components and system software functions. 
  196.  
  197. Multiple media devices can be used in an operation. For example, the playback 
  198. of an audio compact disc can be implemented by coordinating the control of a 
  199. compact disc player and an amplifier-mixer device. 
  200.  
  201. The Media Device Manager (MDM) shown in the following figure provides resource 
  202. management for media devices and enables the command message and command string 
  203. interface. The Media Device Manager provides device independence to an 
  204. application developer. 
  205.  
  206.  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  207.  Γöé   Data    Γöé Γöé           Γöé Γöé   Media   Γöé Γöé           Γöé Γöé  Volume   Γöé Γöé    CD     Γöé Γöé  Digital  Γöé
  208.  ΓöéConverter  Γöé Γöé  Install  Γöé Γöé  Players  Γöé Γöé   Setup   Γöé Γöé  Control  Γöé Γöé  Player   Γöé Γöé   Audio   Γöé
  209.  ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  210.   Γöé                  Γöé             Γöé             Γöé             Γöé             Γöé         Γöé           Applications
  211.  -Γöé- - - - - - - - - Γöé - - - - - - Γöé - - - - - - Γöé - - - - - - Γöé - - - - - - Γöé - - - - Γöé - - - - - - - - - - -
  212.   Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  213.   Γöé    Γöé                      Media Device Manager Interface Layer                                           Γöé
  214.   Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  215.   Γöé           Γöé              Γöé              Γöé              Γöé              Γöé              Γöé              Γöé
  216.   Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  217.   Γöé     Γöé CD-ROM/XA  Γöé Γöé  CD Audio  Γöé ΓöéWave Audio  Γöé Γöé  Sequencer Γöé ΓöéDigitalvideoΓöé Γöé Amp/Mixer  Γöé Γöé Videodisc  Γöé
  218.   Γöé     Γöé  Driver    Γöé Γöé   Driver   Γöé Γöé  Driver    Γöé Γöé    Driver  Γöé Γöé  Driver    Γöé Γöé  Driver    Γöé Γöé   Driver   Γöé
  219.   Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γö¼ΓöÇΓöÿ ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  220.   Γöé Application   ΓöéΓöé     Γöé      Γöé              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé             Γöé           Γöé Γöé                 Γöé
  221.   Γöé     or        ΓöéΓöé     Γöé      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           Γöé Γöé                 Γöé
  222.   Γöé Media Driver  ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γöé
  223.   Γöé               Γöé    ΓöîΓöÇΓöÿ                          Γöé Γöé Γöé Γöé Γöé Γöé                               Γöé         Γöé
  224.  ΓöîΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé    Γöé  Stream Handlers           Γöé Γöé Γöé Γöé Γöé Γöé                           ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  225.  Γöé  MMIO   Γö£ΓöÇΓöÇΓöÇΓöÉ  Γöé    Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé Γöé Γöé Γöé Γöé Γöé      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé Audio  Γöé    Γöé
  226.  Γöé Manager Γöé   Γöé  Γöé    ΓöéΓöîΓöÇΓöñ File System  Γöé          Γöé Γöé Γöé Γöé Γöé Γöé    ΓöîΓöÇΓöñ    Audio     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  VSD   Γöé    Γöé
  227.  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝Γöñ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ          Γöé Γöé Γöé Γöé Γöé Γöé    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé        Γöé    Γöé
  228.  ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé    ΓöéΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé Γöé Γöé Γöé Γöé Γöé    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé
  229.  ΓöéI/O ProceduresΓöé Γöé    ΓöéΓöé Γöé Multi-track  Γö£ΓöÇΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÉ   Γö£ΓöÇΓöñ   Memory     Γöé         Γöé         Γöé
  230.  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé    ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé   ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé   Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé         Γöé
  231.       Γöé           Γöé    ΓöéΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γö£ΓöÇΓöÇΓöÇΓö╝Γöñ Sync/Stream ΓöéΓöé   Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γöé         Γöé
  232.       Γöé           Γöé    ΓöéΓööΓöÇΓöñ   Video      Γö£ΓöÇΓöñ   ΓöéΓöé Manager DLL Γö£Γö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöñ  CD-ROM/XA   Γöé         Γöé         Γöé
  233.       Γöé           ΓööΓöÇΓöÇΓöÇΓöÉΓöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé   ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé   Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé         Γöé
  234.       Γöé               ΓöéΓöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé   Γöé       Γöé       Γöé   Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γöé         Γöé
  235.    ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöéΓöé  Γöé  MIDI Mapper Γö£ΓöÇΓöÿ   Γöé       Γöé       Γöé   ΓööΓöÇΓöñ    CD/DA     Γöé         Γöé         Γöé  RING 3
  236.    ΓöéFile SystemΓöé      ΓöéΓöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé       Γöé       Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé         Γöé  DLL
  237. - -Γöé- - - - - -Γöé- - - ΓöéΓöé- - - - - - - - - - - -Γöé- - - -Γöé- - - -Γöé- - - - - - - - - - - - - - - Γöé - - - - Γöé- - - - -
  238.    ΓöéFAT/HPFS/XAΓöé      ΓöéΓöé                       ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé                              Γöé         Γöé  RING 0
  239.    ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼Γö¼Γöÿ      ΓöéΓöé                       ΓöéΓöé Sync/Stream ΓöéΓöé                              Γöé         Γöé  PDD
  240.      Γöé    Γöé  ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöéΓöé                       ΓöéΓöé Manager PDD ΓöéΓöé                              Γöé         Γöé
  241.  ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉΓöéΓöîΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöéΓöéΓöé                       ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé                              Γöé IOCtl   Γöé
  242.  Γöé Hard  ΓöéΓöéΓöé  R/W  Γöé ΓöéΓöéΓöé                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                              Γöé         Γöé
  243.  Γöé Disk  ΓöéΓöéΓöéOpticalΓöé ΓöéΓöéΓöé                               Γöé                                      Γöé         Γöé
  244.  Γöé PDD   ΓöéΓöéΓöé  PDD  Γöé ΓöéΓöéΓöé                               Γöé                                      Γöé         Γöé IOCtl
  245.  ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöéΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓöéΓöéΓöé                               Γöé                                      Γöé         Γöé
  246.    Γöé      Γöé  Γöé       ΓöéΓöéΓöé                           ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                Γöé         Γöé
  247.    Γöé      Γöé  ΓööΓöÉ      ΓöéΓöéΓöé                       ΓöîΓöÇΓöÇΓöÇΓöñRing 0 Stub Device DriverΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ         Γöé
  248.    Γöé      Γöé   Γöé      ΓöéΓöéΓöé                       Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                Γöé         Γöé
  249.    ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÉΓöé  ΓöîΓöÇΓöÇΓöÇΓö┤Γö┤Γö┤ΓöÇΓöÇΓöÇΓöÉ                   Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                 Γöé         Γöé
  250.    ΓöéΓöéDisketteΓöéΓöé  ΓöéCD-ROM/XAΓöé               IDC Γöé   ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé                 Γöé         Γöé
  251.    ΓöéΓöé   PDD  ΓöéΓöé  Γöé   PDD   Γöé                   Γöé   ΓöéΓöéCommon Audio InterfaceΓö£Γö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé
  252.    ΓöéΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé  ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                   Γöé   ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé                           Γöé
  253.    Γöé  Γöé       Γöé    ΓöîΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ              Γöé   Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé                       ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ
  254.    Γöé  Γöé       Γöé    ΓöéGeneric SCSCΓöé              Γöé   Γöé     Γöé OEM Audio Γöé      Γöé                       Γöé OS/2  Γöé
  255.    Γöé  Γöé       ΓööΓöÇΓöÇΓöÇΓöÇΓöñ     DD     Γöé              ΓööΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ   Device  Γöé      Γöé                       Γöé  COM  Γöé
  256.    Γöé  Γöé            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                  Γöé     Γöé   Driver  Γöé      Γöé                       Γöé  PDD  Γöé
  257.    Γöé  Γöé                  Γöé                         Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé                       ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  258.    Γöé  Γöé                  Γöé                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                           Γöé
  259. - -Γöé- Γöé - - - - - - - - -Γöé- - - - - - - - - - - - - - - - - - -Γöé- - - - - - - - - - - - - - - - - - - - Γöé- - - -
  260.    Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                           Γöé                                        Γöé
  261.    Γö┤           Γö┤         Γö┤         Γö┤                       ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                                RS-232
  262.   Hard      Diskette  Optical   CD-ROM                     ΓöéOEM AudioΓöé
  263.   Drive      Drive     Drive     Drive                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé                                    Physical
  264.                                                                   ΓööΓöÇΓöÇΓöÿ                                    Devices
  265.  
  266. Refer to the OS/2 Multimedia Subsystem Programming Guide for information on 
  267. multimedia subsystem programming including media drivers and stream handlers. 
  268.  
  269. To assist you in creating a standardized user interface for your OS/2 
  270. multimedia application, OS/2 provides multimedia window controls, which have 
  271. been implemented in OS/2 multimedia applications such as Volume Control.  See 
  272. the following figure. 
  273.  
  274. Graphic buttons are two-state buttons that can be toggled up and down. They can 
  275. display text, or graphics, or both. They can also be animated. Their 
  276. versatility makes graphic buttons ideal to use for device control panels. 
  277.  
  278. Circular sliders lend realism to your panel by providing familiar-looking 
  279. dials. The dials are easy to operate and do not hog screen real estate. 
  280.  
  281. Secondary windows provide a sizeable dialog window to contain your multimedia 
  282. device controls. 
  283.  
  284.  
  285. ΓòÉΓòÉΓòÉ 2.1.1. OS/2 Multimedia Application Requirements ΓòÉΓòÉΓòÉ
  286.  
  287. The IBM Developer's Toolkit for OS/2 Version 3 includes the bindings, header 
  288. files, and libraries for developing OS/2 multimedia applications. 
  289.  
  290. A PM message queue is required for all OS/2 multimedia applications because it 
  291. enables the efficient sharing of devices in the OS/2 multimedia environment. 
  292.  
  293. The minimum recommended stack size for an OS/2 multimedia application is 16KB. 
  294.  
  295. All OS/2 multimedia public interfaces, for example error message defines and 
  296. common definitions, are accessible through the OS2ME.H file. Constants and 
  297. prototypes for multimedia window control functions, MMIO file services 
  298. functions, and high-level interfaces are accessible after the following defines 
  299. are included in your application: 
  300.  
  301.  Define                    Services 
  302.  #define INCL_SW           Window Control Functions 
  303.  #define INCL_MMIOOS2      MMIO File Services 
  304.  #define INCL_MACHDR       High-Level Services 
  305.  
  306.  OS/2 multimedia applications should link with the MMPM2.LIB library. 
  307.  
  308.  Note:  OS/2 multimedia header files have naming conventions compatible with 
  309.         the standard OS/2 format.  Applications using previous versions of the 
  310.         MMPM/2 header files will still use those header files by default when 
  311.         the applications are compiled.  In order to use the OS/2-consistent 
  312.         header files in an application, define INCL_OS2MM in the program. 
  313.         Defining INCL_OS2MM automatically defines the following: 
  314.  
  315.  INCL_MCIOS2               MCI-related include files (MCIOS2.H and MMDRVOS2.H) 
  316.  INCL_MMIOOS2              MMIO include file (MMIOOS2.H) 
  317.  
  318.  All existing applications remain binary compatible.  If they are recompiled a 
  319.  choice of which set of headers to use is available. If new header files are 
  320.  used, the source code must be modified to conform to the name changes. 
  321.  
  322.  
  323. ΓòÉΓòÉΓòÉ 2.1.2. Extendable Device Support ΓòÉΓòÉΓòÉ
  324.  
  325. The system architecture of OS/2 multimedia extensions is designed to be 
  326. extendable.  This level of modularity allows independent development of support 
  327. for new hardware devices, logical media devices, and file formats. 
  328.  
  329. Examples of media control interface devices are listed in the following table. 
  330. The table shows the logical device types that can be supported and already have 
  331. media control interface definitions. Devices currently supported by OS/2 
  332. multimedia are indicated by (X) marks. 
  333.  
  334. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  335. ΓöéMedia Device  ΓöéOS/2      ΓöéString        ΓöéConstant                          Γöé
  336. ΓöéType          ΓöéMultimediaΓöé              Γöé                                  Γöé
  337. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  338. ΓöéAmplifier     ΓöéX         Γöéampmix        ΓöéMCI_DEVTYPE_AUDIO_AMPMIX          Γöé
  339. Γöémixer         Γöé          Γöé              Γöé                                  Γöé
  340. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  341. ΓöéAudio tape    Γöé          Γöéaudiotape     ΓöéMCI_DEVTYPE_AUDIO_TAPE            Γöé
  342. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  343. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  344. ΓöéCD audio      ΓöéX         Γöécdaudio       ΓöéMCI_DEVTYPE_CD_AUDIO              Γöé
  345. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  346. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  347. ΓöéCD-XA player  ΓöéX         Γöécdxa          ΓöéMCI_DEVTYPE_CDXA                  Γöé
  348. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  349. ΓöéDigital audio Γöé          Γöédat           ΓöéMCI_DEVTYPE_DAT                   Γöé
  350. Γöétape          Γöé          Γöé              Γöé                                  Γöé
  351. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  352. ΓöéDigital video ΓöéX         Γöédigitalvideo  ΓöéMCI_DEVTYPE_DIGITAL_VIDEO         Γöé
  353. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  354. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  355. ΓöéHeadphone     Γöé          Γöéheadphone     ΓöéMCI_DEVTYPE_HEADPHONE             Γöé
  356. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  357. ΓöéMicrophone    Γöé          Γöémicrophone    ΓöéMCI_DEVTYPE_MICROPHONE            Γöé
  358. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  359. ΓöéMonitor       Γöé          Γöémonitor       ΓöéMCI_DEVTYPE_MONITOR               Γöé
  360. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  361. ΓöéOther         Γöé          Γöéother         ΓöéMCI_DEVTYPE_OTHER                 Γöé
  362. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  363. ΓöéVideo overlay Γöé          Γöévideooverlay  ΓöéMCI_DEVTYPE_OVERLAY               Γöé
  364. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  365. ΓöéSequencer     ΓöéX         Γöésequencer     ΓöéMCI_DEVTYPE_SEQUENCER             Γöé
  366. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  367. ΓöéSpeaker       Γöé          Γöéspeaker       ΓöéMCI_DEVTYPE_SPEAKER               Γöé
  368. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  369. ΓöéVideodisc     ΓöéX         Γöévideodisc     ΓöéMCI_DEVTYPE_VIDEODISC             Γöé
  370. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  371. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  372. ΓöéVideo         Γöé          Γöévideotape     ΓöéMCI_DEVTYPE_VIDEOTAPE             Γöé
  373. Γöétape/cassette Γöé          Γöé              Γöé                                  Γöé
  374. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  375. ΓöéWaveform audioΓöéX         Γöéwaveaudio     ΓöéMCI_DEVTYPE_WAVEFORM_AUDIO        Γöé
  376. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  377. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  378.  
  379. Note:  M-Control Program 2.01, which supports the M-Motion Video Adapter/A, 
  380.        provides overlay extensions for OS/2 multimedia. 
  381.  
  382.  
  383. ΓòÉΓòÉΓòÉ 3. Media Control Interface ΓòÉΓòÉΓòÉ
  384.  
  385. This section describes the services offered to applications by the media 
  386. control interface for managing devices in the multimedia environment. 
  387.  
  388.  
  389. ΓòÉΓòÉΓòÉ 3.1. Command Message and Command String Interfaces ΓòÉΓòÉΓòÉ
  390.  
  391. When a user activates a PM control to use a multimedia device function, the 
  392. OS/2 multimedia application window procedure sends a command to the media 
  393. control interface. Depending on the needs of the application, the window 
  394. procedure can use the command message interface or the command string interface 
  395. to implement these device commands. Messages for the command message interface 
  396. (also referred to as procedural interface) are sent with mciSendCommand. 
  397. Strings for the command string interface are sent to the Media Device Manager 
  398. for parsing, using the mciSendString function. 
  399.  
  400. See the following figure.
  401.  
  402. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  403. |         mciSendCommand                     mciSendString                  |
  404. |                Γöé                                 Γöé                        |
  405. |                Γöé                                 Γöé                        |
  406. |                                                                         |
  407. |   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ           |
  408. |   Γöé          Media Device Manager Interface Layer             Γöé           |
  409. M   ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           |
  410. D      Γöé                       Γöé                                            |
  411. M      Γöé                       Γöé                           Default Tables   |
  412. |      Γöé                       Γöé                            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ|
  413. |      Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         ΓöîΓöÇΓöÇΓöÇΓöñ    System    Γöé|
  414. |      Γöé          Γöé    Table-Driven Parser    ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  415. |      Γöé          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé   Γöé   waveaudio  Γöé|
  416. |      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                       Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  417. |                    Γöé                      Γöé           Γöé   Γöé   sequencer  Γöé|
  418. |                                          Γöé           Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  419. |    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé           Γöé   Γöé    cdaudio   Γöé|
  420. |    Γöé    Media Device Manager   Γöé          Γöé           Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  421. |    ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ          Γöé           Γöé   Γöé     cdxa     Γöé|
  422. |_ _ _ _Γöé _ _ _ _Γöé _ _ _ _Γöé_ _ _ _ _ _ _ _ _Γöé_ _ _      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  423.         Γöé        Γöé        Γöé                 Γöé    |      Γöé   Γöé    ampmix    Γöé|
  424.      ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ             Γöé    |      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  425.      ΓöéMedia Γöé ΓöéMedia Γöé ΓöéMedia Γöé             Γöé    |      Γöé   Γöé   videodisc  Γöé|
  426.      ΓöéDriverΓöé ΓöéDriverΓöé ΓöéDriverΓöé             Γöé    |      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  427.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             Γöé    |      Γöé   Γöé digitalvideo Γöé|
  428.                        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ             Γöé    |      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  429.                        ΓöéCustomΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    |      ΓööΓöÇΓöÇΓöÇΓöñ     other    Γöé|
  430.                        ΓöéTable Γöé                  |          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ|
  431.                        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                  | _ _ _ _ _ _ _ _ _ _ _ _ _|
  432.  
  433. The string interface provides access to most functions of the message 
  434. interface. However, operations that involve identifying multiple devices (for 
  435. example, for the purpose of establishing connections), or operations that 
  436. return complex data structures (such as a CD table of contents) are available 
  437. only through the message interface. 
  438.  
  439. Each time a message is sent to the Media Device Manager with mciSendCommand, 
  440. flags are set and a pointer to a data structure is passed. Each time a string 
  441. is passed with mciSendString, it must be converted to the message format 
  442. understood by the media driver. The Media Device Manager calls the multimedia 
  443. string parser, which is case insensitive, to interpret the strings. The time 
  444. required for this conversion process makes the string method of control 
  445. slightly slower than the message method. However, the string interface 
  446. generally requires less application code than the command message interface. 
  447. The string interface also lets users interactively control devices with a 
  448. command line or PM interface.  See Command Strings. 
  449.  
  450.  
  451. ΓòÉΓòÉΓòÉ 3.1.1. Command Messages ΓòÉΓòÉΓòÉ
  452.  
  453. Command messages are used by the command message interface and specified with 
  454. mciSendCommand.  Most command messages have corresponding string commands that 
  455. are used by the command string interface and specified with mciSendString. 
  456. Command messages are sent either to a logical device or to the system. The 
  457. following table lists the command messages sent to devices. Commands that cause 
  458. asynchronous responses to be generated, such as cue point and position advise, 
  459. can be called using the appropriate string command; however, their responses 
  460. are returned to window procedures. 
  461.  
  462. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  463. ΓöéCommand Messages        Γöé                                    Γöé
  464. ΓöéSupported by All DevicesΓöé                                    Γöé
  465. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  466. ΓöéMCI_OPEN                ΓöéEstablishes a specific instance of aΓöé
  467. Γöé                        Γöémultimedia device or file.          Γöé
  468. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  469. ΓöéMCI_GETDEVCAPS          ΓöéGets the capabilities of a device.  Γöé
  470. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  471. ΓöéMCI_INFO                ΓöéGets textual information from the   Γöé
  472. Γöé                        Γöédevice.                             Γöé
  473. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  474. ΓöéMCI_STATUS              ΓöéGets the current status of the      Γöé
  475. Γöé                        Γöédevice.                             Γöé
  476. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  477. ΓöéMCI_CLOSE               ΓöéCloses the device.                  Γöé
  478. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  479. ΓöéDevice Setup Command    Γöé                                    Γöé
  480. ΓöéMessages                Γöé                                    Γöé
  481. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  482. ΓöéMCI_SET                 ΓöéChanges the configuration of the    Γöé
  483. Γöé                        Γöédevice.                             Γöé
  484. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  485. ΓöéMCI_CONNECTOR           ΓöéEnables, disables, or queries the   Γöé
  486. Γöé                        Γöéstate of a connector.               Γöé
  487. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  488. ΓöéPlayback and Recording  Γöé                                    Γöé
  489. ΓöéCommand Messages        Γöé                                    Γöé
  490. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  491. ΓöéMCI_CUE                 ΓöéPrerolls a device for playing or    Γöé
  492. Γöé                        Γöérecording.                          Γöé
  493. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  494. ΓöéMCI_SEEK                ΓöéSeeks to a specified position in theΓöé
  495. Γöé                        Γöéfile.                               Γöé
  496. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  497. ΓöéMCI_PLAY                ΓöéBegins transmitting output data.    Γöé
  498. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  499. ΓöéMCI_RECORD              ΓöéBegins recording data from the      Γöé
  500. Γöé                        Γöéspecified position.                 Γöé
  501. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  502. ΓöéMCI_PAUSE               ΓöéSuspends the playing or recording   Γöé
  503. Γöé                        Γöéoperation.                          Γöé
  504. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  505. ΓöéMCI_RESUME              ΓöéResumes the playing or recording    Γöé
  506. Γöé                        Γöéoperation.                          Γöé
  507. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  508. ΓöéMCI_STOP                ΓöéStops the playing or recording      Γöé
  509. Γöé                        Γöéoperation.                          Γöé
  510. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  511. ΓöéMCI_LOAD                ΓöéLoads a data element into a media   Γöé
  512. Γöé                        Γöédevice. An example of a data elementΓöé
  513. Γöé                        Γöéis a waveform file.                 Γöé
  514. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  515. ΓöéMCI_SAVE                ΓöéSaves the current file to disk.     Γöé
  516. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  517. ΓöéSynchronization Command Γöé                                    Γöé
  518. ΓöéMessages                Γöé                                    Γöé
  519. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  520. ΓöéMCI_SET_CUEPOINT        ΓöéSets run-time cue points.           Γöé
  521. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  522. ΓöéMCI_SET_POSITION_ADVISE ΓöéAdvises the application when time   Γöé
  523. Γöé                        Γöéelapses or position changes.        Γöé
  524. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  525. ΓöéMCI_SET_SYNC_OFFSET     ΓöéBiases MCI_PLAY starting positions  Γöé
  526. Γöé                        Γöéand MCI_SEEK target positions for   Γöé
  527. Γöé                        Γöégroup operations.                   Γöé
  528. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  529. ΓöéDevice-Specific Command Γöé                                    Γöé
  530. ΓöéMessages                Γöé                                    Γöé
  531. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  532. ΓöéMCI_CAPTURE             ΓöéCaptures the current video image andΓöé
  533. Γöé                        Γöéstores it as an image device        Γöé
  534. Γöé                        Γöéelement.                            Γöé
  535. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  536. ΓöéMCI_ESCAPE              ΓöéSends a custom message directly to  Γöé
  537. Γöé                        Γöéthe media driver.                   Γöé
  538. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  539. ΓöéMCI_GETIMAGEBUFFER      ΓöéGets the contents of the capture    Γöé
  540. Γöé                        Γöévideo buffer or the current movie   Γöé
  541. Γöé                        Γöéframe.                              Γöé
  542. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  543. ΓöéMCI_GETTOC              ΓöéGets a contents structure for the   Γöé
  544. Γöé                        Γöécurrently loaded CD-ROM disc.       Γöé
  545. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  546. ΓöéMCI_PUT                 ΓöéSets the source and destination     Γöé
  547. Γöé                        Γöérectangles for the transformation ofΓöé
  548. Γöé                        Γöéthe video image.  It also sets the  Γöé
  549. Γöé                        Γöésize and position of the default    Γöé
  550. Γöé                        Γöévideo.                              Γöé
  551. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  552. ΓöéMCI_REWIND              ΓöéSeeks the media to the beginning    Γöé
  553. Γöé                        Γöépoint.                              Γöé
  554. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  555. ΓöéMCI_SETTUNER            ΓöéCauses the digital video MCD to     Γöé
  556. Γöé                        Γöéchange the frequency the tuner      Γöé
  557. Γöé                        Γöédevice is tuned to.                 Γöé
  558. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  559. ΓöéMCI_SPIN                ΓöéSpins the videodisc player up or    Γöé
  560. Γöé                        Γöédown.                               Γöé
  561. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  562. ΓöéMCI_STEP                ΓöéAdvances or backs up the videodisc  Γöé
  563. Γöé                        Γöéplayer one or more frames.          Γöé
  564. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  565. ΓöéMCI_WHERE               ΓöéReturns the source and destination  Γöé
  566. Γöé                        Γöérectangles set by MCI_PUT. It also  Γöé
  567. Γöé                        Γöéreturns the size and position of theΓöé
  568. Γöé                        Γöévideo window.                       Γöé
  569. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  570. ΓöéMCI_WINDOW              ΓöéSpecifies the window in which to    Γöé
  571. Γöé                        Γöédisplay video output, and controls  Γöé
  572. Γöé                        Γöéthe visibility of the default video Γöé
  573. Γöé                        Γöéwindow.                             Γöé
  574. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  575. ΓöéEditing Command MessagesΓöé                                    Γöé
  576. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  577. ΓöéMCI_COPY                ΓöéCopies specified data range into    Γöé
  578. Γöé                        Γöéclipboard or buffer.                Γöé
  579. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  580. ΓöéMCI_CUT                 ΓöéRemoves specified data range and    Γöé
  581. Γöé                        Γöéplaces it into clipboard or buffer. Γöé
  582. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  583. ΓöéMCI_DELETE              ΓöéDeletes specified data range.       Γöé
  584. Γöé                        ΓöéClipboard or buffer is not used.    Γöé
  585. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  586. ΓöéMCI_PASTE               ΓöéDeletes selected data range if      Γöé
  587. Γöé                        Γöédifference between FROM and TO is   Γöé
  588. Γöé                        Γöémore than zero, then inserts data   Γöé
  589. Γöé                        Γöéfrom buffer or clipboard.           Γöé
  590. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  591. ΓöéMCI_REDO                ΓöéReverses previous MCI_UNDO command. Γöé
  592. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  593. ΓöéMCI_UNDO                ΓöéCancels previous RECORD, CUT, PASTE,Γöé
  594. Γöé                        Γöéor DELETE.                          Γöé
  595. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  596.  
  597. The following table lists the system command messages specified with 
  598. mciSendCommand. 
  599.  
  600. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  601. ΓöéMCI_DEVICESETTINGS      ΓöéProvides a media control interface  Γöé
  602. Γöé                        Γöédriver the opportunity to insert    Γöé
  603. Γöé                        Γöécustom settings pages.              Γöé
  604. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  605. ΓöéMCI_GROUP               ΓöéMakes and breaks device group       Γöé
  606. Γöé                        Γöéassociations.                       Γöé
  607. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  608. ΓöéMCI_MASTERAUDIO         ΓöéSets the system master volume and   Γöé
  609. Γöé                        Γöétoggles speakers and headphones.    Γöé
  610. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  611. ΓöéMCI_SYSINFO             ΓöéGets and sets device and system     Γöé
  612. Γöé                        Γöéinformation.                        Γöé
  613. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  614. ΓöéMCI_CONNECTORINFO       ΓöéGets information regarding the      Γöé
  615. Γöé                        Γöénumber and types of connectors      Γöé
  616. Γöé                        Γöédefined for a device.               Γöé
  617. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  618. ΓöéMCI_DEFAULT_CONNECTION  ΓöéMakes, breaks, or queries default   Γöé
  619. Γöé                        Γöéconnections established for a       Γöé
  620. Γöé                        Γöédevice.                             Γöé
  621. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  622. ΓöéMCI_CONNECTION          ΓöéGets the device context connection  Γöé
  623. Γöé                        Γöéor establishes an alias for a       Γöé
  624. Γöé                        Γöéconnected device.                   Γöé
  625. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  626. ΓöéMCI_ACQUIREDEVICE       ΓöéAcquires a device for use.          Γöé
  627. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  628. ΓöéMCI_RELEASEDEVICE       ΓöéReleases a device from use.         Γöé
  629. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  630.  
  631.  
  632. ΓòÉΓòÉΓòÉ 3.1.2. Command Strings ΓòÉΓòÉΓòÉ
  633.  
  634. String commands utilize a more English text format than command messages. 
  635. Following is the valid syntax for passing string commands directly to the media 
  636. control interface: 
  637.  
  638. <COMMAND> <DEVICE_TYPE|DEVICE_NAME|ALIAS|ELEMENT> <PARAMETERS>
  639.  
  640. This format is used for all string commands except masteraudio, which does not 
  641. require a device name. The format for the masteraudio command is: 
  642.  
  643. <COMMAND> <PARAMETERS>
  644.  
  645. An application calls mciSendString to pass the string command to the Media 
  646. Device Manager for parsing and execution. The String Test Sample program, 
  647. provided in the Toolkit (\TOOLKIT\SAMPLES\MM\MCISTRNG), illustrates the 
  648. interpretive string interface. The following code fragment shows the call to 
  649. mciSendString in the String Test Sample. 
  650.  
  651. ulSendStringRC =
  652.    mciSendString(
  653.     (PSZ) &acMCIString[ 0 ],          /* The MCI String Command     */
  654.     (PSZ) &acMCIReturnString[ 0 ],    /* Place for return strings   */
  655.     (USHORT) MCI_RETURN_STRING_LENGTH, /* Length of return space     */
  656.     hwndDisplayDialogBox,              /* Window to receive notifies */
  657.     usCountOfMCIStringSent );          /* The user parameter         */
  658.  
  659. The following is an example of the string commands required to open a CD player 
  660. and play an entire CD. 
  661.  
  662. open cdaudio01 alias cdaud1 shareable
  663. status cdaud1 media present wait
  664. status cdaud1 mode wait
  665. set cdaud1 time format milliseconds
  666. seek cdaud1 to start
  667. play cdaud1 notify
  668. .
  669. .
  670. .
  671. ** play the entire disc **
  672. .
  673. .
  674. .
  675. close cdaud1
  676.  
  677. The status commands let the application know if a CD is present and if the 
  678. drive is ready.  Notice that wait flags are used; otherwise the commands would 
  679. return immediately with no status information. The set command sets the time 
  680. base to milliseconds for all future commands. The close command is sent after 
  681. the application receives an MM_MCINOTIFY message at the completion of the play 
  682. command. 
  683.  
  684. Note:  The close command can be sent at any time. 
  685.  
  686.  Authoring languages that include support for the media control interface can 
  687.  integrate device command strings like these with authoring language syntax to 
  688.  create multimedia presentations. The string interface provides a 16-bit 
  689.  interface to enable developers to integrate multimedia function with the macro 
  690.  languages of existing 16-bit applications. 
  691.  
  692.  
  693. ΓòÉΓòÉΓòÉ 3.1.3. Wait and Notify Flags ΓòÉΓòÉΓòÉ
  694.  
  695. An application can set a wait or a notify flag on a device command sent with 
  696. mciSendString or mciSendCommand. These two flags are mutually exclusive and are 
  697. available on all commands except some system commands. 
  698.  
  699. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  700. ΓöéFlag           ΓöéDescription                                  Γöé
  701. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  702. Γöéwait           ΓöéThe command is executed synchronously.  The  Γöé
  703. Γöé               Γöéfunction waits until the requested action is Γöé
  704. Γöé               Γöécomplete before returning to the application.Γöé
  705. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  706. Γöénotify         ΓöéThe command is executed asynchronously,      Γöé
  707. Γöé               Γöéallowing control to be returned immediately  Γöé
  708. Γöé               Γöéto the application.  When the requested      Γöé
  709. Γöé               Γöéaction is complete, an MM_MCINOTIFY message  Γöé
  710. Γöé               Γöéis sent to the application window procedure. Γöé
  711. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  712.  
  713. Note:  If a command is issued without a wait flag or notify flag specified, the 
  714.        command is executed asynchronously, and the application is never 
  715.        notified. 
  716.  
  717.  The wait flag is useful for operations that are conducted quickly, like the 
  718.  playback of short sounds, which the application wants to complete before it 
  719.  continues.  The wait flag is also useful for operations that return 
  720.  information, such as device capabilities, because the Media Device Manager 
  721.  parser converts the return code to a meaningful string. However, the 
  722.  conversion occurs only if the wait flag is specified. 
  723.  
  724.  The wait flag should be used with care when issuing commands from threads that 
  725.  read application input message queues as it ties up the thread, preventing all 
  726.  PM messages in the system from being processed while the command issued with 
  727.  the wait flag is executed. 
  728.  
  729.  The notify flag is useful for operations that are conducted over a period of 
  730.  time. For example, the playing of a waveform file often can take a while to 
  731.  complete. By specifying the notify flag, an application requests to be 
  732.  notified when processing of the command is complete.  The application window 
  733.  procedure can then remain responsive to input queue processing. 
  734.  
  735.  
  736. ΓòÉΓòÉΓòÉ 3.1.4. Notification Messages ΓòÉΓòÉΓòÉ
  737.  
  738. The system returns asynchronous response messages (notification messages) to 
  739. applications to indicate events such as completing a media device function or 
  740. passing ownership of a media device from one process to another. 
  741.  
  742. As stated in the previous section, two standard flags available to most 
  743. messages when using the mciSendCommand function are MCI_WAIT (default) and 
  744. MCI_NOTIFY. These two flags are mutually exclusive.  MCI_WAIT specifies that 
  745. control does not return to the application until the function has completed. 
  746. MCI_NOTIFY specifies that control returns immediately to the application and 
  747. the media control interface is to post a notification message to the window 
  748. specified in the callback window handle when the command completes processing. 
  749.  
  750. If the command was sent using the notify flag and the command action completes, 
  751. an MM_MCINOTIFY message is returned asynchronously to the application using 
  752. WinPostMsg. It can have any of the following values: 
  753.  
  754. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  755. ΓöéNotification Code       ΓöéMeaning                             Γöé
  756. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  757. ΓöéMCI_NOTIFY_SUCCESSFUL   ΓöéThe command completed successfully. Γöé
  758. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  759. ΓöéMCI_NOTIFY_SUPERSEDED   ΓöéAnother command is being processed. Γöé
  760. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  761. ΓöéMCI_NOTIFY_ABORTED      ΓöéAnother command interrupted this    Γöé
  762. Γöé                        Γöéone.                                Γöé
  763. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  764.  
  765. Note:  If none of the above notification codes are returned, an error code is 
  766.        returned, indicating that the asynchronous processing of the command 
  767.        ended in an error condition. To convert the error code to a textual 
  768.        description of the error, the application calls the mciGetErrorString 
  769.        function. 
  770.  
  771.  The following code fragment illustrates how the Audio Recorder Sample program, 
  772.  provided in the Toolkit (\TOOLKIT\SAMPLES\MM\RECORDER), handles notification 
  773.  messages. 
  774.  
  775.   case MM_MCINOTIFY:
  776.    /*
  777.     * This message is returned to an application when a device
  778.     * successfully completes a command that was issued with a NOTIFY
  779.     * flag, or when an error occurs with the command.
  780.     *
  781.     * This message returns two values. A user parameter (mp1) and
  782.     * the command message (mp2) that was issued. The low word of mp1
  783.     * is the Notification Message Code, which indicates the status of the
  784.     * command like success or failure. The high word of mp2 is the
  785.     * Command Message which indicates the source of the command.
  786.     */
  787.  
  788.     usNotifyCode = (USHORT) SHORT1FROMMP( mp1);     /* low-word  */
  789.     usCommandMessage = (USHORT) SHORT2FROMMP( mp2); /* high-word */
  790.  
  791.     switch (usCommandMessage)
  792.     {
  793.      case MCI_PLAY:
  794.         switch (usNotifyCode)
  795.         {
  796.            case MCI_NOTIFY_SUCCESSFUL:
  797.               if (eState != ST_STOPPED)
  798.               {
  799.                  /*
  800.                   * Update the status line with appropriate message.
  801.                   */
  802.                  UpdateTheStatusLine(hwnd, IDS_STOPPED);
  803.                  eState = ST_STOPPED;
  804.  
  805.                  /*
  806.                   * Stop the play button animation
  807.                   */
  808.                  WinSendMsg( hwndPlayPB,        /* Play button handle */
  809.                              GBM_ANIMATE,       /* Animation control  */
  810.                              MPFROMSHORT(FALSE),/* Animation flag     */
  811.                              NULL );            /* Ignore return data */
  812.               }
  813.               break;
  814.  
  815.            case MCI_NOTIFY_SUPERSEDED:
  816.            case MCI_NOTIFY_ABORTED:
  817.               /* we don't need to handle these messages. */
  818.               break;
  819.  
  820.            default:
  821.               /*
  822.                * If the message is none of the above, then it must be
  823.                * a notification error message.
  824.                */
  825.               ShowMCIErrorMessage( usNotifyCode);
  826.               eState = ST_STOPPED;
  827.  
  828.               /*
  829.                * Stop the play button animation and update the status
  830.                * line with appropriate text.
  831.                */
  832.               WinSendMsg( hwndPlayPB,         /* Play button handle  */
  833.                           GBM_ANIMATE,        /* Animation control   */
  834.                           MPFROMSHORT(FALSE), /* Animation flag      */
  835.                           NULL );             /* Ignore return data  */
  836.               UpdateTheStatusLine(hwnd, IDS_STOPPED);
  837.               break;
  838.         }
  839.         break;
  840.   }
  841.   return( (MRESULT) 0);
  842.  
  843.  
  844. ΓòÉΓòÉΓòÉ 3.1.5. Time Formats for Device Commands ΓòÉΓòÉΓòÉ
  845.  
  846. Media position and time information are required as input and also returned as 
  847. output by many multimedia commands. Time formats vary, depending on the device 
  848. being used and the format of the data being operated on. The default time base 
  849. for both the procedural and string interfaces is MMTIME.  See MMTIME Format. 
  850.  
  851. Other time formats, such as milliseconds, are also supported. 
  852.  
  853. Time formats used by media control interface devices for measuring time are 
  854. listed in the following table. The flags shown in the table are set with the 
  855. MCI_SET command. 
  856.  
  857. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  858. ΓöéDevice         ΓöéFormats                  ΓöéFlags                    Γöé
  859. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  860. ΓöéCD-DA          Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  861. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  862. Γöé               Γöéminutes-seconds-frames   ΓöéMCI_FORMAT_MSF           Γöé
  863. Γöé               Γöétracks-min-sec-frame     ΓöéMCI_FORMAT_TMSF          Γöé
  864. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  865. ΓöéCD-XA          Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  866. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  867. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  868. Γöédigital video  Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  869. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  870. Γöé               Γöéframes                   ΓöéMCI_FORMAT_FRAMES        Γöé
  871. Γöé               Γöéhours-minutes-seconds    ΓöéMCI_FORMAT_HMS           Γöé
  872. Γöé               Γöéhours-min-sec-frames     ΓöéMCI_FORMAT_HMSF          Γöé
  873. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  874. Γöéwaveform audio Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  875. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  876. Γöé               Γöébytes                    ΓöéMCI_FORMAT_BYTES         Γöé
  877. Γöé               Γöésamples                  ΓöéMCI_FORMAT_SAMPLES       Γöé
  878. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  879. ΓöéMIDI sequencer Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  880. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  881. Γöé               ΓöéSMPTE 24                 ΓöéMCI_SEQ_SET_SMPTE_24     Γöé
  882. Γöé               ΓöéSMPTE 25                 ΓöéMCI_SEQ_SET_SMPTE_25     Γöé
  883. Γöé               ΓöéSMPTE 30                 ΓöéMCI_SEQ_SET_SMPTE_30     Γöé
  884. Γöé               ΓöéSMPTE 30                 ΓöéMCI_SEQ_SET_SMPTE_30DROP Γöé
  885. Γöé               Γöésong pointer             ΓöéMCI_SEQ_SET_SONGPTR      Γöé
  886. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  887.  
  888.  
  889. ΓòÉΓòÉΓòÉ 3.1.5.1. MMTIME Format ΓòÉΓòÉΓòÉ
  890.  
  891. MMTIME is a standard time and media position format supported by the media 
  892. control interface. This time unit is 1/3000 second, or 333 microseconds. 
  893. Conversion macros are provided for convenient conversion of other popular time 
  894. formats to and from this format.  MMTIME values are passed as long (32-bit) 
  895. integer values. 
  896.  
  897. To use MMTIME on command messages, send the MCI_SET message specifying the 
  898. MCI_SET_TIME_FORMAT flag. Use MCI_FORMAT_MMTIME in the ulTimeFormat field of 
  899. the MCI_SET_PARMS structure. 
  900.  
  901. The macros shown in the following figure are available for conversion to and 
  902. from the MMTIME format. 
  903.  
  904. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  905. ΓöéConversion to MMTIME          ΓöéConversion to Other Formats   Γöé
  906. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  907. ΓöéREDBOOKTOMM (ULONG)           ΓöéREDBOOKFROMMM (ULONG)         Γöé
  908. ΓöéFPS24TOMM (ULONG)             ΓöéFPS24FROMMM (ULONG)           Γöé
  909. ΓöéFPS25TOMM (ULONG)             ΓöéFPS25FROMMM (ULONG)           Γöé
  910. ΓöéFPS30TOMM (ULONG)             ΓöéFPS30FROMMM (ULONG)           Γöé
  911. ΓöéMSECTOMM (ULONG)              ΓöéMSECFROMMM (ULONG)            Γöé
  912. ΓöéHMSTOMM (ULONG)               ΓöéHMSFROMMM (ULONG)             Γöé
  913. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  914.  
  915. Packed Time Formats 
  916.  
  917. The packed time formats described in the following sections require that the 
  918. application format the ULONG value passed in command message parameter 
  919. structures. When these values are passed in string commands, any value 
  920. containing a colon (:) is assumed to be a field-oriented value. For example, if 
  921. the time format for a CD audio device is set to TMSF, and the value 4:10:00:00 
  922. is specified, this value is interpreted as track 4, 10 minutes, 0 seconds, and 
  923. 0 frames. However, if the value 4100000 is specified, the integer is passed 
  924. directly, and the assignment to byte fields is quite different. 
  925.  
  926. It is not required that a field-oriented value contain specifications for all 
  927. fields.  For example, the following are equivalent specifications for track 4: 
  928.  
  929. 4:00:00:00
  930. 4:00:00
  931. 4:00:
  932. 4:00
  933. 4:
  934. 4
  935.  
  936. The interpretation of field-oriented values is left-justified with respect to 
  937. the placement of colons.  Values not specified default to zero. If a value has 
  938. a colon, it is subject to field-oriented interpretation, regardless of the time 
  939. format currently set for the device. 
  940.  
  941.  
  942. HMSF (SMPTE) Packed Time Format 
  943.  
  944. The HMSF packed time format represents elapsed hours, minutes, seconds, and 
  945. frames from any specified point. This time format is packed into a 32-bit ULONG 
  946. value as follows: 
  947.  
  948. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  949. ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  950. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  951. ΓöéFrames         ΓöéSeconds        ΓöéMinutes        ΓöéHours          Γöé
  952. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  953.  
  954. MSF Packed Time Format 
  955.  
  956. The CD-DA MSF time format, also referred to as the Red Book time format, is 
  957. based on the 75-frame-per-second CD digital audio standard.  Media position 
  958. values in this format are packed into a 32-bit ULONG value as follows: 
  959.  
  960. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  961. ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  962. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  963. ΓöéReserved       ΓöéFrames         ΓöéSeconds        ΓöéMinutes        Γöé
  964. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  965.  
  966. The following macros aid in extracting information in packed MSF format: 
  967.  
  968.  Macro                   Description 
  969.  MSF_MINUTE(time)        Gets the number of minutes. 
  970.  MSF_SECOND(time)        Gets the number of seconds. 
  971.  MSF_FRAME(time)         Gets the number of frames. 
  972.  
  973.  For example, the following code fragment sets the time in ulTime to 6 minutes 
  974.  and 30 seconds (06:30:00). 
  975.  
  976.   ULONG ulTime;
  977.   .
  978.   .
  979.   .
  980.   MSF_MINUTE(ulTime) = 6
  981.   MSF_SECOND(ulTime) = 30;
  982.   MSF_FRAME(ulTime) = 0;
  983.  
  984.  
  985.  TMSF Packed Time Format 
  986.  
  987.  The CD-DA TMSF time format is based on the 75-frame-per-second CD digital 
  988.  audio standard.  Media position values in this format are packed into a 32-bit 
  989.  ULONG value as follows: 
  990.  
  991.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  992.   ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  993.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  994.   ΓöéFrames         ΓöéSeconds        ΓöéMinutes        ΓöéTrack          Γöé
  995.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  996.  
  997.  The following macros aid in extracting information in packed TMSF format: 
  998.  
  999.  Macro                   Description 
  1000.  TMSF_TRACK(time)        Gets the number of tracks. 
  1001.  TMSF_MINUTE(time)       Gets the number of minutes. 
  1002.  TMSF_SECOND(time)       Gets the number of seconds. 
  1003.  TMSF_FRAME(time)        Gets the number of frames. 
  1004.  
  1005.  For example, the following code fragment sets the time in ulTime to 2 minutes 
  1006.  into track 2 (02:02:00:00). 
  1007.  
  1008.   ULONG ulTime;
  1009.   .
  1010.   .
  1011.   .
  1012.   TMSF_TRACK(ulTime) = 2;
  1013.   TMSF_MINUTE(ulTime) = 2;
  1014.   TMSF_SECOND(ulTime) = 0;
  1015.   TMSF_FRAME(ulTime) = 0;
  1016.  
  1017.  Note:  MSF and TMSF macros can be found in the MCIOS2.H file. 
  1018.  
  1019.  
  1020.  HMS Packed Time Format 
  1021.  
  1022.  The HMS packed time format, representing hours, minutes, and seconds, is 
  1023.  packed into a 32-bit ULONG value as follows: 
  1024.  
  1025.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1026.   ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  1027.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1028.   ΓöéReserved       ΓöéSeconds        ΓöéMinutes        ΓöéHours          Γöé
  1029.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1030.  
  1031.  
  1032. ΓòÉΓòÉΓòÉ 3.2. Opening a Media Device ΓòÉΓòÉΓòÉ
  1033.  
  1034. Media devices are categorized as simple or compound devices. A compound device 
  1035. is an internal device that operates on data objects, such as files, within the 
  1036. system.  These data objects are referred to as device elements. A simple device 
  1037. is an external device that does not require a device element. 
  1038.  
  1039. Media device types supported by OS/2 multimedia are shown in the following 
  1040. table. 
  1041.  
  1042. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1043. ΓöéLogical Device Type ΓöéString         ΓöéConstant                      Γöé
  1044. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1045. ΓöéAmplifier-mixer     Γöéampmix         ΓöéMCI_DEVTYPE_AUDIO_AMPMIX      Γöé
  1046. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1047. ΓöéCD-DA player        Γöécdaudio        ΓöéMCI_DEVTYPE_CD_AUDIO          Γöé
  1048. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1049. ΓöéCD-XA player        Γöécdxa           ΓöéMCI_DEVTYPE_CDXA_PLAYER       Γöé
  1050. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1051. ΓöéDigital video playerΓöédigitalvideo   ΓöéMCI_DEVTYPE_DIGITAL_VIDEO     Γöé
  1052. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1053. ΓöéMIDI sequencer      Γöésequencer      ΓöéMCI_DEVTYPE_SEQUENCER         Γöé
  1054. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1055. ΓöéWaveform audio      Γöéwaveaudio      ΓöéMCI_DEVTYPE_WAVEFORM_AUDIO    Γöé
  1056. Γöéplayer              Γöé               Γöé                              Γöé
  1057. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1058. ΓöéVideodisc player    Γöévideodisc      ΓöéMCI_DEVTYPE_VIDEODISC         Γöé
  1059. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1060.  
  1061. Device type constants represent one way of specifying devices in command 
  1062. messages. String names can be specified in either command messages or command 
  1063. strings. 
  1064.  
  1065. To use the string interface to communicate with a device, an application calls 
  1066. mciSendString and passes the textual command open. Following is the syntax used 
  1067. for the textual command: 
  1068.  
  1069. open device_name <shareable> <type device_type > <alias alias> 
  1070.  
  1071. Parameters for the open command are: 
  1072.  
  1073. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1074. ΓöéParameters          ΓöéDescription                             Γöé
  1075. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1076. Γöédevice_name         ΓöéSpecifies the name of a device or deviceΓöé
  1077. Γöé                    Γöéelement.                                Γöé
  1078. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1079. Γöéshareable           ΓöéIndicates the device or device element  Γöé
  1080. Γöé                    Γöémay be shared by other applications.    Γöé
  1081. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1082. Γöétype device_type    ΓöéSpecifies the device type when          Γöé
  1083. Γöé                    Γöédevice_name is a device element.        Γöé
  1084. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1085. Γöéalias alias         ΓöéSpecifies an alternate name for the     Γöé
  1086. Γöé                    Γöédevice.                                 Γöé
  1087. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1088.  
  1089. Here is an example of the syntax for opening a device: 
  1090.  
  1091. open horns.wav type waveaudio alias sound1
  1092.  
  1093. where "horns.wav" is the device element and "waveaudio" is the device type. 
  1094.  
  1095. The system also supports a shortcut version of the syntax: 
  1096.  
  1097. open device_type!element_name
  1098.  
  1099. The shortcut version of the previous example looks like this: 
  1100.  
  1101. open waveaudio!horns.wav alias sound1
  1102.  
  1103.  
  1104. ΓòÉΓòÉΓòÉ 3.2.1. File Type Associations ΓòÉΓòÉΓòÉ
  1105.  
  1106. A specific device can have file extensions and .TYPE EAs (Extended Attributes) 
  1107. associated with it. The OS/2 multimedia user can map a file extension or .TYPE 
  1108. EA to a specific device with the Multimedia Setup application located in the 
  1109. Multimedia folder. An OS/2 multimedia subsystem developer writing an 
  1110. installation DLL can map a file extension or .TYPE EA to a device using 
  1111. MCI_SYSINFO_SET_EXTENSIONS or MCI_SYSINFO_SET_TYPES. For an extension or .TYPE 
  1112. EA to be mapped to a device, it must be unique across installation names. 
  1113.  
  1114. For example, the Multimedia Setup application can be used to associate the WAV 
  1115. extension with the waveaudio01 device. The device can then be opened by passing 
  1116. the name of a data element with a WAV extension as a parameter in the open 
  1117. command to mciSendString. Suppose the following string is passed: 
  1118.  
  1119. open honk.wav wait
  1120.  
  1121. The waveaudio01 device is opened with the data file honk.wav. 
  1122.  
  1123.  
  1124. ΓòÉΓòÉΓòÉ 3.2.2. Default and Specific Devices ΓòÉΓòÉΓòÉ
  1125.  
  1126. The following table shows some examples of open commands. A default device is 
  1127. opened if only a logical device type (for example, waveaudio) is specified in 
  1128. the open command. The default device for a logical device type can be queried 
  1129. and set by the user with the Multimedia Setup application. The default device 
  1130. also can be queried and set with MCI_SYSINFO by an installation DLL for a media 
  1131. device. 
  1132.  
  1133. A specific device is opened by specifying its name (for example waveaudio01), 
  1134. or by specifying a device element with an extension or .TYPE EA that is 
  1135. associated with the device. 
  1136.  
  1137. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1138. ΓöéOpen Command            ΓöéDescription                         Γöé
  1139. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1140. Γöéopen waveaudio          ΓöéOpens a default device of type      Γöé
  1141. Γöé                        Γöéwaveaudio.                          Γöé
  1142. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1143. Γöéopen waveaudio01        ΓöéOpens a specific device of type     Γöé
  1144. Γöé                        Γöéwaveaudio.                          Γöé
  1145. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1146. Γöéopen foo.xyz            ΓöéOpens a specific device that is     Γöé
  1147. Γöé                        Γöéassociated with the .TYPE EA (if    Γöé
  1148. Γöé                        Γöéany) of foo.xyz; otherwise opens a  Γöé
  1149. Γöé                        Γöéspecific device that has a unique   Γöé
  1150. Γöé                        Γöéassociation with file extension xyz;Γöé
  1151. Γöé                        Γöéotherwise returns                   Γöé
  1152. Γöé                        ΓöéMCIERR_INVALID_DEVICE_NAME.         Γöé
  1153. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1154.  
  1155.  
  1156. ΓòÉΓòÉΓòÉ 3.2.3. Shareable Flag ΓòÉΓòÉΓòÉ
  1157.  
  1158. By setting the shareable flag for an open request, an application can share an 
  1159. OS/2 multimedia device with other applications. To enable device sharing, the 
  1160. multimedia system posts the MM_MCIPASSDEVICE message with WinPostMsg to the 
  1161. application. The message informs the application the device context is becoming 
  1162. active (MCI_GAINING_USE) or inactive (MCI_LOSING_USE). 
  1163.  
  1164. After the application processes the MCI_GAINING_USE event notification, it can 
  1165. issue device commands. The device context becomes inactive when the 
  1166. MCI_LOSING_USE event notification is received. 
  1167.  
  1168. If the application has specified a notify flag on the open, the receipt of an 
  1169. MM_MCINOTIFY message does not mean the device context is active. When 
  1170. MCI_NOTIFY_SUCCESSFUL is received, the commands status, capability, and info 
  1171. can be issued, because the multimedia system allows these commands to be made 
  1172. to inactive instances.  If the application issues a command to an inactive 
  1173. instance and the instance must be active to process the command, the multimedia 
  1174. system returns MCIERR_INSTANCE_INACTIVE. 
  1175.  
  1176. When an application opens a device without setting the shareable flag, the 
  1177. Media Device Manager attempts to acquire the device for the exclusive use of 
  1178. the application. If a device context already exists that was either opened as 
  1179. nonshareable by another application or opened as shareable but then acquired 
  1180. exclusively by another application, the open fails and the application receives 
  1181. the MCIERR_DEVICE_LOCKED error code.  The application can subsequently make the 
  1182. device context shareable by issuing an MCI_RELEASEDEVICE message. 
  1183.  
  1184. See Device Sharing By Applications for more detailed information on device 
  1185. sharing. 
  1186.  
  1187.  
  1188. ΓòÉΓòÉΓòÉ 3.2.4. Device Alias ΓòÉΓòÉΓòÉ
  1189.  
  1190. When a device is opened, it can be given an alias, or alternate name. The 
  1191. primary use of a device alias is to simplify the specifying of subsequent 
  1192. commands to control the device through the string interface. A device alias is 
  1193. referenced only from the string interface, and it is valid only within the 
  1194. process that opened the device context. 
  1195.  
  1196. For example, the following strings can be passed with mciSendString: 
  1197.  
  1198. open horns.wav alias honk
  1199. play honk
  1200.  
  1201. A secondary use of the device alias is to differentiate between device contexts 
  1202. opened by the same process. For example: 
  1203.  
  1204. open horns.wav alias honk
  1205. open bells.wav alias ring
  1206. play ring wait
  1207. play honk wait
  1208.  
  1209. Note:  The maximum length for an alias is 20 characters. Placing an alias in 
  1210.        quotation marks is permitted. 
  1211.  
  1212.  When a device is opened using the string interface, a device context ID is 
  1213.  returned.  If the application provides a return buffer in the call to 
  1214.  mciSendString, the ID can be used to issue commands to the device context 
  1215.  using the mciSendCommand interface, when necessary. 
  1216.  
  1217.  
  1218. ΓòÉΓòÉΓòÉ 3.2.5. Using the Command Message Interface ΓòÉΓòÉΓòÉ
  1219.  
  1220. To use the command message interface to communicate with a device, an 
  1221. application calls mciSendCommand and passes the command message MCI_OPEN. If 
  1222. the request is successful, a device handle for access to the device context is 
  1223. returned in the usDeviceID field of the MCI_OPEN_PARMS data structure. This 
  1224. handle is retained for use in subsequent message commands. 
  1225.  
  1226. An alias can be specified with the MCI_OPEN_ALIAS flag in the command message 
  1227. MCI_OPEN.  Commands can then be issued to the device context by means of the 
  1228. string interface. 
  1229.  
  1230. The following code fragment shows the opening of devices in the Duet Player I 
  1231. sample program.  The hwndCallback field contains the application's main window 
  1232. procedure so that the MM_MCIPASSDEVICE messages are sent to it when the duet 
  1233. player gains or passes control of the device.  The device ID and type fields of 
  1234. the structure are not needed because the audio file name is specified as the 
  1235. element field of the structure.  This causes the Media Device Manager (MDM) to 
  1236. open the appropriate device based on the file name extension.  Once the 
  1237. MCI_OPEN_PARMS structure is initialized, an MCI_OPEN command is specified with 
  1238. the mciSendCommand function for each separate part of the duet. 
  1239.  
  1240.  /*
  1241.   * Open one part of the duet. The first step is to initialize an
  1242.   * MCI_OPEN_PARMS data structure with the appropriate information,
  1243.   * then issue the MCI_OPEN command with the mciSendCommand function.
  1244.   * We will be using an open with only the element name specified.
  1245.   * This will cause the default connection, as specified in the
  1246.   * MMPM.INI file, for the data type.
  1247.   */
  1248. mopDuetPart.hwndCallback   = (ULONG)  hwnd; /* For MM_MCIPASDEVICE */
  1249. mopDuetPart.usDeviceID     = (USHORT) NULL; /* this is returned    */
  1250. mopDuetPart.pszDeviceType  = (PSZ)    NULL; /* using default conn. */
  1251. mopDuetPart.pszElementName = (PSZ)   aDuet[sDuet].achPart1;
  1252.  
  1253.  
  1254.      ulError = mciSendCommand( (USHORT) 0,
  1255.                                MCI_OPEN,
  1256.                                MCI_WAIT | MCI_OPEN_ELEMENT |
  1257.                                MCI_OPEN_SHAREABLE | MCI_READONLY,
  1258.                                (PVOID) &mopDuetPart,
  1259.                                UP_OPEN);
  1260.  
  1261.  
  1262.      if (!ulError)  /* if we opened part 1 */
  1263.      {
  1264.         usDuetPart1ID = mopDuetPart.usDeviceID;
  1265.  
  1266.         /*
  1267.          * Now, open the other part
  1268.          */
  1269.         mopDuetPart.pszElementName    = (PSZ)   aDuet[sDuet]achPart2;
  1270.  
  1271.         ulError = mciSendCommand( (USHORT) 0,
  1272.                                   MCI_OPEN,
  1273.                                   MCI_WAIT | MCI_OPEN_ELEMENT |
  1274.                                   MCI_OPEN_SHAREABLE | MCI_READONLY,
  1275.                                   (PVOID) &mopDuetPart,
  1276.                                   UP_OPEN);
  1277.  
  1278.         if (!ulError)  /* if we opened part 2 */
  1279.         {
  1280.            usDuetPart2ID = mopDuetPart.usDeviceID;
  1281.  
  1282.  
  1283. ΓòÉΓòÉΓòÉ 3.3. Memory Playlists ΓòÉΓòÉΓòÉ
  1284.  
  1285. In addition to specifying files or Resource Interchange File Format (RIFF) 
  1286. chunks to be loaded by compound devices, you also can specify memory objects. 
  1287. You create memory objects, for example, to play synthesized audio using the 
  1288. waveform audio media driver. These memory objects can be placed under the 
  1289. control of the memory playlist. 
  1290.  
  1291. The memory playlist is a data structure in an application. It contains an array 
  1292. of simple, machine-like instructions you formulate, each of which has a fixed 
  1293. format consisting of a 32-bit operation code and three 32-bit operands. 
  1294. Playlist instructions are described in the following table. 
  1295.  
  1296. To have playlist instructions interpreted by the playlist processor, you 
  1297. specify the MCI_OPEN_PLAYLIST flag with the MCI_OPEN command message. This flag 
  1298. indicates that the pszElementName field in the MCI_OPEN_PARMS data structure is 
  1299. a pointer to a memory playlist. 
  1300.  
  1301. Using playlist instructions, you can play audio objects in succession from one 
  1302. or more memory buffers.  Instructions include branching to and returning from 
  1303. subroutines within the playlist. In addition, the playlist can be modified 
  1304. dynamically by the application while it is being played. 
  1305.  
  1306. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1307. ΓöéCommand             ΓöéDescription                                       Γöé
  1308. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1309. ΓöéBRANCH_OPERATION    ΓöéTransfers control to another instruction in the   Γöé
  1310. Γöé                    Γöéplaylist.                                         Γöé
  1311. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1312. Γöé                    ΓöéOperand 2-The absolute instruction number in the  Γöé
  1313. Γöé                    Γöéplaylist to which control is being transferred.   Γöé
  1314. Γöé                    ΓöéBecause the playlist is defined as an array of    Γöé
  1315. Γöé                    Γöéstructures (instruction, operation, and operand   Γöé
  1316. Γöé                    Γöévalues) its first instruction is referenced as    Γöé
  1317. Γöé                    Γöéarray element, index 0. Therefore, the first      Γöé
  1318. Γöé                    Γöéinstruction in the list is 0, the second          Γöé
  1319. Γöé                    Γöéinstruction is 1, and so on.                      Γöé
  1320. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1321. Γöé                    ΓöéBranching out of a subroutine is not prohibited;  Γöé
  1322. Γöé                    Γöéhowever, it is not recommended because an unused  Γöé
  1323. Γöé                    Γöéreturn address is left on the stack maintained by Γöé
  1324. Γöé                    Γöéthe playlist processor.                           Γöé
  1325. Γöé                    ΓöéAn application can enable or disable a            Γöé
  1326. Γöé                    ΓöéBRANCH_OPERATION by exchanging it with a          Γöé
  1327. Γöé                    ΓöéNOP_OPERATION.  Operands for a NOP_OPERATION are  Γöé
  1328. Γöé                    Γöéignored.                                          Γöé
  1329. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1330. ΓöéCALL_OPERATION      ΓöéTransfers control to the absolute instruction     Γöé
  1331. Γöé                    Γöénumber specified in Operand 2, saving the number  Γöé
  1332. Γöé                    Γöéof the instruction following the CALL for use on aΓöé
  1333. Γöé                    ΓöéRETURN instruction.                               Γöé
  1334. Γöé                    ΓöéCALL instructions may be nested up to 20 levels.  Γöé
  1335. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1336. Γöé                    ΓöéOperand 2-Absolute instruction number in the      Γöé
  1337. Γöé                    Γöéplaylist to which control is being transferred.   Γöé
  1338. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1339. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1340. ΓöéCUEPOINT_OPERATION  ΓöéCauses a cue point data record to be entered into Γöé
  1341. Γöé                    Γöéthe data stream. Note that the cue point is       Γöé
  1342. Γöé                    Γöérelative to the DATA_OPERATION that follows it.   Γöé
  1343. Γöé                    ΓöéOperand 1-User-defined parameter to be returned asΓöé
  1344. Γöé                    Γöéthe low word of ulMsgParam1 in the MM_MCICUEPOINT Γöé
  1345. Γöé                    Γöémessage.                                          Γöé
  1346. Γöé                    ΓöéOperand 2-Offset in MMTIME units for the actual   Γöé
  1347. Γöé                    Γöétime the CUEPOINT message should be generated.    Γöé
  1348. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1349. Γöé                    ΓöéThe MM_MCICUEPOINT message is returned to the     Γöé
  1350. Γöé                    Γöéapplication as soon as possible after the cue     Γöé
  1351. Γöé                    Γöépoint data record is encountered in the data      Γöé
  1352. Γöé                    Γöéstream. The message is sent to the window handle  Γöé
  1353. Γöé                    Γöéspecified when the device was originally opened.  Γöé
  1354. Γöé                    ΓöéNote: The CUEPOINT instruction is ignored when    Γöé
  1355. Γöé                    Γöéused in a recording operation.                    Γöé
  1356. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1357. ΓöéDATA_OPERATION      ΓöéSpecifies a data buffer to be played from or      Γöé
  1358. Γöé                    Γöérecorded into.                                    Γöé
  1359. Γöé                    ΓöéOperand 1-Long pointer to a buffer in the         Γöé
  1360. Γöé                    Γöéapplication.                                      Γöé
  1361. Γöé                    ΓöéOperand 2-Length of the buffer pointed to by      Γöé
  1362. Γöé                    ΓöéOperand 1.                                        Γöé
  1363. Γöé                    ΓöéOperand 3-Current position in the buffer. This    Γöé
  1364. Γöé                    Γöéoperand is updated by the system during a         Γöé
  1365. Γöé                    Γöérecording or playback operation. For a playback   Γöé
  1366. Γöé                    Γöéoperation, it is the number of bytes that have    Γöé
  1367. Γöé                    Γöébeen sent to the output device handler. For a     Γöé
  1368. Γöé                    Γöérecording operation, it is the number of bytes    Γöé
  1369. Γöé                    Γöéthat have been placed into a user buffer.         Γöé
  1370. Γöé                    ΓöéThe current position in the buffer is particularlyΓöé
  1371. Γöé                    Γöéimportant after a recording operation, because    Γöé
  1372. Γöé                    Γöéthis field contains the number of bytes of        Γöé
  1373. Γöé                    Γöérecorded data.  The remaining bytes in the buffer Γöé
  1374. Γöé                    Γöéare not valid. This field is initialized to zero  Γöé
  1375. Γöé                    Γöéwhen the DATA_OPERATION statement is first        Γöé
  1376. Γöé                    Γöéencountered.                                      Γöé
  1377. Γöé                    ΓöéThe buffer indicated by the DATA instruction must Γöé
  1378. Γöé                    Γöéonly contain the raw data bytes from the device   Γöé
  1379. Γöé                    Γöéand cannot include any header information.        Γöé
  1380. Γöé                    ΓöéTherefore, the precise meaning or format of the   Γöé
  1381. Γöé                    Γöédata is dependent on the current settings of the  Γöé
  1382. Γöé                    Γöémedia device.  For example, a wave audio data     Γöé
  1383. Γöé                    Γöéelement is assumed to have the format PCM or      Γöé
  1384. Γöé                    ΓöéADPCM, number of bits per sample, and so on, that Γöé
  1385. Γöé                    Γöéis indicated by the settings of the audio device. Γöé
  1386. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1387. ΓöéEXIT_OPERATION      ΓöéIndicates the end of the playlist.                Γöé
  1388. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1389. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1390. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1391. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1392. ΓöéLOOP_OPERATION      ΓöéControls iteration in a playlist. It is the       Γöé
  1393. Γöé                    Γöéresponsibility of the application to initialize   Γöé
  1394. Γöé                    Γöéthe current iteration.  The current iteration is  Γöé
  1395. Γöé                    Γöéreset to zero following loop termination.         Γöé
  1396. Γöé                    ΓöéOperand 1-Number of times the loop is to be       Γöé
  1397. Γöé                    Γöéexecuted.                                         Γöé
  1398. Γöé                    ΓöéOperand 2-Target instruction to branch to, when   Γöé
  1399. Γöé                    Γöéthe loop condition fails.                         Γöé
  1400. Γöé                    ΓöéOperand 3-Current iteration.                      Γöé
  1401. Γöé                    ΓöéThe last instruction in a loop is a branch back toΓöé
  1402. Γöé                    Γöéthe LOOP_OPERATION. The operation of the          Γöé
  1403. Γöé                    ΓöéLOOP_OPERATION instruction is as follows:         Γöé
  1404. Γöé                    Γöé1. If Operand 3 is less than Operand 1, control isΓöé
  1405. Γöé                    Γöétransferred to the playlist instruction following Γöé
  1406. Γöé                    Γöéthe LOOP instruction, and the iteration count in  Γöé
  1407. Γöé                    ΓöéOperand 3 is incremented.                         Γöé
  1408. Γöé                    Γöé2. Otherwise, the iteration count is reset to zeroΓöé
  1409. Γöé                    Γöéand control is passed to the instruction specifiedΓöé
  1410. Γöé                    Γöéin Operand 2.                                     Γöé
  1411. Γöé                    ΓöéTypically, the application sets the iteration     Γöé
  1412. Γöé                    Γöécount to zero when the playlist is passed to the  Γöé
  1413. Γöé                    Γöédevice, but this is not required.  The loop       Γöé
  1414. Γöé                    Γöéinstruction merely compares the loop count with   Γöé
  1415. Γöé                    Γöéthe iteration count. If the iteration count is setΓöé
  1416. Γöé                    Γöéto a value other than zero when the playlist is   Γöé
  1417. Γöé                    Γöépassed in, it is as if the loop has been executed Γöé
  1418. Γöé                    Γöéthat number of times. Also, if a playback         Γöé
  1419. Γöé                    Γöéoperation is stopped, and then the same playlist  Γöé
  1420. Γöé                    Γöéis loaded again, the loop iteration count is not  Γöé
  1421. Γöé                    Γöéinitialized by the playlist processor.            Γöé
  1422. Γöé                    ΓöéIt is the application's responsibility to see thatΓöé
  1423. Γöé                    Γöéiteration count values are what is required when  Γöé
  1424. Γöé                    Γöéswitching from play to record, record to play, andΓöé
  1425. Γöé                    Γöéwhen changing settings for the data (for example, Γöé
  1426. Γöé                    Γöébitspersample, samplespersec, and so on) with the Γöé
  1427. Γöé                    Γöéset command. These commands cause the playlist    Γöé
  1428. Γöé                    Γöéstream to be destroyed and re-created, and the    Γöé
  1429. Γöé                    Γöéplaylist to be reassociated as a new playlist withΓöé
  1430. Γöé                    Γöéthe playlist processor.                           Γöé
  1431. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1432. ΓöéMESSAGE_OPERATION   ΓöéReturns a message to the application during       Γöé
  1433. Γöé                    Γöéplaylist processing.                              Γöé
  1434. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1435. Γöé                    ΓöéOperand 2-ULONG that is returned to the           Γöé
  1436. Γöé                    Γöéapplication in the MM_MCIPLAYLISTMESSAGE message  Γöé
  1437. Γöé                    ΓöéMsgParam2.                                        Γöé
  1438. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1439. Γöé                    ΓöéEach time the playlist processor encounters a     Γöé
  1440. Γöé                    ΓöéMESSAGE instruction, MM_MCIPLAYLISTMESSAGE is     Γöé
  1441. Γöé                    Γöéreturned to the application. MESSAGE instructions Γöé
  1442. Γöé                    Γöécan be used by the application to trace specific  Γöé
  1443. Γöé                    Γöépoints during the execution of the playlist       Γöé
  1444. Γöé                    Γöéprocessor. The message is sent to the window      Γöé
  1445. Γöé                    Γöéhandle specified when the device was originally   Γöé
  1446. Γöé                    Γöéopened.                                           Γöé
  1447. Γöé                    ΓöéThis function is not intended to be used for      Γöé
  1448. Γöé                    Γöétiming of data production or consumption          Γöé
  1449. Γöé                    Γöéidentified by previously interpreted instructions.Γöé
  1450. Γöé                    ΓöéDo not rely on the MESSAGE instruction to indicateΓöé
  1451. Γöé                    Γöéprecisely when a particular piece of digital audioΓöé
  1452. Γöé                    Γöéhas been played by an audio device; however, the  Γöé
  1453. Γöé                    ΓöéMESSAGE instruction can be used to indicate when aΓöé
  1454. Γöé                    Γöébuffer has been consumed and needs to be refilled.Γöé
  1455. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1456. ΓöéNOP_OPERATION       ΓöéUsed as a placeholder.                            Γöé
  1457. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1458. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1459. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1460. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1461. ΓöéRETURN_OPERATION    ΓöéTransfers control to the playlist instruction     Γöé
  1462. Γöé                    Γöéfollowing the most recently executed CALL         Γöé
  1463. Γöé                    Γöéinstruction.                                      Γöé
  1464. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1465. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1466. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1467. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1468. ΓöéSEMPOST_OPERATION   ΓöéCauses the playlist processor to post an event    Γöé
  1469. Γöé                    Γöésemaphore.  The playlist processor will call      Γöé
  1470. Γöé                    ΓöéDosWaitEventSem.                                  Γöé
  1471. Γöé                    ΓöéOperand 1-Contains the semaphore to post.         Γöé
  1472. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1473. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1474. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1475. ΓöéSEMWAIT_OPERATION   ΓöéCauses the playlist processor to wait on a        Γöé
  1476. Γöé                    Γöésemaphore. The playlist processor will call       Γöé
  1477. Γöé                    ΓöéDosWaitEventSem.                                  Γöé
  1478. Γöé                    ΓöéOperand 1-Contains the semaphore to perform the   Γöé
  1479. Γöé                    Γöéwait on.                                          Γöé
  1480. Γöé                    ΓöéOperand 2-Amount of time the semaphore should     Γöé
  1481. Γöé                    Γöéwait.                                             Γöé
  1482. Γöé                    ΓöéOperand 3-Boolean value indicating whether or not Γöé
  1483. Γöé                    Γöéthe semaphore should be cleared before waiting.   Γöé
  1484. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1485.  
  1486.  
  1487. ΓòÉΓòÉΓòÉ 3.3.1. Clock Sample Program Playlist Example ΓòÉΓòÉΓòÉ
  1488.  
  1489. The data structure in the following figure holds the playlist that is used to 
  1490. play the chimes in the Clock Sample program provided in the Toolkit 
  1491. (\TOOLKIT\SAMPLES\MM\CLOCK). Note that the definitions for the playlist 
  1492. operation codes can be found in the MCIOS2.H file. 
  1493.  
  1494. /*
  1495.  * This double array holds the playlists that will be used to play the
  1496.  * chimes for the clock.  Each array has three fields within the
  1497.  * structure: one for the playlist command (32-bit value) and three
  1498.  * operands (32-bit values).  The DATA_OPERATION's first operand will
  1499.  * contain the address to the respective waveform buffers.  Once the
  1500.  * playlist has been played, the CHIME_PLAYING_HAS_STOPPED message
  1501.  * will be sent so that the application knows that the audio has
  1502.  * finished.
  1503.  * The clock will have a unique chime for each quarter hour.
  1504.  * There are three chime files that are used in different combinations
  1505.  * to create all of the chimes used for the clock.  These three files
  1506.  * are CLOCK1.WAV, CLOCK2.WAV, and CLOCK3.WAV.
  1507.  *
  1508.  * The first playlist will play quarter hour chime.  This is simply
  1509.  * CLOCK1.WAV.
  1510.  *
  1511.  * The second playlist will play the half hour chime.  This
  1512.  * consists of CLOCK1.WAV + CLOCK2.WAV.
  1513.  *
  1514.  * The third playlist will play the three quarter hour chime.  This
  1515.  * consists of CLOCK1.WAV + CLOCK2.WAV + CLOCK1.WAV.
  1516.  *
  1517.  * The fourth playlist plays the hour chime.  This consists of
  1518.  * CLOCK1.WAV + CLOCK2.WAV + CLOCK1.WAV + CLOCK2.WAV +
  1519.  * (HOUR * CLOCK3.WAV)
  1520.  * The Number of loops to perform for the hour value is kept in
  1521.  * the first operand.  This will be set in a later procedure when the
  1522.  * hour of the chime time is known.
  1523.  */
  1524. PLAY_LIST_STRUCTURE_T apltPlayList[ NUMBER_OF_PLAYLISTS ]
  1525.                                   [ NUMBER_OF_COMMANDS ] =
  1526. {
  1527.    /*
  1528.     * Quarter Hour Chime.
  1529.     */
  1530.    {
  1531.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1532.       MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1533.       EXIT_OPERATION,    0, 0, 0
  1534.    },
  1535.    /*
  1536.     * Half Hour Chime.
  1537.     */
  1538.    {
  1539.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1540.       DATA_OPERATION,    0, 0, 0,      /* Chime file 2.  */
  1541.       MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1542.       EXIT_OPERATION,    0, 0, 0
  1543.    },
  1544.    /*
  1545.     * Three Quarter Hour Chime.
  1546.     */
  1547.    {
  1548.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1549.       DATA_OPERATION,    0, 0, 0,      /* Chime file 2.  */
  1550.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1551.       MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1552.       EXIT_OPERATION,    0, 0, 0
  1553.    },
  1554.  /*
  1555.   * Hour Chime.
  1556.   */
  1557.  {
  1558.     DATA_OPERATION,    0, 0, 0, /* Chime file 1.          < Line 0 >*/
  1559.     DATA_OPERATION,    0, 0, 0, /* Chime file 2.          < Line 1 >*/
  1560.     DATA_OPERATION,    0, 0, 0, /* Chime file 1.          < Line 2 >*/
  1561.     DATA_OPERATION,    0, 0, 0, /* Chime file 2.          < Line 3 >*/
  1562.     DATA_OPERATION,    0, 0, 0, /* Chime file 3.          < Line 4 >*/
  1563.     LOOP_OPERATION,    0, 4, 0, /* Which line to loop on. < Line 5 >*/
  1564.     MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1565.     EXIT_OPERATION,    0, 0, 0
  1566.  }
  1567.  
  1568. To prevent lost data, the address range of memory buffers used in DATA 
  1569. operations should not overlap. 
  1570.  
  1571.  
  1572. ΓòÉΓòÉΓòÉ 3.3.1.1. Setting up the Playlist ΓòÉΓòÉΓòÉ
  1573.  
  1574. The SetupPlaylist procedure is performed once, during initialization of the 
  1575. Clock Sample program.  It calls the procedure CopyWaveformIntoMemory to copy 
  1576. the waveform files into memory buffers.  It also initializes the playlist data 
  1577. structure by supplying the address and size of the memory buffers holding the 
  1578. data in the appropriate data structure fields. 
  1579.  
  1580. VOID SetupPlayList( VOID )
  1581. {
  1582.  /*
  1583.   * This array keeps the address of each audio chime file.
  1584.   */
  1585.  static LONG *pulBaseAddress[ NUMBER_OF_CHIME_FILES ];
  1586.  
  1587.  USHORT usChimeFileId;            /* Chime audio file ID.        */
  1588.  ULONG  ulSizeOfFile,             /* Size of audio file.         */
  1589.  
  1590. ulMemoryAllocationFlags = PAG_COMMIT | PAG_READ | PAG_WRITE;
  1591. for(usChimeFileId=0; usChimeFileId<NUMBER_OF_CHIME_FILES;
  1592.     usChimeFileId++)
  1593.  {
  1594.  
  1595.     ulSizeOfFile = HowBigIsTheChimeFile( usChimeFileId );
  1596.     /*
  1597.      * If the returned file size is zero, there is a problem with the
  1598.      * chime files.  A message will already have been shown to the
  1599.      * user by the HowBigIsTheChimeFile function so get out of
  1600.      * this routine.
  1601.      */
  1602.     if ( ulSizeOfFile == 0 )
  1603.     {
  1604.        return;
  1605.     }
  1606.     if ( (pulBaseAddress[ usChimeFileId ] = (LONG *)
  1607.             malloc( ulSizeOfFile )) == (LONG *) NULL )
  1608.     {
  1609.     /*
  1610.      * The memory for the waveform files cannot be allocated.
  1611.      * Notify the user and return from this routine.  No playlist can
  1612.      * be created/played until memory is available.
  1613.      */
  1614.        ShowAMessage(
  1615.           acStringBuffer[
  1616.              IDS_NORMAL_ERROR_MESSAGE_BOX_TEXT - 1 ],
  1617.           IDS_CANNOT_GET_MEMORY, /* ID of the message to show. */
  1618.           MB_OK | MB_INFORMATION | MB_HELP |  MB_APPLMODAL |
  1619.              MB_MOVEABLE );      /* Style of the message box.  */
  1620.  
  1621.        return;
  1622.  
  1623.     }  /* End of IF allocation fails. */
  1624.     /*
  1625.      * Place the waveform files into the memory buffer that was just
  1626.      * created.
  1627.      */
  1628.     CopyWaveformIntoMemory(
  1629.        pulBaseAddress[ usChimeFileId ],
  1630.        ulSizeOfFile,
  1631.        usChimeFileId );
  1632.     /*
  1633.      * Now that we've loaded the waveform into memory, we need to put
  1634.      * its address and size into the playlist data statements that
  1635.      * use this particular file.
  1636.      *
  1637.      * Its address must be placed into the data statement's first
  1638.      * operand and its size must be placed in the data
  1639.      * statement's second operand.
  1640.      *
  1641.      * For the four different playlists, one for each chime time
  1642.      * (1/4, 1/2, 3/4 and 1 hour increments),
  1643.      * the address of the chime file and its size will be loaded
  1644.      * into each data statement of the Playlist.
  1645.      */
  1646.     if ( usChimeFileId == 0 )
  1647.     /* If we just loaded CLOCK1.WAV */
  1648.     {
  1649.     /*
  1650.      * Put the address of this chime into the first operand of
  1651.      * every data operation that uses this particular chime.
  1652.      */
  1653.     apltPlayList[ 0 ][ 0 ].ulOperandOne =  /* 1/4 hour 1st data op */
  1654.     apltPlayList[ 1 ][ 0 ].ulOperandOne =  /* 1/2 hour 1st data op */
  1655.     apltPlayList[ 2 ][ 0 ].ulOperandOne =  /* 3/4 hour 1st data op */
  1656.     apltPlayList[ 2 ][ 2 ].ulOperandOne =  /* 3/4 hour 3rd data op */
  1657.     apltPlayList[ 3 ][ 0 ].ulOperandOne =  /* 1   hour 1st data op */
  1658.     apltPlayList[ 3 ][ 2 ].ulOperandOne =  /* 1   hour 3rd data op */
  1659.        (ULONG) pulBaseAddress[ usChimeFileId ];  /*    address     */
  1660.     /*
  1661.      * Now put the size of the file into the second operand of every
  1662.      * data operation that uses this particular chime.
  1663.      */
  1664.     apltPlayList[ 0 ][ 0 ].ulOperandTwo =  /* 1/4 hour 1st data op */
  1665.     apltPlayList[ 1 ][ 0 ].ulOperandTwo =  /* 1/2 hour 1st data op */
  1666.     apltPlayList[ 2 ][ 0 ].ulOperandTwo =  /* 3/4 hour 1st data op */
  1667.     apltPlayList[ 2 ][ 2 ].ulOperandTwo =  /* 3/4 hour 3rd data op */
  1668.     apltPlayList[ 3 ][ 0 ].ulOperandTwo =  /* 1   hour 1st data op */
  1669.     apltPlayList[ 3 ][ 2 ].ulOperandTwo =  /* 1   hour 3rd data op */
  1670.        ulSizeOfFile;                             /* size         */
  1671.     }
  1672.     else
  1673.     if ( usChimeFileId == 1 )
  1674.     /* If we just loaded CLOCK2.WAV */
  1675.     {
  1676.     /*
  1677.      * Put the address of this chime into the first operand of
  1678.      * every data operation that uses this particular chime.
  1679.      */
  1680.     apltPlayList[ 1 ][ 1 ].ulOperandOne =  /* 1/2 hour 2nd data op */
  1681.     apltPlayList[ 2 ][ 1 ].ulOperandOne =  /* 3/4 hour 2nd data op */
  1682.     apltPlayList[ 3 ][ 1 ].ulOperandOne =  /* 1   hour 2nd data op */
  1683.     apltPlayList[ 3 ][ 3 ].ulOperandOne =  /* 1   hour 4th data op */
  1684.        (ULONG) pulBaseAddress[ usChimeFileId ];  /* address    */
  1685.     /*
  1686.      * Now put the size of the file into the second operand of every
  1687.      * data operation that uses this particular chime.
  1688.      */
  1689.     apltPlayList[ 1 ][ 1 ].ulOperandTwo =  /* 1/2 hour 2nd data op */
  1690.     apltPlayList[ 2 ][ 1 ].ulOperandTwo =  /* 3/4 hour 2nd data op */
  1691.     apltPlayList[ 3 ][ 1 ].ulOperandTwo =  /* 1   hour 2nd data op */
  1692.     apltPlayList[ 3 ][ 3 ].ulOperandTwo =  /* 1   hour 4th data op */
  1693.        ulSizeOfFile;                             /* size        */
  1694.  }
  1695.  else
  1696.  if ( usChimeFileId == 2 )
  1697.  /* If we just loaded CLOCK3.WAV ,       */
  1698.  /* (this is the gong part of the chime) */
  1699. {
  1700.     /*
  1701.      * Put the address of this chime into the first operand of
  1702.      * every data operation that uses this particular chime.
  1703.      */
  1704.     apltPlayList[ 3 ][ 5 ].ulOperandOne =  /* 1 hour 5th data op */
  1705.        (ULONG) pulBaseAddress[ usChimeFileId ];
  1706.  
  1707.     /*
  1708.      * Now put the size of the file into the second operand of every
  1709.      * data operation that uses this particular chime.
  1710.      */
  1711.  
  1712.     apltPlayList[ 3 ][ 5 ].ulOperandTwo =  /* 1 hour 5th data op */
  1713.        ulSizeOfFile;
  1714.   }
  1715.  
  1716.  }  /* End of For loop of chime files. */
  1717.  
  1718. }  /* End of SetupPlayList */
  1719.  
  1720.  
  1721. ΓòÉΓòÉΓòÉ 3.3.2. Dynamic Playlist Modification ΓòÉΓòÉΓòÉ
  1722.  
  1723. An application can change a playlist dynamically to achieve various effects in 
  1724. controlling the data stream in memory.  In the case of the Clock Sample 
  1725. program, if the chime is an hour chime, then the program will dynamically 
  1726. modify the loop instruction in the memory playlist structure.  This is how the 
  1727. device playing the playlist knows how many times to play the chime.  The 
  1728. variable usHour is assigned the valid hour in the UpdateTheClock procedure. 
  1729.  
  1730.       /*
  1731.        * Set the playlist to loop for the number of hours to
  1732.        * be played.  The hour value will be placed into operand one
  1733.        * of the loop instruction playlist structure.*/
  1734.  
  1735.            apltPlayList[ HOUR_PLAYLIST ][ LOOP_LINE ].ulOperandOne =
  1736.                ((ULONG) (usHour));
  1737.  
  1738. Manipulations that entail atomic, or uninterruptible, operations are acceptable 
  1739. techniques for achieving special effects with playlists. For example, the 
  1740. modification of the 32-bit operation code of an instruction is considered to be 
  1741. an atomic operation. Changing BRANCH to NOP, NOP to BRANCH, or changing the 
  1742. loop count value of a LOOP instruction are examples of atomic operations that 
  1743. produce special effects. 
  1744.  
  1745. Because the playlist processor is asynchronously interpreting instructions, 
  1746. care must be taken to avoid a situation where unexpected results can occur. For 
  1747. example, suppose a situation exists that enables the loop count field to be 
  1748. modified by the application at the same time that the LOOP instruction is being 
  1749. executed by the playlist processor. The playlist processor can overwrite the 
  1750. application modification with a loop count value based on the execution of the 
  1751. LOOP instruction. 
  1752.  
  1753. More extensive modifications (particularly those to pointer and length 
  1754. parameters of DATA instructions) should also be performed with caution.  You do 
  1755. not want the playlist processor to gain control of a partially modified 
  1756. instruction. 
  1757.  
  1758. As a rule, it is not a good idea to modify a DATA instruction unless you are 
  1759. sure the playlist processor cannot interpret the instruction during the 
  1760. modification process; that is, you know the instruction is currently 
  1761. unreachable by the processor.  One way to determine the location of the 
  1762. processor is with the MESSAGE instruction.  For example, suppose you precede a 
  1763. LOOP instruction with a MESSAGE instruction. When the message is returned to 
  1764. your application, you know the processor is busy with the loop and you can 
  1765. safely modify any DATA instructions outside the loop. 
  1766.  
  1767. After DATA instructions have been modified, BRANCH or NOP instructions can be 
  1768. changed to direct playlist interpretation to the modified section of the 
  1769. playlist. 
  1770.  
  1771.  
  1772. ΓòÉΓòÉΓòÉ 3.3.3. Using a Playlist for Recording ΓòÉΓòÉΓòÉ
  1773.  
  1774. Memory playlists can be used in recording scenarios. For example, MESSAGE 
  1775. instructions are useful for notifying the application of the progress of a 
  1776. recording operation. A message can be sent each time the filling of a buffer is 
  1777. completed. 
  1778.  
  1779. Encasing several DATA statements inside a loop using either a LOOP or BRANCH 
  1780. instruction allows the playlist to function as a simple circular buffering 
  1781. scheme. The following is an example of circular buffering: 
  1782.  
  1783.     0:    NOP
  1784.     1:    DATA...
  1785.     2:    MESSAGE...
  1786.     3:    DATA...
  1787.     4:    MESSAGE...
  1788.     5:    DATA...
  1789.     6:    MESSAGE...
  1790.     7:    BRANCH 0
  1791.  
  1792. If the playlist processor executes an EXIT statement while recording, this 
  1793. means the playlist is full. This situation is similar to a disk becoming full 
  1794. during a recording operation. An ERROR_END_OF_PLAYLIST error is generated by 
  1795. the playlist processor in the streaming subsystem.  As the recording operation 
  1796. continues, additional data is lost.  The media driver being used returns the 
  1797. MCIERR_TARGET_DEVICE_FULL to the application. 
  1798.  
  1799. LOOP, CALL, and RETURN instructions are used for iterative playing operations. 
  1800. These instructions are not appropriate for a recording scenario because 
  1801. recorded data residing in the buffer would be overwritten by each iteration. 
  1802.  
  1803.  
  1804. ΓòÉΓòÉΓòÉ 3.4. Editing Operations ΓòÉΓòÉΓòÉ
  1805.  
  1806. Applications can perform editing operations using both the PM clipboard and 
  1807. user-defined buffers. This enables applications to share data with other 
  1808. applications by way of the clipboard or to quickly retrieve data into 
  1809. user-defined buffers.  Messages used for editing include MCI_COPY, MCI_CUT, 
  1810. MCI_DELETE, MCI_PASTE, MCI_REDO, and MCI_UNDO. 
  1811.  
  1812.  
  1813. ΓòÉΓòÉΓòÉ 3.4.1. Clipboard and Resource Formats ΓòÉΓòÉΓòÉ
  1814.  
  1815. Applications can imbed multimedia data into program resources and interchange 
  1816. that data through the clipboard. 
  1817.  
  1818. The following clipboard and resource format types are defined in the OS2MEDEF.H 
  1819. file: 
  1820.  
  1821.      CF_RMID and RT_RMID represent RIFF data that has a RMID chunk or regular 
  1822.       MIDI with an "MT" header.  This is a special case. 
  1823.      CF_RIFF and RT_RIFF represent RIFF data including all of the headers. 
  1824.      CF_WAVE and RT_WAVE represent RIFF data that has a WAVE chunk.  This is a 
  1825.       specific form of RIFF. 
  1826.      CF_AVI and RT_AVI represent RIFF Audio/Video Interleaved (AVI) data. 
  1827.       This is a specific form of RIFF.  An entire video file is placed in the 
  1828.       clipboard. 
  1829.  
  1830.  The following code fragment is an example of retrieving digital audio 
  1831.  information from the clipboard.  Source code for ADMCEDIT is located in the 
  1832.  \TOOLKIT\SAMPLES\MM\ADMCT subdirectory. 
  1833.  
  1834.   {
  1835.   HAB            habClipboard;
  1836.   HMQ            hmq;
  1837.  
  1838.   HMMIO          hmmioMem;           /* handle to memory file   */
  1839.  
  1840.   MMIOINFO       mmioinfo;           /* info struct for memory file */
  1841.  
  1842.   ULONG          ulFormatInfo = 0;
  1843.   ULONG          rc;
  1844.   PULONG         pulDataSize;
  1845.  
  1846.   LONG           lBytesRead;
  1847.   LONG           lReturnCode;
  1848.  
  1849.   MMAUDIOHEADER  mmaudioheader;
  1850.   MMAUDIOHEADER  mmaudioheaderTemp;
  1851.  
  1852.   PSZ            pTempBuffer;
  1853.   PVOID          pNewBuffer;
  1854.  
  1855.     habClipboard = WinInitialize( 0 );
  1856.     if ( !habClipboard )
  1857.        {
  1858.        return ( MCIERR_CLIPBOARD_ERROR );
  1859.        }
  1860.  
  1861.     hmq = WinCreateMsgQueue( habClipboard, 0 );
  1862.  
  1863.     if ( !hmq )
  1864.        {
  1865.        fCreatedMQ = FALSE;
  1866.        }
  1867.  
  1868.   /*  habClipboard = WinQueryAnchorBlock( HWND_DESKTOP ); */
  1869.  
  1870.     /*****************************************************************
  1871.     * Check to see if there is a wave (CF_WAVE is the defined type) in
  1872.     * the clipboard.
  1873.     ******************************************************************/
  1874.  
  1875.     rc = WinQueryClipbrdFmtInfo( habClipboard,
  1876.                             CF_WAVE,
  1877.                             &ulFormatInfo );
  1878.  
  1879.  
  1880.     if ( !WinOpenClipbrd( habClipboard ) )
  1881.        {
  1882.        WinCloseClipbrd( habClipboard );
  1883.        return ( MCIERR_CLIPBOARD_ERROR );
  1884.        }
  1885.  
  1886.     pTempBuffer = ( PSZ ) WinQueryClipbrdData( habClipboard, CF_WAVE );
  1887.  
  1888.     if ( !pTempBuffer )
  1889.        {
  1890.        WinCloseClipbrd( habClipboard );
  1891.        return ( MCIERR_CLIPBOARD_ERROR );
  1892.        }
  1893.  
  1894.     /*****************************************************************
  1895.     * We need to find out how much data is in the file.  Retrieve
  1896.     * the length of the RIFF chunk.
  1897.     ******************************************************************/
  1898.     pulDataSize = ( PULONG ) pTempBuffer + 1;
  1899.  
  1900.  
  1901.     memset( &mmioinfo, '\0', sizeof( MMIOINFO ) );
  1902.  
  1903.     /*****************************************************************
  1904.     * Prepare to open a memory file--the buffer * in the clipboard
  1905.     * contains the actual RIFF file which the WAVE IOProc already knows
  1906.     * how to parse--use  it to retrieve the information and keep the MCD
  1907.     * from file-format dependence.
  1908.     ******************************************************************/
  1909.  
  1910.     mmioinfo.fccIOProc = mmioFOURCC( 'W', 'A', 'V', 'E' ) ;
  1911.     mmioinfo.fccChildIOProc = FOURCC_MEM;
  1912.  
  1913.     rc = CheckMem ( (PVOID) pulDataSize,
  1914.                       sizeof ( ULONG ),
  1915.                       PAG_READ | PAG_WRITE );
  1916.  
  1917.     if (rc != MCIERR_SUCCESS)
  1918.        {
  1919.        WinCloseClipbrd( habClipboard );
  1920.        return (MCIERR_OUT_OF_MEMORY );
  1921.        }
  1922.  
  1923.  
  1924.     mmioinfo.cchBuffer = ( *pulDataSize) + 8;
  1925.     mmioinfo.pchBuffer = pTempBuffer;
  1926.  
  1927.  
  1928.     hmmioMem = mmioOpen( NULL,
  1929.                          &mmioinfo,
  1930.                          MMIO_READ );
  1931.  
  1932.     if ( !hmmioMem )
  1933.        {
  1934.        WinCloseClipbrd( habClipboard );
  1935.        return ( mmioinfo.ulErrorRet );
  1936.        }
  1937.  
  1938.  
  1939. ΓòÉΓòÉΓòÉ 3.4.2. Audio Media Driver Clipboard Commands ΓòÉΓòÉΓòÉ
  1940.  
  1941. The data that the buffer or clipboard contains will be defined differently for 
  1942. each media driver. 
  1943.  
  1944. The following formula is necessary to allocate memory for digital audio 
  1945. clipboard operations: 
  1946.  
  1947.  
  1948. (BitsPerSample/8) x (SamplesPerSecond) x (Channels) x (Seconds)
  1949.  
  1950. Therefore, if an application is to copy 20 seconds of a 16-bit, 44 kHz, mono 
  1951. file into the clipboard using the caller's buffer; 1,764,000 bytes ((16/8) x 
  1952. (44100) x (1) x (20)) must be allocated and placed in the pBuff field of the 
  1953. MCI_EDIT_PARMS structure.  For MCI_CUT, MCI_COPY, and MCI_PASTE, if 
  1954. MCI_TO_BUFFER or MCI_FROM_BUFFER is passed in, then the pBuff field should 
  1955. contain a valid pointer. 
  1956.  
  1957. MCI_STATUS_CLIPBOARD returns MCI_TRUE if digital audio is in the clipboard; 
  1958. otherwise it returns MCI_FALSE. MCI_CUT removes the specified range and places 
  1959. the data in the buffer or clipboard.  The position of the media will either be 
  1960. the from position if MCI_FROM is specified or the previous position if MCI_FROM 
  1961. is not specified.  If the buffer is not large enough for the data an 
  1962. MCIERR_INVALID_BUFFER is returned.  The units of MCI_FROM and MCI_TO must be 
  1963. supplied in the currently selected time format.  If neither MCI_FROM or MCI_TO 
  1964. are specified, the operation will start from the current file position and 
  1965. continue to the end of the file. If audio data is already in the clipboard, it 
  1966. will be overwritten. 
  1967.  
  1968. Note:  The clipboard contents are emptied before the cut occurs. 
  1969.  
  1970.  MCI_COPY copies the specified range and places the data in the buffer or 
  1971.  clipboard.  The position of the media remains the same as it was before the 
  1972.  copy operation. 
  1973.  
  1974.  MCI_PASTE deletes the selected range if the differences between the from and 
  1975.  to position are greater than zero, then inserts the data provided in the 
  1976.  buffer or clipboard.  The media position will be at the end of what was pasted 
  1977.  into the file.  If neither MCI_FROM or MCI_TO are specified, MCI_PASTE inserts 
  1978.  the clipboard contents at the current position. MCI_CONVERT_FORMAT converts 
  1979.  the data that was in the clipboard to the destination file format. The 
  1980.  following data format conversions can be performed: 
  1981.  
  1982.      16-bit to 8-bit resolution/8-bit to 16-bit resolution 
  1983.      11.025 kHz, 22.05 kHz, and 44.1 kHz to any of the following sampling 
  1984.       rates: 11.025 kHz, 22.05 kHz, or 44.1 kHz 
  1985.      mono to stereo/stereo to mono 
  1986.  
  1987.  Note:  The MCI_CONVERT_FORMAT flag supports only the Pulse Code Modulation 
  1988.         (PCM) format. The data format conversion can take a while to complete. 
  1989.         If the notify flag is specified, the application is notified when the 
  1990.         conversion is completed. 
  1991.  
  1992.  The following code fragment shows an example of the use of MCI_COPY and 
  1993.  MCI_PASTE. 
  1994.  
  1995.  
  1996.   ULONG weMciCopy( HWND hwnd, ULONG ulMarkedStartBytes,
  1997.                    ULONG ulMarkedEndBytes,  USHORT usDeviceID )
  1998.      {
  1999.      ULONG          ulFlags;
  2000.      MCI_EDIT_PARMS mcieditstr;
  2001.      ULONG          ulResult;
  2002.  
  2003.      ulResult = 0L;
  2004.  
  2005.      /*
  2006.       * First, set all fields of the MCI_EDIT_PARMS structure to 0.
  2007.       */
  2008.      memset( &mcieditstr, '\0', sizeof(MCI_EDIT_PARMS) );
  2009.  
  2010.      /*
  2011.       * The flags are NOTIFY, FROM, and TO.
  2012.       */
  2013.      ulFlags = 0L;
  2014.      ulFlags |= MCI_NOTIFY |
  2015.                 MCI_FROM |
  2016.                 MCI_TO;
  2017.  
  2018.      mcieditstr.ulCallback = (ULONG)hwnd;
  2019.  
  2020.      /*
  2021.       * Set the from and to items to the beginning and end
  2022.       * of the selected area.
  2023.       */
  2024.      mcieditstr.ulFrom = ulMarkedStartBytes;
  2025.  
  2026.      mcieditstr.ulTo = ulMarkedEndBytes;
  2027.  
  2028.      ulResult = mciSendCommand( usDeviceID,
  2029.                                 MCI_COPY,
  2030.                                 ulFlags,
  2031.                                 (ULONG)&mcieditstr,
  2032.                                 0 );
  2033.  
  2034.      return( ulResult );
  2035.      {
  2036.  
  2037.   ULONG weMciPaste( HWND hwnd, ULONG ulMarkedStartBytes,
  2038.                     ULONG ulMarkedEndBytes,  USHORT usDeviceID )
  2039.      {
  2040.      ULONG          ulFlags;
  2041.      MCI_EDIT_PARMS mcieditstr;
  2042.      ULONG          ulResult;
  2043.  
  2044.      ulResult = 0L;
  2045.  
  2046.      /*
  2047.       * First, set all fields of the MCI_EDIT_PARMS structure to 0.
  2048.       */
  2049.      memset( &mcieditstr, '\0', sizeof(MCI_EDIT_PARMS) );
  2050.  
  2051.      mcieditstr.ulCallback = (ULONG)hwnd;
  2052.  
  2053.      ulFlags = 0L;
  2054.  
  2055.      /*
  2056.       * If there is an area of wave selected, then the flags are NOTIFY,
  2057.       * FROM, TO, and CONVERT_FORMAT.
  2058.       */
  2059.      if( ulMarkedEndBytes > ulMarkedStartBytes )
  2060.         {
  2061.         ulFlags |= MCI_NOTIFY |
  2062.                    MCI_FROM |
  2063.                    MCI_TO |
  2064.                    MCI_CONVERT_FORMAT;
  2065.  
  2066.         /*
  2067.          * Set the from and to items to the beginning and end
  2068.          * of the selected area.
  2069.          */
  2070.         mcieditstr.ulFrom = ulMarkedStartBytes;
  2071.  
  2072.         mcieditstr.ulTo = ulMarkedEndBytes;
  2073.         }
  2074.      else
  2075.         {
  2076.         /*
  2077.          * Otherwise, nothing in the wave is selected so the flags are
  2078.          * only NOTIFY and CONVERT_FORMAT.
  2079.          */
  2080.         ulFlags |= MCI_NOTIFY |
  2081.                    MCI_CONVERT_FORMAT;
  2082.  
  2083.         /*
  2084.          * Because this is a paste operation without FROM/TO,
  2085.          * we have to SEEK so that the media position is set
  2086.          * to the place that we want to paste.
  2087.          */
  2088.         if( ulResult = weMciCall( hwnd,
  2089.                                   MCI_SEEK ) )
  2090.            return( ulResult );
  2091.         }
  2092.      ulResult = mciSendCommand( usDeviceID,
  2093.                                 MCI_PASTE,
  2094.                                 ulFlags,
  2095.                                 (ULONG)&mcieditstr,
  2096.                                 0 );
  2097.  
  2098.      return( ulResult );
  2099.      {
  2100.  
  2101.  The following is an example of using the command string interface with editing 
  2102.  commands to create a repeating sound. 
  2103.  
  2104.   open test.wav alias a wait
  2105.   copy a from 0 to 3000 wait
  2106.   seek a to end
  2107.   paste a wait
  2108.   paste a wait
  2109.   paste a wait
  2110.  
  2111.  
  2112. ΓòÉΓòÉΓòÉ 3.5. Device Sharing By Applications ΓòÉΓòÉΓòÉ
  2113.  
  2114. The multimedia system supports sharing of physical devices among multiple 
  2115. applications. If a device is capable of being shared; that is, if it can 
  2116. maintain state information, the system can establish a unique device state, 
  2117. much like a Presentation Manager device context, for each application that uses 
  2118. the device. 
  2119.  
  2120. The scope of a device state is defined by each device. The state of a simple 
  2121. device like the digital video player contains information about the current 
  2122. frame position, whether the device is playing or stopped, what its current 
  2123. playback speed is set to, and so on. The state of a compound device can include 
  2124. the name of the currently selected file, RIFF object, and playback position. 
  2125.  
  2126. Media devices vary in their ability to support multiple device contexts 
  2127. concurrently. The different types of device use that are supported by media 
  2128. devices are: 
  2129.  
  2130.      Fixed single-context 
  2131.      Dynamic single-context 
  2132.      Limited multiple-context 
  2133.      Unlimited context 
  2134.  
  2135.  The following table contains descriptions and examples of these device use 
  2136.  types. 
  2137.  
  2138.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2139.   ΓöéContext Use Type         ΓöéDescription                                  Γöé
  2140.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2141.   ΓöéFixed single-context     ΓöéA fixed single-context device can establish  Γöé
  2142.   Γöé                         Γöéonly one device context.  The state of a     Γöé
  2143.   Γöé                         Γöéfixed single-context device cannot be queriedΓöé
  2144.   Γöé                         Γöéor set by software.                          Γöé
  2145.   Γöé                         ΓöéAn example of a fixed single-context device  Γöé
  2146.   Γöé                         Γöéis a video cassette recorder that does not   Γöé
  2147.   Γöé                         Γöéreport the tape position to the driver.      Γöé
  2148.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2149.   ΓöéDynamic single-context   ΓöéA dynamic single-context device is serially  Γöé
  2150.   Γöé                         Γöéshareable. That is, the device can be used byΓöé
  2151.   Γöé                         Γöéonly one application at a time but can be    Γöé
  2152.   Γöé                         Γöépassed from one application to another.  A   Γöé
  2153.   Γöé                         Γöédevice state for each application is saved   Γöé
  2154.   Γöé                         Γöéand restored appropriately.                  Γöé
  2155.   Γöé                         ΓöéThis is the most common concurrent use type  Γöé
  2156.   Γöé                         Γöéfor a media device. An example of a dynamic  Γöé
  2157.   Γöé                         Γöésingle-context device is a CD-ROM player.    Γöé
  2158.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2159.   ΓöéLimited multiple-context ΓöéA limited multiple-context device can        Γöé
  2160.   Γöé                         Γöéestablish multiple device contexts, but the  Γöé
  2161.   Γöé                         Γöénumber of device contexts is limited by the  Γöé
  2162.   Γöé                         Γöéphysical device.                             Γöé
  2163.   Γöé                         ΓöéAn example of a limited multiple-context     Γöé
  2164.   Γöé                         Γöédevice is a 4-channel amp-mixer audio device,Γöé
  2165.   Γöé                         Γöéwhich can concurrently support any of the    Γöé
  2166.   Γöé                         Γöéfollowing multiple-contexts:                 Γöé
  2167.   Γöé                         ΓöéFour monaural contexts, two stereo contexts, Γöé
  2168.   Γöé                         Γöéand one stereo and two monaural contexts.    Γöé
  2169.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2170.   ΓöéUnlimited context        ΓöéAn unlimited context device can support an   Γöé
  2171.   Γöé                         Γöéarbitrary number of concurrent device        Γöé
  2172.   Γöé                         Γöécontexts.  The number of concurrent contexts Γöé
  2173.   Γöé                         Γöéis limited only by the resource limits of theΓöé
  2174.   Γöé                         Γöésystem.                                      Γöé
  2175.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2176.  
  2177.  
  2178. ΓòÉΓòÉΓòÉ 3.5.1. Getting Control of a Shared Device ΓòÉΓòÉΓòÉ
  2179.  
  2180. The MM_MCIPASSDEVICE message sent with WinPostMsg by the multimedia system to 
  2181. applications and the MCI_ACQUIREDEVICE message sent by applications with 
  2182. mciSendCommand to the multimedia system provide a device-sharing scheme for the 
  2183. OS/2 multimedia environment. 
  2184.  
  2185. To participate in device sharing, an application issues MCI_OPEN with the 
  2186. MCI_OPEN_SHAREABLE flag set. The system then attempts to acquire the device for 
  2187. the application. The application must wait until it receives the asynchronous 
  2188. MM_MCIPASSDEVICE message to gain control of the device.  The multimedia system 
  2189. sends the MM_MCIPASSDEVICE message to inform the application that the device 
  2190. context is becoming active (MCI_GAINING_USE). 
  2191.  
  2192. Before an application receives an MM_MCIPASSDEVICE message with an event of 
  2193. MCI_GAINING_USE, it can make inquiries about the device and the media. 
  2194. MCI_STATUS, MCI_GETDEVCAPS, MCI_INFO, and MCI_CLOSE commands can be sent to an 
  2195. inactive device context. 
  2196.  
  2197. Note:  If your application has set an MCI_NOTIFY flag on the open request, 
  2198.        notification will be posted to the application before the 
  2199.        MM_MCIPASSDEVICE message is sent.  However, if the application message 
  2200.        queue has other messages already queued, it is possible that the 
  2201.        application may receive the MM_MCIPASSDEVICE message before it receives 
  2202.        the notification message. 
  2203.  
  2204.  The active instance of the application remains active until the application 
  2205.  returns from the WinPostMsg (MCI_LOSING_USE). This guarantees that the 
  2206.  application has an active device context until it returns from WinPostMsg. If 
  2207.  the application receives an MM_MCIPASSDEVICE message with an event of 
  2208.  MCI_GAINING_USE, it should return immediately. The following code fragment 
  2209.  illustrates the device sharing architecture from the Clock Sample program. 
  2210.  
  2211.     /*
  2212.      * The next two messages are handled so that the Clock application
  2213.      * can participate in device sharing.  Because it opens the devices
  2214.      * as shareable devices, other applications can gain control of the
  2215.      * devices.  When this happens, we will receive a pass device
  2216.      * message.  We keep track of this device passing in the fPassed
  2217.      * boolean variable.
  2218.      * If we do not have access to the device when we receive an
  2219.      * activate message, then we will issue an acquire device command
  2220.      * to gain access to the device.
  2221.      */
  2222.  
  2223.   case MM_MCIPASSDEVICE:
  2224.      if (SHORT1FROMMP(mp2) == MCI_GAINING_USE)
  2225.      {
  2226.         fPassed = FALSE;               /* Gaining control of device   */
  2227.      } else
  2228.      {
  2229.         fPassed = TRUE;                /* Losing control of device    */
  2230.      }
  2231.      return( WinDefSecondaryWindowProc( hwnd, msg, mp1, mp2 ) );
  2232.  
  2233.   case WM_ACTIVATE:
  2234.  
  2235.      /* We use the WM_ACTIVATE message to participate in device sharing.
  2236.       * We first check to see if this is an activate or a deactivate
  2237.       * message (indicated by mp1). Then, we check to see if we've
  2238.       * passed control of the device that we use.  If these conditions
  2239.       * are true, we issue an acquire device command to regain
  2240.       * control of the device, because we're now the active window on
  2241.       * the screen.
  2242.       *
  2243.       * This is one possible method that can be used to implement
  2244.       * device sharing. For applications that are more complex
  2245.       * than this sample program, developers may wish to take
  2246.       * advantage of a more robust method of device sharing.
  2247.       * This can be done by using the MCI_ACQUIRE_QUEUE flag on
  2248.       * the MCI_ACQUIREDEVICE command.
  2249.       */
  2250.  
  2251.      /*
  2252.       * First we check to see if we've passed control of the device
  2253.       */
  2254.  
  2255.   if ((BOOL)mp1 && fPassed == TRUE) {
  2256.  
  2257.      mciGenericParms.hwndCallback =  hwnd;
  2258.  
  2259.      ulError = mciSendCommand( mciOpenParameters.usDeviceID,
  2260.                                MCI_ACQUIREDEVICE,
  2261.                                (ULONG)MCI_NOTIFY,
  2262.                                (PVOID) &mciGenericParms,
  2263.                                (USHORT)NULL);
  2264.      if (ulError)
  2265.      {
  2266.        ShowAMessage(acStringBuffer[IDS_NORMAL_ERROR_MESSAGE_BOX_TEXT-1];
  2267.                     IDS_CHIME_FILE_ERROR,  /* ID of message      */
  2268.                     MB_OK | MB_INFORMATION |
  2269.                     MB_HELP | MB_APPLMODAL |
  2270.                     MB_MOVEABLE );         /* Style of msg box.  */
  2271.      }
  2272.    }
  2273.    return( WinDefSecondaryWindowProc( hwnd, msg, mp1, mp2 ) );
  2274.  
  2275.  Regaining Control of a Shared Device 
  2276.  
  2277.  An application regains control of a shared device by issuing the 
  2278.  MCI_ACQUIREDEVICE message with mciSendCommand after it has received a 
  2279.  WM_ACTIVATE message. The application receives a WM_ACTIVATE message whenever 
  2280.  its frame window is activated or deactivated by user selection. The time for 
  2281.  the application to regain control of a shared device is during the period its 
  2282.  window is activated. A "greedy" application that grabs back a device as soon 
  2283.  as it loses it defeats the purpose of the WM_ACTIVATE message processing 
  2284.  scheme, which is to give control of a shared device to the application with 
  2285.  which the user is interacting. 
  2286.  
  2287.  Only dynamic single-context and limited multiple-context devices are acquired 
  2288.  by applications. The MCI_ACQUIREDEVICE function does not perform any function 
  2289.  for fixed single-context and unlimited-context devices, because device 
  2290.  contexts are not saved or restored for these classes of devices. 
  2291.  
  2292.  To better understand the allocation of resources to multiple device contexts, 
  2293.  imagine a stack of device contexts. The physical device is associated with the 
  2294.  topmost device context on the stack.  Whenever a device context is opened, it 
  2295.  is placed on top of the stack, and the physical device is associated with the 
  2296.  new device context. When MCI_ACQUIREDEVICE is issued for a particular device 
  2297.  context, that device context moves to the top of the stack, and the physical 
  2298.  device is associated with the existing device context. Closing a device 
  2299.  context removes it from the stack. 
  2300.  
  2301.  Queued Acquire Command 
  2302.  
  2303.  Setting the MCI_ACQUIRE_QUEUE flag of the MCI_ACQUIREDEVICE message enables 
  2304.  the message to be queued and executed as soon as device resources become 
  2305.  available.  An application can issue an MCI_ACQUIREDEVICE message and, at a 
  2306.  later point, the device context becomes active.  This is true if either the 
  2307.  MCI_NOTIFY or MCI_WAIT flag is specified.  If the MCI_WAIT flag is specified, 
  2308.  the calling thread is blocked until the device context becomes active. If the 
  2309.  MCI_ACQUIREDEVICE request can be satisfied immediately, the command is not 
  2310.  queued. 
  2311.  
  2312.  The acquire command can be used to acquire a device instance when the resource 
  2313.  becomes available: 
  2314.  
  2315.   open music1.wave alias wave1 shareable wait
  2316.   play wave1 notify
  2317.   .
  2318.   .
  2319.   .
  2320.   ** During this time a losing use message is received **
  2321.   ** and this instance becomes inactive.               **
  2322.   .
  2323.   .
  2324.   .
  2325.   acquire wave1 queue notify
  2326.  
  2327.  If an MCI_ACQUIREDEVICE is queued and an application issues MCI_RELEASEDEVICE 
  2328.  or MCI_CLOSE for that instance, the queued MCI_ACQUIREDEVICE message is 
  2329.  canceled. 
  2330.  
  2331.  Releasing the Resource 
  2332.  
  2333.  The release resource command is used in conjunction with the queued acquire 
  2334.  command. An application can release a device instance from the active state 
  2335.  and make the next available inactive device instance active by setting the 
  2336.  MCI_RETURN_RESOURCE flag of the MCI_RELEASEDEVICE message.  When a device 
  2337.  instance no longer needs its resources, the device instance can give up the 
  2338.  resource to another device requesting the resources (with MCI_ACQUIRE_QUEUE). 
  2339.  
  2340.  The release command as shown in the following example can be used to release 
  2341.  exclusive hold on a device. 
  2342.  
  2343.   open waveaudio alias wave2 shareable wait
  2344.   acquire wave2 exclusive wait
  2345.   record wave2 notify
  2346.   .
  2347.   .
  2348.   .
  2349.   ** Open the device exclusively to avoid interruptions **
  2350.   ** during recording.                                  **
  2351.   .
  2352.   .
  2353.   .
  2354.   stop wave2 wait
  2355.   release wave2 return resource wait
  2356.  
  2357.  The device instance will not be made active again unless an application issues 
  2358.  an MCI_ACQUIREDEVICE message for this device context. This function is ignored 
  2359.  if the instance is already in an inactive state.  The instance remains active 
  2360.  if the resource used by this instance is not required by any other instance. 
  2361.  
  2362.  
  2363. ΓòÉΓòÉΓòÉ 3.5.2. Using a Device Exclusively ΓòÉΓòÉΓòÉ
  2364.  
  2365. There are times when an application must retain control of the physical 
  2366. resource, such as the during the duration of a recording operation or when the 
  2367. application needs to establish specific settings for the device context. The 
  2368. application can retain control by not specifying the shareable flag with the 
  2369. open request or by setting the MCI_EXCLUSIVE flag of the MCI_ACQUIREDEVICE 
  2370. message. When a device has been acquired for exclusive use, other applications 
  2371. cannot acquire the device until the application using the device closes it or 
  2372. releases it from exclusive use with the MCI_RELEASEDEVICE message. When an 
  2373. application releases a device from exclusive use, it does not lose use of the 
  2374. device until another application acquires it. 
  2375.  
  2376. When an application needs to acquire a device context for exclusive use without 
  2377. acquiring the entire device resource, the application can set the 
  2378. MCI_EXCLUSIVE_INSTANCE flag of the MCI_ACQUIREDEVICE message. This flag 
  2379. prevents the device context from being made inactive unless the application 
  2380. using the device issues the MCI_CLOSE or MCI_RELEASEDEVICE message. 
  2381.  
  2382. The MCI_EXCLUSIVE_INSTANCE and MCI_EXCLUSIVE flags are mutually exclusive. An 
  2383. instance can be in one of three sharing states: 
  2384.  
  2385.      Instance exclusive 
  2386.      Device exclusive 
  2387.      Fully shareable 
  2388.  
  2389.  Using the MCI_EXCLUSIVE_INSTANCE flag places an instance in an 
  2390.  instance-exclusive sharing state.  Using the MCI_EXCLUSIVE flag places an 
  2391.  instance in a device-exclusive sharing state.  The MCI_RELEASEDEVICE message 
  2392.  places an instance in a fully shareable state. 
  2393.  
  2394.  
  2395. ΓòÉΓòÉΓòÉ 3.6. Device Groups ΓòÉΓòÉΓòÉ
  2396.  
  2397. When an OS/2 multimedia application needs to control more than one device at a 
  2398. time, it uses the MCI_GROUP message to group device contexts. The 
  2399. MCI_GROUP_MAKE and MCI_GROUP_DELETE flags are used to make and delete groups. 
  2400. MCI_GROUP_MAKE ties several device instances together so that a single command 
  2401. sent to the group by an application is actually sent to each device instance in 
  2402. the group by the multimedia system. This flag can be combined with any of the 
  2403. other MCI_GROUP flags except MCI_GROUP_DELETE in which case an 
  2404. MCIERR_FLAGS_NOT_COMPATIBLE error code is returned.  Device instances must have 
  2405. been previously opened but can be in any mode (such as, playing, stopped, or 
  2406. paused) for this message to be successful.  If one or more device IDs are 
  2407. invalid, the MCIERR_INVALID_DEVICE_ID error code is returned.  If a device ID 
  2408. or alias refers to a device in another group, the MCIERR_ID_ALREADY_IN_GROUP 
  2409. error code is returned. 
  2410.  
  2411. Once a group has been made, certain command messages sent to the group ID (or 
  2412. alias name) are sent to each device making up that group.  Command messages 
  2413. that support groups are: 
  2414.  
  2415.  MCI_ACQUIREDEVICE          MCI_RELEASEDEVICE 
  2416.  MCI_CLOSE                  MCI_RESUME 
  2417.  MCI_CUE                    MCI_SEEK 
  2418.  MCI_PAUSE                  MCI_SET 
  2419.  MCI_PLAY                   MCI_STOP 
  2420.  MCI_RECORD 
  2421.  
  2422.  Note:  Commands sent to a group must use the MCI_NOTIFY flag. 
  2423.  
  2424.  To end a group association, an application uses the MCI_GROUP_DELETE flag of 
  2425.  the MCI_GROUP message. None of the other flags of the MCI_GROUP message can be 
  2426.  combined with MCI_GROUP_DELETE because the only information required by this 
  2427.  flag is a group ID.  If any other flags are supplied an 
  2428.  MCIERR_FLAGS_NOT_COMPATIBLE error code is returned. The 
  2429.  MCIERR_INVALID_GROUP_ID error code is returned if an application passes an 
  2430.  invalid ID.  When a device in a group is closed, it is removed from the group. 
  2431.  When the last device in a group is closed, the group is automatically deleted. 
  2432.  
  2433.  Applications can use the MCI_GROUP_ALIAS flag to refer to a group by a name 
  2434.  rather than a group ID for use with the mciSendString interface.  This flag 
  2435.  can only be used with an MCI_GROUP_MAKE flag; the given alias is used to refer 
  2436.  to the new group.  If the alias is already in use, an MCIERR_DUPLICATE_ALIAS 
  2437.  error code is returned.  Each string group "make" command must include an 
  2438.  alias so the group can later be referred to.  The alias follows the group 
  2439.  command as shown by the following syntax: 
  2440.  
  2441.   group grp1 make (wave1 cd1) wait
  2442.  
  2443.  This defines the alias to be "grp1".  The list of device names (members of the 
  2444.  group) is delimited by parenthesis and separated by spaces and optional 
  2445.  quotation marks. The following syntax is used to delete this group: 
  2446.  
  2447.   group grp1 delete wait
  2448.  
  2449.  
  2450. ΓòÉΓòÉΓòÉ 3.6.1. Duet Player Sample Program Example ΓòÉΓòÉΓòÉ
  2451.  
  2452. The following code fragment illustrates the creation of a device group in the 
  2453. Duet Player I sample program. An array is filled with the IDs of opened devices 
  2454. to be associated in the group.  The application then calls MCI_GROUP to create 
  2455. the group and return a handle. 
  2456.  
  2457.  
  2458.   /* If this is the first time through this routine, then we need to
  2459.    * open the devices and make the group.
  2460.    *
  2461.    * On subsequent calls to this routine, the devices are already open
  2462.    * and the group is already made, so we only need to load the
  2463.    * appropriate files onto the devices.
  2464.    */
  2465.   {
  2466.   /*
  2467.    * Open one part of the duet. The first step is to initialize an
  2468.    * MCI_OPEN_PARMS data structure with the appropriate information,
  2469.    * then issue the MCI_OPEN command with the mciSendCommand function.
  2470.    * We will be using an open with only the element name specified.
  2471.    * This will cause the default connection, as specified in the
  2472.    * MMPM.INI file, for the data type.
  2473.    */
  2474.   mopDuetPart.hwndCallback   =  hwnd;     /* For MM_MCIPASSDEVICE   */
  2475.   mopDuetPart.usDeviceID     = (USHORT) NULL; /* this is returned   */
  2476.   mopDuetPart.pszDeviceType  = (PSZ) NULL;    /* using default conn.*/
  2477.   mopDuetPart.pszElementName = (PSZ) aDuet[sDuet].achPart1;
  2478.  
  2479.   ulError = mciSendCommand( (USHORT) 0,
  2480.                             MCI_OPEN,
  2481.                             MCI_WAIT | MCI_OPEN_ELEMENT |
  2482.                             MCI_OPEN_SHAREABLE | MCI_READONLY,
  2483.                             (PVOID) &mopDuetPart,
  2484.                             UP_OPEN);
  2485.  
  2486.   if (!ulError)  /* if we opened part 1 */
  2487.   {
  2488.      usDuetPart1ID = mopDuetPart.usDeviceID;
  2489.  
  2490.      /*
  2491.       * Now, open the other part.
  2492.       */
  2493.      mopDuetPart.pszElementName    = (PSZ)   aDuet[sDuet].achPart2;
  2494.  
  2495.      ulError = mciSendCommand( (USHORT) 0,
  2496.                                MCI_OPEN,
  2497.                                MCI_WAIT | MCI_OPEN_ELEMENT |
  2498.                                MCI_OPEN_SHAREABLE | MCI_READONLY,
  2499.                                (PVOID) &mopDuetPart,
  2500.                                UP_OPEN);
  2501.  
  2502.   if (!ulError)  /* if we opened part 2 */
  2503.   {
  2504.      usDuetPart2ID = mopDuetPart.usDeviceID;
  2505.  
  2506.  /*
  2507.   * Now we need to create a group.  To do this,
  2508.   * we need to fill an array with the IDs of the already open
  2509.   * devices that we want to group.  Then we call MCI_GROUP to
  2510.   * create the group and return a handle to it.
  2511.   */
  2512.  
  2513.  ulDeviceList[0] = (ULONG)usDuetPart1ID;
  2514.  ulDeviceList[1] = (ULONG)usDuetPart2ID;
  2515.  
  2516.  mgpGroupParms.hwndC  lback = (HWND) NULL;     /* Not needed -
  2517.                                                   we're waiting     */
  2518.  mgpGroupParms.ulNumDevices = NUM_PARTS;       /* Count of devices  */
  2519.  mgpGroupParms.paulDeviceID = (PULONG)&ulDeviceList; /* Array of
  2520.                                                         devices     */
  2521.  mgpGroupParms.ulStructLength = sizeof (mgpGroupParms);
  2522.  
  2523. ulError = mciSendCommand( (USHORT) 0,
  2524.                            MCI_GROUP,
  2525.                            MCI_WAIT | MCI_GROUP_MAKE|
  2526.                            MCI_NOPIECEMEAL,
  2527.                            (PVOID) &mgpGroupParms,
  2528.                            UP_GROUP);
  2529.  
  2530.  fFirstPlay = FALSE;
  2531.  
  2532.  
  2533. ΓòÉΓòÉΓòÉ 3.6.2. Resource Allocation ΓòÉΓòÉΓòÉ
  2534.  
  2535. An application avoids piecemeal resource allocation problems by setting the 
  2536. MCI_NOPIECEMEAL flag of the MCI_GROUP message. This flag specifies that the 
  2537. associated group is treated as a whole rather than several separate instances. 
  2538. If one of the device instances becomes inactive then all the instances in the 
  2539. group will go inactive. This flag can only be combined with the MCI_GROUP_MAKE 
  2540. flag as it specifies the nature of the group to be created.  If the 
  2541. MCI_NOPIECEMEAL flag is set during creation and one or more of the instances in 
  2542. the list of IDs or aliases is already inactive, the entire group will go 
  2543. inactive and each device in the group saves its state. The device contexts in 
  2544. the group can subsequently be restored by passing the group device context ID 
  2545. with the MCI_ACQUIREDEVICE message, using mciSendCommand. 
  2546.  
  2547. If the MCI_NOPIECEMEAL flag is not specified and devices are lost, the 
  2548. application retains control over the remaining devices in the group, unless one 
  2549. of the lost devices is the master of the group. When the master of a group of 
  2550. devices is lost, the group is lost. 
  2551.  
  2552.  
  2553. ΓòÉΓòÉΓòÉ 3.7. Event Synchronization ΓòÉΓòÉΓòÉ
  2554.  
  2555. Applications can perform event synchronization by taking an action at a 
  2556. specified point during the playback of a data object. There are two ways an 
  2557. application can do this: 
  2558.  
  2559.      The application can request to be notified when a specified point in 
  2560.       playback is encountered by sending the MCI_SET_CUEPOINT message to the 
  2561.       multimedia system.  When this cue point is encountered, the multimedia 
  2562.       system sends an MM_MCICUEPOINT message to the application. 
  2563.  
  2564.      The application can request notification on a periodic basis, based on 
  2565.       time or position, by sending the MCI_SET_POSITION_ADVISE message to the 
  2566.       multimedia system.  As each time period (or position) specified passes, 
  2567.       the multimedia system sends an MM_MCIPOSITIONCHANGE message to the 
  2568.       application. 
  2569.  
  2570.  
  2571. ΓòÉΓòÉΓòÉ 3.7.1. Cue Points ΓòÉΓòÉΓòÉ
  2572.  
  2573. Cue points are discrete locations or time positions in a media device.  When a 
  2574. device encounters a time position associated with a cue point, a message is 
  2575. returned to the application window handle that is specified to receive the cue 
  2576. point messages.  Cue points are maintained as part of a device context, so 
  2577. setting a cue point in one device context will not cause cue point messages to 
  2578. be generated for other device contexts. 
  2579.  
  2580. Applications specify cue points for a device with the MCI_SET_CUEPOINT message. 
  2581. A cue point is identified by its location; setting a cue point "on" sets a cue 
  2582. point at the specified location, and setting a cue point "off" removes the cue 
  2583. point.  Because cue points are identified by location, only one cue point can 
  2584. be set at a specified location in the media. Therefore, setting a cue point at 
  2585. a location where a cue point is already set causes the second MCI_SET_CUEPOINT 
  2586. to fail and to return the error MCIERR_DUPLICATE_CUEPOINT. Cue points can be 
  2587. set at any valid location in the media, regardless of current media position. 
  2588. If a device is currently playing at 2:00 (two minutes), and a cue point is set 
  2589. at 1:00 (one minute) in the media, and the device is subsequently seeked and 
  2590. played from the beginning, the cue point message will be generated when the 
  2591. device passes the 1:00 point in the media. 
  2592.  
  2593. Cue points are persistent.  That is, they remain set after they are 
  2594. encountered.  The device will generate cue point messages whenever the cue 
  2595. point location is encountered, which may be many times if the device is seeked 
  2596. or played repeatedly. Cue points are encountered only when a device is playing 
  2597. or recording.  If a device is seeked from its current position to some new 
  2598. position, cue points set at locations between the old and new position are not 
  2599. encountered during the seek operation, and no cue point messages are generated. 
  2600.  
  2601. Because cue points can be set only within the valid range of a media element, 
  2602. cue points cannot be set when a file is not loaded. All cue points for a device 
  2603. context are removed when a new file element is loaded. 
  2604.  
  2605. Cue points also can be created as part of a media element.  In the case of cue 
  2606. points imbedded directly in a media element, the MCI_SET_CUEPOINT message 
  2607. performs no function.  Imbedded cue points always result in cue point messages 
  2608. being returned when they are encountered.  The user parameter value returned on 
  2609. the cue point message varies from one media data type to another and should be 
  2610. set to a meaning that is significant to the application. 
  2611.  
  2612. When a cue point is encountered, an MM_MCICUEPOINT message is sent to the 
  2613. window specified by the hwndCallback field of the MCI_CUEPOINT_PARMS data 
  2614. structure passed with the MCI_SET_CUEPOINT message.  The MM_MCICUEPOINT message 
  2615. parameters contain the device ID of the device context that generated the cue 
  2616. point message, as well as the media position and an additional 
  2617. application-defined parameter that can be specified when the cue point is set. 
  2618. Although the media position specified by the application on the 
  2619. MCI_SET_CUEPOINT message is in the currently set device units, the media 
  2620. position returned on the MM_MCICUEPOINT message is always in MMTIME units. 
  2621. MMTIME units are used because the time format set when the cue point is set 
  2622. might not be the same time format set when the cue point is encountered. 
  2623.  
  2624. The maximum number of cue points that can be set in a device context is defined 
  2625. by the implementation of the logical device. Devices generally support up to 20 
  2626. cue points per device context. 
  2627.  
  2628.  
  2629. ΓòÉΓòÉΓòÉ 3.7.2. Position Advises ΓòÉΓòÉΓòÉ
  2630.  
  2631. In addition to notification messages at discrete locations in the media, 
  2632. periodic notification of elapsed media time can also be requested.  These 
  2633. periodic messages, referred to as "position advise" messages, are requested for 
  2634. a device context based on a specified time interval.  Position advise messages 
  2635. are requested by issuing the MCI_SET_POSITION_ADVISE message to a device 
  2636. context as shown in the following code fragment. 
  2637.  
  2638.         MCI_OPEN_PARMS   mop;
  2639. static  MCI_PLAY_PARMS   mpp;      /* parms for MCI_PLAY         */
  2640. static  MCI_POSITION_PARMS mppPos; /* parms for
  2641.                                       MCI_SET_POSITION_ADVISE */
  2642.  
  2643. iState = ST_PLAYING;           /* Set state to reflect play mode   */
  2644.  
  2645. mppPos.hwndCallback = hwndMainDlg;
  2646. mppPos.ulUnits    = 1500;      /* Request position advise messages */
  2647. mppPos.usUserParm = usPositionUP;
  2648. mppPos.Reserved0  = 0;
  2649. mciSendCommand    ( mop.usDeviceID,
  2650.                     MCI_SET_POSITION_ADVISE,
  2651.                     MCI_NOTIFY | MCI_SET_POSITION_ADVISE_ON,
  2652.                     (PVOID) &mppPos,
  2653.                     UP_POSITION );
  2654.  
  2655. This causes MM_MCIPOSITIONCHANGE messages to be returned to the application 
  2656. window specified in the MCI_POSITION_PARMS structure at the requested frequency 
  2657. as media time passes in the device context.  Only one position advise frequency 
  2658. may be active for a device context, and having position advise notification 
  2659. active in one device context does not cause messages to be generated in other 
  2660. device contexts.  Position advise messages can be set only when a device 
  2661. element is loaded in the device context, and are reset when a new device 
  2662. element is loaded. 
  2663.  
  2664. Like MM_MCICUEPOINT messages, MM_MCIPOSITIONCHANGE message parameters contain 
  2665. the device ID of the device context that generated the position advise message, 
  2666. as well as the media position and an additional application-defined parameter 
  2667. that can be specified when the position advise notification is requested. 
  2668. Although the media position interval (frequency) specified by the application 
  2669. on the MCI_SET_POSITION_ADVISE message is in the currently set device units, 
  2670. the media position returned on the MM_MCIPOSITIONCHANGE message is always in 
  2671. MMTIME units. MMTIME units are used because the time format set when the 
  2672. position advise notification is set might not be the same time format set when 
  2673. the position advise notification messages are returned. 
  2674.  
  2675. Position advise notifications are generated only during playback or recording. 
  2676. MM_MCIPOSITIONCHANGE messages are usually not generated during seek operations 
  2677. initiated by the application. The exception is a device, such as a tape 
  2678. recorder, that has a discernible position during the seek operation.  A device 
  2679. like this can generate position advise messages as the media is traversed, to 
  2680. indicate the progress of the seek operation. 
  2681.  
  2682. The following code fragment shows how the Caption Sample application handles 
  2683. the MM_MCIPOSITIONCHANGE message. When the Caption Sample application receives 
  2684. a position change message, it updates its media position slider arm allowing 
  2685. the application to advance the media position slider smoothly as the audio 
  2686. plays. 
  2687.  
  2688. case MM_MCIPOSITIONCHANGE:
  2689.  /*
  2690.   * This message will be returned (in MMTIME) to the application
  2691.   * whenever the audio position changes. This time will be used to
  2692.   * increment the audio position slider. This message is only
  2693.   * generated during playback.
  2694.   */
  2695.  if ( eState == ST_PLAYING )
  2696.  {
  2697.     ulTime = (ULONG) LONGFROMMP(mp2);
  2698.  
  2699.     /*
  2700.      * Get the new slider arm position and set it.
  2701.      */
  2702.     sArmPosition =
  2703.        (SHORT) ( ( ulTime * ( sAudioArmRange - 1) ) / ulAudioLength );
  2704.     WinSendMsg(
  2705.        hwndAudioSlider,
  2706.        SLM_SETSLIDERINFO,
  2707.        MPFROM2SHORT( SMA_SLIDERARMPOSITION, SMA_RANGEVALUE ),
  2708.        MPFROMSHORT( sArmPosition ));
  2709.  }
  2710.  return 0;
  2711.  
  2712.  
  2713. ΓòÉΓòÉΓòÉ 3.8. System Values ΓòÉΓòÉΓòÉ
  2714.  
  2715. The OS/2 multimedia system provides a number of system-wide values that can be 
  2716. queried and set by applications. Because OS/2 multimedia applications such as 
  2717. Volume Control and Multimedia Setup allow users to set system values, it is 
  2718. recommended that applications only query the settings users have selected. The 
  2719. following table describes the system values that can be queried and set using 
  2720. mciQuerySysValue and mciSetSysValue. 
  2721.  
  2722. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2723. ΓöéSystem Value        ΓöéDescription                                  Γöé
  2724. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2725. ΓöéMSV_CLOSEDCAPTION   ΓöéQuery or set the current state of a          Γöé
  2726. Γöé                    Γöécaptioning flag.                             Γöé
  2727. Γöé                    ΓöéBy querying the setting of this flag, an     Γöé
  2728. Γöé                    Γöéapplication can determine whether to display Γöé
  2729. Γöé                    Γöétext along with audio, for example, for a    Γöé
  2730. Γöé                    Γöéhearing-impaired user.                       Γöé
  2731. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2732. ΓöéMSV_MASTERVOLUME    ΓöéQuery or set the current master audio level. Γöé
  2733. Γöé                    ΓöéThis value acts as a "multiplier" of the     Γöé
  2734. Γöé                    Γöéindividual volume levels of each device      Γöé
  2735. Γöé                    Γöécontext, allowing one application to control Γöé
  2736. Γöé                    Γöéthe volume for a number of open devices or   Γöé
  2737. Γöé                    Γöéelements.                                    Γöé
  2738. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2739. ΓöéMSV_HEADPHONES      ΓöéReserved for future use.                     Γöé
  2740. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2741. ΓöéMSV_SPEAKERS        ΓöéReserved for future use.                     Γöé
  2742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2743. ΓöéMSV_WORKPATH        ΓöéQuery or set the directory for storing of    Γöé
  2744. Γöé                    Γöétemporary files by the media driver.         Γöé
  2745. Γöé                    ΓöéThis value can be used to point to, for      Γöé
  2746. Γöé                    Γöéexample, a directory on the hard disk that   Γöé
  2747. Γöé                    Γöéholds waveform data from a recording         Γöé
  2748. Γöé                    Γöéoperation.                                   Γöé
  2749. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2750. ΓöéMSV_SYSQOSERRORFLAG ΓöéQuery the Quality of Service (QOS) error     Γöé
  2751. Γöé                    Γöéflag.                                        Γöé
  2752. Γöé                    ΓöéBy querying this flag, an application can    Γöé
  2753. Γöé                    Γöédetermine an error occuring during band-widthΓöé
  2754. Γöé                    Γöéreservation.                                 Γöé
  2755. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2756. ΓöéMSV_SYSQOSVALUE     ΓöéQuery or set the QOS specification value.    Γöé
  2757. Γöé                    ΓöéThis system-wide Quality of Service (QOS)    Γöé
  2758. Γöé                    Γöéspecification value is used for band-width   Γöé
  2759. Γöé                    Γöéreservation (for example, bytes per second)  Γöé
  2760. Γöé                    Γöéover the network.                            Γöé
  2761. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2762.  
  2763. The following code fragment demonstrates how to obtain the multimedia work 
  2764. path. 
  2765.  
  2766. CHAR szWorkpath[CCHMAXPATH] ;   /* Work path for temporary files */
  2767.  
  2768. if ( mciQuerySysValue( MSV_WORKPATH, szWorkPath ) )
  2769.   {
  2770.   /* mciQuerySysValue was successful, szWorkPath now */
  2771.   /* contains the multimedia workpath                */
  2772.   }
  2773.  
  2774.  
  2775. ΓòÉΓòÉΓòÉ 3.8.1. Clock Sample Program Caption Query ΓòÉΓòÉΓòÉ
  2776.  
  2777. When it is time to chime the clock, the Clock Sample program checks the system 
  2778. captioning flag to determine whether or not it should display a visual chime 
  2779. while the audio chime is playing.  The Clock program sets the global variable 
  2780. fClosedCaptionIsSet to store the value of the system captioning flag. 
  2781.  
  2782.  /*
  2783.   * If the Captioning Flag indicates that the bell should be
  2784.   * animated (swung), the region of the presentation space
  2785.   * that contains the bell bit map is to be invalidated so that a
  2786.   * WM_PAINT will be sent to draw the bells.
  2787.   */
  2788.  mciQuerySysValue( MSV_CAPTION, (PVOID)&fCaptionIsSet );
  2789.  
  2790.  
  2791. ΓòÉΓòÉΓòÉ 4. Multimedia Logical Devices ΓòÉΓòÉΓòÉ
  2792.  
  2793. OS/2 multimedia represents audio adapters, CD-ROM drives, videodiscs and other 
  2794. real hardware devices as logical media devices that are managed by the Media 
  2795. Device Manager (MDM). Media devices are a logical representation of the 
  2796. function available from either a real hardware device, software emulation in 
  2797. combination with real hardware, or pure software emulation. The actual 
  2798. implementation is not relevant to an application, because the multimedia system 
  2799. provides device independence with the mciSendCommand and mciSendString 
  2800. interfaces. 
  2801.  
  2802. The following logical devices are currently supported in this release of OS/2. 
  2803. Additional media devices may be available from IBM or from other companies as 
  2804. OS/2 multimedia is completely extensible at all levels. 
  2805.  
  2806.      Amplifier mixer 
  2807.      Waveform audio 
  2808.      MIDI sequencer 
  2809.      CD audio 
  2810.      CD-XA 
  2811.      Videodisc 
  2812.      Digital video 
  2813.  
  2814.  Frequently there is a one-to-one correspondence between a real hardware 
  2815.  device, such as a CD-ROM drive and its associated media device. Other hardware 
  2816.  may be represented as multiple logical devices. For example, a multi-function 
  2817.  audio adapter can be represented as waveform audio, MIDI sequencer, and 
  2818.  amplifier-mixer media devices. 
  2819.  
  2820.  The following sections describe the function and typical use of each media 
  2821.  device, plus the software model presented to the application developer. 
  2822.  
  2823.  
  2824. ΓòÉΓòÉΓòÉ 4.1. Multimedia Information and OS/2 Multimedia Connectors ΓòÉΓòÉΓòÉ
  2825.  
  2826. A connector is a software representation of the physical way in which 
  2827. multimedia data moves from one device to another.  Simple examples are the 
  2828. headphone jack on a CD-ROM player, or the speakers jack on an audio adapter. 
  2829. If an audio card has both a speaker and a line OUT jack, it is desirable to let 
  2830. an application choose the destination of the audio, while remaining independent 
  2831. from the actual hardware implementation. 
  2832.  
  2833. OS/2 multimedia connectors provide this function by allowing an application to 
  2834. query which connectors are supported by a logical device, and manipulate 
  2835. whether or not information is flowing through the connector. The connectors for 
  2836. a logical device can be accessed either by number or by a symbolic connector 
  2837. type.  When specifying a symbolic type such as microphone or line IN, a number 
  2838. can also be specified to select the first connector, second connector, and so 
  2839. on, of that specific connector type. The MCI_CONNECTORINFO message can be used 
  2840. to determine which connectors are supported by a device, whereas the 
  2841. MCI_CONNECTOR message can be used to enable, disable, or query the state of a 
  2842. particular connector. 
  2843.  
  2844. Although connectors are typically associated with the representation of 
  2845. externally visible audio and video jacks on multimedia equipment, another 
  2846. category of connectors can represent the flow of information within a computer. 
  2847. For example, a connector on an audio adapter can be attached to the internal PC 
  2848. speaker.  A more subtle example is the flow of digital audio information into 
  2849. an audio adapter.  This information could come from a file, system memory, or 
  2850. another device.  Connectors of this category are referred to as stream 
  2851. connectors to convey the idea of a logical stream of information flowing from 
  2852. one device to another. 
  2853.  
  2854.  
  2855. ΓòÉΓòÉΓòÉ 4.2. Connector Types ΓòÉΓòÉΓòÉ
  2856.  
  2857. Each connector is defined by specific type or name, so that applications can 
  2858. make requests symbolically instead of using an absolute connector number that 
  2859. is device dependent.  If an application specifies only a connector type, then 
  2860. the default connector of that type is selected on the device.  Both a type and 
  2861. a number may be specified to select connectors when more than one connector of 
  2862. the same type exists on a device. 
  2863.  
  2864. The following table describes connector types and typical uses. 
  2865.  
  2866. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2867. ΓöéConnector Type            ΓöéName         ΓöéDescription                        Γöé
  2868. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2869. ΓöéMCI_MIDI_STREAM_CONNECTOR Γöémidi stream  ΓöéDigital input or output for the    Γöé
  2870. Γöé                          Γöé             Γöésequencer device.  This informationΓöé
  2871. Γöé                          Γöé             Γöéis typically streamed to an        Γöé
  2872. Γöé                          Γöé             Γöéamplifier-mixer logical device.    Γöé
  2873. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2874. ΓöéMCI_CD_STREAM_CONNECTOR   Γöécd stream    ΓöéDigital output from a CD-ROM drive Γöé
  2875. Γöé                          Γöé             Γöécapable of reading the CD-DA data  Γöé
  2876. Γöé                          Γöé             Γöédirectly off the disc.  This       Γöé
  2877. Γöé                          Γöé             Γöéinformation is typically streamed  Γöé
  2878. Γöé                          Γöé             Γöéto an amplifier-mixer logical      Γöé
  2879. Γöé                          Γöé             Γöédevice.                            Γöé
  2880. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2881. ΓöéMCI_XA_STREAM_CONNECTOR   Γöéxa stream    ΓöéThe flow of digital audio          Γöé
  2882. Γöé                          Γöé             Γöéinformation from a CD-ROM/XA drive Γöé
  2883. Γöé                          Γöé             Γöécapable of streaming the ADPCM dataΓöé
  2884. Γöé                          Γöé             Γöéinternally.  This information is   Γöé
  2885. Γöé                          Γöé             Γöétypically streamed to an           Γöé
  2886. Γöé                          Γöé             Γöéamplifier-mixer logical device.    Γöé
  2887. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2888. ΓöéMCI_WAVE_STREAM_CONNECTOR Γöéwave stream  ΓöéDigital input or output for the    Γöé
  2889. Γöé                          Γöé             Γöéwaveaudio device. This information Γöé
  2890. Γöé                          Γöé             Γöéis typically streamed to an        Γöé
  2891. Γöé                          Γöé             Γöéamplifier-mixer logical device.    Γöé
  2892. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2893. ΓöéMCI_AMP_STREAM_CONNECTOR  Γöéamp stream   ΓöéThe flow of information to an      Γöé
  2894. Γöé                          Γöé             Γöéamplifier-mixer device.  Typically Γöé
  2895. Γöé                          Γöé             Γöéthis information comes from anotherΓöé
  2896. Γöé                          Γöé             Γöélogical device and can include     Γöé
  2897. Γöé                          Γöé             ΓöéMIDI, and various kinds of digital Γöé
  2898. Γöé                          Γöé             Γöéaudio.                             Γöé
  2899. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2900. ΓöéMCI_HEADPHONES_CONNECTOR  Γöéheadphones   ΓöéThe connector on the device labeledΓöé
  2901. Γöé                          Γöé             Γöéfor, or typically used, to attach  Γöé
  2902. Γöé                          Γöé             Γöéheadphones to the device.          Γöé
  2903. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2904. ΓöéMCI_SPEAKERS_CONNECTOR    Γöéspeakers     ΓöéThe connector on the device labeledΓöé
  2905. Γöé                          Γöé             Γöéfor, or typically used, to attach  Γöé
  2906. Γöé                          Γöé             Γöéspeakers to the device.            Γöé
  2907. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2908. ΓöéMCI_MICROPHONE_CONNECTOR  Γöémicrophone   ΓöéThe connector on the device labeledΓöé
  2909. Γöé                          Γöé             Γöéfor, or typically used, to attach aΓöé
  2910. Γöé                          Γöé             Γöémicrophone to the device.          Γöé
  2911. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2912. ΓöéMCI_LINE_IN_CONNECTOR     Γöéline in      ΓöéThe connector on the device labeledΓöé
  2913. Γöé                          Γöé             Γöéfor, or typically used to provide  Γöé
  2914. Γöé                          Γöé             Γöéline level input to the device.    Γöé
  2915. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2916. ΓöéMCI_LINE_OUT_CONNECTOR    Γöéline out     ΓöéThe connector on the device labeledΓöé
  2917. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  2918. Γöé                          Γöé             Γöéline level output from the device. Γöé
  2919. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2920. ΓöéMCI_VIDEO_IN_CONNECTOR    Γöévideo in     ΓöéThe connector on the device labeledΓöé
  2921. Γöé                          Γöé             Γöéfor, or typically used to provide  Γöé
  2922. Γöé                          Γöé             Γöévideo input to the device.         Γöé
  2923. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2924. ΓöéMCI_VIDEO_OUT_CONNECTOR   Γöévideo out    ΓöéThe connector on the device labeledΓöé
  2925. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  2926. Γöé                          Γöé             Γöévideo output from the device.      Γöé
  2927. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2928. ΓöéMCI_PHONE_SET_CONNECTOR   Γöéphone set    ΓöéThe connector on the device labeledΓöé
  2929. Γöé                          Γöé             Γöéfor, or typically used, to attach aΓöé
  2930. Γöé                          Γöé             Γöéphone set to the device.           Γöé
  2931. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2932. ΓöéMCI_PHONE_LINE_CONNECTOR  Γöéphone line   ΓöéThe connector on the device labeledΓöé
  2933. Γöé                          Γöé             Γöéfor, or typically used, to attach  Γöé
  2934. Γöé                          Γöé             Γöéan external phone line to the      Γöé
  2935. Γöé                          Γöé             Γöédevice.                            Γöé
  2936. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2937. ΓöéMCI_AUDIO_IN_CONNECTOR    Γöéaudio in     ΓöéThe connector on the device labeledΓöé
  2938. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  2939. Γöé                          Γöé             Γöéaudio input to the device.         Γöé
  2940. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2941. ΓöéMCI_AUDIO_OUT_CONNECTOR   Γöéaudio out    ΓöéThe connector on the device labeledΓöé
  2942. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  2943. Γöé                          Γöé             Γöéaudio output from the device.      Γöé
  2944. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2945. ΓöéMCI_UNIVERSAL_CONNECTOR   Γöéuniversal    ΓöéA connector on a device which does Γöé
  2946. Γöé                          Γöé             Γöénot fall into any of the other     Γöé
  2947. Γöé                          Γöé             Γöécategories.  This connector type   Γöé
  2948. Γöé                          Γöé             Γöémay be used to access device       Γöé
  2949. Γöé                          Γöé             Γöédependent function.  The           Γöé
  2950. Γöé                          Γöé             Γöémanufacturer of the device should  Γöé
  2951. Γöé                          Γöé             Γöédefine the exact use of this       Γöé
  2952. Γöé                          Γöé             Γöéconnector.                         Γöé
  2953. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2954.  
  2955.  
  2956. ΓòÉΓòÉΓòÉ 4.3. A Connector Example Using the IBM M-Audio Adapter ΓòÉΓòÉΓòÉ
  2957.  
  2958. The following figure illustrates how the capabilities of an audio card might be 
  2959. modeled as an OS/2 amplifier-mixer device using connectors.  This example uses 
  2960. the IBM M-Audio Capture and Playback Adapter, however a model can easily be 
  2961. defined for any manufacturer's audio card.  The number and type of connectors 
  2962. may vary. 
  2963.  
  2964. In this particular model, the speakers(1) connector is the default speakers 
  2965. connector and represents the physical speaker jack on the M-Audio card.  The 
  2966. speakers(2) connector represents the internal connection to the PC speaker. 
  2967. The amp stream connector represents the flow of digital information to and from 
  2968. the audio card. 
  2969.  
  2970.  
  2971. ΓòÉΓòÉΓòÉ 4.4. Establishing Connections between Devices ΓòÉΓòÉΓòÉ
  2972.  
  2973. A connection is the establishment of a flow of information from one device 
  2974. connector to a compatible connector on another device.  One example of a 
  2975. connection is the attachment of a speaker to an audio card with speaker wire. 
  2976. Typically, an application might enable the speaker connector on an audio card, 
  2977. causing the flow of information out of the speaker connector.  If you have 
  2978. connected the wire, then the audio is heard.  In this case the multimedia 
  2979. system must rely on a person to make the actual connection. 
  2980.  
  2981. Another category of connection exists where the connection is made internally 
  2982. in the computer, typically through the transfer of digital information from one 
  2983. media device to another.  For instance, the waveaudio media device has a 
  2984. connection to its associated amplifier mixer device. 
  2985.  
  2986.  
  2987. ΓòÉΓòÉΓòÉ 4.5. Default and Device Context Connections ΓòÉΓòÉΓòÉ
  2988.  
  2989. Device connections are usually automatically established by the media device 
  2990. when the device is opened.  The choice of connection is determined by a default 
  2991. established during installation of the media driver, and can be re-established 
  2992. using the MCI_DEFAULT_CONNECTION message. 
  2993.  
  2994. Once opened, the media device may open and connect to another media device to 
  2995. provide the complete function of the originally opened device to the 
  2996. application.  This is transparent to the calling application.  One example is 
  2997. the waveaudio device, which uses a connected amplifier-mixer device to actually 
  2998. produce sound from the digital audio stream.  The waveaudio device also uses 
  2999. the services of the amplifier-mixer device to set the volume. 
  3000.  
  3001. While some services of the connected device can be surfaced in the definition 
  3002. of the originally opened device, the connected device can also provide some 
  3003. extended features beyond those required by the original device.  If the 
  3004. application wishes to access these extended features, it can get the handle to 
  3005. the particular device context or instance of the connected device, using the 
  3006. MCI_CONNECTION message. 
  3007.  
  3008. Note the subtle difference between a default connection and a device context 
  3009. connection.  A default connection is the name of a connected device, whereas a 
  3010. device context connection is the actual handle to a particular instance of an 
  3011. opened device.  An example of this is a waveaudio01 device that has a default 
  3012. connection to an ampmix01 device.  When the waveaudio01 device is opened, it 
  3013. automatically opens the ampmix01 device, creating an instance of each device. 
  3014. Because devices may be shared in OS/2 multimedia, the waveaudio01 device can be 
  3015. opened again by another application and two new instances will be created. 
  3016. Although the default connection is the same in both cases, the device context 
  3017. connections are different. 
  3018.  
  3019.  
  3020. ΓòÉΓòÉΓòÉ 4.6. Connectors Supported by Media Drivers ΓòÉΓòÉΓòÉ
  3021.  
  3022. Each implementation of a media device defines the connectors that it supports. 
  3023. This information is maintained in the media driver and can vary with the 
  3024. underlying hardware. 
  3025.  
  3026. The following table lists each media device and the connector types applicable 
  3027. to each device.  The actual number and types of connectors in each device can 
  3028. vary from one implementation to another. 
  3029.  
  3030. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3031. ΓöéDevice Type    ΓöéConnectors                                   Γöé
  3032. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3033. Γöéampmix         Γöéamp stream, headphones, speakers, microphone,Γöé
  3034. Γöé               Γöéline in, line out                            Γöé
  3035. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3036. Γöécdaudio        Γöécd stream, headphones                        Γöé
  3037. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3038. Γöécdxa           Γöéxa stream                                    Γöé
  3039. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3040. Γöédigitalvideo   Γöéheadphones, speakers, microphone, line in,   Γöé
  3041. Γöé               Γöéline out, audio in, audio out                Γöé
  3042. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3043. Γöéheadphones     Γöéaudio in                                     Γöé
  3044. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3045. Γöémicrophone     Γöéaudio out                                    Γöé
  3046. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3047. Γöésequencer      Γöémidi stream, headphones, speakers, line out  Γöé
  3048. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3049. Γöévideodisc      Γöévideo out, line out                          Γöé
  3050. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3051. Γöéspeakers       Γöéaudio in                                     Γöé
  3052. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3053. Γöéwaveaudio      Γöéwave stream, headphones, speakers,           Γöé
  3054. Γöé               Γöémicrophone, line in, line out                Γöé
  3055. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3056.  
  3057.  
  3058. ΓòÉΓòÉΓòÉ 4.7. Allowable Connections for Connector Types ΓòÉΓòÉΓòÉ
  3059.  
  3060. For a connection to exist between two media devices, the connectors on each 
  3061. device must be of compatible types. For instance, a connection could be 
  3062. established between the line OUT connector on one device and the line IN 
  3063. connector on another device, however a connection between line OUT and video IN 
  3064. is prohibited. This mechanism will eliminate the majority of incorrect 
  3065. connections. The following table lists the allowable connections based on 
  3066. connector types.  These connections are allowed in either direction. Please 
  3067. note that this table should be read as meaning that a device which has a 
  3068. connector of the type in the first column can connect to a device which has a 
  3069. connector of the type in the second column. 
  3070.  
  3071. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3072. Γöéamp stream     Γöé<->Γöéwave stream    Γöé
  3073. Γöé               Γöé   Γöémidi stream    Γöé
  3074. Γöé               Γöé   Γöécd stream      Γöé
  3075. Γöé               Γöé   Γöéxa stream      Γöé
  3076. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3077. Γöéline in        Γöé<->Γöéline out       Γöé
  3078. Γöé               Γöé   Γöéaudio out      Γöé
  3079. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3080. Γöéaudio in       Γöé<->Γöéheadphones     Γöé
  3081. Γöé               Γöé   Γöéspeakers       Γöé
  3082. Γöé               Γöé   Γöéline out       Γöé
  3083. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3084. Γöévideo in       Γöé<->Γöévideo out      Γöé
  3085. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3086. Γöéheadphones     Γöé<->Γöéaudio in       Γöé
  3087. Γöé               Γöé   Γöéline in        Γöé
  3088. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3089. Γöéspeakers       Γöé<->Γöéaudio in       Γöé
  3090. Γöé               Γöé   Γöéline in        Γöé
  3091. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3092. Γöémicrophone     Γöé<->Γöéaudio out      Γöé
  3093. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3094. Γöéphone line     Γöé<->Γöéphone set      Γöé
  3095. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3096.  
  3097. The connections in the table shown above are based on connector types, not 
  3098. device types. The list of connections might appear incorrect if the connector 
  3099. types are misinterpreted as device types. For example, "headphones <-> audio 
  3100. in" might be misinterpreted as meaning that headphones can be connected to an 
  3101. audio input. Referring to however, we see that the HEADPHONE device has a 
  3102. connector of type audio in.  This connector is analogous to the plug on the 
  3103. headphones and, from the perspective of the headphones, it is input.  We also 
  3104. see that the AMPMIX and CDAUDIO devices have connectors of type headphones. The 
  3105. connection is correct, because headphones can be connected to either the CD 
  3106. player (CDAUDIO) or to the audio adapter (AMPMIX). 
  3107.  
  3108.  
  3109. ΓòÉΓòÉΓòÉ 5. Amplifier-Mixer Device ΓòÉΓòÉΓòÉ
  3110.  
  3111. The OS/2 amplifier-mixer (ampmix) device is similar to a home stereo 
  3112. amplifier-mixer.  Components are plugged into the amplifier-mixer so that audio 
  3113. signals can be transferred to a pair of attached speakers, headphones, or 
  3114. perhaps another device. A comparable example of connecting to another device is 
  3115. playing an old phonograph record, and recording the sound on a new DAT (Digital 
  3116. Audio Tape) deck.  The ampmix is the center of all audio signals and provides 
  3117. input or output switching and sound shaping services such as volume, treble, or 
  3118. bass control. 
  3119.  
  3120. The logical ampmix device in OS/2 supports both analog and digital devices. 
  3121. Other OS/2 multimedia logical devices may be connected to the ampmix device. 
  3122. Similar to the previous example, the CD audio logical device could provide an 
  3123. analog input to the ampmix device, which could then be recorded by the digital 
  3124. waveform audio device. 
  3125.  
  3126. Both a logical ampmix device and the audio adapter performs all the functions 
  3127. surfaced by the ampmix device.  Two important points are the speaker and amp 
  3128. stream connectors. 
  3129.  
  3130. Although there is actually no visible speaker jack on the back of the audio 
  3131. card, it is a convenient fiction for an application to view the PC internal 
  3132. speaker as another set of speakers that might be plugged into the back of the 
  3133. audio card.  Using the previously defined concept of a connector, an 
  3134. application can view all flows of information into and out of the ampmix device 
  3135. in a similar fashion.  Selecting the internal speaker as opposed to the 
  3136. external speakers may require the ampmix device to issue a completely different 
  3137. set of instructions to the actual hardware device.  The application, however, 
  3138. remains completely device independent. 
  3139.  
  3140. The other features of the ampmix device are provided by either issuing commands 
  3141. to the hardware device, or emulating in software.  One example of software 
  3142. emulation is the support of changing the volume over a period of time, or fade 
  3143. in/fade out.  The audio card may only support setting the volume to a 
  3144. particular value, however the ampmix device can send a series of values to 
  3145. achieve the fade effect. 
  3146.  
  3147.  
  3148. ΓòÉΓòÉΓòÉ 5.1. The Amp Stream Connector ΓòÉΓòÉΓòÉ
  3149.  
  3150. The amp stream connector represents the flow of digital information to and from 
  3151. the ampmix device.  Again similar to home stereo amplifier-mixers, the ampmix 
  3152. device by itself is not especially notable until another device is attached. 
  3153. Information is transferred from the device and played back on a pair of 
  3154. attached speakers.  Note that the ampmix device is a conduit of information, 
  3155. and relies on another device to provide the flow of information.  Therefore, 
  3156. commands for the transport of information (such as play, seek, or stop), are 
  3157. sent to the attached device.  Commands for transforming the information (such 
  3158. as treble or bass) are sent directly to the ampmix device. 
  3159.  
  3160. As a nicety for applications, the attached device will provide volume control, 
  3161. so that the application need not provide ampmix functions unless some advanced 
  3162. audio functions are required.  The volume command is transparently routed to 
  3163. the attached ampmix device.  If the application needs to talk directly to the 
  3164. ampmix device, the value of the stream connector may be queried using the 
  3165. MCI_CONNECTION message, which returns a device context connection.  If the 
  3166. string interface is being used, an alias can be established for the connected 
  3167. device. Ampmix commands may then be sent directly to the ampmix device. 
  3168.  
  3169. Some devices also provide a connector service, which also alleviates the need 
  3170. to talk directly to the ampmix device for frequently requested function.  An 
  3171. example of this is the waveaudio device, which attempts to process requests for 
  3172. speakers and several other connector types.  If the service is available from 
  3173. the associated ampmix device it is routed; otherwise, the function fails.  The 
  3174. connectors and connector services provided by each OS/2 multimedia logical 
  3175. device are discussed in the section for that device. 
  3176.  
  3177.  
  3178. ΓòÉΓòÉΓòÉ 5.2. Sharing the Amplifier-Mixer Device ΓòÉΓòÉΓòÉ
  3179.  
  3180. Because many components of OS/2 multimedia utilize the amplifier-mixer device, 
  3181. it is typically opened shareable so that several devices can use the ampmix 
  3182. device simultaneously, or serially, in an application-window-focus driven 
  3183. sharing scheme. The Media Device Manager (MDM) is responsible for allocating 
  3184. the resources of the underlying hardware correctly and informs an application 
  3185. with the MM_MCIPASSDEVICE message whenever use of the ampmix device is gained 
  3186. or lost. 
  3187.  
  3188. When other media devices in an application use the ampmix device, the 
  3189. amplifier-mixer becomes a source of contention, depending on the capabilities 
  3190. of the underlying audio adapter.  For example, the IBM M-Audio adapter supports 
  3191. the simultaneous playback of two mono 22 kHz PCM waveforms.  However, if a 
  3192. third waveform is started, one of the previous two waveforms must be suspended. 
  3193. The application that opened the waveform audio (waveaudio) device receives a 
  3194. MM_MCIPASSDEVICE message with an event of MCI_LOSING_USE. Following completion 
  3195. of the third waveform, the second waveform is automatically restored and can 
  3196. then play to completion.  See Device Sharing By Applications for information on 
  3197. device sharing. 
  3198.  
  3199. The OS/2 multimedia system manages all device sharing, and informs the 
  3200. application when the device is temporarily unavailable. 
  3201.  
  3202.  
  3203. ΓòÉΓòÉΓòÉ 5.3. Audio Shaping Features ΓòÉΓòÉΓòÉ
  3204.  
  3205. The OS/2 ampmix device provides the following control of audio signals.  Other 
  3206. companies may develop ampmix devices for use in OS/2 multimedia that provide 
  3207. additional capabilities.  Ampmix features are accessed using the MCI_SET 
  3208. command.  Support of these features can vary by manufacturer.  If a feature is 
  3209. not supported, MCIERR_UNSUPPORTED_FLAG will be returned. 
  3210.  
  3211.  volume        Sets volume as a percentage of the maximum achievable effect. 
  3212.                Volume of the left and right channel for stereo signals may be 
  3213.                controlled independently.  An over parameter may also specified 
  3214.                to cause the volume to fade in or fade out over a specified 
  3215.                period of time. 
  3216.  
  3217.  treble        Sets the treble as a percentage of the maximum achievable 
  3218.                effect. 
  3219.  
  3220.  bass          Sets the bass as a percentage of the maximum achievable effect. 
  3221.  
  3222.  balance       Sets the final output balance.  Zero is full left balance, 100 
  3223.                is full right balance. 
  3224.  
  3225.  pitch         Sets the pitch as a percentage of the maximum achievable effect. 
  3226.  
  3227.  gain          Sets the gain as a percentage of the maximum achievable effect. 
  3228.  
  3229.  monitor       Controls whether or not the signal from an input device is heard 
  3230.                when it is being routed to another device for recording. 
  3231.  
  3232.  The values for all of these functions may be retrieved using the MCI_STATUS 
  3233.  message. 
  3234.  
  3235.  
  3236. ΓòÉΓòÉΓòÉ 5.4. Master Volume and the Ampmix Device ΓòÉΓòÉΓòÉ
  3237.  
  3238. The maximum volume level of all logical devices in the system are controlled by 
  3239. the Volume Control application supplied with OS/2 multimedia. The volume 
  3240. control application sets a scale by which all subsequent volume commands to the 
  3241. ampmix device is biased.  For instance, if the volume control sets the master 
  3242. volume at 50%, then all volume levels are cut in half. 
  3243.  
  3244. Some devices may only support two levels of volume (on/off).  These devices are 
  3245. off when the master volume is set to zero, and on at any other value. 
  3246.  
  3247. Note:  While the MCI_MASTERAUDIO message can be sent by any application, only 
  3248.        the master volume application or a replacement should utilize this 
  3249.        message to set the master volume.  Master volume should only be 
  3250.        controlled at the discretion of an end user as implemented in the OS/2 
  3251.        multimedia Volume Control application. A parameter of the 
  3252.        MCI_MASTERAUDIO message allows an application or a media driver to query 
  3253.        the master volume level. 
  3254.  
  3255.  
  3256. ΓòÉΓòÉΓòÉ 5.5. Amplifier-Mixer Command Messages ΓòÉΓòÉΓòÉ
  3257.  
  3258. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3259. ΓöéMessage             ΓöéDescription                                  Γöé
  3260. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3261. ΓöéMCI_CONNECTOR       ΓöéEnables, disables, or queries the status of aΓöé
  3262. Γöé                    Γöéconnector on a device.                       Γöé
  3263. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3264. ΓöéMCI_CLOSE           ΓöéCloses the amp mixer instance.               Γöé
  3265. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3266. ΓöéMCI_GETDEVCAPS      ΓöéGets device capabilities.                    Γöé
  3267. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3268. ΓöéMCI_INFO            ΓöéGets device information.                     Γöé
  3269. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3270. ΓöéMCI_OPEN            ΓöéOpens an instance of the amp mixer.          Γöé
  3271. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3272. ΓöéMCI_SET             ΓöéSets the following parameters, using the     Γöé
  3273. Γöé                    ΓöéMCI_AMP_SET_PARMS structure:                 Γöé
  3274. Γöé                    Γöé-Channel number (right, left, or all         Γöé
  3275. Γöé                    Γöéchannels)                                    Γöé
  3276. Γöé                    Γöé-Volume, treble, bass, balance, pitch, or    Γöé
  3277. Γöé                    Γöégain as a percentage of the maximum          Γöé
  3278. Γöé                    Γöéachievable effect.                           Γöé
  3279. Γöé                    Γöé-Delay time for vectored changes in          Γöé
  3280. Γöé                    Γöémilliseconds.                                Γöé
  3281. Γöé                    Γöé-Monitor control.                            Γöé
  3282. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3283. ΓöéMCI_STATUS          ΓöéGets device status.                          Γöé
  3284. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3285.  
  3286.  
  3287. ΓòÉΓòÉΓòÉ 5.6. Ampmix Connectors ΓòÉΓòÉΓòÉ
  3288.  
  3289. The number and type of connectors varies by manufacturer.  To determine which 
  3290. connectors are supported an application may issue the MCI_CONNECTORINFO 
  3291. message.  The following connectors are typically supported by ampmix devices: 
  3292.  
  3293.      amp stream 
  3294.      speakers 
  3295.      line out 
  3296.      headphones 
  3297.      line in 
  3298.      microphone 
  3299.  
  3300.  
  3301. ΓòÉΓòÉΓòÉ 5.6.1. M-Audio Adapter Specifics ΓòÉΓòÉΓòÉ
  3302.  
  3303.    1. The speakers (1) connector is the external speakers jack on the back of 
  3304.       the card. The speakers (2) connector is really the internal PC speaker. 
  3305.  
  3306.    2. The Line OUT and speakers (1) connectors can be enabled or disabled by 
  3307.       the ampmix device, although the adapter is incapable of actually 
  3308.       switching the output.  The ampmix device does report that the connector 
  3309.       is actually enabled or disabled. 
  3310.  
  3311.    3. The speakers(2) connector can be enabled or disabled, resulting in the PC 
  3312.       internal speaker being turned on or off. 
  3313.  
  3314.    4. The microphone and line IN connectors are mutually exclusive. Enabling 
  3315.       one connector automatically disables the other.  Disabling both 
  3316.       connectors automatically enables the microphone. 
  3317.  
  3318.    5. The amp stream connector represents the transfer of digital audio 
  3319.       information to and from the M-Audio card.  This connector is always 
  3320.       enabled. 
  3321.  
  3322.    6. The M-Audio adapter does not support independent control of volume for 
  3323.       the left and right channels of a stereo signal.  Any device connected to 
  3324.       an M-Audio amplifier-mixer device returns MCIERR_UNSUPPORTED_FLAG if an 
  3325.       attempt is made to independently control the volume of the left and right 
  3326.       channels with the MCI_SET command. 
  3327.  
  3328.  
  3329. ΓòÉΓòÉΓòÉ 6. Waveform Audio Device ΓòÉΓòÉΓòÉ
  3330.  
  3331. The OS/2 waveform audio (waveaudio) device allows an application to play or 
  3332. record digital audio using files or application memory buffers.  While audio 
  3333. refers to the sound waves (changes in air pressure) that have a perceived 
  3334. effect on the human ear, waveform refers to a digital representation of the 
  3335. original audio sound wave.  Using one technique called pulse code modulation 
  3336. (PCM), discrete samples of the sound wave are encoded by an audio adapter at 
  3337. precise intervals. The numerical value of the sample increases when the sound 
  3338. wave's force (loudness) increases. The variation of the sample increases as the 
  3339. frequency of the sound wave increases. 
  3340.  
  3341. The number of samples per second taken of the original sound wave as well as 
  3342. the precision (or resolution) of the sample dictate the quality of the sound 
  3343. reproduction.  Typical sampling rates include 44 kHz, 22 kHz, and 11 kHz, where 
  3344. kHz is an abbreviation for kilohertz or thousands of cycles per second.  The 
  3345. sampling precision is usually measured in bits where 8 or 16 bits per sample 
  3346. are representative of most audio adapters. Mono or stereo refers to the number 
  3347. of channels transferring digital audio. Mono represents one channel and stereo 
  3348. represents two channels. 
  3349.  
  3350. Generally, the higher the sampling rate and resolution, the higher the 
  3351. perceived quality; however this comes at the expense of potentially enormous 
  3352. data rates and file sizes. For example, audio quality equivalent to that 
  3353. produced by a CD audio device requires a sampling rate of 44.1 kHz, and 16-bit 
  3354. resolution for each of the channels in a stereo recording. This information 
  3355. alone results in a data rate of 172 kilobytes per second!  Luckily, many 
  3356. applications of digital audio are adequately supported with sampling rates and 
  3357. resolutions as low as 22 kHz and 8 bits respectively.  The exact choice of 
  3358. parameters will vary, depending on the requirements of the application. 
  3359.  
  3360.  
  3361. ΓòÉΓòÉΓòÉ 6.1. The Wave Stream Connector ΓòÉΓòÉΓòÉ
  3362.  
  3363. The wave stream connector represents the flow of digital information to and 
  3364. from the waveaudio device to its associated amplifier-mixer (ampmix) device. 
  3365. During playback, the waveaudio device sends digitized sounds from either 
  3366. application memory or files to the ampmix device for subsequent conversion into 
  3367. audio that can be heard through conventional speakers or headphones. When 
  3368. recording, the waveaudio device receives waveforms from the ampmix device and 
  3369. stores the digital information in a file or in application memory. 
  3370.  
  3371. Control of the characteristics of the waveform information is provided by the 
  3372. waveaudio device.  The quality of the waveform can be controlled by setting the 
  3373. format, sampling rate, bits per sample, and the number of channels.  As an 
  3374. additional service, the waveaudio device will also allow the volume to be 
  3375. controlled.  This service is actually provided by the ampmix device in a way 
  3376. that is transparent to the calling application. If other advanced audio shaping 
  3377. features are required, the application can retrieve the device ID of the ampmix 
  3378. device using the MCI_CONNECTION message.  Once the device ID has been obtained, 
  3379. the application can send commands directly to the ampmix device.  Examples 
  3380. include set commands to manipulate treble, bass, and balance. 
  3381.  
  3382.  
  3383. ΓòÉΓòÉΓòÉ 6.1.1. Waveaudio Device Features ΓòÉΓòÉΓòÉ
  3384.  
  3385.      Multiple time formats 
  3386.  
  3387.      Waveform characteristics 
  3388.  
  3389.            Data Format 
  3390.            File format (RIFF WAVE, AVC, or others if an MMIO procedure is 
  3391.            supplied) 
  3392.            Sampling rate 
  3393.            Bits per sample (resolution) 
  3394.            Number of channels 
  3395.  
  3396.      Playback and record sources 
  3397.  
  3398.            File system 
  3399.            Application memory 
  3400.  
  3401.      Audio shaping 
  3402.  
  3403.            Volume control 
  3404.            Other features that might be available through the associated ampmix 
  3405.            device 
  3406.  
  3407.      Cue point and position advise notification 
  3408.  
  3409.  
  3410. ΓòÉΓòÉΓòÉ 6.2. Waveform Data Formats ΓòÉΓòÉΓòÉ
  3411.  
  3412. There are several formats used for storing waveform data within a computer 
  3413. system.  OS/2 multimedia recognizes several resolutions of the Pulse Code 
  3414. Modulation (PCM) format, because it is supported by most audio adapters. OS/2 
  3415. multimedia also recognizes ADPCM formats. Refer to the Appendix of the OS/2 
  3416. Multimedia Programming Reference for descriptions of these formats. 
  3417.  
  3418. Pulse Code Modulation (PCM) refers to the variation of a digital signal to 
  3419. represent audio amplitude. This method of assigning binary values to amplitude 
  3420. levels supports the conversion of analog signals to digital signals by adapters 
  3421. such as the M-Audio Capture and Playback Adapter. 
  3422.  
  3423. Adaptive Differential Pulse Code Modulation (ADPCM) is a technique for 
  3424. compressing waveform samples. ADPCM can reduce the amount of data storage 
  3425. required by a factor of 16 to 1, but some price is paid in fidelity for the 
  3426. higher compression rates. 
  3427.  
  3428.  
  3429. ΓòÉΓòÉΓòÉ 6.2.1. M-Audio Adapter Specifics ΓòÉΓòÉΓòÉ
  3430.  
  3431. The following tables list the valid MCI_WAVE_SET items for the operation modes 
  3432. currently supported by the M-Audio Capture and Playback Adapter. 
  3433.  
  3434. Note:  Numbers in table stand for number of channels supported in this mode-- 
  3435.        mono (1), stereo (2), N/A (Not Available) 
  3436.  
  3437.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3438.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  3439.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3440.   Γöé8-bit          Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé
  3441.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3442.   Γöé16-bit         Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé
  3443.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3444.  
  3445.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3446.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  3447.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3448.   Γöé8-bit          ΓöéN/A         ΓöéN/A         ΓöéN/A         ΓöéN/A         Γöé
  3449.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3450.   Γöé16-bit         ΓöéN/A         Γöé1           Γöé1, 2        Γöé1           Γöé
  3451.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3452.  
  3453.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3454.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  3455.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3456.   Γöé8-bit          Γöé1,2         Γöé1,2         Γöé1,2         Γöé1,2         Γöé
  3457.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3458.   Γöé16-bit         ΓöéN/A         ΓöéN/A         ΓöéN/A         ΓöéN/A         Γöé
  3459.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3460.  
  3461.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3462.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  3463.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3464.   Γöé8-bit          Γöé1,2         Γöé1,2         Γöé1,2         Γöé1,2         Γöé
  3465.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3466.   Γöé16-bit         ΓöéN/A         ΓöéN/A         ΓöéN/A         ΓöéN/A         Γöé
  3467.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3468.  
  3469.  
  3470. ΓòÉΓòÉΓòÉ 6.3. Audio Device Capabilities ΓòÉΓòÉΓòÉ
  3471.  
  3472. If MCI_GETDEVCAPS_EXTENDED is specified in conjunction with 
  3473. MCI_GETDEVCAPS_ITEM, the MCI_GETDEVCAPS_WAVE_FORMAT value can be placed in the 
  3474. ulItem field for the waveaudio device as an extended request. The 
  3475. MCI_GETDEVCAPS_WAVE_FORMAT value allows an application to query if the device 
  3476. supports a specific waveaudio format. The application must fill in the 
  3477. ulBitsPerSample, ulFormatTag, ulSamplesPerSec, ulChannels, and ulFormatMode 
  3478. fields in the MCI_WAVE_GETDEVCAPS_PARMS data structure.  The driver returns 
  3479. MCI_TRUE if the format is supported or returns a specific error describing why 
  3480. the command field failed if the format is not supported. 
  3481.  
  3482. The following code fragment shows a portion of the Audio Recorder Sample 
  3483. program provided in the Toolkit (\TOOLKIT\SAMPLES\MM\RECORDER). This program 
  3484. uses the MCI_GETDEVCAPS message to determine the capabilities of the currently 
  3485. selected waveaudio device. 
  3486.  
  3487.   ULONG                     ulRC;         /* return code from api */
  3488.   MCI_WAVE_GETDEVCAPS_PARMS mciAudioCaps; /* MCI_GETDEVCAPS_PARMS
  3489.                                              structure */
  3490.   memset( &mciAudioCaps , 0, sizeof(MCI_WAVE_GETDEVCAPS_PARMS));
  3491.  
  3492.   /* Test to see if the device can play 11 kHz, 8-bit, mono files. */
  3493.   mciAudioCaps.ulBitsPerSample = 8;
  3494.   mciAudioCaps.ulFormatTag     = DATATYPE_WAVEFORM;
  3495.   mciAudioCaps.ulSamplesPerSec = 11025;
  3496.   mciAudioCaps.ulChannels      = 1;
  3497.   mciAudioCaps.ulFormatMode    = MCI_PLAY;
  3498.   mciAudioCaps.ulItem          = MCI_GETDEVCAPS_WAVE_FORMAT;
  3499.  
  3500.   ulRC = mciSendCommand (mciOpenParms.usDeviceID,   /* Device ID    */
  3501.                          MCI_GETDEVCAPS,
  3502.                          MCI_WAIT | MCI_GETDEVCAPS_EXTENDED
  3503.                               | MCI_GETDEVCAPS_ITEM,
  3504.                          (PVOID) &mciAudioCaps,
  3505.                          0);
  3506.        .
  3507.        .
  3508.        .
  3509.  
  3510. /* Test to see if the device can record 11 kHz, 16-bit, mono files. */
  3511.   mciAudioCaps.ulBitsPerSample = 16;
  3512.   mciAudioCaps.ulFormatTag     = DATATYPE_WAVEFORM;
  3513.   mciAudioCaps.ulSamplesPerSec = 11025;
  3514.   mciAudioCaps.ulChannels      = 1;
  3515.   mciAudioCaps.ulFormatMode    = MCI_RECORD;
  3516.   mciAudioCaps.ulItem          = MCI_GETDEVCAPS_WAVE_FORMAT;
  3517.  
  3518.   ulRC = mciSendCommand (mciOpenParms.usDeviceID,  /* Device ID     */
  3519.                          MCI_GETDEVCAPS,
  3520.                          MCI_WAIT | MCI_GETDEVCAPS_EXTENDED
  3521.                               | MCI_GETDEVCAPS_ITEM,
  3522.                          (PVOID) &mciAudioCaps,
  3523.                          0);
  3524.  
  3525.  
  3526. ΓòÉΓòÉΓòÉ 6.4. Using the Waveform Audio Device ΓòÉΓòÉΓòÉ
  3527.  
  3528. Because the waveaudio device is a compound device, it requires a device 
  3529. element.  The device element is typically a file that contains a sampled 
  3530. waveform for playback.  The waveaudio device can be opened with or without a 
  3531. device element.  A device element can subsequently be specified using the load 
  3532. command. 
  3533.  
  3534.  
  3535. ΓòÉΓòÉΓòÉ 6.4.1. Opening the Waveform Audio Device ΓòÉΓòÉΓòÉ
  3536.  
  3537. The following string commands open the default waveaudio device and load a file 
  3538. onto it. 
  3539.  
  3540. open waveaudio alias wave shareable
  3541. load wave c:\mysounds\train.wav
  3542.  
  3543. OS/2 multimedia allows you to specify the device to be used for a particular 
  3544. file based on the file's extension or its extended attributes (EAs). Using 
  3545. .TYPE EAs is the preferred method, because they remain with the files even when 
  3546. the files are renamed. Both file extensions and extended attributes can be 
  3547. associated with a device using the Multimedia Setup application.  For instance, 
  3548. assuming files with an extension of .WAV have been associated with the 
  3549. waveaudio device, the following command will result in a file being loaded into 
  3550. the waveaudio device: 
  3551.  
  3552. open c:\mysounds\monkey.wav alias monkey shareable
  3553.  
  3554. Finally, both the device element and the device type can be specified: 
  3555.  
  3556. open c:\mysounds\paperjam.wav type waveaudio alias wave shareable
  3557.  
  3558.  
  3559. ΓòÉΓòÉΓòÉ 6.4.2. Recording a Waveform File ΓòÉΓòÉΓòÉ
  3560.  
  3561. One of the typical uses of the waveform audio device is to digitize an input 
  3562. signal or sound into discrete samples for storage in a file.  An example of 
  3563. this would be recording an electronic audio mail message to actually tell 
  3564. someone about an idea, as opposed to typing a memo on the same subject.  An 
  3565. electronic audio mail application would be completely shielded from the 
  3566. complexity of digitizing a signal and would only need to specify a file, while 
  3567. providing the user with a simple control panel to allow the message to be 
  3568. recorded.  The user might press a stop button on the control panel when 
  3569. finished describing the idea.  The application could then issue a stop command 
  3570. to the waveaudio device to discontinue the recording. 
  3571.  
  3572. open myidea.wav waveaudio alias wave wait
  3573. record wave notify
  3574. .
  3575. .
  3576. .
  3577. ** recording the idea into myidea.wav **
  3578. .
  3579. .
  3580. .
  3581. stop wave wait
  3582.  
  3583. Like many text editors, the waveform audio media driver will not actually 
  3584. modify the original file until it receives a command to save the changes.  Any 
  3585. temporary files created during the record operation will be located in the 
  3586. directory specified by the MSV_WORKPATH multimedia system variable.  The path 
  3587. can be specified on the system page of the Multimedia Setup application. The 
  3588. use of temporary files is completely transparent to the application. 
  3589.  
  3590. The file can be saved using the original file name, or a new file name can be 
  3591. specified. If a save command is not issued before closing the waveform audio 
  3592. device, all changes will be discarded. 
  3593.  
  3594. save wave wait
  3595. close wave wait
  3596.  
  3597. It is possible to open or load the waveaudio device specifying a special 
  3598. readonly option.  In this mode, the waveaudio device prevents any modification 
  3599. to the file from either the save or record commands. In certain circumstances, 
  3600. the driver might be able to optimize performance by utilizing the information 
  3601. that the file will not be modified. The option will also allow multiple 
  3602. applications to share the same file for playback purposes and will prevent 
  3603. inadvertent modification of the file. 
  3604.  
  3605. open bigwave.wav type waveaudio alias wave readonly shareable
  3606.  
  3607.  
  3608. ΓòÉΓòÉΓòÉ 6.4.3. Creating New Files ΓòÉΓòÉΓòÉ
  3609.  
  3610. The waveaudio device will create a new file on either the MCI_OPEN or MCI_LOAD 
  3611. commands if a file element is indicated (MCI_OPEN_ELEMENT_ID) and the specified 
  3612. file name does not exist. If no file name is indicated, the waveaudio driver 
  3613. will create an unnamed temporary file.  If an unnamed temporary file is 
  3614. created, it can later be named by issuing the MCI_SAVE command, which must 
  3615. include the permanent name of the new file. 
  3616.  
  3617. To support file creation from the string interface, a special file name called 
  3618. new is reserved for system use.  This file name should be used in place of the 
  3619. usual application supplied file name.  As in the command message interface, the 
  3620. save command must be issued to give the file a permanent name. 
  3621.  
  3622. open new type waveaudio alias wave wait
  3623. record wave notify
  3624. .
  3625. .
  3626. .
  3627. ** recording **
  3628. .
  3629. .
  3630. .
  3631. stop wave wait
  3632. save wave myspeech.wav wait
  3633.  
  3634. When a file is initially created, default settings will be assigned by the 
  3635. media driver and might depend on the capabilities of the audio adapter.  The 
  3636. IBM waveform audio driver will use PCM, 22 kHz, 16 bits per sample, and mono as 
  3637. the default for 16-bit adapters.  If the adapter does not support 16-bit PCM, 
  3638. then the resolution (bits per sample) will be downgraded to 8 bits. 
  3639.  
  3640. The following table lists audio adapters supported by OS/2 multimedia. The 
  3641. default settings are those initially assigned by the media driver to a new file 
  3642. when that particular audio adapter is being used. 
  3643.  
  3644. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3645. ΓöéAudio Adapter            ΓöéFormat    ΓöéSampling  ΓöéBits per  ΓöéChannels  Γöé
  3646. Γöé                         Γöé          ΓöéRate      ΓöéSample    Γöé          Γöé
  3647. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3648. ΓöéIBM M-Audio              ΓöéPCM       Γöé22 kHz    Γöé16        Γöé1         Γöé
  3649. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3650. ΓöéSound Blaster            ΓöéPCM       Γöé22 kHz    Γöé8         Γöé1         Γöé
  3651. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3652. ΓöéSound Blaster Pro        ΓöéPCM       Γöé22 kHz    Γöé8         Γöé2         Γöé
  3653. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3654. ΓöéSound Blaster 16         ΓöéPCM       Γöé22 kHz    Γöé16        Γöé1         Γöé
  3655. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3656. ΓöéPro AudioSpectrum 16     ΓöéPCM       Γöé22 kHz    Γöé16        Γöé1         Γöé
  3657. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3658.  
  3659. OS/2 multimedia enables recording of digital audio information in the format 
  3660. that fits specific needs, such as space or quality.  For example, assume that a 
  3661. new waveaudio file is created with the following command: 
  3662.  
  3663. open new type waveaudio alias a wait
  3664.  
  3665. When the file is created, you might want a file that is compatible with mu-law 
  3666. (the compression scheme used by the telephone system). To change the 
  3667. compression scheme, the format tag must be set for the file.  The following 
  3668. string commands prepare the file for recording mu-law by setting the format 
  3669. tag: 
  3670.  
  3671. set a format tag mulaw wait
  3672. set a bitspersample 8 wait
  3673. set a channels 1 wait
  3674. set a samplespersec 11025 wait
  3675.  
  3676. If you wanted to record with a compression scheme commonly used in Europe 
  3677. (a-law), the following command could have been issued: 
  3678.  
  3679. set a format tag alaw wait
  3680.  
  3681. An application should always set the waveform format, sampling rate, 
  3682. resolution, and number of channels to ensure that the waveform is created with 
  3683. the desired parameters as shown in the following string interface example. 
  3684.  
  3685. set wave format tag PCM wait
  3686. set wave samplespersec 22050 wait
  3687. set wave bitspersample 8 wait
  3688. set wave channels 1 wait
  3689.  
  3690. Note:  When modifying the settings on a waveaudio device, the format tag should 
  3691.        be changed first, because it might force the automatic modification of 
  3692.        other settings to make them compatible with the new format.  For 
  3693.        instance, a waveaudio device that supports 16-bit PCM might only support 
  3694.        8-bit ADPCM.  Changing the format from PCM to ADPCM will automatically 
  3695.        change the bits per sample setting. 
  3696.  
  3697.  
  3698. ΓòÉΓòÉΓòÉ 6.5. Playing and Recording non-RIFF Waveforms ΓòÉΓòÉΓòÉ
  3699.  
  3700. The waveform audio device will create new waveforms according to the RIFF WAVE 
  3701. data standard.  It is possible, however to play other data formats using OS/2 
  3702. multimedia if the appropriate MMIO procedure has been supplied.  The selection 
  3703. of the appropriate I/O procedure (IOProc) is transparent to the application if 
  3704. the IOProc has been installed. 
  3705.  
  3706. One example of this feature is OS/2 multimedia's ability to play waveform audio 
  3707. files that were created using IBM's AVC application and the M-Audio card.  Note 
  3708. that the AVC support provides playback capabilities only.  The waveform audio 
  3709. device will temporarily report FALSE to the save and record capabilities of the 
  3710. device capabilities (MCI_GETDEVCAPS) function when the underlying I/O procedure 
  3711. does not support the creation of files.  Applications should check the device 
  3712. capabilities to appropriately display a user interface that reflects the true 
  3713. capabilities of the waveaudio driver and its associated I/O procedure. 
  3714.  
  3715. For example, a waveform editor application should grey out its record button 
  3716. when an AVC file is loaded, as only playback operations are supported. 
  3717. Querying the device capabilities would return FALSE for can record.  If a 
  3718. waveform file in the RIFF WAVE format is subsequently loaded, the record button 
  3719. should be enabled, because the same can record query will now return TRUE. In 
  3720. all instances, by using the high-level OS/2 multimedia mciSendString or 
  3721. mciSendCommand interface to reference device capabilities, the application is 
  3722. shielded from the underlying implementation. 
  3723.  
  3724.  
  3725. ΓòÉΓòÉΓòÉ 6.6. Creating a Waveform Playlist ΓòÉΓòÉΓòÉ
  3726.  
  3727. Specialized applications such as a waveform editor might require the capability 
  3728. of playing and recording using application memory buffers instead of files. 
  3729. The memory playlist feature of OS/2 multimedia provides the construct for 
  3730. supplying memory buffers to the waveaudio device.  Besides implementing simple 
  3731. circular buffering schemes, memory playlists can be used to synthesize complex 
  3732. and unique waveform sounds. By following each DATA statement with a MESSAGE 
  3733. statement, an application can be informed as to when the buffer can be reused. 
  3734.  
  3735. Playlist Structure 
  3736.  
  3737. Depending on the complexity of the application, memory playlists can be used to 
  3738. provide a single large memory buffer, or multiple buffers in a circular 
  3739. buffering scheme. The following is an example of how a memory playlist might be 
  3740. constructed to implement a simple circular buffering scheme. 
  3741.  
  3742.     0:    NOP
  3743.     1:    DATA...
  3744.     2:    MESSAGE...
  3745.     3:    DATA...
  3746.     4:    MESSAGE...
  3747.     5:    DATA...
  3748.     6:    MESSAGE...
  3749.     7:    BRANCH 0
  3750.  
  3751. Note that regardless of whether the playlist is being used for play or record 
  3752. operations, the MESSAGE instruction will notify the application when the 
  3753. playlist processor has consumed or filled the preceding DATA buffer.  An 
  3754. MM_MCIPLAYLISTMESSAGE will be sent to the window procedure specified when the 
  3755. waveaudio device was originally opened. 
  3756.  
  3757. The following code fragment shows the SetUpPlaylist procedure that is performed 
  3758. once, during initialization of the Clock Sample program.  It calls the 
  3759. procedure CopyWaveformIntoMemory to copy the waveform files into memory 
  3760. buffers.  It also initializes the playlist data structure by supplying the 
  3761. address and size of the memory buffers holding the data in the appropriate data 
  3762. structure fields. 
  3763.  
  3764. VOID SetupPlayList( VOID )
  3765. {
  3766.  /*
  3767.   * This array keeps the address of each audio chime file.
  3768.   */
  3769.  static LONG *pulBaseAddress[ NUMBER_OF_CHIME_FILES ];
  3770.  
  3771.  USHORT usChimeFileId;            /* Chime audio file ID.        */
  3772.  ULONG  ulSizeOfFile,             /* Size of audio file.         */
  3773.  
  3774. ulMemoryAllocationFlags = PAG_COMMIT | PAG_READ | PAG_WRITE;
  3775. for(usChimeFileId=0; usChimeFileId<NUMBER_OF_CHIME_FILES;
  3776.     usChimeFileId++)
  3777.  {
  3778.  
  3779.     ulSizeOfFile = HowBigIsTheChimeFile( usChimeFileId );
  3780.   /*
  3781.    * If the returned file size is 0, there is a problem with the
  3782.    * chime files.  A message will already have been shown to the user
  3783.    * by the HowBigIsTheChimeFile function so exit this routine.
  3784.    */
  3785.     if ( ulSizeOfFile == 0 )
  3786.     {
  3787.        return;
  3788.     }
  3789.     if ( (pulBaseAddress[ usChimeFileId ] = (LONG *)
  3790.             malloc( ulSizeOfFile )) == (LONG *) NULL )
  3791.     {
  3792.        /*
  3793.         * The memory for the waveform files cannot be allocated.
  3794.         * Notify the user and return from this routine.  No playlist
  3795.         * can be created/played until memory is available.
  3796.         */
  3797.        ShowAMessage(
  3798.           acStringBuffer[
  3799.              IDS_NORMAL_ERROR_MESSAGE_BOX_TEXT - 1 ],
  3800.           IDS_CANNOT_GET_MEMORY, /* ID of the message to show. */
  3801.           MB_OK | MB_INFORMATION | MB_HELP |  MB_APPLMODAL |
  3802.              MB_MOVEABLE );           /* Style of the message box. */
  3803.  
  3804.        return;
  3805.  
  3806.     }  /* End of IF allocation fails. */
  3807.     /*
  3808.      * Place the waveform files into the memory buffer that was just
  3809.      * created.
  3810.      */
  3811.     CopyWaveformIntoMemory(
  3812.        pulBaseAddress[ usChimeFileId ],
  3813.        ulSizeOfFile,
  3814.        usChimeFileId );
  3815.     /*
  3816.      * Now that we've loaded the waveform into memory, we need to put
  3817.      * its address and size into the playlist data statements that
  3818.      * use this particular file.
  3819.      *
  3820.      * Its address must be placed into the data statement's first
  3821.      * operand and its size must be placed in the data
  3822.      * statement's second operand.
  3823.      *
  3824.      * For the four different playlists, one for each chime time
  3825.      * (1/4, 1/2, 3/4 and 1 hour increments),
  3826.      * the address of the chime file and its size will be loaded
  3827.      * into each data statement of the Playlist.
  3828.      */
  3829.     if ( usChimeFileId == 0 )
  3830.     /* If we just loaded CLOCK1.WAV */
  3831.     {
  3832.        /*
  3833.         * Put the address of this chime into the first operand of
  3834.         * every data operation that uses this particular chime.
  3835.         */
  3836.     apltPlayList[ 0 ][ 0 ].ulOperandOne =  /* 1/4 hour 1st data op */
  3837.     apltPlayList[ 1 ][ 0 ].ulOperandOne =  /* 1/2 hour 1st data op */
  3838.     apltPlayList[ 2 ][ 0 ].ulOperandOne =  /* 3/4 hour 1st data op */
  3839.     apltPlayList[ 2 ][ 2 ].ulOperandOne =  /* 3/4 hour 3rd data op */
  3840.     apltPlayList[ 3 ][ 0 ].ulOperandOne =  /* 1   hour 1st data op */
  3841.     apltPlayList[ 3 ][ 2 ].ulOperandOne =  /* 1   hour 3rd data op */
  3842.        (ULONG) pulBaseAddress[ usChimeFileId ];  /* address        */
  3843.     /*
  3844.      * Now put the size of the file into the second operand of every
  3845.      * data operation that uses this particular chime.
  3846.      */
  3847.     apltPlayList[ 0 ][ 0 ].ulOperandTwo =  /* 1/4 hour 1st data op */
  3848.     apltPlayList[ 1 ][ 0 ].ulOperandTwo =  /* 1/2 hour 1st data op */
  3849.     apltPlayList[ 2 ][ 0 ].ulOperandTwo =  /* 3/4 hour 1st data op */
  3850.     apltPlayList[ 2 ][ 2 ].ulOperandTwo =  /* 3/4 hour 3rd data op */
  3851.     apltPlayList[ 3 ][ 0 ].ulOperandTwo =  /* 1   hour 1st data op */
  3852.     apltPlayList[ 3 ][ 2 ].ulOperandTwo =  /* 1   hour 3rd data op */
  3853.        ulSizeOfFile;                             /* size         */
  3854.  }
  3855.  else
  3856.  if ( usChimeFileId == 1 )
  3857.  /* If we just loaded CLOCK2.WAV */
  3858.  {
  3859.     /*
  3860.      * Put the address of this chime into the first operand of
  3861.      * every data operation that uses this particular chime.
  3862.      */
  3863.     apltPlayList[ 1 ][ 1 ].ulOperandOne =  /* 1/2 hour 2nd data op */
  3864.     apltPlayList[ 2 ][ 1 ].ulOperandOne =  /* 3/4 hour 2nd data op */
  3865.     apltPlayList[ 3 ][ 1 ].ulOperandOne =  /* 1   hour 2nd data op */
  3866.     apltPlayList[ 3 ][ 3 ].ulOperandOne =  /* 1   hour 4th data op */
  3867.        (ULONG) pulBaseAddress[ usChimeFileId ];  /* address    */
  3868.     /*
  3869.      * Now put the size of the file into the second operand of every
  3870.      * data operation that uses this particular chime.
  3871.      */
  3872.     apltPlayList[ 1 ][ 1 ].ulOperandTwo =  /* 1/2 hour 2nd data op */
  3873.     apltPlayList[ 2 ][ 1 ].ulOperandTwo =  /* 3/4 hour 2nd data op */
  3874.     apltPlayList[ 3 ][ 1 ].ulOperandTwo =  /* 1   hour 2nd data op */
  3875.     apltPlayList[ 3 ][ 3 ].ulOperandTwo =  /* 1   hour 4th data op */
  3876.        ulSizeOfFile;                             /* size        */
  3877.  }
  3878.  else
  3879.  if ( usChimeFileId == 2 )
  3880.  /* If we just loaded CLOCK3.WAV         */
  3881.  /* (this is the gong part of the chime) */
  3882. {
  3883.     /*
  3884.      * Put the address of this chime into the first operand of
  3885.      * every data operation that uses this particular chime.
  3886.      */
  3887.     apltPlayList[ 3 ][ 5 ].ulOperandOne =  /* 1 hour 5th data op */
  3888.        (ULONG) pulBaseAddress[ usChimeFileId ];
  3889.  
  3890.     /*
  3891.      * Now put the size of the file into the second operand of every
  3892.      * data operation that uses this particular chime.
  3893.      */
  3894.  
  3895.     apltPlayList[ 3 ][ 5 ].ulOperandTwo =   /* 1 hour 5th data op */
  3896.        ulSizeOfFile;
  3897.   }
  3898.  
  3899.  }  /* End of For loop of chime files. */
  3900.  
  3901. }  /* End of SetupPlayList */
  3902.  
  3903.  
  3904. ΓòÉΓòÉΓòÉ 6.6.1. Suggested Setups for Playlists ΓòÉΓòÉΓòÉ
  3905.  
  3906. The following tables provide guidelines for setting up playlists to utilize 
  3907. memory more efficiently. 
  3908.  
  3909. For a sampling rate of 8 kHz: 
  3910.  
  3911. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3912. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  3913. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  3914. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  3915. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  3916. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3917. Γöé8         Γöé1         Γöé4KB         Γöé30          Γöé3           Γöé
  3918. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3919. Γöé8         Γöé2         Γöé8KB         Γöé30          Γöé3           Γöé
  3920. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3921. Γöé16        Γöé1         Γöé8KB         Γöé30          Γöé3           Γöé
  3922. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3923. Γöé16        Γöé2         Γöé16KB        Γöé20          Γöé3           Γöé
  3924. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3925.  
  3926. For a sampling rate of 11 kHz: 
  3927.  
  3928. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3929. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  3930. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  3931. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  3932. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  3933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3934. Γöé8         Γöé1         Γöé4KB         Γöé40          Γöé3           Γöé
  3935. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3936. Γöé8         Γöé2         Γöé8KB         Γöé40          Γöé3           Γöé
  3937. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3938. Γöé16        Γöé1         Γöé8KB         Γöé40          Γöé3           Γöé
  3939. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3940. Γöé16        Γöé2         Γöé16KB        Γöé30          Γöé3           Γöé
  3941. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3942.  
  3943. For a sampling rate of 22 kHz: 
  3944.  
  3945. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3946. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  3947. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  3948. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  3949. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  3950. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3951. Γöé8         Γöé1         Γöé8KB         Γöé40          Γöé3           Γöé
  3952. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3953. Γöé8         Γöé2         Γöé16KB        Γöé30          Γöé3           Γöé
  3954. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3955. Γöé16        Γöé1         Γöé16KB        Γöé30          Γöé3           Γöé
  3956. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3957. Γöé16        Γöé2         Γöé32KB        Γöé20          Γöé3           Γöé
  3958. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3959.  
  3960. For a sampling rate of 44 kHz: 
  3961.  
  3962. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3963. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  3964. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  3965. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  3966. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  3967. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3968. Γöé8         Γöé1         Γöé16KB        Γöé30          Γöé3           Γöé
  3969. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3970. Γöé8         Γöé2         Γöé32KB        Γöé20          Γöé3           Γöé
  3971. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3972. Γöé16        Γöé1         Γöé32KB        Γöé20          Γöé3           Γöé
  3973. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3974. Γöé16        Γöé2         Γöé60KB        Γöé10          Γöé5           Γöé
  3975. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3976.  
  3977.  
  3978. ΓòÉΓòÉΓòÉ 6.7. Waveform Audio Command Messages ΓòÉΓòÉΓòÉ
  3979.  
  3980. Following are descriptions of the command messages used to control the 
  3981. recording, editing, and playback of waveform data. Analog input devices for 
  3982. recording waveforms are a microphone and tape deck.  Analog output devices for 
  3983. waveform playback are a stereo amplifier or speakers connected to an audio 
  3984. adapter. 
  3985.  
  3986. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3987. ΓöéMessage                ΓöéDescription                                  Γöé
  3988. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3989. ΓöéMCI_CLOSE              ΓöéCloses the waveform audio player.            Γöé
  3990. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3991. ΓöéMCI_CONNECTOR          ΓöéEnables or disables a connector, queries its Γöé
  3992. Γöé                       Γöéstate, or identifies its type.               Γöé
  3993. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3994. ΓöéMCI_COPY               ΓöéCopies data from the device element to the   Γöé
  3995. Γöé                       Γöéclipboard or buffer.                         Γöé
  3996. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3997. ΓöéMCI_CUE                ΓöéCues the device for minimum delay in         Γöé
  3998. Γöé                       Γöérecording or playback.                       Γöé
  3999. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4000. ΓöéMCI_CUT                ΓöéRemoves data from the device element and     Γöé
  4001. Γöé                       Γöéplaces it in the clipboard or buffer.        Γöé
  4002. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4003. ΓöéMCI_DELETE             ΓöéRemoves the specified range of data from the Γöé
  4004. Γöé                       Γöédevice element.                              Γöé
  4005. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4006. ΓöéMCI_GETDEVCAPS         ΓöéGets device capabilities.                    Γöé
  4007. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4008. ΓöéMCI_INFO               ΓöéGets the name of the currently loaded file.  Γöé
  4009. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4010. ΓöéMCI_LOAD               ΓöéLoads a waveform data file.                  Γöé
  4011. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4012. ΓöéMCI_OPEN               ΓöéInitializes the waveform audio player.       Γöé
  4013. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4014. ΓöéMCI_PASTE              ΓöéIssues a DELETE on the selected range and    Γöé
  4015. Γöé                       Γöéinserts data into clipboard or buffer.       Γöé
  4016. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4017. ΓöéMCI_PAUSE              ΓöéSuspends the current play or record action.  Γöé
  4018. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4019. ΓöéMCI_PLAY               ΓöéPlays back waveform data by means of an audioΓöé
  4020. Γöé                       Γöéadapter:                                     Γöé
  4021. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4022. ΓöéMCI_RECORD             ΓöéRecords waveform data.                       Γöé
  4023. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4024. ΓöéMCI_REDO               ΓöéRedoes the CUT, DELETE, PASTE, or RECORD     Γöé
  4025. Γöé                       Γöéoperation most recently done by MCI_UNDO.    Γöé
  4026. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4027. ΓöéMCI_RESUME             ΓöéResumes the current play or record action    Γöé
  4028. Γöé                       Γöéfrom a paused state.                         Γöé
  4029. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4030. ΓöéMCI_SAVE               ΓöéSaves the device element in its current      Γöé
  4031. Γöé                       Γöéformat.                                      Γöé
  4032. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4033. ΓöéMCI_SEEK               ΓöéSeeks to a specified location.               Γöé
  4034. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4035. ΓöéMCI_SET                ΓöéSets device information.                     Γöé
  4036. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4037. ΓöéMCI_SET_CUEPOINT       ΓöéSets a cue point.                            Γöé
  4038. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4039. ΓöéMCI_SET_POSITION_ADVISEΓöéSets a position change notification request. Γöé
  4040. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4041. ΓöéMCI_SET_SYNC_OFFSET    ΓöéSets a synchronization offset.               Γöé
  4042. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4043. ΓöéMCI_STATUS             ΓöéReceives status on current settings for itemsΓöé
  4044. Γöé                       Γöéused for recording, playback, and saving.    Γöé
  4045. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4046. ΓöéMCI_STOP               ΓöéStops the waveform device before loading a   Γöé
  4047. Γöé                       Γöénew file.                                    Γöé
  4048. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4049. ΓöéMCI_UNDO               ΓöéUndoes the operation most recently performed Γöé
  4050. Γöé                       Γöéby CUT, DELETE, PASTE, or RECORD.            Γöé
  4051. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4052.  
  4053.  
  4054. ΓòÉΓòÉΓòÉ 6.8. Waveaudio Connectors ΓòÉΓòÉΓòÉ
  4055.  
  4056. The waveaudio device directly supports one wave stream connector which is 
  4057. always enabled.  As it is likely that an application will need to select the 
  4058. recording source or the output destination on the amplifier-mixer device, the 
  4059. waveaudio device will attempt to provide the following connector services to an 
  4060. application.  If the requested connector is not available, the command will 
  4061. fail. 
  4062.  
  4063.      headphones 
  4064.  
  4065.      speakers 
  4066.  
  4067.      line out 
  4068.  
  4069.      microphone 
  4070.  
  4071.      line in 
  4072.  
  4073.  Additional connectors might be available on the ampmix device.  To control 
  4074.  these connectors obtain the device ID of the ampmix device using the 
  4075.  MCI_CONNECTION message and issue the connector command directly to the 
  4076.  associated amplifier-mixer. 
  4077.  
  4078.  To determine which connectors are supported by an amplifier-mixer device, use 
  4079.  the MCI_CONNECTORINFO message. 
  4080.  
  4081.  The Audio Recorder Sample program illustrates the concept of recording audio 
  4082.  data.  In order to do this, it first configures the device settings such as 
  4083.  the input source as shown in the following code fragment. 
  4084.  
  4085.    MCI_CONNECTOR_PARMS  mciConnectorParms;   /* for MCI_CONNECTOR  */
  4086.   /*
  4087.    * Set up input source - microphone or line in.
  4088.    * Initialize MCI_CONNECTOR_PARMS structure with the pertinent
  4089.    * information, and then issue an MCI_CONNECTOR command by way of
  4090.    * mciSendCommand.
  4091.    */
  4092.    mciConnectorParms.ulConnectorType = usDeviceType;
  4093.                                             /* microphone/linein     */
  4094.  
  4095.    ulError = mciSendCommand( mciOpenParms.usDeviceID,
  4096.                              MCI_CONNECTOR,
  4097.                              MCI_WAIT | MCI_CONNECTOR_TYPE |
  4098.                              MCI_ENABLE_CONNECTOR,
  4099.                              (PVOID) &mciConnectorParms,
  4100.                              0 );
  4101.    if (ulError)
  4102.     {
  4103.       ShowMCIErrorMessage( ulError);
  4104.       return( FALSE);
  4105.     }
  4106.  
  4107.  
  4108. ΓòÉΓòÉΓòÉ 7. Sequencer Device ΓòÉΓòÉΓòÉ
  4109.  
  4110. The OS/2 sequencer device plays a MIDI song by sending commands from a MIDI 
  4111. file to a synthesizer, where the commands are converted to the sounds of a 
  4112. specific instrument. Typically, a digital signal processor (DSP) is used to 
  4113. generate the sounds of the instrument, which results in an authentic 
  4114. reproduction of the original performance. 
  4115.  
  4116. General MIDI (Musical Instrument Digital Interface) is a standard specification 
  4117. for playing back music from a series of commands, rather than actual audio 
  4118. data. The commands represent musical events, such as turning a note on and off 
  4119. ("Note On" and "Note Off"), as well as timing mechanisms for specifying the 
  4120. duration of the note sound. The sequencer uses the timing commands to sequence 
  4121. the playing of the music. 
  4122.  
  4123. Following is a text example of the commands generated when someone depresses 
  4124. the "middle C" key of a synthesizer keyboard: a note-on command X'90' and two 
  4125. bytes of data: 
  4126.  
  4127. X'90' - "Note-on" command to MIDI channel 0
  4128. X'3C' - Keyboard note (middle-C)
  4129. X'40' - Velocity (X'00'-X'7F').
  4130.  
  4131. MIDI augments waveform audio as a means of producing sounds in the multimedia 
  4132. environment.  MIDI data offers the advantage of requiring far less storage than 
  4133. waveform data.  For example, suppose a three-note chord-middle-C, E and G- is 
  4134. held for one second. Following are the MIDI commands required to reproduce the 
  4135. chord on a synthesizer: 
  4136.  
  4137. TIME = 0 sec.  90 3C 40  90 40 40  90 43 40
  4138.                (C-on)    (E-on)    (G-on)
  4139. .
  4140. .
  4141. .
  4142. TIME = 1 sec.  90 3C 00  90 40 00  90 43 00
  4143.                (C-off)   (E-off)   (G-off)
  4144.  
  4145. The storage required for the MIDI commands is 18 bytes. To store the same 
  4146. information as 16-bit, PCM, 44 kHz, stereo waveform audio data requires 176KB. 
  4147.  
  4148. Another advantage of storing musical performances as a series of instructions 
  4149. is that the information can be edited, the same way words in a document can be 
  4150. edited by a word processor. The musical editing process can be used, for 
  4151. example, to correct mistakes in an artist's original interpretation, or to 
  4152. change certain points of style before playback or final recording. Playback of 
  4153. MIDI data using the sequencer media device can be used to reproduce the 
  4154. original performance or to print out musical scores. 
  4155.  
  4156. Sequencer Device Specifics 
  4157.  
  4158. The sequencer device sends MIDI messages and data to the audio adapter.  Some 
  4159. audio adapters, such as the M-Audio adapter, perform FM synthesis to produce 
  4160. music. Other audio adapters, such as the Sound Blaster adapter, have the 
  4161. capability to send the MIDI data through a MIDI port to an external synthesizer 
  4162. device. 
  4163.  
  4164. The OS/2 sequencer device does not currently support recording new MIDI 
  4165. information. 
  4166.  
  4167.  
  4168. ΓòÉΓòÉΓòÉ 7.1. MIDI Stream Connector ΓòÉΓòÉΓòÉ
  4169.  
  4170. The MIDI stream connector represents the flow of MIDI information from the 
  4171. sequencer device to its associated amplifier-mixer (ampmix) device.  During 
  4172. playback, the sequencer device sends MIDI information from either application 
  4173. memory or files to the ampmix device for subsequent conversion into audio that 
  4174. can be heard through conventional speakers or headphones. 
  4175.  
  4176. Control of the characteristics of the MIDI information is provided by the 
  4177. sequencer device. Volume control is provided as an additional service, although 
  4178. this feature is actually provided by the ampmix device in a way that is 
  4179. transparent to the calling application. If other advanced audio-shaping 
  4180. features are required, the application can retrieve the device ID of the ampmix 
  4181. device using the MCI_CONNECTION message. Once the device ID has been obtained, 
  4182. the application can send set commands directly to the ampmix device to 
  4183. manipulate audio attributes, such as treble, bass, balance, and so on. 
  4184.  
  4185.  
  4186. ΓòÉΓòÉΓòÉ 7.2. MIDI Data Formats ΓòÉΓòÉΓòÉ
  4187.  
  4188. The MIDI support for the OS/2 multimedia system handles the RIFF RMID data 
  4189. type, as well as standard MIDI file formats 0 and 1. MIDI file format 0 merges 
  4190. tracks of MIDI data into one track; MIDI file format 1 preserves the separate 
  4191. tracks of data. MIDI file format 2 is not supported. 
  4192.  
  4193. MIDI files are made up of chunks, similar to RIFF chunks.  In MIDI files, there 
  4194. are two types of chunks:  header chunks and track chunks. A header chunk 
  4195. provides a minimal amount of information pertaining to the entire file. A track 
  4196. chunk contains a sequential stream of MIDI data, which can contain information 
  4197. for up to 16 MIDI channels. 
  4198.  
  4199.  
  4200. ΓòÉΓòÉΓòÉ 7.3. General MIDI Specification ΓòÉΓòÉΓòÉ
  4201.  
  4202. The standard MIDI channel, patch, and percussion key assignments shown in the 
  4203. following tables are defined in the General MIDI Specification issued by the 
  4204. MIDI Manufacturers Association (MMA). A detailed specification can be ordered 
  4205. from: 
  4206.  
  4207. International MIDI Association
  4208. 5316 West 57 Street
  4209. Los Angeles, CA 90056
  4210.  
  4211.  
  4212. ΓòÉΓòÉΓòÉ 7.3.1. Channel Assignments ΓòÉΓòÉΓòÉ
  4213.  
  4214. Channels are divided into two general categories, low-end synthesizer support 
  4215. and high-end synthesizer support. The following table shows the channel 
  4216. assignments for this standard. 
  4217.  
  4218. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4219. ΓöéChannel Range ΓöéUse Description               ΓöéPolyphony   Γöé
  4220. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4221. Γöé1 through 9   ΓöéExtended Melodic Tracks       Γöé16 Notes    Γöé
  4222. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4223. Γöé10 Only       ΓöéExtended Percussion Track     Γöé16 Notes    Γöé
  4224. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4225. Γöé11 through 12 ΓöéUnused Tracks                 Γöé            Γöé
  4226. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4227. Γöé13 through 15 ΓöéBase-Level Melodic Tracks     Γöé6 Notes     Γöé
  4228. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4229. Γöé16 Only       ΓöéBase-Level Percussion Track   Γöé3 Notes     Γöé
  4230. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4231.  
  4232.  
  4233. ΓòÉΓòÉΓòÉ 7.3.2. Patch Assignments ΓòÉΓòÉΓòÉ
  4234.  
  4235. The following table shows the standard patch definitions for MIDI instruments. 
  4236. Each family of instruments (for example, strings or brass) has eight different 
  4237. voice numbers reserved for patch definitions. 
  4238.  
  4239. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4240. ΓöéPiano               ΓöéChromatic PercussionΓöéOrgan               ΓöéGuitar              Γöé
  4241. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4242. Γöé0  Acoustic Grand   Γöé8  Celesta          Γöé16 Hammond Organ    Γöé24 Acoustic Guitar  Γöé
  4243. ΓöéPiano               Γöé                    Γöé                    Γöé(nylon)             Γöé
  4244. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4245. Γöé1  Bright Acoustic  Γöé9  Glockenspiel     Γöé17 Percussive Organ Γöé25 Acoustic Guitar  Γöé
  4246. ΓöéPiano               Γöé                    Γöé                    Γöé(steel)             Γöé
  4247. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4248. Γöé2  Electric Grand   Γöé10 Music box        Γöé18 Rock Organ       Γöé26 Electric Guitar  Γöé
  4249. ΓöéPiano               Γöé                    Γöé                    Γöé(jazz)              Γöé
  4250. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4251. Γöé3  Honky-Tonk Piano Γöé11 Vibraphone       Γöé19 Church Organ     Γöé27 Electric Guitar  Γöé
  4252. Γöé                    Γöé                    Γöé                    Γöé(clean)             Γöé
  4253. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4254. Γöé4  Rhodes Piano     Γöé12 Marimba          Γöé20 Reed Organ       Γöé28 Electric Guitar  Γöé
  4255. Γöé                    Γöé                    Γöé                    Γöé(muted)             Γöé
  4256. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4257. Γöé5  Chorused Piano   Γöé13 Xylophone        Γöé21 Accordion        Γöé29 Overdriven GuitarΓöé
  4258. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4259. Γöé6  Harpsichord      Γöé14 Tubular Bells    Γöé22 Harmonica        Γöé30 Distortion GuitarΓöé
  4260. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4261. Γöé7  Clavinet         Γöé15 Dulcimer         Γöé23 Tango Accordion  Γöé31 Guitar Harmonics Γöé
  4262. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4263. ΓöéBass                ΓöéStrings             ΓöéEnsemble            ΓöéBrass               Γöé
  4264. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4265. Γöé32 Acoustic Bass    Γöé40 Violin           Γöé48 String Ensemble 1Γöé56 Trumpet          Γöé
  4266. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4267. Γöé33 Electric Bass    Γöé41 Viola            Γöé49 String Ensemble 2Γöé57 Trombone         Γöé
  4268. Γöé(finger)            Γöé                    Γöé                    Γöé                    Γöé
  4269. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4270. Γöé34 Electric Bass    Γöé42 Cello            Γöé50 Synth Strings 1  Γöé58 Tuba             Γöé
  4271. Γöé(pick)              Γöé                    Γöé                    Γöé                    Γöé
  4272. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4273. Γöé35 Fretless Bass    Γöé43 Contrabass       Γöé51 Synth Strings 2  Γöé59 Muted Trumpet    Γöé
  4274. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4275. Γöé36 Slap Bass 1      Γöé44 Tremolo Strings  Γöé52 Choir Aahs       Γöé60 French Horn      Γöé
  4276. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4277. Γöé37 Slap Bass 2      Γöé45 Pizzicato StringsΓöé53 Voice Oohs       Γöé61 Brass Section    Γöé
  4278. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4279. Γöé38 Synth Bass 1     Γöé46 Orchestral Harp  Γöé54 Synth Voice      Γöé62 Synth Brass 1    Γöé
  4280. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4281. Γöé39 Synth Bass 2     Γöé47 Timpani          Γöé55 Orchestra Hit    Γöé63 Synth Brass 2    Γöé
  4282. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4283. ΓöéReed                ΓöéPipe                ΓöéSynth Lead          ΓöéSynth Pad           Γöé
  4284. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4285. Γöé64 Soprano Sax      Γöé72 Piccolo          Γöé80 Lead 1 (square)  Γöé88 Pad 1 (New Age)  Γöé
  4286. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4287. Γöé65 Alto Sax         Γöé73 Flute            Γöé81 Lead 2 (sawtooth)Γöé89 Pad (warm)       Γöé
  4288. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4289. Γöé66 Tenor Sax        Γöé74 Recorder         Γöé82 Lead 3 (calliope Γöé90 Pad 3 (polysynth)Γöé
  4290. Γöé                    Γöé                    Γöélead)               Γöé                    Γöé
  4291. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4292. Γöé67 Baritone Sax     Γöé75 Pan Flute        Γöé83 Lead 4 (chiff    Γöé91 Pad 4 (choir)    Γöé
  4293. Γöé                    Γöé                    Γöélead)               Γöé                    Γöé
  4294. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4295. Γöé68 Oboe             Γöé76 Bottle Blow      Γöé84 Lead 5 (charang) Γöé92 Pad 5 (bowed)    Γöé
  4296. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4297. Γöé69 English Horn     Γöé77 Shakuhachi       Γöé85 Lead 6 (voice)   Γöé93 Pad 6 (metallic) Γöé
  4298. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4299. Γöé70 Bassoon          Γöé78 Whistle          Γöé86 Lead 7 (fifths)  Γöé94 Pad 7 (halo)     Γöé
  4300. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4301. Γöé71 Clarinet         Γöé79 Ocarina          Γöé87 Lead 8 (bass +   Γöé95 Pad 8 (sweep)    Γöé
  4302. Γöé                    Γöé                    Γöélead)               Γöé                    Γöé
  4303. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4304. ΓöéSynth Effects       ΓöéEthnic              ΓöéPercussive          ΓöéSound Effects       Γöé
  4305. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4306. Γöé96  FX 1 (rain)     Γöé104 Sitar           Γöé112 Tinkle Bell     Γöé120 Guitar Fret     Γöé
  4307. Γöé                    Γöé                    Γöé                    ΓöéNoise               Γöé
  4308. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4309. Γöé97  FX 2            Γöé105 Banjo           Γöé113 Agogo           Γöé121 Breath Noise    Γöé
  4310. Γöé(soundtrack)        Γöé                    Γöé                    Γöé                    Γöé
  4311. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4312. Γöé98  FX 3 (crystal)  Γöé106 Shamisen        Γöé114 Steel Drums     Γöé122 Seashore        Γöé
  4313. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4314. Γöé99  FX 4            Γöé107 Koto            Γöé115 Woodblock       Γöé123 Bird Tweet      Γöé
  4315. Γöé(atmosphere)        Γöé                    Γöé                    Γöé                    Γöé
  4316. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4317. Γöé100 FX 5            Γöé108 Kalimba         Γöé116 Taiko Drum      Γöé124 Telephone Ring  Γöé
  4318. Γöé(brightness)        Γöé                    Γöé                    Γöé                    Γöé
  4319. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4320. Γöé101 FX 6 (goblins)  Γöé109 Bagpipe         Γöé117 Melodic Drum    Γöé125 Helicopter      Γöé
  4321. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4322. Γöé102 FX 7 (echoes)   Γöé110 Fiddle          Γöé118 Synth Drum      Γöé126 Applause        Γöé
  4323. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4324. Γöé103 FX 8 (sci-fi)   Γöé111 Shanai          Γöé119 Reverse Cymbal  Γöé127 Gunshot         Γöé
  4325. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4326.  
  4327.  
  4328. ΓòÉΓòÉΓòÉ 7.3.3. Percussion Key Assignments ΓòÉΓòÉΓòÉ
  4329.  
  4330. In MIDI, timbre (the sound of a specific instrument; for example, a violin or a 
  4331. trumpet) for most instruments is assigned a specific number. For example, voice 
  4332. 56 represents a trumpet sound. Thus, all note values for voice 56 produce notes 
  4333. having the distinctive sound of a trumpet. 
  4334.  
  4335. Typically, number assignments for percussion instruments are handled 
  4336. differently. Although each percussion instrument has a distinctive sound, all 
  4337. percussion instruments for a particular synthesizer are assigned one voice or 
  4338. timbre number. For example, if a synthesizer specifies that timbre 45 is a PCM 
  4339. percussion set, then note 60 (Middle C) might be for a kettle drum, 61 for a 
  4340. bass drum, 62 for a triangle and so on. 
  4341.  
  4342. Many manufacturers use percussion and note number assignments that are unique 
  4343. to their hardware. For example, note 60 might be assigned to a kettle drum on 
  4344. one synthesizer model and to castanets on another. 
  4345.  
  4346. The following figure shows the standard percussion key definitions. 
  4347.  
  4348.  
  4349. ΓòÉΓòÉΓòÉ 7.4. MIDI Mapping Function ΓòÉΓòÉΓòÉ
  4350.  
  4351. The MIDI mapping function provided with the sequencer device offers a level of 
  4352. device independence to application developers. Because MIDI patch assignments 
  4353. and percussion key assignments of different MIDI manufacturers vary, the MIDI 
  4354. mapper can be enabled to dynamically translate MIDI data in real-time, as a 
  4355. MIDI song is played. An application enables the mapper by setting the port with 
  4356. the MCI_SET command: 
  4357.  
  4358. set sequencer port mapper
  4359.  
  4360. The user can configure the sequencer device by selecting from a list of 
  4361. available device types.  The list is provided on the mapper page of the 
  4362. Multimedia Setup application. OS/2 multimedia provides a General MIDI map, as 
  4363. well as a map for each sequencer device supported by OS/2 multimedia. A mapper 
  4364. page (shown below) also allows the user to enable or disable specific channels. 
  4365.  
  4366. Once the MIDI mapper is enabled, the Sequencer expects the MIDI files it plays 
  4367. to conform to the General MIDI Specification. The MIDI mapper translates the 
  4368. General MIDI format to the appropriate device format as specified in the Mapper 
  4369. page of a MIDI device in Multimedia Setup. 
  4370.  
  4371.  
  4372. ΓòÉΓòÉΓòÉ 7.5. Guidelines for MIDI Song Authors ΓòÉΓòÉΓòÉ
  4373.  
  4374. MIDI authors should be aware of several design concerns when producing a MIDI 
  4375. song: 
  4376.  
  4377.      The General MIDI specification defines a base-level configuration and an 
  4378.       extended-level configuration for synthesizers. Because you cannot control 
  4379.       which synthesizer is used to play your song, you should provide 
  4380.       percussion and melody tracks for both configurations. The table in the 
  4381.       Channel Assignments section shows you which channels to allocate. 
  4382.  
  4383.      Put your important melody sounds in the lower-numbered channels. By 
  4384.       prioritizing channel use, you ensure that your song sounds reasonable 
  4385.       when it is played on hardware that supports only a few channels. 
  4386.  
  4387.      When selecting instruments for your MIDI song, use the instruments that 
  4388.       are defined for the most popular MIDI devices. Your song can then be 
  4389.       easily and accurately mapped to other hardware formats. 
  4390.  
  4391.      When using nonpercussive channels, limit the polyphony (number of 
  4392.       simultaneous notes) to 6 notes for the base level and 16 notes for the 
  4393.       extended level. 
  4394.  
  4395.      When using percussion channels, limit the polyphony to 3 notes for the 
  4396.       base level and 16 notes for the extended level. 
  4397.  
  4398.      Use the standard General MIDI patch assignments and percussion key 
  4399.       assignments shown in the table in the Patch Assignments section and the 
  4400.       figure in the Percussion Key Assignments section. 
  4401.  
  4402.      Always send a program change command to a channel before sending other 
  4403.       commands to the channel.  For channels 10 and 16, which are used for 
  4404.       percussion, select patch 0. 
  4405.  
  4406.      Always send a MIDI main volume controller command (controller number 7) 
  4407.       to a channel after selecting a patch by sending a program change command. 
  4408.       Use the value of 80 (X'50') for normal listening levels. 
  4409.  
  4410.  
  4411. ΓòÉΓòÉΓòÉ 7.6. Using the Sequencer Device ΓòÉΓòÉΓòÉ
  4412.  
  4413. After you open the sequencer device, query the division type of the device 
  4414. element with a status command. Division type refers to the method used to 
  4415. represent the time between MIDI events in the sequence. 
  4416.  
  4417. open mysong.mid alias midi1 shareable
  4418. status midi1 division type wait
  4419.  
  4420. A MIDI file's division type can be either PPQN or any of the following SMPTE 
  4421. formats: 
  4422.  
  4423.       PPQN (parts-per-quarter-note) 
  4424.       SMPTE 24 frame 
  4425.       SMPTE 25 frame 
  4426.       SMPTE 30 frame 
  4427.       SMPTE 30 drop frame 
  4428.  
  4429.  After you determine the file division type, you can make other status queries 
  4430.  such as: 
  4431.  
  4432.  Query                 Response 
  4433.  length                Length of sequence 
  4434.  length track n        Length of track n 
  4435.  position              Current position of sequence 
  4436.  position track n      Current position of track n 
  4437.  tempo                 Current tempo. 
  4438.  
  4439.  Responses are all in the current time format. PPQN files return length and 
  4440.  position information in song pointer units. However, SMPTE files return the 
  4441.  information in colon format HOURS:MINUTES:SECONDS:FRAMES. 
  4442.  
  4443.  PPQN files return the tempo in beats per minute; SMPTE files return the tempo 
  4444.  in frames per second. 
  4445.  
  4446.  
  4447. ΓòÉΓòÉΓòÉ 7.6.1. Playing A MIDI Song ΓòÉΓòÉΓòÉ
  4448.  
  4449. Before you start playing MIDI music, you may want to set the port to the MIDI 
  4450. mapper so that channel and patch reassignments can be made. 
  4451.  
  4452. set midi1 port mapper
  4453. seek midi1 to start wait
  4454. play midi1 notify
  4455. .
  4456. .
  4457. .
  4458. ** playing **
  4459. .
  4460. .
  4461. .
  4462. close midi1
  4463.  
  4464.  
  4465. ΓòÉΓòÉΓòÉ 7.6.2. Creating MIDI Memory Files ΓòÉΓòÉΓòÉ
  4466.  
  4467. Applications that access memory buffers to store and access MIDI data can use 
  4468. the memory I/O features of the multimedia input/output (MMIO) file services. 
  4469. This technique consists of opening a memory file using mmioOpen.  mmioOpen has 
  4470. a pointer to the buffer of MIDI data as a parameter.  This buffer can then be 
  4471. operated on by MCI and MMIO as if it were a file. 
  4472.  
  4473. The details of opening the file and setting up the MIDI buffer varies depending 
  4474. on an application's requirements. For example, the memory buffer can be 
  4475. allocated by the MMIO system and filled subsequently by the application, or the 
  4476. memory buffer can be allocated by the application and passed to MMIO.  The 
  4477. buffer can be filled in different ways such as mmioRead, mmioWrite, and 
  4478. mmioAdvance. 
  4479.  
  4480. Care must be taken when calling MMIO functions and sending MCI messages to the 
  4481. same memory file.  MMIO and MCI are independent subsystems linked only through 
  4482. the MMIO memory handle passed to MCI_OPEN.  There is for example, no 
  4483. relationship between MCI_SEEK and mmioSeek.  Each subsystem keeps its own set 
  4484. of relevant files and stream pointers.  If one subsystem changes the data in 
  4485. memory, but the memory had previously been cued with MCI_CUE, the change of 
  4486. data will not be recognized by MCI until a call to reload the streams has been 
  4487. issued. 
  4488.  
  4489. The following code fragment shows the opening of a memory file with a 
  4490. user-supplied MIDI buffer of untranslated (format 0 or 1) data and the playing 
  4491. of that data through MCI. 
  4492.  
  4493.  
  4494. {
  4495.    /* variable for IOProc */
  4496.    PMMIOPROC  pIOProc;
  4497.    HMODULE    hModMidiio;
  4498.  
  4499.    /* variables for memory file */
  4500.    MMIOINFO  mmioInfo;
  4501.    CHAR      UserBuffer[SIZE_OF_BUFFER];
  4502.    HMMIO     hmmio;
  4503.  
  4504.    /* variables for MCI commands */
  4505.    MCI_OPEN_PARMS  mop;
  4506.    MCI_PLAY_PARMS  mpp;
  4507.  
  4508.  
  4509.    /* Open memory file. Provide midi-filled data buffer to MMIO, so
  4510.     * data buffer becomes file image in memory.  Also specify that
  4511.     * the data will need to be translated.
  4512.     */
  4513.  
  4514.  mmioInfo.pchBuffer = UserBuffer; /* Filled with untranslated
  4515.                                      midi data                */
  4516.  mmioInfo.cchBuffer = SIZE_OF_BUFFER; /* User-defined         */
  4517.  mmioInfo.ulTranslate = MMIO_TRANSLATEDATA | MMIO_TRANSLATEHEADER;
  4518.                                  /* Need to translate data    */
  4519.  mmioInfo.fccIOProc = mmioFOURCC( 'M', 'I', 'D', 'I');/* Data
  4520.                                                           format */
  4521.  mmioMemInfo.fccChildIOProc = FOURCC_MEM;        /* Storage type */
  4522.  hmmio = mmioOpen ( NULL, mmioInfo, MMIO_READWRITE );
  4523.  
  4524.     /* open midi device */
  4525.  
  4526.     mop.pszElementName = (PSZ) hmmiomem;
  4527.  
  4528.     mciSendCommand(
  4529.          0,                        /* We don't know the device yet. */
  4530.          MCI_OPEN,                 /* MCI message                   */
  4531.          MCI_WAIT | MCI_OPEN_MMIO |
  4532.          MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE
  4533.          (ULONG) &mop,         /* Parameters for the message    */
  4534.          0 );                      /* Parameter for notify message  */
  4535.  
  4536.     /* play midi memory file for 1 second */
  4537.  
  4538.     mpp.ulFrom=0;
  4539.     mpp.ulTo=3000;    /* default is MMTIME units (1/3000 second) */
  4540.     mciSendCommand(
  4541.             mop.usDeviceID,        /* Device to play the data    */
  4542.             MCI_PLAY,              /* MCI message                */
  4543.             MCI_WAIT |
  4544.             MCI_FROM | MCI_TO,     /* Flags for the MCI message  */
  4545.             (ULONG) &mpp,          /* Parameters for the message */
  4546.             0 );                   /* No parm necessary          */
  4547.  
  4548.      /* close device */
  4549.  
  4550.      mciSendCommand(
  4551.             mop.usDeviceID,        /* Device to play this          */
  4552.             MCI_CLOSE,             /* MCI message                  */
  4553.             MCI_WAIT,              /* Flags for the MCI message    */
  4554.             (ULONG) NULL,          /* Parameters for the message   */
  4555.             (ULONG) NULL );        /* Parameter for notify message */
  4556.  
  4557. }
  4558.  
  4559.  
  4560. ΓòÉΓòÉΓòÉ 7.7. Sequencer Command Messages ΓòÉΓòÉΓòÉ
  4561.  
  4562. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4563. ΓöéMessage                ΓöéDescription                                  Γöé
  4564. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4565. ΓöéMCI_CLOSE              ΓöéCloses the sequencer device.                 Γöé
  4566. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4567. ΓöéMCI_CONNECTOR          ΓöéEnables or disables a connector, queries its Γöé
  4568. Γöé                       Γöéstate or identifies its type.                Γöé
  4569. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4570. ΓöéMCI_CUE                ΓöéCues the device for minimum delay in playbackΓöé
  4571. Γöé                       Γöéor recording:                                Γöé
  4572. Γöé                       Γöé-Cues a sequencer input device               Γöé
  4573. Γöé                       Γöé-Cues a sequencer output device              Γöé
  4574. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4575. ΓöéMCI_GETDEVCAPS         ΓöéGets device capabilities.                    Γöé
  4576. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4577. ΓöéMCI_INFO               ΓöéGets the following information:              Γöé
  4578. Γöé                       Γöé-Sequencer product name                      Γöé
  4579. Γöé                       Γöé-Name of the currently loaded file           Γöé
  4580. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4581. ΓöéMCI_LOAD               ΓöéLoads a sequencer data file.                 Γöé
  4582. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4583. ΓöéMCI_OPEN               ΓöéInitializes the sequencer device.            Γöé
  4584. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4585. ΓöéMCI_PLAY               ΓöéPlays back MIDI data by means of the audio   Γöé
  4586. Γöé                       Γöéadapter. The following optional action       Γöé
  4587. Γöé                       Γöémodifies MCI_PLAY:                           Γöé
  4588. Γöé                       Γöé-Specify start and stop positions in the     Γöé
  4589. Γöé                       Γöédevice element                               Γöé
  4590. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4591. ΓöéMCI_PAUSE              ΓöéSuspends the current playback action.        Γöé
  4592. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4593. ΓöéMCI_RESUME             ΓöéResumes playing from a paused state, keeping Γöé
  4594. Γöé                       Γöépreviously specified parameters in effect.   Γöé
  4595. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4596. ΓöéMCI_SAVE               ΓöéSaves the device element in its current      Γöé
  4597. Γöé                       Γöéformat.                                      Γöé
  4598. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4599. ΓöéMCI_SEEK               ΓöéMoves to the specified position in the deviceΓöé
  4600. Γöé                       Γöéelement.                                     Γöé
  4601. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4602. ΓöéMCI_SET                ΓöéSets audio attributes:                       Γöé
  4603. Γöé                       Γöé-Identify the channels to be used            Γöé
  4604. Γöé                       Γöé-Set the volume                              Γöé
  4605. Γöé                       Γöé-Enable or disable the audio output          Γöé
  4606. Γöé                       ΓöéSets sequencer information in the            Γöé
  4607. Γöé                       ΓöéPMCI_SEQ_SET_PARMS structure of MCI_SET:     Γöé
  4608. Γöé                       Γöé-Set the sequencer as master and specify the Γöé
  4609. Γöé                       Γöétype of MIDI data it uses                    Γöé
  4610. Γöé                       Γöé-Change the SMPTE offset of a sequence       Γöé
  4611. Γöé                       Γöé-Set the output MIDI port of the sequencer   Γöé
  4612. Γöé                       Γöé-Set the MIDI mapper as the port to receive  Γöé
  4613. Γöé                       Γöésequencer messages                           Γöé
  4614. Γöé                       Γöé-Set the sequencer as slave and identify any Γöé
  4615. Γöé                       Γöésync data it needs                           Γöé
  4616. Γöé                       Γöé-Set the tempo of the MIDI sequence accordingΓöé
  4617. Γöé                       Γöéto the current time format                   Γöé
  4618. Γöé                       ΓöéSets time format to be used for sequencer    Γöé
  4619. Γöé                       Γöédata:                                        Γöé
  4620. Γöé                       Γöé-Song pointer                                Γöé
  4621. Γöé                       Γöé-SMPTE 24                                    Γöé
  4622. Γöé                       Γöé-SMPTE 25                                    Γöé
  4623. Γöé                       Γöé-SMPTE 30                                    Γöé
  4624. Γöé                       Γöé-SMPTE 30 drop                               Γöé
  4625. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4626. ΓöéMCI_SET_CUEPOINT       ΓöéSets a cue point.                            Γöé
  4627. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4628. ΓöéMCI_SET_POSITION_ADVISEΓöéSets a position change notification request. Γöé
  4629. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4630. ΓöéMCI_SET_SYNC_OFFSET    ΓöéSets a synchronization offset.               Γöé
  4631. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4632. ΓöéMCI_STATUS             ΓöéReceives status on items such as the         Γöé
  4633. Γöé                       Γöéfollowing:                                   Γöé
  4634. Γöé                       Γöé-File division type                          Γöé
  4635. Γöé                       Γöé-Length of sequence in current time format   Γöé
  4636. Γöé                       Γöé-Whether the device is the sync master or a  Γöé
  4637. Γöé                       Γöéslave                                        Γöé
  4638. Γöé                       Γöé-Which MIDI port is assigned to the sequencerΓöé
  4639. Γöé                       Γöé-What the offset is for a SMPTE-based file   Γöé
  4640. Γöé                       Γöé-What the current tempo and time format is   Γöé
  4641. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4642. ΓöéMCI_STOP               ΓöéStops the sequencer device before loading a  Γöé
  4643. Γöé                       Γöéfile.                                        Γöé
  4644. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4645.  
  4646.  
  4647. ΓòÉΓòÉΓòÉ 7.8. Sequencer Connectors ΓòÉΓòÉΓòÉ
  4648.  
  4649. The sequencer device directly supports one MIDI stream connector that is always 
  4650. enabled.  As it is likely that an application will need to select the output 
  4651. destination on the amplifier-mixer device, the sequencer device will attempt to 
  4652. provide the following connector services to an application.  If the requested 
  4653. connector is not available, the command will fail. 
  4654.  
  4655.      headphones 
  4656.  
  4657.      speakers 
  4658.  
  4659.      line out 
  4660.  
  4661.  Additional connectors may be available on the ampmix device.  To control these 
  4662.  connectors, obtain the device ID of the ampmix device using the MCI_CONNECTION 
  4663.  message and issue the connector command directly to the associated 
  4664.  amplifier-mixer. 
  4665.  
  4666.  To determine which connectors are supported by an amplifier-mixer device, use 
  4667.  the MCI_CONNECTORINFO message. 
  4668.  
  4669.  
  4670. ΓòÉΓòÉΓòÉ 8. CD Audio Device ΓòÉΓòÉΓòÉ
  4671.  
  4672. The CD audio media device provides access to devices that read compact discs 
  4673. for the purpose of playing CD audio. A typical use for CD audio is to provide 
  4674. high quality audio for use in a presentation.  Another use of CD audio would be 
  4675. to provide detailed audio help for an application user.  Instead of the usual 
  4676. hyperlinked text and graphics, an entire step by step audio tutorial might be 
  4677. stored on a compact disc in several different languages. 
  4678.  
  4679.  
  4680. ΓòÉΓòÉΓòÉ 8.1. Compact Disc Formats ΓòÉΓòÉΓòÉ
  4681.  
  4682. A compact disc can contain several different kinds of information.  Many 
  4683. compact discs appear to be very similar to other forms of permanent storage 
  4684. such as hard or floppy disks. CD-ROM (Compact Disc - Read Only Memory) refers 
  4685. to a file format used for compact discs containing data that can be read by a 
  4686. computer's file system. This format is also known as Yellow Book. Yellow Book 
  4687. refers to the specification published by Philips Consumer Electronics Company 
  4688. and Sony Corporation that describes the physical layout of the CD-ROM disc 
  4689. format. This document evolved into the ISO (International Organization for 
  4690. Standardization) 9660 standard. 
  4691.  
  4692. Another form of compact disc data is Compact Disc Digital Audio (CD-DA) and is 
  4693. also known as Red Book.  This format is used for compact discs containing 
  4694. digital audio. CD-DA discs are encoded as 16-bit stereo PCM (Pulse Code 
  4695. Modulation) at 44.1 kHz.  See Waveform Data Formats for more information on 
  4696. this recording method. 
  4697.  
  4698. For every second of CD-DA audio data, 172KB of disc storage is required. 
  4699. Therefore, the sustained data rate required to play back a selection from a 
  4700. CD-DA track is 172KB per second. The CD-DA track format typically has an error 
  4701. recovery rate of 90 percent.  A 10 percent error rate is acceptable for audio 
  4702. discs, because errors that escape the correction mechanism are usually 
  4703. compensated for by audio filters in the CD player hardware. 
  4704.  
  4705. Unlike CD-DA data, information stored in a CD-ROM file system cannot tolerate 
  4706. such a relatively high error rate.  As a result, CD-ROM format data is 
  4707. transferred to an application at an apparent data rate of 150KB per second. The 
  4708. lower data rate results from the additional error correction bits utilized by 
  4709. the file system to produce an acceptable error rate. 
  4710.  
  4711.  
  4712. ΓòÉΓòÉΓòÉ 8.2. Mixed Format Compact Discs ΓòÉΓòÉΓòÉ
  4713.  
  4714. A mixed format compact disc holds CD-ROM file system data as well as CD-DA 
  4715. track format data.  An example of the use of a mixed format disc is an 
  4716. application that contains several symphonies by a famous composer. The actual 
  4717. audio is stored as a series of CD-DA tracks. Also stored on the disc (but in 
  4718. CD-ROM file format) is a program, the actual music score, and perhaps a data 
  4719. base on the composer's life. When the application is started, the audio from a 
  4720. symphony can be played using the CD audio media driver, while the user is 
  4721. allowed to study the music score. Additionally, the user might retrieve facts 
  4722. on the composer, such as how old the composer was when the symphony was 
  4723. written. 
  4724.  
  4725. By issuing the MCI_GETTOC message with mciSendCommand, an application can 
  4726. retrieve a table of contents (TOC) for a disc. This function is particularly 
  4727. useful for a mixed format disc. The starting and ending addresses (time) of 
  4728. each audio track are listed as well as the type of track.  Using the table of 
  4729. contents, an application can immediately determine which tracks can be played 
  4730. using the CD audio device.  Additionally, an application can determine the 
  4731. track type by issuing the status command to determine the type of any 
  4732. individual track. 
  4733.  
  4734. open cdaudio alias mycd shareable
  4735. status mycd type track 1 wait
  4736.  
  4737. Note:  The CD audio device processes only CD-DA tracks. 
  4738.  
  4739.  
  4740. ΓòÉΓòÉΓòÉ 8.3. CD-ROM Drives and Streaming ΓòÉΓòÉΓòÉ
  4741.  
  4742. Depending on the type of CD-ROM drive installed, the audio data on a CD-DA disc 
  4743. is either processed by a Digital-to-Analog Converter (DAC) that is built into 
  4744. the drive, or it is moved through the system to a Digital Signal Processor 
  4745. (DSP) on an audio adapter. Some CD-ROM drives can only play CD-DA audio data 
  4746. through the built-in DAC. Others, like the IBM Personal System/2 (PS/2) 
  4747. CD-ROM-II Drive, can play through the DAC, or they can stream data through the 
  4748. audio adapter DSP. 
  4749.  
  4750. The advantage offered by playing CD-DA through the DAC is that it is a simple 
  4751. operation that greatly reduces system and resource overhead. The advantage 
  4752. gained by streaming data through an audio adapter DSP is that you can 
  4753. potentially enhance the signal beyond the capabilities of the DAC by adding 
  4754. special effects such as reverberation and tremolo, or by modifying treble and 
  4755. bass-capabilities the DAC cannot provide. 
  4756.  
  4757. The default mode for the CD audio device is playback processed by the DAC 
  4758. through the internal headphones connector.  To switch to playback through the 
  4759. audio adapter DSP, the application sends the connector command enabling the cd 
  4760. stream connector. 
  4761.  
  4762. connector mycd enable type cd stream wait
  4763.  
  4764. To resume playback through the internal CD DAC, the application should 
  4765. re-enable the headphones connector.  This will automatically disable the 
  4766. streaming connector. 
  4767.  
  4768. connector mycd enable type headphones wait
  4769.  
  4770. Contention for the Amplifier-Mixer Device 
  4771.  
  4772. Because the audio adapter is modeled as an amplifier-mixer (ampmix) device, the 
  4773. CD audio device will automatically open and connect to its default 
  4774. amplifier-mixer when streaming CD-DA data.  If the amplifier-mixer device is 
  4775. currently opened exclusively by another application, enabling the cd stream 
  4776. connector will fail.  If the amplifier-mixer is available, then other 
  4777. applications using the same ampmix device might temporarily lose use of the 
  4778. device if the audio adapter cannot simultaneously process all requests.  The 
  4779. Media Device Manager (MDM) will handle all resource allocation automatically, 
  4780. however it should be realized that streaming CD-DA data using the CD audio 
  4781. device can effect applications using the waveaudio and sequencer devices as 
  4782. these devices also use the ampmix device.  Conversely, a waveaudio device could 
  4783. cause the loss of a streaming CD audio device if the waveaudio device requires 
  4784. the use of the same shared ampmix device. 
  4785.  
  4786.  
  4787. ΓòÉΓòÉΓòÉ 8.4. Using the CD Audio Device ΓòÉΓòÉΓòÉ
  4788.  
  4789. The CD audio device is a dynamic single context device and is serially 
  4790. shareable. 
  4791.  
  4792. open cdaudio alias mycd shareable wait
  4793.  
  4794. By setting the shareable flag, an application allows other applications to 
  4795. share the device. When the device context is about to become active, the 
  4796. multimedia system posts an MM_MCIPASSDEVICE message with an event of 
  4797. MCI_GAINING_USE to your application. 
  4798.  
  4799. Another common aspect of using the CD audio device is controlling the volume. 
  4800. Volume is controlled by indicating a percentage of the maximum achievable 
  4801. effect.  Like all other devices in OS/2 multimedia, this volume level is 
  4802. automatically tempered by the master volume level that was set using the Volume 
  4803. Control application. 
  4804.  
  4805. Volume Control Using the Internal DAC 
  4806.  
  4807. By default the CD audio device utilizes the internal DAC on the CD drive which 
  4808. is represented by an enabled headphones connector.  When the internal DAC is 
  4809. being used to process the CD audio data, requests to set the volume should be 
  4810. sent directly to the CD device. 
  4811.  
  4812. set mycd audio volume 50 all wait
  4813.  
  4814. Depending on the capabilities of the actual CD-ROM drive, the degree of volume 
  4815. control might vary from on or off, to a reasonably linear range of settings. 
  4816. For example, the IBM PS/2 CD-ROM-II Drive supports 16 different levels of 
  4817. volume.  An application might want to display either a simple two state mute 
  4818. button or a volume slider or dial depending on the degree of volume control 
  4819. provided by the CD drive.  If a CD audio device can set the volume to some 
  4820. value other than 0 or 100, then it is likely the device supports several volume 
  4821. levels.  For more information on two-state graphical buttons, see OS/2 
  4822. Multimedia Controls.  Refer to the PM Programming Reference for information on 
  4823. linear sliders and circular sliders (dials). 
  4824.  
  4825. Volume Control Using the Ampmix Device 
  4826.  
  4827. As stated previously, some CD audio devices have the capability to stream the 
  4828. audio data to a connected amplifier-mixer device.  To determine if a particular 
  4829. CD audio device can stream CD audio data the device capabilities command can be 
  4830. used.  If TRUE is returned, then the cd stream connector can subsequently be 
  4831. enabled. 
  4832.  
  4833. capability mycd can stream wait
  4834. .
  4835. .
  4836. .
  4837. ** If this CD audio device can stream **
  4838. .
  4839. .
  4840. .
  4841. connector mycd enable type cd stream wait
  4842.  
  4843. After enabling the cd stream, the CD audio device is utilizing the 
  4844. amplifier-mixer device to convert the audio data into sound.  As such, the 
  4845. application must now send all volume commands to the connected ampmix device. 
  4846. Before a command can be sent to the ampmix device, the application must obtain 
  4847. the device ID of the amplifier-mixer device using the MCI_CONNECTION message. 
  4848. If using the string interface, an alias can be assigned to the connected ampmix 
  4849. device as follows: 
  4850.  
  4851. connection mycd query type cd stream alias amp wait
  4852.  
  4853. In the previous example, the alias "amp" is assigned to the connected ampmix 
  4854. device.  To set the volume or to control other audio attributes, the 
  4855. application can now send messages directly to the ampmix device. 
  4856.  
  4857. set amp audio volume 25 over 2000 all wait
  4858. set amp audio treble 50 wait
  4859.  
  4860.  
  4861. ΓòÉΓòÉΓòÉ 8.4.1. Playing a Compact Disc ΓòÉΓòÉΓòÉ
  4862.  
  4863. Before issuing a play command, suitable media should be present in the CD 
  4864. drive.  The following status command will return TRUE if the disc contains 
  4865. CD-DA tracks that can be played by the CD audio device: 
  4866.  
  4867. status mycd media present wait
  4868.  
  4869. The CD audio device operates only on discs that contain CD-DA tracks.  If a 
  4870. disc contains no CD-DA tracks, then the MCIERR_INVALID_MEDIA error can be 
  4871. returned on any command that requires a CD-DA track format in order to 
  4872. complete. Example commands include play, seek, and the media present function 
  4873. of the status command. 
  4874.  
  4875. Other pertinent information regarding the CD audio device can be obtained using 
  4876. the status command: 
  4877.  
  4878.  Query                 Response 
  4879.  ready                 TRUE or FALSE 
  4880.  mode                  not ready, open, paused, playing, seeking, or stopped 
  4881.  time format           milliseconds, MMTIME, MSF, TMSF 
  4882.  volume                Current volume setting 
  4883.  
  4884.  The status command will also return the following information about the 
  4885.  currently inserted media: 
  4886.  
  4887.  Query                    Response 
  4888.  current track            Number of current track 
  4889.  position in track        Current position relative to track start 
  4890.  length track n           Length of track n 
  4891.  position track n         Starting position of track n 
  4892.  type track n             Audio or data 
  4893.  copypermitted track n    TRUE, if digital copying permitted 
  4894.  channels track n         Number of audio channels on track 
  4895.  preemphasis              TRUE, if track was recorded with preemphasis 
  4896.  start position           Starting position of the disc 
  4897.  position                 Position in current time format 
  4898.  number of tracks         Number of audio tracks on the disc 
  4899.  length                   Total length of tracks on the disc 
  4900.  
  4901.  Changing the Media 
  4902.  
  4903.  It is the responsibility of the application to ensure that the appropriate 
  4904.  compact disc is in the CD drive if having a particular disc is essential to 
  4905.  the application.  For example, a CD player application might simply update its 
  4906.  track and time displays if a new disc is inserted.  Other applications might 
  4907.  be so dependent on a specific disc that the user must be prompted to re-insert 
  4908.  the appropriate disc.  An application can choose to disable the manual eject 
  4909.  button on the physical CD drive to prevent the disc from being changed. 
  4910.  
  4911.   capability mycd can lockeject wait
  4912.   .
  4913.   .
  4914.   .
  4915.   ** If the door can be locked, lock it! **
  4916.   .
  4917.   .
  4918.   .
  4919.   set mycd door locked wait
  4920.  
  4921.  If the drive does not support disabling the manual eject, then the application 
  4922.  can check the disc identity by obtaining the UPC code (serial number) or the 
  4923.  more general CD ID.  The CD ID is an 8-byte identifier which can be obtained 
  4924.  using the info command and is constructed from the following information: 
  4925.  
  4926.      Starting track address 
  4927.  
  4928.      Ending track number 
  4929.  
  4930.      Lead-out track address. 
  4931.  
  4932.   info mycd ID wait
  4933.  
  4934.  The UPC code is a serial number which has been assigned to a particular 
  4935.  compact disc and can also be obtained using the info command, however not all 
  4936.  disc manufacturers utilize a UPC code. The UPC code is represented as a binary 
  4937.  coded decimal (BCD) number. 
  4938.  
  4939.   info mycd UPC wait
  4940.  
  4941.  If a play is in progress and the manual eject button is pressed on the CD 
  4942.  drive, the application will receive the MCIERR_DEVICE_NOT_READY error when the 
  4943.  play command is aborted. 
  4944.  
  4945.  
  4946. ΓòÉΓòÉΓòÉ 8.4.2. Unique Considerations for Streaming ΓòÉΓòÉΓòÉ
  4947.  
  4948. When the OS/2 multimedia system is streaming multimedia information from a 
  4949. CD-ROM drive, attempts by other applications to access and control the CD drive 
  4950. for normal file system operations can be suspended until the streaming 
  4951. operation is ended. The stream can be interrupted by a pause or a stop command, 
  4952. the completion of playback, or the ejection of the disc.  Once the stream is 
  4953. interrupted, any applications that were waiting can resume their attempts to 
  4954. gain control of the device. 
  4955.  
  4956. If the CD audio device is being shared and the disc is changed on an 
  4957. application which had lost use of the device, any active play command may be 
  4958. aborted with an error of MCIERR_MEDIA_CHANGED when use of the device is 
  4959. subsequently regained. 
  4960.  
  4961.  
  4962. ΓòÉΓòÉΓòÉ 8.5. CD-DA Command Messages ΓòÉΓòÉΓòÉ
  4963.  
  4964. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4965. ΓöéMessage                    ΓöéDescription                                       Γöé
  4966. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4967. ΓöéMCI_OPEN                   ΓöéInitializes the CD-DA device.                     Γöé
  4968. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4969. ΓöéMCI_GETDEVCAPS             ΓöéGets device capabilities.                         Γöé
  4970. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4971. ΓöéMCI_GETTOC                 ΓöéGets a table of contents structure for the        Γöé
  4972. Γöé                           Γöécurrently loaded disc.                            Γöé
  4973. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4974. ΓöéMCI_CUE                    ΓöéCues the device for minimum delay in playback.    Γöé
  4975. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4976. ΓöéMCI_PLAY                   ΓöéStarts playing audio data from the disc. The      Γöé
  4977. Γöé                           Γöéfollowing optional action modifies MCI_PLAY:      Γöé
  4978. Γöé                           Γöé-Specify start and stop positions on the disc     Γöé
  4979. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4980. ΓöéMCI_PAUSE                  ΓöéSuspends the current playback action.             Γöé
  4981. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4982. ΓöéMCI_RESUME                 ΓöéResumes playing from a paused state, keeping      Γöé
  4983. Γöé                           Γöépreviously specified parameters in effect.        Γöé
  4984. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4985. ΓöéMCI_SEEK                   ΓöéMoves to the specified position on the disc.      Γöé
  4986. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4987. ΓöéMCI_SET                    ΓöéSets audio attributes:                            Γöé
  4988. Γöé                           Γöé-Identify the channels to be used                 Γöé
  4989. Γöé                           Γöé-Set the volume                                   Γöé
  4990. Γöé                           Γöé-Apply the audio attribute change over a period ofΓöé
  4991. Γöé                           Γöétime (fade)                                       Γöé
  4992. Γöé                           Γöé-Enable or disable the audio output               Γöé
  4993. Γöé                           ΓöéRetract the tray and close the door, if possible  Γöé
  4994. Γöé                           Γöé-Open the door and eject the tray, if possible    Γöé
  4995. Γöé                           Γöé-Set the time format in milliseconds, MSF, TMSF,  Γöé
  4996. Γöé                           Γöéor MMTIME                                         Γöé
  4997. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4998. ΓöéMCI_SET_SYNC_OFFSET        ΓöéSpecifies positional offsets.                     Γöé
  4999. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5000. ΓöéMCI_STATUS                 ΓöéReceives status on items such as the following:   Γöé
  5001. Γöé                           Γöé-Current volume setting                           Γöé
  5002. Γöé                           Γöé-Length of the disc                               Γöé
  5003. Γöé                           Γöé-Whether the media is present in the device       Γöé
  5004. Γöé                           Γöé-Current mode of the device; for example,         Γöé
  5005. Γöé                           Γöé"stopped"                                         Γöé
  5006. Γöé                           Γöé-Current position in the media                    Γöé
  5007. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5008. ΓöéMCI_INFO                   ΓöéFills a user-supplied buffer with the following   Γöé
  5009. Γöé                           Γöéinformation:                                      Γöé
  5010. Γöé                           Γöé-Product name and model number of the current     Γöé
  5011. Γöé                           Γöéaudio device                                      Γöé
  5012. Γöé                           Γöé-Serial number (UPC) of the current disc          Γöé
  5013. Γöé                           Γöé-ID of the current disc                           Γöé
  5014. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5015. ΓöéMCI_STOP                   ΓöéStops playing the CD-DA device.                   Γöé
  5016. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5017. ΓöéMCI_SET_CUEPOINT           ΓöéSets a cue point.                                 Γöé
  5018. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5019. ΓöéMCI_SET_POSITION_ADVISE    ΓöéSets a position change notification request.      Γöé
  5020. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5021. ΓöéMCI_CLOSE                  ΓöéCloses the CD-DA device.                          Γöé
  5022. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5023. ΓöéMCI_CONNECTOR              ΓöéEnables or disables a connector, queries its stateΓöé
  5024. Γöé                           Γöéor identifies its type.                           Γöé
  5025. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5026.  
  5027.  
  5028. ΓòÉΓòÉΓòÉ 8.5.1. CD Audio Connectors ΓòÉΓòÉΓòÉ
  5029.  
  5030. The number and type of connectors can vary by manufacturer.  To determine which 
  5031. connectors are supported, an application can issue the MCI_CONNECTORINFO 
  5032. message.  Also, the device capabilities command can be issued to determine if 
  5033. the CD drive can stream audio to an amplifier-mixer device.  The following are 
  5034. typical of the connectors supported by CD audio devices: 
  5035.  
  5036.      Headphones 
  5037.  
  5038.      CD stream 
  5039.  
  5040.  
  5041. ΓòÉΓòÉΓòÉ 9. CD-XA Device ΓòÉΓòÉΓòÉ
  5042.  
  5043. CD-XA Disc Formats 
  5044.  
  5045. The CD-XA media driver provides access to devices that support CD-ROM/XA discs. 
  5046. CD-XA (Compact Disc-Extended Architecture) refers to a storage format that 
  5047. accommodates interleaved storage of audio, video and standard file system data. 
  5048. CD-XA data is stored in a file system format on the discs, and playback control 
  5049. is managed by the CD-XA media device in cooperation with the amplifier-mixer 
  5050. device. 
  5051.  
  5052. CD-XA takes advantage of a special ADPCM audio compression mechanism that not 
  5053. only yields a low data rate but also enables more audio data to be stored on a 
  5054. disc than that allowed by a CD-DA disc. ADPCM (Adaptive Delta Pulse Code 
  5055. Modulation) is an audio compression technique that allows up to a 16 to 1 
  5056. compression of audio data. 
  5057.  
  5058. By compressing the audio data (in some cases to 1/16 the size of CD-DA data) it 
  5059. now becomes possible to record multiple audio tracks on a single disc. With 
  5060. CD-XA level C, recorded in stereo, it is possible to interleave 8 different 
  5061. audio tracks on a single disc. With CD-XA level C, recorded in mono, this 
  5062. number climbs to 16 different tracks on a single disc. 
  5063.  
  5064. The following table summarizes the different compression levels available with 
  5065. CD-XA and compares them to CD-DA. 
  5066.  
  5067. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5068. ΓöéType      ΓöéAudio      ΓöéVideo     ΓöéFile ΓöéData Rate ΓöéOne Sec of     ΓöéSpec      Γöé
  5069. Γöé          Γöé           Γöé          ΓöéSys  Γöéper Sec   ΓöéAudio Data     Γöé          Γöé
  5070. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5071. ΓöéCD-DA     Γöé16-bit PCM ΓöéNo        ΓöéNo   Γöé172KB     ΓöéStereo: 172KB  ΓöéRed Book  Γöé
  5072. Γöé          Γöéat 44.1 kHzΓöé          Γöé     Γöé          Γöé               Γöé          Γöé
  5073. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5074. ΓöéCD-DA+G   Γöé16-bit PCM Γöé288 x 192 ΓöéNo   Γöé172KB     ΓöéStereo: 172KB  ΓöéRed Book  Γöé
  5075. Γöé          Γöéat 44.1 kHzΓöéCLUT4     Γöé     Γöé          Γöé               Γöé          Γöé
  5076. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5077. ΓöéCD-ROM    ΓöéNo         ΓöéNo        ΓöéYes  Γöé150KB     ΓöéN/A            ΓöéHigh      Γöé
  5078. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéSierra,   Γöé
  5079. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéISO 9660, Γöé
  5080. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéYellow    Γöé
  5081. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéBook      Γöé
  5082. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5083. ΓöéCD-XA     Γöé4-bit ADPCMΓöé320 x 200 ΓöéYes  Γöé150KB     ΓöéMono: 18.75KB  ΓöéGreen BookΓöé
  5084. ΓöéLevel B   Γöéat 37.8 kHzΓöé640 x 480 Γöé     Γöé          ΓöéStereo: 37.5KB Γöé          Γöé
  5085. Γöé          Γöé           ΓöéCLUT1,    Γöé     Γöé          Γöé               Γöé          Γöé
  5086. Γöé          Γöé           Γöé4 or 8    Γöé     Γöé          Γöé               Γöé          Γöé
  5087. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5088. ΓöéCD-XA     Γöé4-bit ADPCMΓöé320 x 200 ΓöéYes  Γöé150KB     ΓöéMono: 9.4KB    ΓöéGreen BookΓöé
  5089. ΓöéLevel C   Γöéat 18.9 kHzΓöé640 x 480 Γöé     Γöé          ΓöéStereo: 18.75KBΓöé          Γöé
  5090. Γöé          Γöé           ΓöéCLUT1,    Γöé     Γöé          Γöé               Γöé          Γöé
  5091. Γöé          Γöé           Γöé4 or 8    Γöé     Γöé          Γöé               Γöé          Γöé
  5092. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5093.  
  5094.  
  5095. ΓòÉΓòÉΓòÉ 9.1. CD-XA Data Types ΓòÉΓòÉΓòÉ
  5096.  
  5097. The CD-XA media device can play four streams of CD-XA data types simultaneously 
  5098. from the same CD-XA file. CD-XA data streams are set up by specifying the 
  5099. following flags with MCI_SET: 
  5100.  
  5101.  Flag                          CD-XA Stream Data Type 
  5102.  
  5103.  MCI_CDXA_AUDIO_DEVICE         CD-XA audio channel to an audio adapter. 
  5104.  
  5105.  MCI_CDXA_AUDIO_BUFFER         CD-XA audio channel to an audio memory playlist. 
  5106.  
  5107.  MCI_CDXA_VIDEO_BUFFER         CD-XA video channel to a video memory playlist. 
  5108.  
  5109.  MCI_CDXA_DATA_BUFFER          CD-XA data channel to a data memory playlist. 
  5110.  
  5111.  In the future IBM may provide the capability of setting up additional streams 
  5112.  to more than one audio device, or more than one audio, video, or data buffer 
  5113.  playlist. 
  5114.  
  5115.  If a channel contains data of more than one CD-XA data type (data and video), 
  5116.  and an MCI_SET is done, only data of the type specified is returned.  For 
  5117.  example, suppose an MCI_SET message is sent with MCI_CDXA_VIDEO_BUFFER, 
  5118.  channel 0, and a playlist specified. Although channel 0 contains sectors of 
  5119.  both audio and video, only the video sectors are sent to the memory playlist 
  5120.  buffers specified with the MCI_SET. If your application wants to retrieve the 
  5121.  audio sectors from channel 0, it must do another MCI_SET, this time specifying 
  5122.  MCI_CDXA_AUDIO_BUFFER, channel 0, and a playlist that is different from the 
  5123.  one specified for the video data. The audio would then be sent to the playlist 
  5124.  specified for MCI_CDXA_AUDIO_BUFFER, and the video sectors would be sent to 
  5125.  the playlist specified for MCI_CDXA_VIDEO_BUFFER. 
  5126.  
  5127.  
  5128. ΓòÉΓòÉΓòÉ 9.2. Using the CD-XA Device ΓòÉΓòÉΓòÉ
  5129.  
  5130. When an MCI_OPEN or MCI_LOAD request is made, it is recommended that a drive 
  5131. letter not be included as part of the element name. If a drive letter is 
  5132. specified, it must match the drive letter of the open device; otherwise, the 
  5133. error MCI_FILE_NOT_FOUND is returned. 
  5134.  
  5135. Setting Up the Primary Stream 
  5136.  
  5137. The first stream is set up by calling MCI_SET with one of the four target 
  5138. specifications: 
  5139.  
  5140.       MCI_CDXA_AUDIO_DEVICE 
  5141.       MCI_CDXA_AUDIO_BUFFER 
  5142.       MCI_CDXA_VIDEO_BUFFER 
  5143.       MCI_CDXA_DATA_BUFFER 
  5144.  
  5145.  The first stream to be set up is called the primary stream, because it 
  5146.  controls much of the operation of the CD-XA device. When stream control 
  5147.  operations are done on the CD-XA media device, they are done to the primary 
  5148.  stream.  For example, when an MCI_SEEK is done, only the primary stream is 
  5149.  seeked. This makes sense because the media is the same for all streams, and 
  5150.  seeking one of the streams affects the disc position for all the other 
  5151.  streams. 
  5152.  
  5153.  Because the primary stream is the control focus for the entire device, if an 
  5154.  MCI_SET is done while the MCI_SET_OFF flag is in effect for the primary 
  5155.  stream, the device is stopped. If the MCI_SET is done on a secondary stream, 
  5156.  only that secondary stream is stopped. 
  5157.  
  5158.  If an MCI_SET with MCI_SET_ON is not done before an MCI_PLAY, MCI_CUE, or 
  5159.  MCI_SEEK is sent, the first audio channel found on the CD-XA file is used as 
  5160.  the default and is set up as the primary stream using the 
  5161.  MCI_CDXA_AUDIO_DEVICE. It is recommended that an MCI_SET be sent for the 
  5162.  primary stream before an MCI_PLAY, MCI_CUE or MCI_SEEK. It is also recommended 
  5163.  that MCI_CDXA_AUDIO_DEVICE be used as the primary stream, because seeking and 
  5164.  playing with FROM and TO positions specified can only be done on a stream to 
  5165.  an audio device. The video, data and audio buffers do not have seek or time 
  5166.  capability.  When CD-XA data types are streamed to memory playlists, this 
  5167.  operation is done as a data transport and does not have a real timing aspect 
  5168.  associated with it.  For example, if an MCI_SET with an MCI_CDXA_DATA_BUFFER 
  5169.  stream was set as the primary stream, a seek or a status position to an MMTIME 
  5170.  unit or millisecond does not make sense, because there is no correlation of 
  5171.  time to the data volumes. 
  5172.  
  5173.  When an MCI_SET with MCI_CDXA_AUDIO_DEVICE is done, the audio quality level is 
  5174.  set by the media device, based on the quality level found in the first sector. 
  5175.  The audio quality level must be constant within a channel within a single file 
  5176.  when streamed to an audio device. The current CD-XA software does not detect 
  5177.  any deviations that occur. If the quality level changes in a channel, the 
  5178.  output audio may be garbled and the stream time will be inaccurate. 
  5179.  
  5180.  If the channel associated with the primary stream is set off and a PLAY 
  5181.  command is received, the error MCIERR_CHANNEL_OFF will be returned. 
  5182.  
  5183.  The valid range for audio channels is 0-15.  The valid range for video and 
  5184.  data channels is 0-31.  These ranges are defined by CD-XA specifications. 
  5185.  MCIERR_OUTOFRANGE is returned if the channel specified on the MCI_SET is 
  5186.  outside the range. 
  5187.  
  5188.  The channel assigned to a secondary target specification 
  5189.  (MCI_CDXA_AUDIO_DEVICE, MCI_CDXA_AUDIO_BUFFER, MCI_CDXA_VIDEO_BUFFER, or 
  5190.  MCI_CDXA_DATA_BUFFER) can be changed without closing the CD-XA media device. 
  5191.  To do this, your application calls MCI_SET with the MCI_SET_OFF flag for that 
  5192.  channel and then calls MCI_SET with the MCI_SET_ON flag and the new channel 
  5193.  number.  If MCI_SET with the MCI_SET_ON flag is called for a target 
  5194.  specification already in use, MCIERR_RESOURCE_NOT_AVAILABLE is returned if the 
  5195.  system or underlying hardware cannot support the additional resource demands. 
  5196.  
  5197.  The channel assigned to the primary target specification can be changed just 
  5198.  like a secondary one can. For example, a series of MCI_SET commands could be 
  5199.  made, specifying the following parameter sequences: 
  5200.  
  5201.       MCI_CDXA_AUDIO_DEVICE channel 0 MCI_SET_ON 
  5202.       MCI_CDXA_AUDIO_DEVICE channel 0 MCI_SET_OFF 
  5203.       MCI_CDXA_AUDIO_DEVICE channel 1 MCI_SET_ON 
  5204.  
  5205.  The MCI_SET commands would change the channel of the MCI_CDXA_AUDIO_DEVICE 
  5206.  from 0 to 1. 
  5207.  
  5208.  
  5209. ΓòÉΓòÉΓòÉ 9.2.1. XA Stream Connector ΓòÉΓòÉΓòÉ
  5210.  
  5211. The XA stream connector represents the flow of XA ADPCM audio from the CD-XA 
  5212. device to its associated amplifier-mixer (ampmix) device.  During playback, the 
  5213. CD-XA device sends audio information from a CD-ROM/XA disc to the ampmix device 
  5214. for subsequent conversion into audio that can be heard through conventional 
  5215. speakers or headphones. 
  5216.  
  5217. Although volume control is provided by the CD-XA device, the device actually 
  5218. uses the services provided by the ampmix device to modify the perceived volume 
  5219. level. If other advanced audio-shaping features are required, the application 
  5220. can retrieve the device ID of the ampmix device using the MCI_CONNECTION 
  5221. message. Once the device ID has been obtained, the application can send set 
  5222. commands directly to the ampmix device to manipulate audio attributes, such as 
  5223. treble, bass, balance, and so forth. 
  5224.  
  5225.  
  5226. ΓòÉΓòÉΓòÉ 9.2.2. Changing the Disc ΓòÉΓòÉΓòÉ
  5227.  
  5228. If the user ejects a disc while the CD-XA device is playing, the device is 
  5229. stopped. When the CD-XA device detects that the disc has been changed and a 
  5230. file was opened on the previous disc, it closes the current CD-XA file and 
  5231. resets to the default state of the device.  This state is identical to opening 
  5232. the CD-XA device without specifying a file. Following the reset, the CD-XA 
  5233. device returns MCIERR_MEDIA_CHANGED on the first command following detection of 
  5234. the disc change. 
  5235.  
  5236. To avoid the interruption of play by the ejection of the disc, the application 
  5237. can disable a manual eject with an MCI_SET command before beginning playback. 
  5238.  
  5239.  
  5240. ΓòÉΓòÉΓòÉ 9.3. CD-XA Command Messages ΓòÉΓòÉΓòÉ
  5241.  
  5242. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5243. ΓöéMessage                       ΓöéDescription                        Γöé
  5244. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5245. ΓöéMCI_CLOSE                     ΓöéCloses the CD-XA device.           Γöé
  5246. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5247. ΓöéMCI_CONNECTOR                 ΓöéEnables or disables a connector,   Γöé
  5248. Γöé                              Γöéqueries its state or identifies itsΓöé
  5249. Γöé                              Γöétype.                              Γöé
  5250. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5251. ΓöéMCI_CUE                       ΓöéCues the device for minimum delay  Γöé
  5252. Γöé                              Γöéin playback.                       Γöé
  5253. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5254. ΓöéMCI_GETDEVCAPS                ΓöéGets device capabilities.          Γöé
  5255. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5256. ΓöéMCI_INFO                      ΓöéFills a user-supplied buffer with  Γöé
  5257. Γöé                              Γöéthe following information:         Γöé
  5258. Γöé                              Γöé-Product name and model number of  Γöé
  5259. Γöé                              Γöéthe current audio device           Γöé
  5260. Γöé                              Γöé-Serial number (UPC) of the disc   Γöé
  5261. Γöé                              Γöé-Name of the currently loaded file Γöé
  5262. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5263. ΓöéMCI_LOAD                      ΓöéLoads a data element into the CD-XAΓöé
  5264. Γöé                              Γöédevice.                            Γöé
  5265. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5266. ΓöéMCI_OPEN                      ΓöéInitializes the CD-XA device.      Γöé
  5267. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5268. ΓöéMCI_PAUSE                     ΓöéSuspends the current playback      Γöé
  5269. Γöé                              Γöéaction.                            Γöé
  5270. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5271. ΓöéMCI_PLAY                      ΓöéStarts playing audio data from the Γöé
  5272. Γöé                              Γöédevice element. The following      Γöé
  5273. Γöé                              Γöéoptional action modifies MCI_PLAY: Γöé
  5274. Γöé                              Γöé-Specify start and stop positions  Γöé
  5275. Γöé                              Γöéin the device element              Γöé
  5276. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5277. ΓöéMCI_RESUME                    ΓöéResumes playing from a paused      Γöé
  5278. Γöé                              Γöéstate, keeping previously specifiedΓöé
  5279. Γöé                              Γöéparameters in effect.              Γöé
  5280. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5281. ΓöéMCI_SEEK                      ΓöéMoves to the specified position in Γöé
  5282. Γöé                              Γöéthe device element.                Γöé
  5283. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5284. ΓöéMCI_SET                       ΓöéSets audio attributes:             Γöé
  5285. Γöé                              Γöé-Identify the channels to be used  Γöé
  5286. Γöé                              Γöé-Set the volume                    Γöé
  5287. Γöé                              Γöé-Enable or disable the audio outputΓöé
  5288. Γöé                              ΓöéRetracts the tray and closes the   Γöé
  5289. Γöé                              Γöédoor, if possible                  Γöé
  5290. Γöé                              ΓöéOpens the door and ejects the tray,Γöé
  5291. Γöé                              Γöéif possible                        Γöé
  5292. Γöé                              ΓöéSets the time format in            Γöé
  5293. Γöé                              Γöémilliseconds or MMTIME             Γöé
  5294. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5295. ΓöéMCI_SET_CUEPOINT              ΓöéSets a cue point.                  Γöé
  5296. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5297. ΓöéMCI_SET_POSITION_ADVISE       ΓöéSets a position change notificationΓöé
  5298. Γöé                              Γöérequest.                           Γöé
  5299. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5300. ΓöéMCI_SET_SYNC_OFFSET           ΓöéSets a synchronization offset.     Γöé
  5301. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5302. ΓöéMCI_STATUS                    ΓöéReceives status on items such as   Γöé
  5303. Γöé                              Γöéthe following:                     Γöé
  5304. Γöé                              Γöé-Current volume setting            Γöé
  5305. Γöé                              Γöé-Whether the media is present in   Γöé
  5306. Γöé                              Γöéthe device;                        Γöé
  5307. Γöé                              Γöé-Current mode of the device, for   Γöé
  5308. Γöé                              Γöéexample, "stopped"                 Γöé
  5309. Γöé                              Γöé-Current position in the media     Γöé
  5310. Γöé                              Γöé-Destination of the data identifiedΓöé
  5311. Γöé                              Γöéby channel number                  Γöé
  5312. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5313. ΓöéMCI_STOP                      ΓöéStops playing the CD-XA device.    Γöé
  5314. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5315.  
  5316.  
  5317. ΓòÉΓòÉΓòÉ 10. Videodisc Device ΓòÉΓòÉΓòÉ
  5318.  
  5319. The physical videodisc device is an external hardware device that plays 
  5320. videodiscs, producing an analog video and audio signal. The analog video output 
  5321. can be connected to an analog video digitizer component that produces output on 
  5322. the display, or it can simply be connected to a an external video monitor. The 
  5323. audio output can be connected to amplified speakers, headphones, or other audio 
  5324. media drivers. 
  5325.  
  5326.  
  5327. ΓòÉΓòÉΓòÉ 10.1. Device Specifics ΓòÉΓòÉΓòÉ
  5328.  
  5329. The videodisc media device supports Pioneer models 4200, 4300D, 4400, and 8000. 
  5330. The 4300D supports both the American (NTSC) and European (PAL) TV standards for 
  5331. storing analog video signals. Default communications settings for the players 
  5332. are:  8 data bits, no parity, 1 stop bit with a baud rate of 4800.  The first 
  5333. communications port is also selected by default. These settings may be changed 
  5334. using the Multimedia Setup application if they do not match the current 
  5335. settings of the actual videodisc device.  It is highly recommended that 
  5336. communication speeds at or above 4800 bits per second (bps) be utilized to 
  5337. ensure reliable and optimized performance. 
  5338.  
  5339. Because the physical connections on the back of each videodisc device varies, 
  5340. the driver updates the connector and product information when the device is 
  5341. first opened. Applications can retrieve connector information, using 
  5342. MCI_CONNECTORINFO, and product information, using MCI_INFO. 
  5343.  
  5344.  
  5345. ΓòÉΓòÉΓòÉ 10.1.1. Videodisc Formats ΓòÉΓòÉΓòÉ
  5346.  
  5347. A videodisc has one of two formats:  CAV or CLV. 
  5348.  
  5349. CAV (constant angular velocity) is the interactive format of videodiscs, which 
  5350. allows freeze frame and slow motion. The CAV videodisc can be addressed by 
  5351. chapter or by frame. A CAV videodisc can contain up to 30 minutes of video on 
  5352. each side of the disc. One disc holds up to 54,000 frames. 
  5353.  
  5354. With a CAV format videodisc, the angular velocity of the disc is always the 
  5355. same (1800 RPM), no matter what track is being read, which is similar to the 
  5356. way a phonograph record is played. 
  5357.  
  5358. CLV (constant linear velocity) is the format for extended-play videodiscs. The 
  5359. CLV videodisc can be addressed by chapter or by time. A CLV videodisc can 
  5360. contain up to 60 minutes of video on each side of the disc. 
  5361.  
  5362. With a CLV format videodisc, the linear velocity of the disc is constant under 
  5363. the laser head; the disc spins slower when the outside tracks are read. 
  5364.  
  5365. Note:  The number of chapters on CAV and CLV discs varies, depending on the 
  5366.        manufacturer of the disc. 
  5367.  
  5368.  
  5369. ΓòÉΓòÉΓòÉ 10.2. Using the Videodisc Device ΓòÉΓòÉΓòÉ
  5370.  
  5371. Using the videodisc device consists of opening, configuring, seeking/stepping, 
  5372. playing, and setting cue points. 
  5373.  
  5374.  
  5375. ΓòÉΓòÉΓòÉ 10.2.1. Opening the Device ΓòÉΓòÉΓòÉ
  5376.  
  5377. The videodisc player is a dynamic single context device and therefore is 
  5378. serially shareable. When you open the videodisc player, it takes about 60 
  5379. seconds for the disc to load and spin up to a playing position. Specifying a 
  5380. notify flag on the open request allows your application window procedure to 
  5381. remain available to process PM messages. 
  5382.  
  5383. open videodisc alias video1 notify shareable
  5384.  
  5385. If you set the shareable flag, you should not start a playback operation until 
  5386. the system posts the asynchronous MM_MCIPASSDEVICE message with an event of 
  5387. MCI_GAINING_USE to your application. 
  5388.  
  5389. When the system posts the asynchronous MM_MCINOTIFY message with a return code 
  5390. of MCI_NOTIFY_SUCCESSFUL message to your application, this indicates a device 
  5391. context is created. Although you may not have received the MCI_GAINING_USE 
  5392. event in a MM_MCIPASSDEVICE message, you can still make inquiries about the 
  5393. device and the media. The status, capability, info, and close commands can be 
  5394. sent to an inactive device context. 
  5395.  
  5396. You may want to ensure that the disc in the player is not changed by the user. 
  5397. Some devices allow you to disable the manual eject.  Other devices allow you to 
  5398. check the label on the disc: 
  5399.  
  5400. info video1 label wait
  5401.  
  5402. Specify the wait flag with commands that return information. A string for the 
  5403. label is returned in the user-supplied buffer specified with mciSendString. 
  5404.  
  5405. Use the status command to determine the current state of the videodisc player: 
  5406.  
  5407.  Query                 Response 
  5408.  ready                 TRUE or FALSE 
  5409.  mode                  not ready, open, pause, park, play, scan, seek, or stop. 
  5410.  forward               TRUE, if player is set to play in forward direction. 
  5411.  time format           milliseconds, MMTIME, frames, chapters, HMS, HMSF. 
  5412.  position              Position in current format. 
  5413.  speed format          % or FPS. 
  5414.  speed                 Speed in current format. 
  5415.  
  5416.  The status command also returns a lot of information about the disc: 
  5417.  
  5418.   status video1 media present wait
  5419.  
  5420.  Query                 Response 
  5421.  media present         TRUE or FALSE 
  5422.  media type            CAV, CLV, other 
  5423.  disc size             8 or 12 
  5424.  disc side             1 or 2 
  5425.  number of tracks      Number of tracks on the disc. 
  5426.  current track         Chapter number, if applicable. 
  5427.  length                Length of the current segment. 
  5428.  Start                 Starting position of the media. 
  5429.  
  5430.  Use the capability command to query device capabilities for a particular 
  5431.  format. You can request either CAV or CLV information. If no format is 
  5432.  indicated, the default is CAV. 
  5433.  
  5434.   capability video1 clv can reverse wait
  5435.  
  5436.  
  5437. ΓòÉΓòÉΓòÉ 10.2.2. Configuring the Device ΓòÉΓòÉΓòÉ
  5438.  
  5439. Before you begin playing the disc, you may want to set the audio channels. Most 
  5440. videodisc players have two channels for audio. On some videodisc players, the 
  5441. channels are used to produce a stereo effect.  Other videodisc players allow 
  5442. you to turn one of the channels off, based on a selection by the user. This 
  5443. feature is useful for offering the user a choice of language, a level of 
  5444. instruction, and so forth. 
  5445.  
  5446. Most videodisc players allow you to set the volume off (zero) or on (greater 
  5447. than zero) but do not offer a range of values for volume. 
  5448.  
  5449. set video1 audio left off
  5450.  
  5451. You can set the speed format to frames-per-second or a percentage of the normal 
  5452. rate.  The default for the speed format is frames-per-second, and the default 
  5453. for the time format is frames. 
  5454.  
  5455. Most videodisc players have an on-screen display that you can set on or off. 
  5456. The display is a counter that keeps track of your position. The on-screen 
  5457. display is useful for debugging an application-for example, an interactive 
  5458. course. The display shows you where you are in relation to where you may want 
  5459. to be. 
  5460.  
  5461.  
  5462. ΓòÉΓòÉΓòÉ 10.2.3. Seeking and Stepping ΓòÉΓòÉΓòÉ
  5463.  
  5464. You can seek and step to a location on the disc using any of the videodisc time 
  5465. formats. Seeking is a fast-forward or fast-reverse to an absolute position. 
  5466. Stepping is done, backward and forward, in time units relative to the current 
  5467. position.  The default for a step is one time unit forward. 
  5468.  
  5469. seek video1 to start
  5470. step video1 by 1
  5471.  
  5472. Some videodisc players do not display a picture when you do a step. You get a 
  5473. "squelch" color, which is the color of the screen when a frame is not yet 
  5474. displayed. Some devices, particularly for CLV, cannot be frame accurate. 
  5475.  
  5476.  
  5477. ΓòÉΓòÉΓòÉ 10.2.4. Playing a Videodisc ΓòÉΓòÉΓòÉ
  5478.  
  5479. Some videodisc players can vary the playback speed of the CAV disc and also 
  5480. play the disc in reverse. Some players also can perform these operations on a 
  5481. CLV disc. Following are capability queries and the responses generated by a 
  5482. Pioneer 8000 device for CAV and CLV discs: 
  5483.  
  5484.  Query                 Response 
  5485.  can reverse           TRUE 
  5486.  normal play rate      30 fps or 100% 
  5487.  fast play rate        90 fps or 300% 
  5488.  slow play rate        10 fps or 33.33% 
  5489.  maximum play rate     127 fps or 423.33% 
  5490.  minimum play rate     1 fps or 3.33% 
  5491.  
  5492.  Specifying a seek command before a play command can reduce the delay 
  5493.  associated with a PLAY command. 
  5494.  
  5495.  A play command can specify a to and from position. If from is omitted, playing 
  5496.  begins at the current position. If to is omitted, playing stops at the end of 
  5497.  the disc, or at the beginning of the disc, if playing in reverse. 
  5498.  
  5499.   play video1 speed 30 fps
  5500.  
  5501.  Note:  Some videodisc players that cannot vary the playback speed return the 
  5502.         same playback rate in response to these queries. 
  5503.  
  5504.  
  5505. ΓòÉΓòÉΓòÉ 10.2.5. Setting Cue Points and Position Advises ΓòÉΓòÉΓòÉ
  5506.  
  5507. A cue point is a location in the media that issues an MM_MCICUEPOINT 
  5508. notification message whenever it is encountered. The message is returned to the 
  5509. window specified when the cue point was set. Although a cue point is specified 
  5510. in the current time format with setcuepoint, the MM_MCICUEPOINT message is 
  5511. always returned in MMTIME units. MMTIME units are used because the time format 
  5512. set when the cue point is set and the time format set when the cue point is 
  5513. reached may be different.  An application specific value can also be associated 
  5514. with a particular cue point for return in the MM_MCICUEPOINT message.  The 
  5515. value can be anything which has meaning to the application. Generally, up to 20 
  5516. cue points can be set. 
  5517.  
  5518. set video1 time format frames
  5519. setcuepoint video1 on at 1500 return 1
  5520. setcuepoint video1 on at 4000 return 2
  5521.  
  5522. An MM_MCIPOSITIONCHANGE notification message is issued at periodic intervals as 
  5523. time elapses in the media for a particular device context. The message is 
  5524. returned to the window specified when the position advise was set with 
  5525. setpositionadvise. Only one position advise can be set for a device context. 
  5526. As with setcuepoint, the position specified is assumed to be in the currently 
  5527. selected time format while the position reported in the MM_MCIPOSITIONCHANGE 
  5528. notification is in MMTIME units. 
  5529.  
  5530. For more information on cue points and position advises, see Cue Points and 
  5531. Position Advises. 
  5532.  
  5533. setpositionadvise video1 on every 100
  5534.  
  5535. Because videodisc players are external devices and not part of the computer 
  5536. system, the IBM videodisc media driver can guarantee the accuracy of 
  5537. setcuepoint and setpositionadvise functions only within 10 frames, rather than 
  5538. the desired 100 milliseconds (3 frames) of the specified value. 
  5539.  
  5540.  
  5541. ΓòÉΓòÉΓòÉ 10.3. Videodisc Player Error Return Values ΓòÉΓòÉΓòÉ
  5542.  
  5543. The following table contains a list of error messages specific to videodisc 
  5544. players. 
  5545.  
  5546. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5547. ΓöéReturn Code                   ΓöéCause of the Error Message                   Γöé
  5548. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5549. ΓöéMCIERR_VDP_COMMANDFAILURE     ΓöéVideodisc players are external RS-232        Γöé
  5550. Γöé                              Γöédevices; therefore, it is possible for a     Γöé
  5551. Γöé                              Γöécommand to fail because of a device failure. Γöé
  5552. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5553. ΓöéMCIERR_VDP_COMMANDCANCELLED   ΓöéA command with the MCI_WAIT flag specified isΓöé
  5554. Γöé                              Γöéeither aborted or superseded.                Γöé
  5555. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5556. ΓöéMCIERR_VDP_NOSIDE             ΓöéThe videodisc player is unable to determine  Γöé
  5557. Γöé                              Γöéthe side of the videodisc. This message can  Γöé
  5558. Γöé                              Γöébe returned by an MCI_STATUS                 Γöé
  5559. Γöé                              ΓöéMCI_VD_STATUS_SIDE request.                  Γöé
  5560. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5561. ΓöéMCIERR_VDP_NOSIZE             ΓöéThe videodisc player is unable to determine  Γöé
  5562. Γöé                              Γöéthe size of the videodisc. This message can  Γöé
  5563. Γöé                              Γöébe returned by an MCI_STATUS                 Γöé
  5564. Γöé                              ΓöéMCI_VD_STATUS_DISC_SIZE request.             Γöé
  5565. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5566. ΓöéMCIERR_VDP_INVALID_TIMEFORMAT ΓöéThis message can be returned by any command  Γöé
  5567. Γöé                              Γöéspecifying a chapter-specific parameter for aΓöé
  5568. Γöé                              Γöédevice that does not have chapters. It also  Γöé
  5569. Γöé                              Γöécan be returned if MCI_SET_SYNC_OFFSET is    Γöé
  5570. Γöé                              Γöéissued when the device is set to the chapter Γöé
  5571. Γöé                              Γöétime format.                                 Γöé
  5572. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5573. ΓöéMCIERR_VDP_NOCHAPTER          ΓöéChapter information is not present on the    Γöé
  5574. Γöé                              Γöédisc. The following commands require chapter Γöé
  5575. Γöé                              Γöéinformation to be present on the disc:       Γöé
  5576. Γöé                              ΓöéMCI_SET_TIME_FORMAT MCI_FORMAT CHAPTERS,     Γöé
  5577. Γöé                              ΓöéMCI_STATUS MCI_STATUS_CURRENT_TRACK,         Γöé
  5578. Γöé                              ΓöéMCI_STATUS MCI_STATUS_NUMBER_OF_TRACKS.      Γöé
  5579. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5580. ΓöéMCIERR_VDP_NOTSPUNUP          ΓöéThe following commands require the videodisc Γöé
  5581. Γöé                              Γöéto be spun up: MCI_INFO MCI_VD_INFO_LABEL andΓöé
  5582. Γöé                              ΓöéMCI_STATUS with the following parameters     Γöé
  5583. Γöé                              Γöéspecified: MCI_STATUS_POSITION,              Γöé
  5584. Γöé                              ΓöéMCI_STATUS_CURRENT_TRACK,                    Γöé
  5585. Γöé                              ΓöéMCI_STATUS_NUMBER_OF_TRACKS,                 Γöé
  5586. Γöé                              ΓöéMCI_STATUS_LENGTH, MCI_VD_MEDIA_TYPE,        Γöé
  5587. Γöé                              ΓöéMCI_VD_STATUS_SIDE, MCI_VD_STATUS_SPEED,     Γöé
  5588. Γöé                              ΓöéMCI_VD_STATUS_DISC_SIZE.                     Γöé
  5589. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5590.  
  5591.  
  5592. ΓòÉΓòÉΓòÉ 10.4. Videodisc Command Messages ΓòÉΓòÉΓòÉ
  5593.  
  5594. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5595. ΓöéMessage                 ΓöéDescription                                  Γöé
  5596. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5597. ΓöéMCI_OPEN                ΓöéInitializes the videodisc device.            Γöé
  5598. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5599. ΓöéMCI_GETDEVCAPS          ΓöéGets device capabilities.                    Γöé
  5600. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5601. ΓöéMCI_ESCAPE              ΓöéSends custom information to the media driver.Γöé
  5602. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5603. ΓöéMCI_CUE                 ΓöéCues the device for minimum delay in         Γöé
  5604. Γöé                        Γöéplayback.                                    Γöé
  5605. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5606. ΓöéMCI_PLAY                ΓöéStarts playing the videodisc. The following  Γöé
  5607. Γöé                        Γöéoptional actions modify MCI_PLAY:            Γöé
  5608. Γöé                        Γöé-Specify start and stop positions            Γöé
  5609. Γöé                        Γöé-Play faster than normal                     Γöé
  5610. Γöé                        Γöé-Play slower than normal                     Γöé
  5611. Γöé                        Γöé-Play in reverse                             Γöé
  5612. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5613. ΓöéMCI_PAUSE               ΓöéSuspends the current playback action for CLV Γöé
  5614. Γöé                        Γöéand CAV discs. Some players may also freeze  Γöé
  5615. Γöé                        Γöéthe video frame.                             Γöé
  5616. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5617. ΓöéMCI_RESUME              ΓöéResumes playing from a paused state, keeping Γöé
  5618. Γöé                        Γöépreviously specified parameters in effect.   Γöé
  5619. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5620. ΓöéMCI_SEEK                ΓöéSearches, using fast forward or fast reverse,Γöé
  5621. Γöé                        Γöéwith video and audio off.  The following     Γöé
  5622. Γöé                        Γöéoptional actions modify MCI_SEEK:            Γöé
  5623. Γöé                        Γöé-Seek in reverse                             Γöé
  5624. Γöé                        Γöé-Seek to the start or the end of the disc    Γöé
  5625. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5626. ΓöéMCI_SET                 ΓöéSets audio attributes:                       Γöé
  5627. Γöé                        Γöé-Identify the channels to be used            Γöé
  5628. Γöé                        Γöé-Set the volume                              Γöé
  5629. Γöé                        Γöé-Enable or disable the audio output.         Γöé
  5630. Γöé                        ΓöéRetracts the tray and closes the door, if    Γöé
  5631. Γöé                        Γöépossible                                     Γöé
  5632. Γöé                        ΓöéOpens the door and ejects the tray, if       Γöé
  5633. Γöé                        Γöépossible                                     Γöé
  5634. Γöé                        ΓöéSets position format in frames, HMS, HMSF,   Γöé
  5635. Γöé                        Γöémilliseconds, MMTIME, or chapters            Γöé
  5636. Γöé                        ΓöéSets speed format in frames-per-second or as Γöé
  5637. Γöé                        Γöéa percentage                                 Γöé
  5638. Γöé                        ΓöéDisables or enables video output.            Γöé
  5639. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5640. ΓöéMCI_STATUS              ΓöéReceives status on items such as the         Γöé
  5641. Γöé                        Γöéfollowing:                                   Γöé
  5642. Γöé                        Γöé-Disc size                                   Γöé
  5643. Γöé                        Γöé-Which side of the disc is loaded            Γöé
  5644. Γöé                        Γöé-Whether current play direction is forward orΓöé
  5645. Γöé                        Γöébackward                                     Γöé
  5646. Γöé                        Γöé-Length of the segment                       Γöé
  5647. Γöé                        Γöé-Whether the media is present in the device  Γöé
  5648. Γöé                        Γöé-What the media type is: CAV, CLV, or other  Γöé
  5649. Γöé                        Γöé-What the current speed format is            Γöé
  5650. Γöé                        Γöé-Current mode of the device; for example,    Γöé
  5651. Γöé                        Γöé"stopped"                                    Γöé
  5652. Γöé                        Γöé-Current position in the media.              Γöé
  5653. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5654. ΓöéMCI_INFO                ΓöéFills a user-supplied buffer with the        Γöé
  5655. Γöé                        Γöéfollowing information:                       Γöé
  5656. Γöé                        Γöé-Product name of the device the peripheral isΓöé
  5657. Γöé                        Γöécontrolling.                                 Γöé
  5658. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5659. ΓöéMCI_STOP                ΓöéStops playing the videodisc device.          Γöé
  5660. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5661. ΓöéMCI_SET_CUEPOINT        ΓöéSets a cue point.                            Γöé
  5662. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5663. ΓöéMCI_SET_POSITION_ADVISE ΓöéSets a position change notification request. Γöé
  5664. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5665. ΓöéMCI_SPIN                ΓöéStarts or stop the disc from spinning.       Γöé
  5666. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5667. ΓöéMCI_STEP                ΓöéSteps the play one or more time units forwardΓöé
  5668. Γöé                        Γöéor backward.                                 Γöé
  5669. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5670. ΓöéMCI_CLOSE               ΓöéCloses the videodisc device.                 Γöé
  5671. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5672. ΓöéMCI_CONNECTOR           ΓöéEnables or disables a connector, query its   Γöé
  5673. Γöé                        Γöéstate or identify its type.                  Γöé
  5674. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5675.  
  5676.  
  5677. ΓòÉΓòÉΓòÉ 11. Digital Video Device ΓòÉΓòÉΓòÉ
  5678.  
  5679. The OS/2 digital video (digitalvideo) device allows an application to play or 
  5680. record motion video files. 
  5681.  
  5682. The digital video device provides file-format support through the multimedia 
  5683. input/output (MMIO) architecture. OS/2 multimedia includes custom I/O 
  5684. procedures for the AVI, MPEG, FLC, and FLI file formats. Files containing 
  5685. interleaved video and audio are supported, as well as video-only files. 
  5686.  
  5687.  
  5688. ΓòÉΓòÉΓòÉ 11.1. Compression Formats ΓòÉΓòÉΓòÉ
  5689.  
  5690. The digital video device provides video playback and recording support through 
  5691. its open compressor/decompressor (CODEC) architecture. The digital video device 
  5692. supports the IBM Ultimotion compression format as well as the Indeo 2.1, 3.1, 
  5693. and 3.2 compression formats. These particular compression formats are 
  5694. represented by unique FOURCC identifiers of ULTI, RT21, IV31, and IV32, 
  5695. respectively. A FOURCC is a 32-bit quantity representing a sequence of one to 
  5696. four ASCII alphanumeric characters (padded on the right with blank characters). 
  5697. For more information on CODEC procedures, see CODEC Procedures. 
  5698.  
  5699.  
  5700. ΓòÉΓòÉΓòÉ 11.2. About Ultimotion ΓòÉΓòÉΓòÉ
  5701.  
  5702. Advances in microprocessor power, data storage, and compression technology have 
  5703. provided key technologies for creating and playing digital video data on 
  5704. personal computers.  The high-capacity disk drives and CD-ROMs satisfy the 
  5705. large storage needs of digital video data.  Additionally, today's more powerful 
  5706. microprocessors provide sufficient power to handle digital video data in real 
  5707. time. When these advances are combined with image compression techniques, the 
  5708. result is a powerful integration of video and the personal computer. 
  5709.  
  5710. Several compression algorithms are currently in use throughout the industry. 
  5711. Some of these algorithms, like MPEG, use additional video hardware to compress 
  5712. and decompress the digitized video. Others are less numerically intensive and 
  5713. can be handled by software running on the main CPU and still maintain 
  5714. sufficient frame rates to provide motion.  These are referred to as 
  5715. software-only algorithms or software motion video.  While software-only 
  5716. techniques are attractive due to their low cost, the video quality of these 
  5717. algorithms is typically lower than the hardware-based algorithms. Consequently, 
  5718. producers of digital video data struggle with trading off lower quality and 
  5719. cost of software-only techniques for the higher quality and cost of 
  5720. hardware-assisted video. This section describes how Ultimotion addresses these 
  5721. needs as a single compression technique capable of providing a spectrum of 
  5722. quality levels from a single copy of the digital video data. 
  5723.  
  5724.  
  5725. ΓòÉΓòÉΓòÉ 11.2.1. Data Stream Capabilities ΓòÉΓòÉΓòÉ
  5726.  
  5727. Ultimotion is a playback-time scalable-video data stream. While the frame rate, 
  5728. output resolution, and color depth characteristics of a video are set when the 
  5729. video is created, the characteristics of a playback-scalable video are modified 
  5730. during playback utilizing the capabilities of the playback platform. These 
  5731. playback-platform capabilities depend on the type of microprocessor, display 
  5732. driver, video adapter, and data bandwidth available during playback. 
  5733.  
  5734.  
  5735. ΓòÉΓòÉΓòÉ 11.2.1.1. Playback Characteristics ΓòÉΓòÉΓòÉ
  5736.  
  5737. While Ultimotion is a playback-time scalable-video data stream, the magnitude 
  5738. that the data stream will "scale" is determined by the amount of information 
  5739. that is encoded in the data stream when it was created; that is, the amount of 
  5740. data placed in the data stream at creation time determines the "maximum" 
  5741. playback characteristics that a particular stream can achieve. In turn, the 
  5742. processing capabilities of the playback system determine how much of the data 
  5743. can be processed and presented during playback.  Therefore, the playback 
  5744. characteristics of a given video are a function of the data put into the video 
  5745. by the author and the processing capabilities of the playback system. 
  5746.  
  5747. The factors affecting the data stream at creation time are: 
  5748.  
  5749.  Resolution          Width and height of video 
  5750.  Frame duration      Frequency at which frames are to be created 
  5751.  I-frame rate        Frequency at which reference frames are to occur 
  5752.  Data rate           Average amount of data allowed for a second of video 
  5753.  
  5754.  Factors affecting the playback of a video are: 
  5755.  
  5756.      Processing power of the CPU 
  5757.      Throughput of data storage (for example, CD-ROM, hard disk, LAN) 
  5758.      Efficiency of the display subsystem (such as the video adapter and 
  5759.       display driver) 
  5760.  
  5761.  
  5762. ΓòÉΓòÉΓòÉ 11.2.1.2. Resolution Scalability ΓòÉΓòÉΓòÉ
  5763.  
  5764. Resolution of video determines how much spatial information is in a video file. 
  5765. Ultimotion compression algorithms organize this data so that it can be easily 
  5766. scaled up or down by factors of two as it is decompressed. Furthermore, as the 
  5767. data is decompressed, a sufficiently powered playback system can duplicate the 
  5768. data during output and display the video at four times its original size. This 
  5769. results in an effective output size larger than the input size.  In this way, 
  5770. Ultimotion can be scaled down on systems incapable of processing the authored 
  5771. video resolution and scaled up on systems with more processing capability than 
  5772. the authored video requires. 
  5773.  
  5774.  
  5775. ΓòÉΓòÉΓòÉ 11.2.1.3. Color Scalability ΓòÉΓòÉΓòÉ
  5776.  
  5777. Ultimotion compression algorithms store images in 16-bit true color.  This 
  5778. color is scaled down to the number of colors available on the playback system. 
  5779.  
  5780.  
  5781. ΓòÉΓòÉΓòÉ 11.2.2. Compression Ratios ΓòÉΓòÉΓòÉ
  5782.  
  5783. Ultimotion compressed frames use a coherent set of techniques for encoding a 
  5784. series of images. Different techniques are used for different purposes. Some 
  5785. represent detail very well while others represent large uniform areas with only 
  5786. a little data, and others fall in between but are very easily detected. 
  5787. Techniques can be mixed according to the needs of the image being compressed 
  5788. and are organized in an efficient manner for both compression and 
  5789. decompression. The result of mixing techniques is a data stream robust enough 
  5790. to be generated by software both asymmetrically and symmetrically. 
  5791.  
  5792.  
  5793. ΓòÉΓòÉΓòÉ 11.2.2.1. Symmetric Compression ΓòÉΓòÉΓòÉ
  5794.  
  5795. The Ultimotion compression techniques used on live video sources balance how 
  5796. well an image's detail is retained with how much time can be taken to analyze 
  5797. and compress the image. Symmetric Ultimotion compression uses the following 
  5798. items to determine the size and speed of symmetrically compressed Ultimotion 
  5799. videos: 
  5800.  
  5801.      Image size 
  5802.      Image quality (high, medium, low) 
  5803.      Processor speed of the capture system 
  5804.  
  5805.  A 320 x 240 movie recorded at 15 frames per second at medium quality requires 
  5806.  9MB per minute of video.  Reducing either the resolution, frame rate, or 
  5807.  quality setting reduces the amount of storage required. 
  5808.  
  5809.  
  5810. ΓòÉΓòÉΓòÉ 11.2.2.2. Asymmetric Compression ΓòÉΓòÉΓòÉ
  5811.  
  5812. The Ultimotion compression techniques used during offline or asymmetric video 
  5813. recording take more time during the compression phase than it takes to 
  5814. decompress the video when the movie is played.  By spending more time on 
  5815. compression, these techniques produce higher quality images and can compress 
  5816. the video data more effectively. Ultimotion asymmetric compression techniques 
  5817. produce movies stored using 320 x 240 resolution, 15 frame per second, and can 
  5818. be played from a CD.  Movies made with these specifications require 9MB per 
  5819. minute. Reducing either the resolution, frame rate, or quality setting reduces 
  5820. the amount of storage required.  Increasing these specifications require faster 
  5821. storage devices (for example, double speed CD-ROM or hard disk) and faster 
  5822. playback systems. 
  5823.  
  5824.  
  5825. ΓòÉΓòÉΓòÉ 11.2.3. Computational Complexity ΓòÉΓòÉΓòÉ
  5826.  
  5827. Ultimotion compression algorithms use byte-oriented data structures and 
  5828. efficient data organization to provide software-only decompression. Since frame 
  5829. rate, resolution, and data rate are set when a movie is created, these settings 
  5830. determine the minimum platform required for playback.  The "standard Ultimotion 
  5831. movie" is defined as 320 x 240, 15 frames per second at a 150KB per second data 
  5832. rate. This movie can be played on at least a 25 MHz 80386 microprocessor and an 
  5833. SVGA display adapter. Computers with 33 MHz 80486 microprocessors are capable 
  5834. of displaying 320 x 240 resolution at 24 frames per second or 640 x 480 
  5835. resolution at 15 frames per second. 
  5836.  
  5837.  
  5838. ΓòÉΓòÉΓòÉ 11.3. Using the Digital Video Device ΓòÉΓòÉΓòÉ
  5839.  
  5840. OS/2 multimedia provides support to OS/2 Presentation Manager applications for 
  5841. controlling recording or playback of motion video.  Playback of video can be 
  5842. performed in either a default window or an application window. Recording can be 
  5843. performed using video capture hardware devices with appropriate device driver 
  5844. support.  The digital video device can also be used to capture still image 
  5845. (bit-map) data from video capture hardware or previously recorded motion video 
  5846. files. 
  5847.  
  5848. This section describes digital video functions and provides examples using 
  5849. media control interface string commands. 
  5850.  
  5851.  
  5852. ΓòÉΓòÉΓòÉ 11.3.1. Opening the Device ΓòÉΓòÉΓòÉ
  5853.  
  5854. The MCI_OPEN message is issued to create a device context of the the digital 
  5855. video device.  A default window is created and displayed when the device is 
  5856. opened if the device is cued for output or a movie is loaded. The video device 
  5857. directs its output to the default window.  If a window is specified with the 
  5858. MCI_WINDOW message the video device directs its output to the window specified. 
  5859. For the convenience of applications that are using the string interface, some 
  5860. window-style control functions are also exported as flags to the MCI_WINDOW 
  5861. message. 
  5862.  
  5863. Whether the default window or an application-defined window is used for output, 
  5864. the digital video device confines its output to the device coordinates of the 
  5865. specified window. 
  5866.  
  5867. The default video window is invisible when the device is first opened. This 
  5868. allows the user or application to prepare the size, position, and contents of 
  5869. the window before it is displayed.  It is created in a frame window, which can 
  5870. be sized, moved, maximized, and minimized.  It is also created with an ideal 
  5871. aspect ratio in the center of the display and occupies approximately one 
  5872. quarter of the screen.  As the user changes the size of the window, the digital 
  5873. video device scales the video image as required to maintain the video within 
  5874. the current coordinates.  Maintaining a constant aspect ratio is the 
  5875. responsibility of the application program. 
  5876.  
  5877. The parent of the default video window is HWND_DESKTOP unless otherwise 
  5878. specified in the MCI_OPEN message.  The owner of the default video window is 
  5879. NULL.  An application can specify a parent window handle for the default video 
  5880. window using hwndParent when the device is opened.  This is the only 
  5881. window-related parameter that can be specified using media control interface 
  5882. commands that changes the behavior of the default video window. 
  5883.  
  5884.  
  5885. ΓòÉΓòÉΓòÉ 11.4. Playing Motion Video Files ΓòÉΓòÉΓòÉ
  5886.  
  5887. By default, playback of digital motion video is displayed in the window 
  5888. supplied by the digital video device. This window is created and displayed when 
  5889. the video is cued for output. 
  5890.  
  5891. The string commands in the following figure illustrate playing an entire AVI 
  5892. format file. Because to and from parameters are not specified, the file is 
  5893. played from the current position to the end of the file. When a motion video 
  5894. device element is opened, the current position in the media is the first 
  5895. playable area after any header or table of contents information. 
  5896.  
  5897. open movie.avi type digitalvideo alias myvideo wait
  5898. play myvideo notify
  5899. close myvideo
  5900.  
  5901. Each frame in a motion video file has a number associated with it. From the 
  5902. perspective of the digital video device, each file is zero-based. That is, the 
  5903. first frame is frame 0, the second frame is frame 1, and so forth.  This means 
  5904. the number of the last frame in a file is 1 less than the total number of 
  5905. frames in the file. 
  5906.  
  5907. The current position always indicates the frame that is about to be displayed 
  5908. rather than the frame that is currently displayed. 
  5909.  
  5910. When a play position is specified with the from parameter of the play command, 
  5911. the actual position reached is accurate only to the nearest intracoded frame 
  5912. (I-frame).  However, a position specified with the to parameter is exact. 
  5913.  
  5914. If you need to specify an exact position in the video file to play from, you 
  5915. can issue the seek command, which moves the current position in a file to an 
  5916. exact point. The example shown in illustrates moving the current position to 
  5917. frame 20 and then playing to frame 100. 
  5918.  
  5919. open movie.avi type digitalvideo alias myvideo
  5920. set myvideo time format frames wait
  5921. seek myvideo to 20 wait
  5922. play myvideo to 100 notify
  5923. close myvideo
  5924.  
  5925.  
  5926. ΓòÉΓòÉΓòÉ 11.5. Playing Hardware-Assisted MPEG Files ΓòÉΓòÉΓòÉ
  5927.  
  5928. The ReelMagic adapter enables hardware-assisted playback of MPEG files. MPEG 
  5929. video content is contained in an MPEG-specific file format.  This file format, 
  5930. like AVI, interleaves audio and video data but is quite different from the 
  5931. tagged AVI format and requires a unique IOProc.  The MPEG IOProc performs the 
  5932. file-format processing in the hardware-assisted environment, while 
  5933. decompression of both audio and video is performed by the hardware. 
  5934.  
  5935. The digital video device provides normal-speed playback support (in the forward 
  5936. direction only) of MPEG files. The common file extension for MPEG files is 
  5937. .MPG. Seeking is supported, however seeking is an approximation to the nearest 
  5938. MPEG picture group.  The size of a picture group is movie-dependent but is 
  5939. commonly 8 frames, so seeking takes place to within one-third of a second, in 
  5940. most cases. 
  5941.  
  5942.  
  5943. ΓòÉΓòÉΓòÉ 11.6. Playing Animation Files ΓòÉΓòÉΓòÉ
  5944.  
  5945. In addition to playing motion video with the digital video device, you can also 
  5946. play FLC and FLI animation files.  FLC and FLI are the standard file formats 
  5947. for most animation tools. 
  5948.  
  5949. open cartoon.flc type digitalvideo alias animate
  5950. play animate notify
  5951. close animate
  5952.  
  5953. Audio support for playing animation files is enabled if an audio file exists 
  5954. with the same name as the animation file. In the previous example, if a file 
  5955. named CARTOON.WAV exists, the audio file plays with the animation file and 
  5956. continues to play until CARTOON.FLC ends. 
  5957.  
  5958.  
  5959. ΓòÉΓòÉΓòÉ 11.7. Recording Motion Video ΓòÉΓòÉΓòÉ
  5960.  
  5961. The digital video device supports real-time recording of motion video into AVI 
  5962. files.  The supported compression algorithms for recording video are 
  5963. Ultimotion, Indeo 2.1, and Indeo 3.1. The default settings for real-time 
  5964. recording are 160 x 120 resolution, 15 frames per second, and Ultimotion 
  5965. compression type. 
  5966.  
  5967. Recording into new and existing files is supported. The following example 
  5968. illustrates recording live video. As recording takes place, the digital audio 
  5969. and video data is stored in the temporary file created for the video device 
  5970. element. After the recording operation is complete, the device element is 
  5971. played back so it can be viewed before it is saved as a permanent file on disk. 
  5972.  
  5973. To save the data as a video file, you can specify an existing file name or a 
  5974. new file name with the save command. If you indicate an existing file name, the 
  5975. data in the disk file is completely replaced by the data in the temporary file. 
  5976. You can also indicate that the file being saved is a video file; however, it is 
  5977. not necessary because this is the default. 
  5978.  
  5979. In the example, monitoring is set on, so that the incoming video signal can be 
  5980. viewed in the default video window before it is recorded. Monitoring of live 
  5981. video can also be done without recording. 
  5982.  
  5983. open digitalvideo alias myvideo wait
  5984. set myvideo time format frames wait
  5985. set myvideo monitor on wait
  5986. record myvideo to 99 wait
  5987. play myvideo wait
  5988. save myvideo newvid.avi video wait
  5989. close myvideo
  5990.  
  5991. Applications can specify that only video or only audio is to be recorded. In 
  5992. the following example, audio recording is turned off, so that only video will 
  5993. be recorded. 
  5994.  
  5995. Specifying the cue input command causes the default window to become visible, 
  5996. so it is not necessary to set the monitoring function on. As in the previous 
  5997. example, the device element is played back before it is saved as a file on 
  5998. disk. 
  5999.  
  6000. open digitalvideo alias myvideo wait
  6001. set myvideo record audio off wait
  6002. set myvideo time format hms wait
  6003. cue myvideo input wait
  6004. record myvideo to 00:02:00 wait
  6005. play myvideo wait
  6006. save myvideo newvid.avi wait
  6007. close myvideo
  6008.  
  6009.  
  6010. ΓòÉΓòÉΓòÉ 11.8. Programming Considerations ΓòÉΓòÉΓòÉ
  6011.  
  6012. To avoid unpredictable results, it is important that Workplace Shell 
  6013. applications do not create windows on the main thread. Applications must start 
  6014. a separate thread, create their windows on that thread, and then create a new 
  6015. message queue on that thread to service the windows. 
  6016.  
  6017.  
  6018. ΓòÉΓòÉΓòÉ 11.8.1. Digital Video PM Windows ΓòÉΓòÉΓòÉ
  6019.  
  6020. The digital video device supports two types of windows:  default and 
  6021. application-defined. The default window is used if no other window handle is 
  6022. specified on an open command. It provides a basic desktop window in which to 
  6023. display video that can be moved, sized, and minimized by the user. The default 
  6024. window is the same size as the video. The digital video MCD provides and 
  6025. manages this window for the application. 
  6026.  
  6027. The default window has Normal Size, Double Size, and Half Size options on the 
  6028. system pull-down menu. Selecting these options cause the window to be resized. 
  6029. The window may also be resized to other sizes. 
  6030.  
  6031. The digital video device uses the window size to determine the amount of video 
  6032. to display.  When the window is made larger than the original video, the video 
  6033. is doubled in size.  When the window is made smaller than the original video, 
  6034. the video is clipped.  When the window size is a quarter of the original size, 
  6035. the video is halved to fit the new size.  Alternately, the window menu can be 
  6036. used to make the window the exact sizes for doubled and halved video. 
  6037.  
  6038.  
  6039. ΓòÉΓòÉΓòÉ 11.9. Application-Defined Window ΓòÉΓòÉΓòÉ
  6040.  
  6041. An application-defined window can be used when the application requires more 
  6042. control over the window.  The application can place video in its own client 
  6043. area or in a child window, add menus, and so on. If an application specifies a 
  6044. parent window handle when opening the device, it must close the logical video 
  6045. device before destroying the parent window. 
  6046.  
  6047. If an application passes a window handle to the digital video MCD with 
  6048. MCI_WINDOW, it is essential that the application ensure that this window will 
  6049. receive all WM_REALIZEPALETTE messages sent to the message queue.  If the 
  6050. window is a client-frame window (its parent has a style of CS_FRAME and the 
  6051. window has an ID of FID_CLIENT) or the child of a client window, it will 
  6052. receive this message automatically.  If, however, the window has an ancestor 
  6053. that is not a client window and does not pass WM_REALIZEPALETTE to 
  6054. WinDefWindowProc, the window will not automatically receive the message. For 
  6055. example, WinDefDlgProc does not pass WM_REALIZEPALETTE on to child windows. 
  6056. So, if an ancestor of the window is a dialog window, the dialog procedure must 
  6057. explicitly pass the WM_REALIZEPALETTE message to the window. If the window does 
  6058. not receive this message, then incorrect colors will appear in video displayed 
  6059. in the window, whenever another application changes the system palette. 
  6060.  
  6061.  
  6062. ΓòÉΓòÉΓòÉ 11.9.1. Application-Window Subclassing ΓòÉΓòÉΓòÉ
  6063.  
  6064. When an application-defined window is used to display video, the digital video 
  6065. MCD subclasses the window to ensure that video updating is maintained 
  6066. correctly. Subclassing the window does the following: 
  6067.  
  6068.      Positions and sizes the window 
  6069.  
  6070.      Prevents the window from being sized above the maximum supported size 
  6071.  
  6072.      Modifies the tracking rectangle so the user cannot drag the size border 
  6073.       beyond the screen boundaries 
  6074.  
  6075.  
  6076. ΓòÉΓòÉΓòÉ 11.10. Setting the Tuner Device ΓòÉΓòÉΓòÉ
  6077.  
  6078. With the appropriate hardware, the digital video device is able to monitor a TV 
  6079. channel.  The WinTV card is an overlay card that has video capture support as 
  6080. well as television signal support.  The monitor window displays the TV signal. 
  6081. The tuner is selected by setting the digital video device connector type to 
  6082. video in and the connector number to the tuner connector number of the adapter. 
  6083. The tuner connector number varies from adapter to adapter. On the WinTV 
  6084. adapter, this is connector number 2. 
  6085.  
  6086. connector digitalvideo02 enable type video in number 2 wait
  6087.  
  6088. An application can use the settuner command to set the region, channel, and 
  6089. fine-tuning values.  These flags are valid when used individually or in any 
  6090. combination. The digital video MCD uses these three values to calculate a 
  6091. frequency to send to the device. See the following example. 
  6092.  
  6093. open digitalvideo03 alias mytuner wait
  6094. settuner mytuner tv channel 3 region usa finetune plus 1 wait
  6095.  
  6096. The following example illustrates setting the frequency directly.  Setting the 
  6097. frequency directly causes channel, region, and fine-tuning values to be 
  6098. ignored. 
  6099.  
  6100. settuner mytuner frequency 80 wait
  6101.  
  6102. The region value must have a corresponding ASCII file (region.RGN) located in 
  6103. the \MMOS2\REGION subdirectory. When an application selects the region with the 
  6104. settuner command, the digital video MCD reads in the region file and fills a 
  6105. region array.  The channel is used as an index into this array, which 
  6106. identifies the frequency.  Fine-tuning is then added to the frequency.  Region 
  6107. files are keyword-driven and have the following format: 
  6108.  
  6109. [tuner]
  6110.   description=USA Cable
  6111.   lowchannel=2
  6112.   highchannel=99
  6113.   frequencies=0,0, 10050, -1, ... 29000
  6114.  
  6115. The description keyword identifies a descriptive string displayed on the 
  6116. corresponding Multimedia Setup page. The lowchannel and highchannel keywords 
  6117. indicate the range of channels available for the region.  The frequencies 
  6118. correspond to the channel values, beginning with channel 0 and continuing to 
  6119. the highest available channel. The frequencies must be listed in columns of 
  6120. nine; otherwise, the region is invalid. A frequency value of 0 indicates the 
  6121. channel is out of range. A frequency value of -1 indicates a skipped channel, 
  6122. allowing the user to "block" certain channels from being viewed. 
  6123.  
  6124.  
  6125. ΓòÉΓòÉΓòÉ 11.11. Digital Video Command Messages ΓòÉΓòÉΓòÉ
  6126.  
  6127. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6128. ΓöéMessage                 ΓöéDescription                                  Γöé
  6129. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6130. ΓöéMCI_CAPTURE             ΓöéCaptures the current video image and stores  Γöé
  6131. Γöé                        Γöéit as an image device element.               Γöé
  6132. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6133. ΓöéMCI_CLOSE               ΓöéCloses the device element and any resources  Γöé
  6134. Γöé                        Γöéassociated with it.                          Γöé
  6135. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6136. ΓöéMCI_CONNECTOR           ΓöéEnables, disables, or queries the status of  Γöé
  6137. Γöé                        Γöéconnectors on a device.                      Γöé
  6138. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6139. ΓöéMCI_COPY                ΓöéCopies specified data range into clipboard orΓöé
  6140. Γöé                        Γöébuffer.                                      Γöé
  6141. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6142. ΓöéMCI_CUE                 ΓöéPrompts the device to ready itself for a     Γöé
  6143. Γöé                        Γöésubsequent playback or recording operation   Γöé
  6144. Γöé                        Γöéwith minimum delay.                          Γöé
  6145. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6146. ΓöéMCI_CUT                 ΓöéRemoves specified data range and places it   Γöé
  6147. Γöé                        Γöéinto clipboard or buffer.                    Γöé
  6148. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6149. ΓöéMCI_DELETE              ΓöéDeletes specified data range.  Clipboard or  Γöé
  6150. Γöé                        Γöébuffer is not used.                          Γöé
  6151. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6152. ΓöéMCI_GETDEVCAPS          ΓöéGets device capabilities.                    Γöé
  6153. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6154. ΓöéMCI_GETIMAGEBUFFER      ΓöéRetrieves the contents of the capture video  Γöé
  6155. Γöé                        Γöébuffer or the current movie frame.           Γöé
  6156. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6157. ΓöéMCI_INFO                ΓöéReturns string information from the device.  Γöé
  6158. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6159. ΓöéMCI_LOAD                ΓöéSpecifies a new file to be loaded onto an    Γöé
  6160. Γöé                        Γöéalready existing device element.             Γöé
  6161. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6162. ΓöéMCI_OPEN                ΓöéInitializes the device.                      Γöé
  6163. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6164. ΓöéMCI_PASTE               ΓöéDeletes selected data range if difference    Γöé
  6165. Γöé                        Γöébetween FROM and TO is more than zero, then  Γöé
  6166. Γöé                        Γöéinserts data from buffer or clipboard.       Γöé
  6167. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6168. ΓöéMCI_PAUSE               ΓöéPauses playback or recording.                Γöé
  6169. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6170. ΓöéMCI_PLAY                ΓöéStarts a play operation on the device.       Γöé
  6171. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6172. ΓöéMCI_PUT                 ΓöéDefines the source and destination rectanglesΓöé
  6173. Γöé                        Γöéwindows.                                     Γöé
  6174. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6175. ΓöéMCI_RECORD              ΓöéStarts a recording operation on the device.  Γöé
  6176. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6177. ΓöéMCI_REDO                ΓöéReverses previous MCI_UNDO command.          Γöé
  6178. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6179. ΓöéMCI_RESUME              ΓöéResumes playing or recording from a paused   Γöé
  6180. Γöé                        Γöéstate, keeping previously specified          Γöé
  6181. Γöé                        Γöéparameters in effect.                        Γöé
  6182. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6183. ΓöéMCI_REWIND              ΓöéRewinds or seeks the device element to the   Γöé
  6184. Γöé                        Γöéfirst playable position (beginning).         Γöé
  6185. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6186. ΓöéMCI_SAVE                ΓöéSaves the current file to disk.              Γöé
  6187. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6188. ΓöéMCI_SEEK                ΓöéMoves to the specified position in the file. Γöé
  6189. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6190. ΓöéMCI_SET                 ΓöéSets device information.                     Γöé
  6191. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6192. ΓöéMCI_SET_CUEPOINT        ΓöéSets a cue point.                            Γöé
  6193. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6194. ΓöéMCI_SET_POSITION_ADVISE ΓöéSets a position change notification for the  Γöé
  6195. Γöé                        Γöédevice.                                      Γöé
  6196. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6197. ΓöéMCI_SETTUNER            ΓöéSets the frequency for the tuner device.     Γöé
  6198. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6199. ΓöéMCI_STATUS              ΓöéObtains status information for the device.   Γöé
  6200. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6201. ΓöéMCI_STEP                ΓöéSteps the playback one or more frames forwardΓöé
  6202. Γöé                        Γöéor backward.                                 Γöé
  6203. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6204. ΓöéMCI_STOP                ΓöéStops playing or recording.                  Γöé
  6205. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6206. ΓöéMCI_UNDO                ΓöéCancels previous RECORD, CUT, PASTE, or      Γöé
  6207. Γöé                        ΓöéDELETE.                                      Γöé
  6208. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6209. ΓöéMCI_WHERE               ΓöéObtains a rectangle array, specifying the    Γöé
  6210. Γöé                        Γöésource or destination area.                  Γöé
  6211. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6212. ΓöéMCI_WINDOW              ΓöéSpecifies the window and the window          Γöé
  6213. Γöé                        Γöécharacteristics that the device should use   Γöé
  6214. Γöé                        Γöéfor display.                                 Γöé
  6215. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6216.  
  6217.  
  6218. ΓòÉΓòÉΓòÉ 12. Direct Interface Video Extensions (DIVE) ΓòÉΓòÉΓòÉ
  6219.  
  6220. Software motion video implementation under OS/2 has attained sizable 
  6221. performance advantages by enabling video decompressors to directly write to 
  6222. video memory. While this technique provides good performance, it has the 
  6223. disadvantage that each decompressor must deal with the pel format of the 
  6224. display in various modes, clipping the output to visible regions, and any 
  6225. scaling that is to be performed. Additionally, on bank-switched video displays, 
  6226. the decompressor must return on partial frames to enable the video stream 
  6227. handler to switch banks. The direct interface video extensions (DIVE) 
  6228. consolidate the complexities of dealing with direct video frame buffer access 
  6229. (sometimes referred to as "direct access" or "black hole") into a single API 
  6230. DLL that enables efficient transfer to video memory with clipping, scaling, and 
  6231. color space conversion. The optimized screen access functionality provided by 
  6232. DIVE can be used for motion video display, fast image updates for interactive 
  6233. games, and fast screen display by 3-D graphics libraries. 
  6234.  
  6235.  
  6236. ΓòÉΓòÉΓòÉ 12.1. About DIVE ΓòÉΓòÉΓòÉ
  6237.  
  6238. DIVE is a DLL that provides optimized blitting performance for motion video 
  6239. subsystems and applications that perform rapid screen updates in the OS/2 PM 
  6240. and full-screen environments. Using DIVE functions, applications can either 
  6241. write directly to video memory or use the DIVE blitter to get a high level of 
  6242. screen update performance, image scaling, color space conversion, and 
  6243. bank-switch display support. The DIVE blitter utilizes acceleration hardware 
  6244. when present and applicable to the function being performed. 
  6245.  
  6246.  
  6247. ΓòÉΓòÉΓòÉ 12.1.1. DIVE Display Engine Functional Characteristics ΓòÉΓòÉΓòÉ
  6248.  
  6249. The DIVE system-level interface abstracts the low-level device driver DIVE 
  6250. interface to a higher level and adds software emulation for operations that all 
  6251. DIVE users have had to do. This system-level interface is referred to as the 
  6252. DIVE engine. 
  6253.  
  6254. The DIVE engine consists of a single, stand-alone DLL that exports the 
  6255. following functions: 
  6256.  
  6257.      Query for display capabilities 
  6258.      Open instance 
  6259.      Visible region specification 
  6260.      Allocation of image data buffers 
  6261.      Buffer-to-screen/buffer-to-buffer transfer (blitter) setup 
  6262.      8-bit CLUT color palette simulation/specification 
  6263.      Transfer buffer to image display/transfer buffer to buffer 
  6264.      Utility functions useful for direct access, including window 
  6265.       starting-address calculation 
  6266.      Frame buffer acquire/deacquire 
  6267.      VRAM bank selection (for bank-switched displays) 
  6268.      Close instance 
  6269.  
  6270.  The display engine enables subsystem components (for example, video CODECs) 
  6271.  and applications to either directly access the video buffer or to use the 
  6272.  display engine screen transfer functions. If direct access is used, the using 
  6273.  component or application is responsible for writing to the frame buffer format 
  6274.  for the current display mode and correctly clipping the output. In addition, 
  6275.  the component is responsible for acquiring and bank switching the display 
  6276.  apertures. If display engine screen transfer functions are used, the display 
  6277.  engine handles clipping, pel format and color space conversions, and any 
  6278.  necessary hardware serialization. The input formats and their corresponding 
  6279.  color encoding specification values are: 
  6280.  
  6281.      CLUT 8 (256 color) - "LUT8" 
  6282.      8-bit greyscale - "GREY" 
  6283.      RGB 16 (5-6-5, 5-5-5) - "R565", "R555", "R664" 
  6284.      RGB 24 (R-G-B, B-G-R) - "RGB3", "BGR3" 
  6285.      RGB 32 (R-G-B, B-G-R) - "RGB4", "BGR4" 
  6286.      YUV 9 - DVI/Indeo three-plane color subsampled - "YUV9" 
  6287.      YUV 422 -  "Y422" 
  6288.      YUV CCIR601 - three-plane 2x2 color subsampled (MJPEG, MPEG) - "Y2X2" 
  6289.      YUV CCIR601 - three-plane 4x4 color subsampled  - "Y4X4" 
  6290.  
  6291.  The output formats are: 
  6292.  
  6293.      CLUT 8 (256 color) 
  6294.      RGB 16 (5-6-5, 5-5-5, 6-6-4) 
  6295.      RGB 24 (R-G-B, B-G-R) 
  6296.      RGB 32 (R-G-B-x,  B-G-R-x) 
  6297.      YUV 422 (Y-U-Y-V) 
  6298.  
  6299.  
  6300. ΓòÉΓòÉΓòÉ 12.2. Using Dive ΓòÉΓòÉΓòÉ
  6301.  
  6302. There are two main ways to use DIVE:  using the DIVE blitter and using direct 
  6303. frame-buffer access. DIVE applications gain access to DIVE functions by 
  6304. obtaining a DIVE handle: 
  6305.  
  6306. ULONG       ulErrorCode;
  6307. HDIVE       *phDiveInst;
  6308. BOOL        fNonScreenInstance;
  6309. PVOID       ppFrameBuffer;
  6310.  
  6311. ulErrorCode = DiveOpen( *phDiveInst, fNonScreenInstance, ppFrameBuffer );
  6312.  
  6313. A corresponding DiveClose function must be called at application termination. 
  6314. If DIVE is to be used for blitting to the screen, set fNonScreenInstance to 
  6315. FALSE.  Otherwise, if DIVE is to be used only for off-screen sizing or color 
  6316. format conversion, set fNonScreenInstance to TRUE.  If fNonScreenInstance is 
  6317. FALSE, a pointer to the frame buffer is returned in ppFrameBuffer. 
  6318.  
  6319.  
  6320. ΓòÉΓòÉΓòÉ 12.2.1. DIVE Image Buffers ΓòÉΓòÉΓòÉ
  6321.  
  6322. Because DIVE will use off-screen VRAM where available for acceleration of 
  6323. blitting operations, the application should allocate all source blitting 
  6324. buffers from DIVE whenever possible.  To allocate a buffer, the application 
  6325. would make the following call: 
  6326.  
  6327. ULONG   ulBufNum;
  6328. FOURCC  fccColorSpace;
  6329. ULONG   ulWidth, ulHeight, ulLineSizeBytes;
  6330. PBYTE   pbImageBuffer;
  6331.  
  6332. ulErrorCode = DiveAllocImageBuffer(
  6333.         hDive,          /* DIVE handle  */
  6334.         &ulBufNum,     /* Buffer number (output)       */
  6335.         fccColorSpace,  /* Color format */
  6336.         ulWidth, ulHeight,     /* Size of maximum image        */
  6337.         ulLineSizeBytes,
  6338.         &pbImageBuffer);
  6339.  
  6340. A corresponding DiveFreeImageBuffer function call is used to deallocate the 
  6341. buffer when it is no longer needed.  The color format of the image buffer is 
  6342. described by fccColorSpace. The DIVE interface defines constants for a variety 
  6343. of 8-, 16-, and 24-bit color encoding schemes.  After a buffer is allocated and 
  6344. before it can be used for blitting, it must be accessed as shown in the 
  6345. following example: 
  6346.  
  6347. PBYTE   pbImageBuffer;
  6348. ULONG   ulBufferScanLineBytes, ulBufferScanLines;
  6349.  
  6350. ulErrorCode = DiveBeginImageBufferAccess(
  6351.         hDiveInst,          /* DIVE handle   */
  6352.         ulBufferNumber,       /* Buffer number */
  6353.         &pbImageBuffer,    /* Ptr to image buffer (output) */
  6354.         &ulBufferScanLineBytes);  /* Scan line length (output)    */
  6355.         &ulBufferScanLines);  /* Scan lines (output)    */
  6356.  
  6357. DIVE calculates the number of bytes per scan line for the image buffer (based 
  6358. on the color format) and returns the value in ulBufferScanLineBytes.  The 
  6359. application can now write color data into pbImageBuffer.  For example, the 
  6360. application could open a bit-map file and read the bit-map data directly into 
  6361. the image buffer.  After the data has been written, the application calls 
  6362. DiveEndImageBufferAccess to deaccess the buffer. Be sure to use scan line bytes 
  6363. (you might have to read a line at a time). 
  6364.  
  6365.  
  6366. ΓòÉΓòÉΓòÉ 12.2.2. DIVE Palettes ΓòÉΓòÉΓòÉ
  6367.  
  6368. Applications must inform DIVE of the state of the physical palette upon 
  6369. initialization and whenever the physical palette changes.  At application 
  6370. initialization, and in response to a WM_REALIZEPALETTE message, the application 
  6371. calls the following sequence: 
  6372.  
  6373. BYTE       pbPal[1024];
  6374.  
  6375. /* Query the physical palette from PM   */
  6376. GpiQueryRealColors( hps, 0, 0, 256, (PLONG)pbPal);
  6377.  
  6378. /* Pass it to DIVE              */
  6379. DiveSetDestinationPalette( hDive, (PBYTE)pbPal);
  6380.  
  6381. If the application itself is using palettes, these palettes must also be 
  6382. communicated to DIVE through the DiveSetSourcePalette function. For example, if 
  6383. the application is using DIVE to blit 256-color palettized images to the 
  6384. screen, the application must send the image palette with a call to 
  6385. DiveSetSourcePalette.  If a sequence of images is being used for animation and 
  6386. the palette remains constant through the series, it is necessary to call 
  6387. DiveSetSourcePalette only once before blitting the first image in the series. 
  6388.  
  6389. DIVE provides high-speed screen updates by bypassing PM. In order to maintain 
  6390. the integrity of the PM desktop, DIVE applications must notify DIVE whenever 
  6391. the visible region of the application window changes so that output may be 
  6392. clipped accordingly. 
  6393.  
  6394. Every DIVE application will request visible region notification at window 
  6395. initialization time with the following call: 
  6396.  
  6397. WinSetVisibleRegionNotify( hwnd, TRUE);
  6398.  
  6399. The first parameter is the handle of the window where the graphics operations 
  6400. will appear, and the second parameter turns on notification for that window. 
  6401. (A corresponding WinSetVisibleRegionNotify(hwnd, FALSE) call should be made to 
  6402. turn notification off at window termination time.) 
  6403.  
  6404. Whenever the window's visible region begins to change, either because the 
  6405. window is being moved or sized or another window or icon overlaying the window 
  6406. is being moved or sized, the window will receive a WM_VRNDISABLED message.  In 
  6407. response to this message, the DIVE application will call DiveSetupBlitter 
  6408. (hDiveInst, 0).  Once the movement is complete, the window will receive a 
  6409. WM_VRNENABLED message.  In response to this message, the DIVE application will 
  6410. query the new visible region, using WinQueryVisibleRegion as follows: 
  6411.  
  6412. hps = WinGetPS( hwnd );
  6413. hrgn = GpiCreateRegion( hps, 0, NULL);
  6414. WinQueryVisibleRegion( hwnd, hrgn);
  6415.  
  6416. Whenever the visible region, source color format, or image source or 
  6417. destination size changes, the DIVE application must pass the changes to DIVE 
  6418. with a call to DiveSetupBlitter.  Note that it is necessary to pass the 
  6419. rectangles for the region in window coordinates and the position of the window 
  6420. in desktop coordinates.  First, get the rectangles and window coordinates: 
  6421.  
  6422. RECTL   rctls[50];      /* Rectangles for visible rgn   */
  6423. RGNRECT rgnCtl;         /* Region control struct        */
  6424. SETUP_BLITTER   SetupBlitter;   /* DiveSetupBlitter struct      */
  6425. POINTL  pointl;
  6426. SWP     swp;
  6427. HPS     hps;
  6428. HRGN    hrgn;
  6429.  
  6430. rgnCtl.ircStart = 0;    /* Enumerate rectangles */
  6431. rgnCtl.crc = 50;        /* Starting with first  */
  6432. rgnCtl.ulDirection = RECTDIR_LFRT_TOPBOT;
  6433.  
  6434. /* Get rectangles for the visible region        */
  6435. GpiQueryRegionRects( hps, hrgn, NULL, &rgnCtl, rctls);
  6436.  
  6437. /* Find the window position relative to its parent.     */
  6438. WinQueryWindowPos( hwnd, &swp );
  6439.  
  6440. /* Map window position to the desktop.  */
  6441. pointl.x = swp.x;
  6442. pointl.y = swp.y;
  6443. WinMapWindowPoints( WinQueryWindow( hwnd, QW_PARENT ),
  6444.         HWND_DESKTOP, &pointl, 1);
  6445.  
  6446. Then, pass the information to DIVE: 
  6447.  
  6448. /* Tell DIVE about the new settings.  */
  6449. SIZEL   sizlSrcImg;     /* Size of source image */
  6450. FOURCC  fccSrcColors;   /* Source image format  */
  6451.  
  6452. SetupBlitter.ulStructLen = sizeof ( SETUP_BLITTER );
  6453. SetupBlitter.fInvert = 0;
  6454. SetupBlitter.fccSrcColorFormat = fccSrcColors;
  6455. SetupBlitter.ulSrcLineSizeBytes = ulScanLineBytes;
  6456. SetupBlitter.ulSrcWidth = sizlSrcImg.cx;
  6457. SetupBlitter.ulSrcHeight = sizlSrcImg.cy;
  6458. SetupBlitter.ulSrcPosX = 0;
  6459. SetupBlitter.ulSrcPosY = 0;
  6460. SetupBlitter.fccDstColorFormat = FOURCC_SCRN;
  6461. SetupBlitter.ulDstLineSizeBytes = 0;
  6462. SetupBlitter.ulDstWidth = swp.cx;
  6463. SetupBlitter.ulDstHeight = swp.cy;
  6464. SetupBlitter.ulDstPosX = 0;
  6465. SetupBlitter.ulDstPosY = 0;
  6466. SetupBlitter.lScreenPosX = pointl.x;
  6467. SetupBlitter.lScreenPosY = pointl.y;
  6468. SetupBlitter.ulNumDstRects = rgnCtl.crcReturned;
  6469. SetupBlitter.pVisDstRects = rctls;
  6470. DiveSetupBlitter ( hDive, &SetupBlitter );
  6471.  
  6472. The color format of the source image is described by fccSrcColors. 
  6473.  
  6474. Note that, in this example, the DIVE blitter is set up to blit to the screen, 
  6475. but that need not be the case.  DIVE could also be used to perform color 
  6476. conversion and/or stretch blitting to a destination image.  The destination 
  6477. color-encoding format would be indicated in fccDstColorFormat; ulDstWidth and 
  6478. ulDstHeight would be set to the size of the destination image; ulNumDstRects 
  6479. would be set to 1; and pVisDstRects would point to a single rectangle with 
  6480. xLeft=yBottom=0 xRight=ulDstWidth and yTop=ulDstHeight. 
  6481.  
  6482.  
  6483. ΓòÉΓòÉΓòÉ 12.2.2.1. Blitter Operation ΓòÉΓòÉΓòÉ
  6484.  
  6485. The following illustrates buffer-to-buffer transfer using DiveBlitImage. 
  6486.  
  6487. The following illustrates buffer-to-screen transfer using DiveBlitImage. 
  6488.  
  6489.  
  6490. ΓòÉΓòÉΓòÉ 12.2.3. Direct Frame-Buffer Access ΓòÉΓòÉΓòÉ
  6491.  
  6492. As mentioned earlier, *ppFrameBuffer returned by DiveOpen gives direct 
  6493. addressability to the frame buffer.  In order to write directly to the frame 
  6494. buffer, the DIVE application must perform its own clipping, color conversion, 
  6495. and bank switching. The following functions are provided for direct 
  6496. frame-buffer access:  DiveAcquireFrameBuffer, DiveDeacquireFrameBuffer, 
  6497. DiveSwitchBank, and DiveCalcFrameBufferAddress. 
  6498.  
  6499. The DiveQueryCaps function returns whether the display subsystem is 
  6500. bank-switched. DIVE provides another function called DiveCalcFrameBufferAddress 
  6501. to get to a location in the frame buffer that corresponds to a rectangle in 
  6502. desktop coordinates: 
  6503.  
  6504. PRECTL prectlDest;            /* Image rectangle in desktop coors  */
  6505. PVOID pDestinationAddress;    /* Frame buffer address - output     */
  6506. PULONG pulBankNumber;         /* Display h/w bank number - output  */
  6507. PULONG pulRemlinesInBank;     /* Lines left in bank - output       */
  6508.  
  6509. ulErrorCode = DiveCalcFrameBufferAddress(
  6510.         hDiveInst, &prectlDest, &pDestinationAddress,
  6511.         &pulBankNumber, &pulRemlinesInBank);
  6512.  
  6513. To accomplish correct clipping, prectlDest must be in the application window's 
  6514. visible region.  If the display hardware is bank-switched, then the application 
  6515. must not write more than pulRemlinesInBank lines of output before switching 
  6516. banks.  The data written to pDestinationAddress must be in the color-encoding 
  6517. scheme of the screen (also provided by DiveQueryCaps).  (Of course, DIVE can be 
  6518. used to convert to the correct screen color-encoding prior to writing to the 
  6519. frame buffer by doing a DiveBlitImage to a destination buffer with the same 
  6520. color-encoding.)  Additionally, if the screen supports only 256 colors, the 
  6521. data must match the current physical palette. 
  6522.  
  6523. All write access to the frame buffer must be bracketed by calls to 
  6524. DiveAcquireFrameBuffer and DiveDeacquireFrameBuffer.  Also, the application 
  6525. must not attempt to access the frame buffer between receipt of a WM_VRNDISABLED 
  6526. message and a WM_VRNENABLED message. 
  6527.  
  6528. A typical application would do the following: 
  6529.  
  6530. BOOL  fKeepBlitting = TRUE;
  6531. BOOL  fFBAccessOK;
  6532. RECTL rectlOutput;      /* Image rectangle in desktop coors  */
  6533. RECTL rectlDest;        /* Portion to blit in this bank */
  6534. ULONG ulMoreLines;      /* Lines in image left to blit  */
  6535. LONG  lBlitTop;         /* Top of next blit     */
  6536. PVOID pDestinationAddress;   /* Frame buffer address - output */
  6537. ULONG ulBankNumber;          /* Display h/w bank number - output */
  6538. ULONG ulRemlinesInAperature; /* Lines left in bank - output  */
  6539. BOOL  fAcquired = FALSE;     /* Acquired frame buffer yet    */
  6540.  
  6541. while (fKeepBlitting)
  6542.   {
  6543.   /* ... Call DiveSetupBlitter as before ...    */
  6544.  
  6545.   /********************************************************/
  6546.   /* Calculate total number of lines to blit.  Then blit  */
  6547.   /* only those lines that will fit in the current bank.  */
  6548.   /* Switch to successive banks until the entire image is */
  6549.   /* blitted.                                             */
  6550.   /********************************************************/
  6551.   ulMoreLines = rectlDest.yTop - rectlDest.yBottom;
  6552.   memcpy( &rectlDest, &rectlOutput, sizeof(RECTL));
  6553.   while (ulMoreLines && fFBAccessOK)
  6554.     {
  6555.     ulErrorCode = DiveCalcFrameBufferAddress(
  6556.         hDive, rectlDest, &pDestinationAddress,
  6557.         &ulBankNumber, &ulRemlinesInAperture);
  6558.     if (!fAcquired)
  6559.       if (!DiveAcquireFrameBuffer( hDive, ulBankNumber))
  6560.         fAcquired = TRUE;
  6561.       else break;
  6562.     DiveSwitchBank( hDive, ulBankNumber);
  6563.       {
  6564.       /* ... write data for (ulRemlinesInAperture) top lines of */
  6565.       /* rectlDest to pDestinationAddress ...   */
  6566.       if (ulRemlinesInAperture < ulMoreLines)
  6567.         {               /* if need next bank    */
  6568.         rectlDest.yTop -= ulRemlinesInAperture;
  6569.         ulMoreLines -= ulRemlinesInAperture;
  6570.         }
  6571.       else ulMoreLines = 0;
  6572.       }
  6573.     if (fAcquired)
  6574.       DiveDeacquireFrameBuffer( hDive);
  6575.     }           /* end: while more lines to blit */
  6576.   }             /* end: blitter loop    */
  6577.  
  6578. Note:  This method works only on even bank breaks; indirect access through 
  6579.        DiveBlitImage is recommended on displays with bank breaks that are not 
  6580.        aligned on scan-line boundaries. 
  6581.  
  6582.  In the previous example, the application spins off a separate thread to 
  6583.  perform blitting.  The procedure for this thread contains a nested loop that 
  6584.  switches display banks for each image blitted as long as blitting is needed. 
  6585.  The flag fFBAccessOK is turned off whenever the application window received 
  6586.  WM_VRNDISABLED and is turned on whenever WM_VRNENABLED is received. 
  6587.  
  6588.  
  6589. ΓòÉΓòÉΓòÉ 13. Captioning ΓòÉΓòÉΓòÉ
  6590.  
  6591. The Toolkit provides a sample captioning system to assist application 
  6592. programmers in adding captioning to multimedia applications. The sample 
  6593. captioning system consists of three parts: the Caption Creation Utility 
  6594. program, Caption DLL, and Caption Sample Application.  The Caption Creation 
  6595. Utility program (located in \TOOLKIT\SAMPLES\MM\CAPTION subdirectory) creates a 
  6596. "caption" file.  This is a text file containing timing information relating to 
  6597. its associated audio file.  The Caption DLL (located in the 
  6598. \TOOLKIT\SAMPLES\MM\CAPDLL directory) provides functions that drive the display 
  6599. and management of the caption file in a "caption window" in a PM application. 
  6600. The Caption Sample Application (located in the \TOOLKIT\SAMPLES\MM\CAPSAMP 
  6601. subdirectory) demonstrates how an application uses the functions provided by 
  6602. the Caption DLL to take advantage of its services.  As with all OS/2 multimedia 
  6603. samples, the source code is provided for all three components.  You can use the 
  6604. three components as provided or modify them to meet specific requirements. See 
  6605. Sample Application Programs for more information on the captioning components. 
  6606.  
  6607.  
  6608. ΓòÉΓòÉΓòÉ 13.1. Creating a Caption File ΓòÉΓòÉΓòÉ
  6609.  
  6610. The Caption Creation Utility enables synchronization of the line-by-line 
  6611. display of a text file with the playing of an audio file. You can start this 
  6612. program from either an OS/2 command prompt by typing CAPTION (while in the 
  6613. \TOOLKIT\SAMPLES\MM\CAPTION subdirectory), or by selecting the Caption Creation 
  6614. Utility object from the Toolkit folder. You can open an audio file, open a text 
  6615. file to synchronize with it, play the audio file, and select (by clicking a 
  6616. mouse button) the moment in the audio when the current line of text should 
  6617. scroll to display the next line of text. This allows the user to synchronize an 
  6618. audio file with a text file. 
  6619.  
  6620.            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6621.            Γöé  Text   Γöé         Γöé  Audio  Γöé
  6622.            Γöé  File   Γöé         Γöé  File   Γöé
  6623.            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6624.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6625.                             
  6626.                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6627.                     Γöé  Caption  Γöé
  6628.                     Γöé Creation  Γöé
  6629.                     Γöé  Utility  Γöé
  6630.                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6631.                           
  6632.                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6633.                      Γöé Caption Γöé
  6634.                      Γöé  File   Γöé
  6635.                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6636.  
  6637. In order to start the synchronization process, the user selects Start timing. 
  6638. The audio file begins playing and Advance line is enabled. When you want to 
  6639. scroll to the next line of text, you select Advance line.  This scrolls the 
  6640. line of text in the text window and displays the next line.  When Advance line 
  6641. is selected, the Caption Creation Utility issues an MCI_STATUS message with 
  6642. mciSendCommand as shown in the following figure. The device ID passed is 
  6643. obtained when the application opens the audio device. The MCI_STATUS_ITEM flag 
  6644. is set and the ulItem field in the MCI_STATUS_PARMS data structure contains 
  6645. MCI_STATUS_POSITION.  Upon return, the ulReturn field in the MCI_STATUS_PARMS 
  6646. data structure contains the current position of the device in MMTIME units. 
  6647.  
  6648.  
  6649.      case ID_NEXTLINE:
  6650.         if ( usNextline < usLineCount ) /* (1) Check usNextline.   */
  6651.         {
  6652.            msp.hwndCallback = (HWND) NULL; /* (2) Get audio
  6653.                                                position.           */
  6654.  
  6655.            msp.ulItem     = MCI_STATUS_POSITION;
  6656.            ulError = mciSendCommand ( mop.usDeviceID,
  6657.                                       MCI_STATUS,
  6658.                                       MCI_WAIT | MCI_STATUS_ITEM,
  6659.                                       (PVOID) &msp,
  6660.                                       (USHORT)  UP_STATUS );
  6661.  
  6662. When the Caption Creation Utility receives the position value, it writes the 
  6663. time value and the line of text to the caption file. A caption file contains a 
  6664. copy of the text file and (before each line of text) the multimedia time unit 
  6665. when that line of text should be displayed in conjunction with the audio file. 
  6666. The file name of the caption file is the same as the file name of the text 
  6667. file, with an extension of ._CC.  The caption file can then be used by an 
  6668. application in conjunction with the Caption DLL to caption an application. 
  6669.  
  6670.  
  6671. ΓòÉΓòÉΓòÉ 13.2. Displaying Captions in a Window ΓòÉΓòÉΓòÉ
  6672.  
  6673. The Caption DLL works with an application to display caption files in the 
  6674. requesting application's window. The DLL does all of the work to display the 
  6675. text window and scroll the text in synchronization with the appropriate audio 
  6676. file. Applications can utilize this DLL to display captioned text (in 
  6677. synchronization with an audio file) in their application's window.  To perform 
  6678. this function, the Caption DLL utilizes the captioned text files, created by 
  6679. the Caption Creation Utility, and position advise messages that it sets on the 
  6680. specified audio device.  As described earlier, the caption files contain an 
  6681. MMTIME unit before every line of text.  The Caption DLL requests position 
  6682. advise messages from the Media Device Manager (MDM) every 1500 MMTIME units on 
  6683. the specified device.  When it receives MM_MCIPOSITIONCHANGE messages from MDM, 
  6684. it examines the MMTIME units in front of the text lines and displays the 
  6685. correct line of text in the text window of the application. The maximum size of 
  6686. the caption file is 500 lines long, but this can be modified by changing the 
  6687. limit in the Caption DLL source code. This DLL supports the following 
  6688. functions: 
  6689.  
  6690.  ccInitialize        Creates a captioning window and returns the handle of the 
  6691.                      window to the application. 
  6692.  
  6693.  ccSendCommand       Controls the captioning window, when it has been created, 
  6694.                      using the following commands: CC_START, CC_STOP, 
  6695.                      CC_STATUS, and CC_SET. 
  6696.  
  6697.  ccTerminate         Destroys the captioning window and releases any resources 
  6698.                      allocated for captioning. 
  6699.  
  6700.  See Caption DLL for more information on the captioning functions and data 
  6701.  structures. 
  6702.  
  6703.  
  6704. ΓòÉΓòÉΓòÉ 13.3. Caption Sample Application ΓòÉΓòÉΓòÉ
  6705.  
  6706. The Caption Sample Application demonstrates the incorporation of captioning in 
  6707. an application using caption files and the Caption DLL. 
  6708.  
  6709. As part of its initialization and termination routines, the Caption Sample 
  6710. Application issues ccInitialize and ccTerminate respectively.  This notifies 
  6711. the DLL to begin and end captioning. 
  6712.  
  6713.    /*
  6714.     * Create the caption window and save the handle for further use.
  6715.     */
  6716.    hwndCaption = ccInitialize ( (HWND) hwndMainDialogBox );
  6717.  
  6718. When the ccInitialize function is called, the DLL creates the caption window, 
  6719. but keeps it hidden until the DLL receives a ccSendCommand with a CC_START 
  6720. message. 
  6721.  
  6722.  /*
  6723.   * Close the captioning system. This will release all the resources
  6724.   * that were allocated.
  6725.   */
  6726.    ccTerminate(hwndCaption);
  6727.  
  6728. When the user selects Play, the Caption Sample Application opens the audio file 
  6729. and obtains a device ID.  It then plays the audio file.  Finally, it checks the 
  6730. system's captioning flag.  If it is set, the Caption Sample Application issues 
  6731. ccSendCommand with a CC_START command. This is all an application must do to 
  6732. implement captioning with OS/2 multimedia. The Caption DLL then starts 
  6733. providing captioning for the application. Three important parameters are sent 
  6734. with this function. First, the device ID or alias is passed.  This tells the 
  6735. DLL the correct audio device for which to request position-advise messages. 
  6736. Second, the name of the caption file is passed, and third, the application's 
  6737. window handle is passed.  This tells the DLL which caption file to display and 
  6738. the handle of the window to display it in. 
  6739.  
  6740.  /*
  6741.   * Test the MMPM/2 Captioning Flag.  If it is ON, then the user
  6742.   * wants to see captioning.  If it is OFF, the user does not want to
  6743.   * see captioning.
  6744.   */
  6745.  mciQuerySysValue ( MSV_CLOSEDCAPTION, &bCCflag );
  6746.      .
  6747.      .
  6748.      .
  6749.  
  6750.  /*
  6751.   * Captioning flag is ON.
  6752.   * Fill in the CC_START_PARMS structure and then call ccSendCommand
  6753.   * to make the captioning window visible.  The hwndOwner field holds
  6754.   * the window handle that we want the Caption DLL to send the
  6755.   * position change messages to, when it is done processing them.
  6756.   */
  6757.  
  6758.  csp.pszDeviceName    = (PSZ) "capsamp";     /* Alias name          */
  6759.  csp.pszCaptionFile   = (PSZ) "CAPSAMP._CC"; /* File name to use    */
  6760.  csp.hwndOwner        =  hwnd;               /* for position change */
  6761.  
  6762.  ulReturn = ccSendCommand ( CC_START, MPFROMHWND(hwndCaption), &csp );
  6763.                                              /* Start captioning    */
  6764.  
  6765. If you pause the audio file, change the volume, or move the audio slider 
  6766. position, the Caption Sample Application does not have to do any special 
  6767. processing to manage the caption window. The Caption DLL handles this. 
  6768.  
  6769. If you select Stop, the Caption Sample Application issues an MCI_STOP to the 
  6770. audio device, and then it issues a ccSendCommand of CC_STOP to the Caption DLL. 
  6771. This function informs the Caption DLL to stop displaying the caption window in 
  6772. the application and hide the caption window. 
  6773.  
  6774.         case IDC_GPB_STOP:     /* User selected "Stop" push button */
  6775.            /*
  6776.             * If the audio is not in stopped state, stop the device
  6777.             * and hide the text window.
  6778.             */
  6779.            if (eState != ST_STOPPED)
  6780.            {
  6781.               StopTheDevice();
  6782.               ccSendCommand( CC_STOP, MPFROMHWND(hwndCaption), 0 );
  6783.            }
  6784.            break;
  6785.  
  6786. The application issues a ccSendCommand with CC_STATUS to determine the current 
  6787. properties of the caption window.  This function initializes the settings 
  6788. dialog box to display it to the user. The following figure shows the status 
  6789. request for the text columns. Requests for the status of the text rows, 
  6790. background color, text color, and window position are handled similarly. 
  6791.  
  6792.  
  6793.    /*
  6794.     * Query the current status of the text columns.
  6795.     * The CC_STATUS returns the actual value in the ulReturn field.
  6796.     */
  6797.   ccStatusParms.ulItem = CC_STATUS_TEXT_COLUMNS;
  6798.   ccSendCommand( CC_STATUS, MPFROMHWND(hwndCaption), &ccStatusParms );
  6799.  
  6800.    /*
  6801.     * Get the index value for the ulReturn field.
  6802.     */
  6803.    if (ccStatusParms.ulReturn == 15)
  6804.       ulArrayIndexValue = 0;
  6805.    else
  6806.    if (ccStatusParms.ulReturn == 35)
  6807.       ulArrayIndexValue = 1;
  6808.    else
  6809.    if (ccStatusParms.ulReturn == 50)
  6810.       ulArrayIndexValue = 2;
  6811.  
  6812. /*
  6813.  * Set the current index value in the spin button.
  6814.  */
  6815. WinSendDlgItemMsg( hwnd,                 /* Handle to the dialog box  */
  6816.                    IDC_TEXT_COLUMNS_SB,  /* ID of the spin button  */
  6817.                    SPBM_SETCURRENTVALUE, /* Set current index value */
  6818.                    MPFROMLONG(ulArrayIndexValue),/* Current index */
  6819.                    NULL );                       /* Ignore        */
  6820.  
  6821. You can change several properties of the caption window by selecting Settings 
  6822. from the Options pull-down menu of the Caption Sample Application. When you 
  6823. select OK to save the desired properties, the Caption Sample Application issues 
  6824. ccSendCommand with a CC_SET message.  The Caption DLL handles changing and 
  6825. displaying the new properties of the caption window. The following figure shows 
  6826. sample code from the Caption Sample Application that sets up the CC_SET_PARMS 
  6827. data structure for the text rows.  Changing the settings for the background 
  6828. color, text color, window position, and text columns is handled similarly. 
  6829.  
  6830.    CC_SET_PARMS       ccSetParms;    /* Set parms for CC_SET   */
  6831.    ULONG              ulArrayIndexValue=0; /* For spin button return
  6832.                                               value            */
  6833.  
  6834.  
  6835.     /*
  6836.      * Query the text rows spin button. The array index
  6837.      * value will be returned in ulArrayIndexValue variable.
  6838.      */
  6839.     WinSendDlgItemMsg(
  6840.        hwnd,
  6841.        IDC_TEXT_ROWS_SB,
  6842.        SPBM_QUERYVALUE,
  6843.        (MPARAM) &ulArrayIndexValue,
  6844.        MPFROMLONG(0));
  6845.  
  6846.     /*
  6847.      * Get the actual value and initialize the CC_SET_PARMS
  6848.      * data structure with the appropriate information.
  6849.      */
  6850.     ccSetParms.ulRows = (ULONG) atoi( textRows[ulArrayIndexValue] );
  6851.  
  6852.     /*
  6853.      * Issue the CC_SET command with the ccSendCommand and close
  6854.      * the dialog box.
  6855.      */
  6856.     ccSendCommand(CC_SET, MPFROMHWND(hwndCaption), &ccSetParms);
  6857.     WinDismissDlg( hwnd, TRUE );
  6858.  
  6859.     return( 0 );
  6860.  
  6861.  
  6862. ΓòÉΓòÉΓòÉ 14. OS/2 Multimedia Controls ΓòÉΓòÉΓòÉ
  6863.  
  6864. This chapter describes how to create and manage your own customized windows, 
  6865. graphic buttons and secondary windows. OS/2 multimedia applications, such as 
  6866. Volume Control shown in the following figure provide you with examples of 
  6867. multimedia control implementations. 
  6868.  
  6869. The SW.DLL dynamic link library, located in the \MMOS2\DLL subdirectory 
  6870. contains the functions that support creating and manipulating these controls. 
  6871. (The SW.H file is included with the Toolkit and contains the prototypes, 
  6872. constants, and data structures your application needs.) Refer to the OS/2 PM 
  6873. Programming Guide for information on creating circular sliders (dials). 
  6874.  
  6875. Refer to the CUA Guide to Multimedia User Interface Design for more information 
  6876. about creating consistent user interfaces for multimedia controls. 
  6877.  
  6878.  
  6879. ΓòÉΓòÉΓòÉ 14.1. Graphic Buttons ΓòÉΓòÉΓòÉ
  6880.  
  6881. A graphic button is a specialized push button that displays text, or graphics, 
  6882. or both. If a graphic button is defined as a two-state graphic button, it can 
  6883. have an up or down appearance. The two-state button remembers its state and 
  6884. thus can be toggled from up to down and down to up. Unlike a standard push 
  6885. button, the graphic button remains in the changed state after the user has 
  6886. clicked on it. 
  6887.  
  6888. Individual bit maps can be displayed along with text while the button is in an 
  6889. up, down, highlighted, or unhighlighted state. A graphic button is highlighted 
  6890. when the mouse select button is held down while the pointer is on the graphic 
  6891. button. 
  6892.  
  6893. Typically, when a two-state button is up, it is selectable, and when it is 
  6894. down, an action is being processed. The bit map shown in the up state reflects 
  6895. the action to be processed. 
  6896.  
  6897. If the button has been defined as an animated graphic button, a series of bit 
  6898. maps can be displayed to produce an animated effect. If the button is a 
  6899. two-state button, animation can be done for a particular button state, or it 
  6900. can be independent of the change of button state. The drawing of animation bit 
  6901. maps takes precedence over the current state bit map. 
  6902.  
  6903. Any graphic button that draws a bit map while the button is highlighted or 
  6904. unhighlighted is not intended to be animated. Combining an animation button 
  6905. style with either of these two button styles can produce unpredictable results. 
  6906.  
  6907. Graphic button text can appear as flat on the button surface, or as 
  6908. three-dimensional, with its z-order raised or recessed, relative to the button 
  6909. surface. 
  6910.  
  6911. These functional capabilities make graphic buttons ideal to use when designing 
  6912. a multimedia device control panel. 
  6913.  
  6914.  
  6915. ΓòÉΓòÉΓòÉ 14.1.1. Styles ΓòÉΓòÉΓòÉ
  6916.  
  6917. The following table identifies the graphic button styles that can be specified 
  6918. for a graphic button to increase its functionality. A graphic button with no 
  6919. style bits set has an "up" state and the capability to display bit maps, or 
  6920. text, or both. 
  6921.  
  6922. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6923. ΓöéStyle               ΓöéDescription                             Γöé
  6924. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6925. ΓöéGBS_TWOSTATE        ΓöéCreates a graphic button that has two   Γöé
  6926. Γöé                    Γöéstates: up and down. When the button is Γöé
  6927. Γöé                    Γöéin the up state (drawn with its z-order Γöé
  6928. Γöé                    Γöéabove the owner), this usually indicatesΓöé
  6929. Γöé                    Γöéit is selectable.  When the button is inΓöé
  6930. Γöé                    Γöéthe down state (drawn with its z-order  Γöé
  6931. Γöé                    Γöébelow the owner), this usually indicatesΓöé
  6932. Γöé                    Γöéan action is being processed.           Γöé
  6933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6934. ΓöéGBS_AUTOTWOSTATE    ΓöéCreates a two-state graphic button that Γöé
  6935. Γöé                    Γöéautomatically toggles its state from up Γöé
  6936. Γöé                    Γöéto down or down to up whenever the user Γöé
  6937. Γöé                    Γöéclicks on it.  No messages from the     Γöé
  6938. Γöé                    Γöéowner are required for the button to    Γöé
  6939. Γöé                    Γöétoggle its state.                       Γöé
  6940. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6941. ΓöéGBS_ANIMATION       ΓöéCreates an animated graphic button that Γöé
  6942. Γöé                    Γöédisplays a series of bit maps. Display  Γöé
  6943. Γöé                    Γöéof the series is handled like a circularΓöé
  6944. Γöé                    Γöélist; after the last bit map in the     Γöé
  6945. Γöé                    Γöéseries is displayed, the first bit map  Γöé
  6946. Γöé                    Γöéin the series is displayed, and so      Γöé
  6947. Γöé                    Γöéforth.                                  Γöé
  6948. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6949. ΓöéGBS_AUTOANIMATION   ΓöéCreates an animated graphic button that Γöé
  6950. Γöé                    Γöéautomatically toggles its animation fromΓöé
  6951. Γöé                    Γöéoff to on or on to off whenever the userΓöé
  6952. Γöé                    Γöéclicks on it. Usually, when the button'sΓöé
  6953. Γöé                    Γöéanimation is off, the button is         Γöé
  6954. Γöé                    Γöéselectable. Conversely, when the        Γöé
  6955. Γöé                    Γöéanimation is on, an action is being     Γöé
  6956. Γöé                    Γöéprocessed.                              Γöé
  6957. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6958. ΓöéGBS_HILITEBITMAP    ΓöéCreates a graphic button that displays aΓöé
  6959. Γöé                    Γöédifferent bit map when the button is in Γöé
  6960. Γöé                    Γöéa highlighted paint state.  The         Γöé
  6961. Γöé                    Γöéhighlighted paint state occurs when the Γöé
  6962. Γöé                    Γöéuser presses the mouse button while the Γöé
  6963. Γöé                    Γöépointer is over the graphic button (or  Γöé
  6964. Γöé                    Γöéthe user holds the spacebar down while  Γöé
  6965. Γöé                    Γöéthe graphic button has the focus).      Γöé
  6966. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6967. ΓöéGBS_DISABLEBITMAP   ΓöéCreates a graphic button that displays aΓöé
  6968. Γöé                    Γöédifferent bit map when the highlighted  Γöé
  6969. Γöé                    Γöépaint state of the button is disabled.  Γöé
  6970. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6971. ΓöéGBS_3D_TEXTRECESSED ΓöéCreates a graphic button that has       Γöé
  6972. Γöé                    Γöéthree-dimensional text.  The text       Γöé
  6973. Γöé                    Γöéz-order is below the face of the button.Γöé
  6974. Γöé                    ΓöéThe main body of the text is black, and Γöé
  6975. Γöé                    Γöéits bottom and right edges are white.   Γöé
  6976. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6977. ΓöéGBS_3D_TEXTRAISED   ΓöéCreates a graphic button that has       Γöé
  6978. Γöé                    Γöéthree-dimensional text.  The text       Γöé
  6979. Γöé                    Γöéz-order is above the face of the button.Γöé
  6980. Γöé                    ΓöéThe main body of the text is white, and Γöé
  6981. Γöé                    Γöéits bottom and right edges are black.   Γöé
  6982. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6983. Note: Setting both GBS_3D_TEXTRECESSED and GBS_3D_TEXTRAISED is not 
  6984. recommended, because this can cause unpredictable behavior. 
  6985.  
  6986.  
  6987. ΓòÉΓòÉΓòÉ 14.1.2. Owner Notifications ΓòÉΓòÉΓòÉ
  6988.  
  6989. The owner window of a graphic button is sent a notification code with the 
  6990. WM_CONTROL message whenever the graphic button changes state. The notification 
  6991. code indicates the new state of the button. WM_CONTROL messages are sent with 
  6992. WinSendMsg, which does not return until the application processes the message. 
  6993. These notifications are provided for an application that requires synchronous 
  6994. knowledge of when a graphic button changes state. An example of this type of 
  6995. graphic button is the music scan button shown in the example in section 
  6996. Processing Messages for a CD Player Graphic Button. 
  6997.  
  6998. At the same time a WM_CONTROL message is sent to the owner, a WM_COMMAND 
  6999. message is also posted to the application message queue with WinPostMsg. The 
  7000. WM_COMMAND informs the application that the graphic button has been selected. 
  7001. If you want to implement a simple graphic button that performs an action, such 
  7002. as a playback operation, you can use code developed for a PM pushbutton, which 
  7003. uses the WM_COMMAND means of notification.  The only change you have to make to 
  7004. the code is the window class. 
  7005.  
  7006. When you create your graphic button, you can take advantage of either of these 
  7007. means of notification. 
  7008.  
  7009. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7010. ΓöéNotification Code       ΓöéDescription                         Γöé
  7011. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7012. ΓöéGBN_BUTTONUP            ΓöéThe graphic button is changing to anΓöé
  7013. Γöé                        Γöéup paint state from either a down orΓöé
  7014. Γöé                        Γöéhighlighted paint state.            Γöé
  7015. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7016. ΓöéGBN_BUTTONDOWN          ΓöéThe graphic button is changing to a Γöé
  7017. Γöé                        Γöédown paint state from either an up  Γöé
  7018. Γöé                        Γöéor highlighted paint state.         Γöé
  7019. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7020. ΓöéGBN_BUTTONHILITE        ΓöéThe graphic button is changing to a Γöé
  7021. Γöé                        Γöéhighlighted paint state from either Γöé
  7022. Γöé                        Γöéan up or down paint state.          Γöé
  7023. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7024.  
  7025.  
  7026. ΓòÉΓòÉΓòÉ 14.1.3. Control Messages ΓòÉΓòÉΓòÉ
  7027.  
  7028. The following table describes the graphic button control messages that can be 
  7029. used by a graphic button window procedure to manipulate a graphic button: 
  7030.  
  7031. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7032. ΓöéControl Message               ΓöéDescription                   Γöé
  7033. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7034. ΓöéGBM_SETGRAPHICDATA            ΓöéSets the graphical data       Γöé
  7035. Γöé                              Γöé(graphic button text, bit     Γöé
  7036. Γöé                              Γöémaps) for a graphic button andΓöé
  7037. Γöé                              Γöéerases all previous data      Γöé
  7038. Γöé                              Γöérelating to the state of the  Γöé
  7039. Γöé                              Γöébutton.                       Γöé
  7040. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7041. ΓöéGBM_ANIMATE                   ΓöéSets the animation of an      Γöé
  7042. Γöé                              Γöéanimated graphic button to    Γöé
  7043. Γöé                              Γöéstart or stop at the first bitΓöé
  7044. Γöé                              Γöémap in the series or at a bit Γöé
  7045. Γöé                              Γöémap within the series.        Γöé
  7046. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7047. ΓöéGBM_QUERYANIMATIONACTIVE      ΓöéGets the animation state of anΓöé
  7048. Γöé                              Γöéanimated graphic button.      Γöé
  7049. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7050. ΓöéGBM_SETANIMATIONRATE          ΓöéSets, in milliseconds, the    Γöé
  7051. Γöé                              Γöéperiod between bit-map updatesΓöé
  7052. Γöé                              Γöéfor an animated graphic       Γöé
  7053. Γöé                              Γöébutton.                       Γöé
  7054. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7055. ΓöéGBM_QUERYANIMATIONRATE        ΓöéGets the animation rate that  Γöé
  7056. Γöé                              Γöéis set for an animated graphicΓöé
  7057. Γöé                              Γöébutton.                       Γöé
  7058. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7059. ΓöéGBM_SETSTATE                  ΓöéSets a two-state graphic      Γöé
  7060. Γöé                              Γöébutton to up or down, or      Γöé
  7061. Γöé                              Γöétoggles its state.            Γöé
  7062. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7063. ΓöéGBM_QUERYSTATE                ΓöéGets the state of a graphic   Γöé
  7064. Γöé                              Γöébutton.                       Γöé
  7065. Γöé                              ΓöéNote: For a graphic button    Γöé
  7066. Γöé                              Γöéthat does not have a two-stateΓöé
  7067. Γöé                              Γöéstyle, its state is always    Γöé
  7068. Γöé                              Γöéconsidered to be "up."        Γöé
  7069. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7070. ΓöéGBM_SETBITMAPINDEX            ΓöéSets the bit map index to use Γöé
  7071. Γöé                              Γöéfor the various states of the Γöé
  7072. Γöé                              Γöégraphic button; up, down,     Γöé
  7073. Γöé                              Γöéhighlighted, not highlighted, Γöé
  7074. Γöé                              Γöébeginning of animation series,Γöé
  7075. Γöé                              Γöéend of animation series,      Γöé
  7076. Γöé                              Γöécurrent state (refers to      Γöé
  7077. Γöé                              Γöéeither the up or down bit     Γöé
  7078. Γöé                              Γöémap).                         Γöé
  7079. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7080. ΓöéGBM_QUERYBITMAPINDEX          ΓöéGets the bit map index used   Γöé
  7081. Γöé                              Γöéfor a particular button state.Γöé
  7082. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7083. ΓöéGBM_SETTEXTPOSITION           ΓöéSets graphic button text      Γöé
  7084. Γöé                              Γöéposition above or below the   Γöé
  7085. Γöé                              Γöébit map.                      Γöé
  7086. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7087. ΓöéGBM_QUERYTEXTPOSITION         ΓöéGets graphic button text      Γöé
  7088. Γöé                              Γöéposition relative to the bit  Γöé
  7089. Γöé                              Γöémap.                          Γöé
  7090. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7091.  
  7092.  
  7093. ΓòÉΓòÉΓòÉ 14.1.4. Creating Graphic Buttons ΓòÉΓòÉΓòÉ
  7094.  
  7095. The graphic button PM window class WC_GRAPHICBUTTON is similar to the window 
  7096. class of a push button. This window class must be registered with the function 
  7097. WinRegisterGraphicButton before you can create a graphic button. 
  7098.  
  7099. A graphic button can be created by a CONTROL statement in a dialog resource. A 
  7100. graphic button also can be created by specifying the WC_GRAPHICBUTTON window 
  7101. class parameter of the WinCreateWindow call. 
  7102.  
  7103. The graphic button should be initialized when its owner receives a WM_INITDLG 
  7104. message. By doing the initializations at this time, the owner has the 
  7105. capability to change the graphic button's bit maps, text positioning, state, 
  7106. animation rate, and so on, before the button is displayed on the screen. 
  7107.  
  7108. The GBTNCDATA data structure shown below is the data structure that is 
  7109. allocated to initialize graphic button control data. This structure is required 
  7110. when sending the GBM_SETGRAPHICDATA message. 
  7111.  
  7112. Note:  If you create a graphic button with WinCreateWindow and initialize the 
  7113.        GBTNCDATA structure; set the usReserved field to GB_STRUCTURE, rather 
  7114.        than GB_RESOURCE, to indicate the structure contains a module handle. 
  7115.  
  7116.         typedef struct _GBTNCDATA
  7117.         {
  7118.            USHORT  usReserved;   /* Reserved                       */
  7119.            PSZ     pszText;      /* Initial graphic button text    */
  7120.            HMODULE hmod;         /* Handle of bit map resource     */
  7121.            USHORT  cBitmaps;     /* Number of button bit maps      */
  7122.            USHORT  aidBitmap[1]; /* Array of bit map resource IDs  */
  7123.         } GBTNCDATA;
  7124.  
  7125.  Graphic button data is set or changed by sending the GBM_SETGRAPHICDATA 
  7126.  message with WinSendMsg to the graphic button control window procedure. Using 
  7127.  this message to change graphic button data erases any data relating to the 
  7128.  button state and sets the button state to the default parameters. The default 
  7129.  state of a graphic button is "up." If you want to change only the text of the 
  7130.  graphic button without affecting the button state data, use WinSetWindowText. 
  7131.  
  7132.  Mnemonics are supported for graphic button text. As with push buttons, a 
  7133.  character in the text is designated as the mnemonic for the button by a 
  7134.  preceding tilde (~) character. If the button does not have any text, a null 
  7135.  string must be specified. 
  7136.  
  7137.  The number specified for bit maps associated with the graphic button does not 
  7138.  necessarily represent the number of unique bit maps. A graphic button can have 
  7139.  duplicate bit maps associated with it for animation purposes. 
  7140.  
  7141.  It is assumed that all the bit maps associated with a particular graphic 
  7142.  button are of equal size.  The size of a graphic button is determined by the 
  7143.  dimensions specified in the CONTROL statement of the dialog resource, as well 
  7144.  as the size of the bit map.  If the dimensions in the CONTROL statement are 
  7145.  too small to contain the bit map and the text, the button size is made larger 
  7146.  to accommodate the width of the bit map and the depth of the bit map plus the 
  7147.  text.  However, if the width of the text exceeds the width determined by the 
  7148.  specified dimensions or the actual bit map (whichever is greater), the text is 
  7149.  truncated. 
  7150.  
  7151.  
  7152. ΓòÉΓòÉΓòÉ 14.1.5. Animated Graphic Button ΓòÉΓòÉΓòÉ
  7153.  
  7154. The following code fragment is a sample definition for creating an animated 
  7155. graphic button with a CONTROL statement in a dialog resource. 
  7156.  
  7157. CONTROL "", IDD_TESTPLAY1, 120, 70, 45, 35,
  7158.             WC_GRAPHICBUTTON,
  7159.             GBS_AUTOANIMATION | GBS_3D_TEXTRAISED |
  7160.             WS_VISIBLE | WS_TABSTOP
  7161.             CTLDATA GB_RESOURCE, "PLAY", 16, ID_PLAY1, ID_PLAY 2, ID_PLAY3,
  7162.                                            ID_PLAY4,  ID_PLAY5,  ID_PLAY6,
  7163.                                            ID_PLAY7,  ID_PLAY8,  ID_PLAY9,
  7164.                                            ID_PLAY10, ID_PLAY11, ID_PLAY12,
  7165.                                            ID_PLAY13, ID_PLAY14, ID_PLAY15,
  7166.                                            ID_PLAY16, 0
  7167.  
  7168. The control data for the graphic button provides the text "PLAY" (with no 
  7169. mnemonic) for the button face and associates the names of 16 bit maps with the 
  7170. button. The bit maps are assigned indexes 1 through 16, according to the order 
  7171. they appear in the control data. 
  7172.  
  7173. The list of bit-map IDs is preceded by a number and ends with a zero. The 
  7174. number indicates the total of defined bit maps. The zero indicates the end of 
  7175. the bit-map array. The number of bit maps that actually are displayed is 
  7176. determined by the bit map total or the zero-terminated array, whichever is 
  7177. less.  If the number of bit-map IDs is greater than the bit-map total, the 
  7178. extraneous bit-map IDs are ignored.  A bit map cannot have an ID of zero. 
  7179.  
  7180. Because the style of this graphic button includes GBS_AUTOANIMATION, when the 
  7181. user clicks on this button, it automatically toggles the animation on or off 
  7182. without intervention from the owner window of the graphic button. 
  7183.  
  7184. An animated graphic button can also be created by specifying the 
  7185. WS_GRAPHICBUTTON window class name as a parameter of the WinCreateWindow call. 
  7186. The following code fragment shows an example of setting up the GBTNCDATA 
  7187. structure with the graphic button data and using the WinCreateWindow call. 
  7188.  
  7189. HWND        hwndGB;        /* Graphic button window handle   */
  7190. PGBTNCDATA  pgbtn;         /* Pointer to graphic button data */
  7191. LONG        lSize;         /* Size of graphic data           */
  7192. #define NUMBITMAPS   4     /* Number of bit maps for button  */
  7193.  
  7194. lSize = sizeof(GBTNCDATA) + sizeof(USHORT) * (NUMBITMAPS - 1);
  7195. pgbtn = (PGBTNCDATA)malloc(lSize);
  7196.  
  7197. if (pgbtn)
  7198.  {
  7199.   memset(pgbtn, 0, lSize);
  7200.  
  7201.   pgbtnpszText     = "Text";
  7202.   pgbtncBitmaps    = NUMBITMAPS;
  7203.   pgbtnaidBitmap[0] = BMP0;
  7204.   pgbtnaidBitmap[1] = BMP1;
  7205.   pgbtnaidBitmap[2] = BMP2;
  7206.   pgbtnaidBitmap[3] = BMP3;
  7207.  
  7208.   WinRegisterGraphicButton();
  7209.  
  7210.   /* Create the graphic button.  hwnd is the window handle
  7211.    * of the owning window (for example, client window)
  7212.    */
  7213.  
  7214.    hwndGB = WinCreateWindow (hwnd,
  7215.      WC_GRAPHICBUTTON,
  7216.      "",               /* No text here; see pgbtnpszText */
  7217.      WS_VISIBLE | WS_TABSTOP | WS_POINTSELECT |
  7218.      GBS_AUTOANIMATION | GBS_3D_TEXTRECESSED,
  7219.      0,0,80,40,
  7220.      hwnd,
  7221.      HWND_TOP,
  7222.      ID_GB,            /* Graphic button identifier */
  7223.      MPFROMP(pgbtn),
  7224.      NULL);
  7225.  
  7226.   WinSendMsg( hwndGB, GBM_SETGRAPHICDATA, MPFROMP(pgbtn), 0);
  7227. }
  7228.  
  7229.  
  7230. ΓòÉΓòÉΓòÉ 14.1.6. Two-State Graphic Button ΓòÉΓòÉΓòÉ
  7231.  
  7232. The following figure is a sample definition for creating a two-state graphic 
  7233. button in a dialog resource. 
  7234.  
  7235. CONTROL "", IDD_MP_PAUSE, 65, 10, 40, 30,
  7236.             WC_GRAPHICBUTTON,
  7237.             GBS_TWOSTATE | GBS_3D_TEXTRECESSED |
  7238.             WS_VISIBLE | WS_TABSTOP
  7239.             CTLDATA GB_RESOURCE, "PAUSE", 3, ID_MP_PAUS0, ID_MP_PAUS1,
  7240.                                              ID_MP_PAUS2, 0
  7241.  
  7242. The control data for the graphic button provides the text "PAUSE" (with no 
  7243. mnemonic) for the button face and associates the names of three bit maps with 
  7244. the button. The bit maps are assigned indexes 0, 1, and 2, according to the 
  7245. order they appear in the control data. In this case, the bit maps are used to 
  7246. indicate the various states of the button:  up, down, and highlighted. 
  7247.  
  7248. Because the button does not have a GBS_AUTOTWOSTATE style, the owner window 
  7249. must send a GBM_SETSTATE message to the graphic button, requesting the button 
  7250. change its state. 
  7251.  
  7252. A two-state graphic button can also be created by specifying the 
  7253. WC_GRAPHICBUTTON window class name as a parameter of the WinCreateWindow call. 
  7254. The following figure shows an example of setting up the GBTNCDATA structure 
  7255. with the graphic button data and using the WinCreateWindow call. 
  7256.  
  7257. HWND        hwndTSB;    /* Two-state window handle             */
  7258. PGBTNCDATA  pgbtn;      /* Graphic button control data         */
  7259. LONG        lSize;      /* Size of graphic button control data */
  7260. # define NUMBITMAPS  2  /* Number of bitmaps for button */
  7261.  
  7262. lSize = sizeof(GBTNCDATA) + sizeof(USHORT) * (NUMBITMAPS - 1);
  7263. pgbtn = (PGBTNCDATA)malloc(lSize);
  7264.  
  7265. if (pgbtn)
  7266. {
  7267.   memset(pgbtn, 0, lSize);
  7268.  
  7269.   pgbtnpszText    = "Text";
  7270.   pgbtncBitmaps   = NUMBITMAPS;
  7271.   pgbtnaidBitmap[0] = BMP0;
  7272.   pgbtnaidBitmap[1] = BMP1;
  7273.  
  7274.   WinRegisterGraphicButton();
  7275.  
  7276.   /* Create the two-state graphic button.  hwnd is the window handle
  7277.    * of the owning window (for example, client window)
  7278.    */
  7279.   hwndTSB = WinCreateWindow (hwnd,
  7280.     WC_GRAPHICBUTTON,   /* No text here; see pgbtnpszText */
  7281.     "",
  7282.     WS_VISIBLE |, WS_TABSTOP | WS_POINTSELECT
  7283.     | GBS_AUTOTWOSTATE | GBS_3D_TEXTRECESSED,
  7284.     0,0,80,40,
  7285.     hwnd,
  7286.     HWND_TOP,
  7287.     ID_TSB,            /* Graphic button identifier */
  7288.     MPFROMP(pgbtn),
  7289.     NULL);
  7290.  
  7291.   WinSendMsg(hwndTSB, GBM_SETGRAPHICDATA, MPFROMP(pgbtn), 0);
  7292.  
  7293.   WinSendMsg(hwndTSB, GBM_SETBITMAPINDEX,
  7294.              MPFROMSHORT(GB_DOWN),           /* Which state  */
  7295.              MPFROMSHORT(GB_INDEX_LAST));    /* Which bitmap */
  7296. }
  7297.  
  7298.  
  7299. ΓòÉΓòÉΓòÉ 14.1.7. Processing Messages for a CD Player Graphic Button ΓòÉΓòÉΓòÉ
  7300.  
  7301. The following code fragment illustrates a message-handling procedure for a CD 
  7302. player window. This example demonstrates synchronization of a graphic button 
  7303. and control of a CD player. 
  7304.  
  7305.   CD_Player_Message_Proc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  7306.   {
  7307.       switch (msg)  {
  7308.         ...
  7309.         case WM_CONTROL:
  7310.  
  7311.         /* If the Music Scan GraphicButton sent the notification...   */
  7312.             if (SHORT1FROMMP(mp1) == ID_MUSIC_SCAN) {
  7313.  
  7314.                switch (SHORT2FROMMP(mp1)) {  /* type of notification */
  7315.  
  7316.                   case GBN_BUTTONHILITE:  /* button held down */
  7317.                      CD_Music_Scan_Start (...);
  7318.                      break;
  7319.  
  7320.                   case GBN_BUTTONUP:      /* button released */
  7321.                      CD_Music_Scan_Stop (...);
  7322.                      break;
  7323.                   ...
  7324.                }
  7325.             ...
  7326.             }
  7327.             ...
  7328.             break;
  7329.         ...
  7330.      }
  7331.   }
  7332.  
  7333. When the music scan button on a physical CD player is held down, it allows the 
  7334. listener to hear the music played at an accelerated rate. In the example shown 
  7335. in the previous figure, the effect of the message procedure is similar.  If the 
  7336. user holds the mouse button down and the pointer is over the Music Scan graphic 
  7337. button, the CD_Music_Scan_Start function is called.  If the mouse button is 
  7338. released, or the pointer is removed from the Music Scan graphic button, then 
  7339. the CD_Music_Scan_Stop function is called. 
  7340.  
  7341.  
  7342. ΓòÉΓòÉΓòÉ 14.2. Secondary Windows ΓòÉΓòÉΓòÉ
  7343.  
  7344. A secondary window provides a sizeable and scrollable dialog interface. 
  7345. Secondary window functions are compatible with PM dialog window functions, so 
  7346. it is an easy task to make changes to existing code that uses the PM dialog 
  7347. window functions. 
  7348.  
  7349. The secondary window uses two frame windows, a standard frame and a dialog 
  7350. frame. The standard frame window offers the standard services-moving, sizing, 
  7351. minimizing, maximizing, and closing-as well as a service for resizing the 
  7352. window to a default size. 
  7353.  
  7354. The window handle returned by WinLoadSecondaryWindow is the handle to the 
  7355. standard frame. This handle is used when associating a help instance, modifying 
  7356. the title bar or system menu, and doing WinSetWindowPos operations. 
  7357.  
  7358. The window handle that is used to pass messages to the secondary window 
  7359. procedure pointed to by WinLoadSecondaryWindow is the dialog window handle. 
  7360. This handle is used to access controls on the dialog with the WinWindowFromID 
  7361. function. An application can get a handle to the dialog window by passing the 
  7362. outer frame window handle to WinQuerySecondaryHWND. The dialog window is a 
  7363. child of the standard window's FID_CLIENT window. 
  7364.  
  7365. When the secondary window is opened, the frame window is set to the default 
  7366. size, which accommodates the dimensions of the dialog window. If the user makes 
  7367. the client window smaller by sizing the frame window, the dialog window is 
  7368. clipped and vertical and horizontal scroll bars appear. Selecting Default Size 
  7369. restores the frame window to the optimal size for displaying the dialog. 
  7370. Because the Sizeable Dialog Frame Manager manages the display of the standard 
  7371. window and its scroll bars automatically, the application needs to manage only 
  7372. the dialog window. 
  7373.  
  7374. The OS/2 multimedia Volume Control application, shown in the beginning of this 
  7375. section, OS/2 Multimedia Controls, provides an example of a modeless secondary 
  7376. window implementation. 
  7377.  
  7378.  
  7379. ΓòÉΓòÉΓòÉ 14.2.1. Compatibility with PM Dialog Window Functions ΓòÉΓòÉΓòÉ
  7380.  
  7381. The design of secondary window functions is very much like the design of dialog 
  7382. window functions. The following table, which lists the secondary window 
  7383. functions, includes the names of PM dialog window equivalent functions. 
  7384.  
  7385. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7386. ΓöéSecondary Window Function   ΓöéPM Dialog Window ΓöéDescription                   Γöé
  7387. Γöé                            ΓöéEquivalent       Γöé                              Γöé
  7388. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7389. ΓöéWinLoadSecondaryWindow      ΓöéWinLoadDlg       ΓöéCreates a modeless secondary  Γöé
  7390. Γöé                            Γöé                 Γöéwindow from a dialog template Γöé
  7391. Γöé                            Γöé                 Γöéin a resource.                Γöé
  7392. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7393. ΓöéWinSecondaryWindow          ΓöéWinDlgBox        ΓöéCreates a modal secondary     Γöé
  7394. Γöé                            Γöé                 Γöéwindow from a dialog template Γöé
  7395. Γöé                            Γöé                 Γöéin a resource DLL and returns Γöé
  7396. Γöé                            Γöé                 Γöéthe result value established  Γöé
  7397. Γöé                            Γöé                 Γöéby the                        Γöé
  7398. Γöé                            Γöé                 ΓöéWinDismissSecondaryWindow     Γöé
  7399. Γöé                            Γöé                 Γöécall.                         Γöé
  7400. Γöé                            Γöé                 ΓöéWinSecondaryWindow combines   Γöé
  7401. Γöé                            Γöé                 Γöéthe functions of              Γöé
  7402. Γöé                            Γöé                 ΓöéWinLoadSecondaryWindow,       Γöé
  7403. Γöé                            Γöé                 ΓöéWinProcessSecondaryWindow, andΓöé
  7404. Γöé                            Γöé                 ΓöéWinDestroySecondaryWindow.    Γöé
  7405. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7406. ΓöéWinProcessSecondaryWindow   ΓöéWinProcessDlg    ΓöéProcesses a modal secondary   Γöé
  7407. Γöé                            Γöé                 Γöéwindow by dispatching messagesΓöé
  7408. Γöé                            Γöé                 Γöéwhile the modal window is     Γöé
  7409. Γöé                            Γöé                 Γöédisplayed.                    Γöé
  7410. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7411. ΓöéWinDismissSecondaryWindow   ΓöéWinDismissDlg    ΓöéCauses modal                  Γöé
  7412. Γöé                            Γöé                 ΓöéWinProcessSecondaryWindow or  Γöé
  7413. Γöé                            Γöé                 ΓöéWinSecondaryWindow calls to   Γöé
  7414. Γöé                            Γöé                 Γöéreturn.                       Γöé
  7415. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7416. ΓöéWinDestroySecondaryWindow   ΓöéWinDestroyWindow ΓöéDestroys a secondary window.  Γöé
  7417. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7418. ΓöéWinDefSecondaryWindowProc   ΓöéWinDefDlgProc    ΓöéProvides the default behavior Γöé
  7419. Γöé                            Γöé                 Γöéfor a secondary window. A     Γöé
  7420. Γöé                            Γöé                 Γöésecondary window procedure    Γöé
  7421. Γöé                            Γöé                 Γöémust reference this function  Γöé
  7422. Γöé                            Γöé                 Γöéfor messages that are not     Γöé
  7423. Γöé                            Γöé                 Γöéhandled explicitly.           Γöé
  7424. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7425. ΓöéWinCreateSecondaryWindow    ΓöéWinCreateDlg     ΓöéCreates a Secondary Window    Γöé
  7426. Γöé                            Γöé                 Γöéfrom a dialog template in the Γöé
  7427. Γöé                            Γöé                 Γöéapplication's executable file.Γöé
  7428. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7429. ΓöéWinSecondaryMessageBox      ΓöéWinMessageBox    ΓöéCreates a modal window that   Γöé
  7430. Γöé                            Γöé                 Γöécan be used to display error  Γöé
  7431. Γöé                            Γöé                 Γöémessages and ask questions.   Γöé
  7432. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7433. ΓöéWinQuerySecondaryHWND       ΓöéWinQueryWindow   ΓöéReturns either the handle to  Γöé
  7434. Γöé                            Γöé                 Γöéthe outer frame or inner      Γöé
  7435. Γöé                            Γöé                 Γöédialog window of a secondary  Γöé
  7436. Γöé                            Γöé                 Γöéwindow, depending on the      Γöé
  7437. Γöé                            Γöé                 Γöéhandle supplied as input.     Γöé
  7438. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7439. ΓöéWinDefaultSize              ΓöéNone             ΓöéSizes the dialog window to itsΓöé
  7440. Γöé                            Γöé                 Γöérecommended, optimal size.    Γöé
  7441. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7442. ΓöéWinInsertDefaultSize        ΓöéNone             ΓöéAdds the Default Size item to Γöé
  7443. Γöé                            Γöé                 Γöéthe system menu of a secondaryΓöé
  7444. Γöé                            Γöé                 Γöéwindow.                       Γöé
  7445. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7446.  
  7447.  
  7448. ΓòÉΓòÉΓòÉ 14.2.2. Creating a Secondary Window ΓòÉΓòÉΓòÉ
  7449.  
  7450. WinLoadSecondaryWindow and WinSecondaryWindow create secondary windows from 
  7451. dialog templates in a resource file. WinSecondaryWindow creates a modal window 
  7452. and supports the processing and destruction of the modal dialog window. 
  7453. WinSecondaryWindow is equivalent to the the following code sequence. 
  7454.  
  7455. hwndSW = WinLoadSecondaryWindow(...);
  7456. usResult = WinProcessSecondaryWindow(hwndSW);
  7457. WinDestroySecondaryWindow(hwndSW);
  7458.  
  7459. WinSecondaryWindow and WinProcessSecondaryWindow functions do not return until 
  7460. WinDismissSecondaryWindow is called. If your secondary window procedure handles 
  7461. WM_COMMAND messages, it must call WinDismissSecondaryWindow after calling the 
  7462. WinSecondaryWindow or the WinProcessSecondaryWindow function.  Optionally, your 
  7463. window procedure can pass WM_COMMAND messages to WinDefSecondaryWindowProc, 
  7464. which calls WinDismissSecondaryWindow. 
  7465.  
  7466. WinDismissSecondaryWindow hides the secondary window and returns a result code 
  7467. for a WM_COMMAND message, causing WinSecondaryWindow and 
  7468. WinProcessSecondaryWindow to return. For example, if the user selects the OK 
  7469. button, your window procedure passes the DID_OK code with 
  7470. WinDismissSecondaryWindow. Although the secondary window is hidden, it still 
  7471. exists. In the case of WinProcessSecondaryWindow, the window procedure must 
  7472. call WinDestroySecondaryWindow. Before WinSecondaryWindow returns, it destroys 
  7473. the secondary window. 
  7474.  
  7475.  
  7476. ΓòÉΓòÉΓòÉ 14.2.3. Modeless Secondary Window ΓòÉΓòÉΓòÉ
  7477.  
  7478. WinCreateSecondaryWindow or WinLoadSecondaryWindow can be used to create a 
  7479. modeless secondary window. WinCreateSecondaryWindow creates a secondary window 
  7480. from a dialog template that is stored in the application's executable file. 
  7481. WinLoadSecondaryWindow creates a secondary window from a dialog template that 
  7482. is stored in a dynamic link library. 
  7483.  
  7484. If the template is a resource in a dynamic link library, the application loads 
  7485. the dynamic link library by calling DosLoadModule, and then loads the dialog by 
  7486. calling WinLoadSecondaryWindow (or WinSecondaryWindow, which calls 
  7487. WinLoadSecondaryWindow). A WM_INITDLG message is sent to the secondary window 
  7488. procedure before WinLoadSecondaryWindow returns. 
  7489.  
  7490. #define INCL_SECONDARYWINDOW             /* Secondary window functions */
  7491. #include <sw.h>
  7492.  
  7493. PDLGTEMPLATE pdlgt;
  7494.  
  7495. DosGetResource (NULL, RT_DIALOG, ID_DIALOG, (PVOID) pdlgt);
  7496.  
  7497. WinCreateSecondaryWindow ( HWND_DESKTOP, /*  Parent window     */
  7498.                 NULL                     /*  Owner window      */
  7499.                 MyDlgProc                /*  Dialog procedure  */
  7500.                 pdlgt                    /*  Dialog template   */
  7501.                 NULL);                   /*  Create parameters */
  7502.  
  7503. If the template is a resource in the application's executable file, the 
  7504. application loads the resource by calling DosGetResource (as shown in the 
  7505. previous figure) and then uses the template with WinCreateSecondaryWindow to 
  7506. create a secondary window.  This method of using a dialog template gives the 
  7507. application the advantage of reviewing and modifying the template before 
  7508. creating the secondary window. 
  7509.  
  7510. The difference between a modal and a modeless secondary window is the way the 
  7511. windows handle input. For a modal secondary window, WinSecondaryWindow and 
  7512. WinProcessSecondaryWindow handle all user input to the window with an internal 
  7513. message loop and prevent access to other windows in the application. For a 
  7514. modeless secondary window, the application relies on a normal message loop to 
  7515. dispatch messages to the secondary window procedure and does not use 
  7516. WinSecondaryWindow or WinProcessSecondaryWindow. 
  7517.  
  7518.  
  7519. ΓòÉΓòÉΓòÉ 14.2.4. Secondary Window Message Box ΓòÉΓòÉΓòÉ
  7520.  
  7521. WinSecondaryMessageBox is analagous to WinMessageBox. Both functions create a 
  7522. modal message box that can be used to display error messages and ask questions. 
  7523.  
  7524. WinSecondaryMessageBox allows more flexibility than WinMessageBox, because you 
  7525. can define the text that appears on the buttons, rather than choosing from a 
  7526. set of standard buttons with predetermined text (OK, Cancel, and so forth). 
  7527. WinSecondaryMessageBox uses the SMBD and SMBINFO data structures, found in the 
  7528. SW.H file. 
  7529.  
  7530. The SMBD structure defines the button style, text and ID for each button 
  7531. included in the secondary message box: 
  7532.  
  7533.  typedef struct _SMBD {
  7534.     CHAR   achText[MAX_SMBDTEXT + 1]; /* Text of the button, */
  7535.                                          for example, "~Cancel". */
  7536.     ULONG  idButton;                  /* Button ID returned when user
  7537.                                          chooses button. */
  7538.     LONG   flStyle;                   /* Button style or'ed with
  7539.                                          internal styles. */
  7540.  } SMBD;
  7541.  typedef SMBD * PSMBD;
  7542.  
  7543. The SMBINFO structure defines the icon used in the message box, specifies the 
  7544. number of buttons in the message box, and points to the array of button 
  7545. definitions. 
  7546.  
  7547.    typedef struct _SMBINFO {
  7548.       HPOINTER hIcon;         /* Icon handle                        */
  7549.       ULONG    cButtons;      /* Number of buttons                  */
  7550.       ULONG    flStyle;       /* Icon style flags (MB_ICONQUESTION) */
  7551.       HWND     hwndNotify;    /* Reserved                           */
  7552.       PSMBD    psmbd;         /* Array of button definitions        */
  7553.    } SMBINFO;
  7554.    typedef SMBINFO * PSMBINFO;
  7555.  
  7556.  
  7557. ΓòÉΓòÉΓòÉ 14.2.5. Adding Default Size to the System Menu ΓòÉΓòÉΓòÉ
  7558.  
  7559. The WinInsertDefaultSize adds the Default Size selection to the system menu of 
  7560. the secondary window.  This call should be made during the initialization of 
  7561. the secondary window. 
  7562.  
  7563. When the user selects Default Size from the system menu, an SC_DEFAULTSIZE 
  7564. system command is sent to the secondary window procedure, which calls 
  7565. WinDefaultSize to size the window to its optimal default size. 
  7566.  
  7567. #define INCL_SECONDARYWINDOW
  7568. #include <sw.h>
  7569.  
  7570. HWND hwndFrame
  7571.  
  7572. hwndFrame = WinLoadSecondaryWindow (HWND_DESKTOP, /* Parent window  */
  7573.                                     HWND_DESKTOP, /* Owner window   */
  7574.                                     MyDlgProc,    /* Dialog proc    */
  7575.                                     NULL,         /* Module handle  */
  7576.                                     ID_DIALOG,    /* Resource ID    */
  7577.                                     NULL);        /* Create params  */
  7578.  
  7579. WinInsertDefaultSize (hwndFrame, "~Default size"); /* Insert
  7580.                                                       menu item     */
  7581.  
  7582. WinDefaultSize (hwndFrame);          /* Set window to its
  7583.                                         default size                */
  7584.  
  7585.  
  7586. ΓòÉΓòÉΓòÉ 15. Multimedia I/O File Services ΓòÉΓòÉΓòÉ
  7587.  
  7588. The multimedia input/output (MMIO) file services are an extension of the base 
  7589. OS/2 file services.  Designed to be simple, fast, and flexible, MMIO functions 
  7590. enable an application to access and manipulate multimedia data files in a 
  7591. transparent manner. 
  7592.  
  7593. Multimedia files contain a variety of media elements such as images, graphics, 
  7594. digital audio and video.  These elements can be in different file formats:  for 
  7595. example, RIFF, M-Motion, and AVI.  Multimedia files can also be stored as 
  7596. memory files, elements of a compound file storage system, or as DOS files. 
  7597. MMIO provides a consistent programming interface so that an application can 
  7598. refer to these files, read and write data to the files, and query the contents 
  7599. of the files, while remaining independent of the underlying file formats or the 
  7600. storage systems that contain the files.  In addition, MMIO now enables 
  7601. compressors and decompressors (CODEC procedures) to operate on data objects. 
  7602. See CODEC Procedures for more a more detailed description of CODEC procedures. 
  7603.  
  7604.  
  7605. ΓòÉΓòÉΓòÉ 15.1. MMIO Architecture ΓòÉΓòÉΓòÉ
  7606.  
  7607. Because files services have unique characteristics, the architecture of MMIO is 
  7608. stand-alone and separate from the notion of the media control interface, 
  7609. although some media drivers and file system stream handlers still require file 
  7610. services from MMIO. 
  7611.  
  7612. When an application calls multimedia I/O functions, the MMIO Manager calls the 
  7613. appropriate I/O procedure (IOProc) if necessary, or processes the function 
  7614. within the MMIO Manager itself. The MMIO Manager uses IOProcs to direct the 
  7615. input and output associated with reading from and writing to different types of 
  7616. storage systems or file formats.  IOProcs provide an abstract of the file 
  7617. format, allowing operations such as read, write, and seek to be independent of 
  7618. the specific format in use.  The handler is responsible for translating a 
  7619. generic application request into the necessary format-specific operations. 
  7620.  
  7621. The MMIO architecture provides for CODEC procedures to operate on data objects 
  7622. as required.  A given file format I/O procedure might support none, one, or 
  7623. many CODEC procedures operating on a single format. 
  7624.  
  7625. The following figure illustrates the architecture of the MMIO subsystem. 
  7626.  
  7627.  
  7628.  
  7629.             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7630.             Γöé            Γöé  Γöé   MEDIA    Γöé  Γöé   STREAM   Γöé
  7631.             ΓöéAPPLICATIONSΓöé  Γöé  DRIVERS   Γöé  Γöé   HANDLER  Γöé
  7632.             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7633.                   Γöé               Γöé               Γöé
  7634.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7635.                                   
  7636.                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7637.                     Γöé        MMIO MANAGER       Γöé
  7638.                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7639.        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7640.        ΓöéFile Format IOProcs Γöé     Γöé    ΓöéFile Format IOProcs Γöé
  7641.        Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé     Γöé    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  7642.        Γöé Γöé      WAVE     Γöé  Γöé     Γöé    Γöé Γöé  AVC image    Γöé  Γöé
  7643.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé     Γöé    Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  7644.        Γöé Γöé    CLI VOC    Γöé  Γöé     Γöé    Γöé ΓöéM-Motion image Γöé  Γöé
  7645.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöñ Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  7646.        Γöé Γöé   AVC audio   Γöé  Γöé     Γöé    Γöé Γöé1.3 & 2.0 BMP  Γöé  Γöé
  7647.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé     Γöé    Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  7648.        Γöé Γöé  RMID & MID   Γöé  Γöé     Γöé    Γöé Γöé RDIB & DIB    Γöé  Γöé
  7649.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé     Γöé    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  7650.        Γöé Γöé     AVI       Γöé  Γöé     Γöé    Γöé         .          Γöé
  7651.        Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé     Γöé    Γöé         .          Γöé
  7652.        Γöé                    Γöé     Γöé    Γöé         .          Γöé
  7653.        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7654.                                   Γöé
  7655.        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7656.        Γöé  Codec Procedures Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Codec Procedures Γöé
  7657.        Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé      Γöé     Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  7658.        Γöé Γöé  Ultimotion   Γöé Γöé      Γöé     Γöé Γöé     Others    Γöé Γöé
  7659.        Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé      Γöé     Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  7660.        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7661. - - - - - - - - - - - - - - - - - Γöé - - - - - - - - - - - - - - -
  7662.                ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7663.                                                 
  7664.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7665. System    Γöé   DOS    ΓöéΓöé  MEMORY  ΓöéΓöé COMPOUND ΓöéΓöé  OTHERS  Γöé
  7666. Storage   Γöé   FILE   ΓöéΓöé  FILE    ΓöéΓöé FILE     ΓöéΓöé          Γöé
  7667. IOProcs   ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  7668.                Γöé                       Γöé            Γöé      Ring 3
  7669. - - - - - - - -Γöé- - - - - - - - - - - -Γöé- - - - - - Γöé- - - - - - -
  7670.                                                         Ring 0
  7671.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7672.    Γöé                        File System                        Γöé
  7673.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7674.  
  7675.  
  7676. ΓòÉΓòÉΓòÉ 15.2. Installable I/O Procedures ΓòÉΓòÉΓòÉ
  7677.  
  7678. The MMIO Manager uses I/O procedures to direct the input and output associated 
  7679. with reading and writing to different types of storage systems or file formats. 
  7680. Applications and the MMIO subsystem communicate to IOProcs (DLL files) through 
  7681. the use of MMIO messages.  When MMIO receives a request from an application 
  7682. through a function call, messages are created by the MMIO Manager.  Next, MMIO 
  7683. sends a predefined message for that operation to the IOProc that supports that 
  7684. particular file format or storage system.  These messages are designed for 
  7685. efficient communications to all IOProcs.  The IOProcs, however, must be able to 
  7686. handle the messages sent by the MMIO Manager to be processed, or pass them on 
  7687. to a child I/O procedure. 
  7688.  
  7689.  
  7690. ΓòÉΓòÉΓòÉ 15.2.1. Types of I/O Procedures ΓòÉΓòÉΓòÉ
  7691.  
  7692. Two types of I/O procedures are as follows: 
  7693.  
  7694. Storage System IOProcs unwrap data objects such as RIFF files, compound RIFF 
  7695. files, or AVC files.  These IOProcs are ignorant to the content of the data 
  7696. they contain.  A storage system IOProc goes directly to the OS/2 (or native) 
  7697. file system (memory in the case of a MEM file) and does not pass information to 
  7698. any other file format or storage system IOProc.  The internal I/O procedures 
  7699. provided for DOS files, memory files, and RIFF compound files are examples of 
  7700. storage system IOProcs because they operate on the storage mechanism rather 
  7701. than the data content itself. See the table in the Internal Storage System 
  7702. Procedures section. 
  7703.  
  7704. File Format IOProcs manipulate multimedia data at the element level (not to be 
  7705. confused with an element of a RIFF compound file).  Each IOProc handles a 
  7706. different element type such as audio, image, or MIDI.  A file format IOProc 
  7707. handles the element type it was written for and does not rely on any other file 
  7708. format IOProcs to do any processing.  However, a file format IOProc might need 
  7709. to call a storage system IOProc to obtain data within a file containing 
  7710. multiple file elements.  For example, the MIDI IOProc calls MMIO functions to 
  7711. access data from other storage system IOProcs supported by MMIO. See the table 
  7712. in the File Format I/O Procedures Provided With OS/2 Multimedia section. 
  7713.  
  7714.  
  7715. ΓòÉΓòÉΓòÉ 15.2.2. Identifying an I/O Procedure ΓòÉΓòÉΓòÉ
  7716.  
  7717. Each file format is represented by a unique identifier called a four-character 
  7718. code (FOURCC).  A FOURCC is a 32-bit quantity representing a sequence of one to 
  7719. four ASCII alphanumeric characters (padded on the right with blank characters). 
  7720.  
  7721. Each IOProc supports a specific file format.  The file format and IOProc are 
  7722. represented by a specific FOURCC code.  This permits the FOURCC to be used as 
  7723. an ID value, rather than the string-name of the file format or a file name 
  7724. extension.  Their use is supported by a set of functions to pack or unpack 
  7725. FOURCC values from or to their component characters.  Examples of FOURCC values 
  7726. are: WAVE for RIFF waveform audio files, RMID for RIFF MIDI files, and AVCA for 
  7727. AVC audio files. 
  7728.  
  7729. Formats that support multiple media types require a different FOURCC for each 
  7730. variation.  This appears as a different IOProc for each media type.  For 
  7731. example, an Audio Visual Connection (AVC) program might have an IOProc to 
  7732. process image, an IOProc to process audio, and an IOProc to process MIDI.  You 
  7733. can, however, include more than one IOProc in a dynamic-link library (DLL) file 
  7734. by providing different entry points in the DLL file. 
  7735.  
  7736. The data type for a four-character code is FOURCC.  The mmioFOURCC function 
  7737. converts four characters to a four-character code as shown: 
  7738.  
  7739.             FOURCC   fccIOProc;
  7740.  
  7741.             fccIOProc = mmioFOURCC( 'A', 'V', 'C', 'A' ) ;
  7742.  
  7743. The mmioFOURCC function is called by the application and passed in subsequent 
  7744. MMIO calls to route the file to the correct IOProc. 
  7745.  
  7746. Note:  Another way to create a four-character code is to use the 
  7747.        mmioStringToFOURCC function, which converts a null-terminated string to 
  7748.        a four-character code.  The second parameter in mmioStringToFOURCC 
  7749.        specifies options for converting the string to a four-character code. 
  7750.        If you specify the MMIO_TOUPPER flag, mmioStringToFOURCC converts all 
  7751.        alphabetic characters in the string to uppercase. 
  7752.  
  7753.  
  7754. ΓòÉΓòÉΓòÉ 15.2.3. Internal Storage System Procedures ΓòÉΓòÉΓòÉ
  7755.  
  7756. The following table lists the MMIO services provided by internal I/O 
  7757. procedures: 
  7758.  
  7759. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7760. ΓöéIOProc            ΓöéDescription                         Γöé
  7761. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7762. ΓöéDOS               ΓöéHandles standard OS/2 disk files.   Γöé
  7763. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7764. ΓöéMEM (memory)      ΓöéManages memory files without        Γöé
  7765. Γöé                  Γöéaccessing the file system.          Γöé
  7766. Γöé                  ΓöéA memory file is a block of memory  Γöé
  7767. Γöé                  Γöéthat is perceived as a file to an   Γöé
  7768. Γöé                  Γöéapplication.  This unifies the      Γöé
  7769. Γöé                  Γöéinterface for applications that     Γöé
  7770. Γöé                  Γöéaccess both files and memory.       Γöé
  7771. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7772. ΓöéCF (compound file)ΓöéSupports the RIFF compound file     Γöé
  7773. Γöé                  Γöéformat.                             Γöé
  7774. Γöé                  ΓöéThe CF IOProc operates on a compoundΓöé
  7775. Γöé                  Γöéfile. The MMIO Manager provides     Γöé
  7776. Γöé                  Γöéservices to find, query, and access Γöé
  7777. Γöé                  Γöéfile elements in a compound file.   Γöé
  7778. Γöé                  ΓöéIt also supports the function of    Γöé
  7779. Γöé                  Γöéfile compaction.                    Γöé
  7780. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7781.  
  7782.  
  7783. ΓòÉΓòÉΓòÉ 15.2.4. File Format I/O Procedures Provided With OS/2 Multimedia ΓòÉΓòÉΓòÉ
  7784.  
  7785. The MMIO Manager calls a file format I/O procedure to handle I/O to files of a 
  7786. certain media type and format: for example, AVC or M-Motion files.  File format 
  7787. I/O procedures are available with the installation of OS/2 multimedia.  These 
  7788. I/O procedures are enabled for data and file format translation.  They provide 
  7789. conversion support for the Multimedia Data Converter program.  By installing 
  7790. file format I/O procedures, existing applications no longer need to store 
  7791. multiple copies of the same media file for running on various platforms using 
  7792. different file formats. 
  7793.  
  7794. The information in the following table serves as a guide to application 
  7795. developers who would like to access the functions that deal with particular 
  7796. file formats. OS/2 multimedia provides the following file format IOProcs, which 
  7797. can be used to access non-RIFF data and perform multimedia data conversions. 
  7798. Each I/O procedure can read or write format-specific data or standardized data. 
  7799.  
  7800. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7801. ΓöéIOProc     ΓöéFOURCCΓöéDescription              ΓöéCommon            Γöé
  7802. Γöé           Γöé      Γöé                         ΓöéExtension/Format  Γöé
  7803. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7804. ΓöéAVC Audio  ΓöéAVCA  ΓöéRecognizes and reads IBM Γöé._AU, ._AD, ADPCM Γöé
  7805. Γöé           Γöé      ΓöéAVC formatted            Γöédata, native ACPA Γöé
  7806. Γöé           Γöé      Γöédigital-audio files      Γöédata              Γöé
  7807. Γöé           Γöé      Γöécreated with the Audio   Γöé                  Γöé
  7808. Γöé           Γöé      ΓöéVisual Connection        Γöé                  Γöé
  7809. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7810. ΓöéAVC Image  ΓöéAVCI  ΓöéProduces image data for  Γöé._IM, .!IM, RGB   Γöé
  7811. Γöé           Γöé      Γöéan application from an   Γöéimages:  ._ID     Γöé
  7812. Γöé           Γöé      ΓöéIBM AVC formatted digitalΓöé                  Γöé
  7813. Γöé           Γöé      Γöéimage file using MMIO    Γöé                  Γöé
  7814. Γöé           Γöé      Γöéfunctions                Γöé                  Γöé
  7815. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7816. ΓöéAVI Video  ΓöéAVI   ΓöéSupports playback of AVI Γöé.AVI              Γöé
  7817. Γöé           Γöé      Γöémovie files              Γöé                  Γöé
  7818. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7819. ΓöéCLI VOC    ΓöéVOC   ΓöéSupports Sound Blaster   Γöé.VOC              Γöé
  7820. Γöé           Γöé      ΓöéPCM digital-audio files  Γöé                  Γöé
  7821. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7822. ΓöéDIB        ΓöéWI30  ΓöéDevice independent       Γöé.DIB              Γöé
  7823. Γöé           Γöé      Γöébit-map images           Γöé                  Γöé
  7824. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7825. ΓöéFLIC       ΓöéFLIC  ΓöéSupports multi-track readΓöé.FLC, .FLI        Γöé
  7826. Γöé           Γöé      Γöérequests from AutoDesk   Γöé                  Γöé
  7827. Γöé           Γöé      Γöéanimation files          Γöé                  Γöé
  7828. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7829. ΓöéM-Motion   ΓöéMMOT  ΓöéSupports translated and  Γöé.VID, packed, 12  Γöé
  7830. ΓöéStill      Γöé      Γöéuntranslated access to   Γöébit YUV data      Γöé
  7831. Γöé           Γöé      ΓöéIBM M-Motion/M-Control   Γöé                  Γöé
  7832. Γöé           Γöé      ΓöéYUV video still images   Γöé                  Γöé
  7833. Γöé           Γöé      Γöéthat were captured or areΓöé                  Γöé
  7834. Γöé           Γöé      Γöéto be shown on the IBM   Γöé                  Γöé
  7835. Γöé           Γöé      ΓöéM-Motion Video Adapter/A Γöé                  Γöé
  7836. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7837. ΓöéOS/2 1.3   ΓöéOS13  ΓöéSupports bit-map files ofΓöé.BMP, uncompressedΓöé
  7838. ΓöéBit Map    Γöé      ΓöéOS/2 1.3 and Windows 3.0 Γöébit-map format    Γöé
  7839. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7840. ΓöéOS/2 2.0   ΓöéOS20  ΓöéSupports bit-map files ofΓöé.BMP, 1, 4, 8 bit Γöé
  7841. ΓöéBit Map    Γöé      ΓöéOS/2 2.0, compressed or  Γöépalettized and    Γöé
  7842. Γöé           Γöé      Γöédecompressed formats, andΓöé24-bit RGB formatsΓöé
  7843. Γöé           Γöé      Γöérecognizes Windows 3.0   Γöé                  Γöé
  7844. Γöé           Γöé      Γöébit maps                 Γöé                  Γöé
  7845. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7846. ΓöéMIDI       ΓöéMIDI, ΓöéSupports MIDI files      Γöé.MID              Γöé
  7847. Γöé           ΓöéRMID  Γöé(format 0 and format 1   Γöé                  Γöé
  7848. Γöé           Γöé      Γöédata), in RIFF or        Γöé                  Γöé
  7849. Γöé           Γöé      Γöénon-RIFF format          Γöé                  Γöé
  7850. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7851. ΓöéMPEG       ΓöéMPEG  ΓöéSupports multi-track readΓöé.MPG              Γöé
  7852. Γöé           Γöé      Γöérequests from an MPEG    Γöé                  Γöé
  7853. Γöé           Γöé      Γöédata file.               Γöé                  Γöé
  7854. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7855. ΓöéPhotoCD    ΓöéPCD   ΓöéSupports translated      Γöé.PCD              Γöé
  7856. Γöé           Γöé      Γöéread-only access to      Γöé                  Γöé
  7857. Γöé           Γöé      ΓöéPhotoCD images.          Γöé                  Γöé
  7858. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7859. ΓöéRDIB       ΓöéRDIB  ΓöéDevice independent       Γöé.RDI              Γöé
  7860. Γöé           Γöé      Γöébit-map images in RIFF   Γöé                  Γöé
  7861. Γöé           Γöé      Γöéformat                   Γöé                  Γöé
  7862. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7863. ΓöéRIFF       ΓöéWAVE  ΓöéSupports RIFF WAVE       Γöé.WAV              Γöé
  7864. ΓöéWaveform   Γöé      Γöédigital-audio files,     Γöé                  Γöé
  7865. Γöé           Γöé      Γöéincluding PCM, IBM ADPCM,Γöé                  Γöé
  7866. Γöé           Γöé      ΓöéIBM Mu-Law, and A-Law    Γöé                  Γöé
  7867. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7868.  
  7869.  
  7870. ΓòÉΓòÉΓòÉ 15.2.5. Installing an I/O Procedure ΓòÉΓòÉΓòÉ
  7871.  
  7872. Certain factors must be considered when installing an IOProc; for example, the 
  7873. number of processes that use the IOProc might help you decide which method you 
  7874. use to install an IOProc.  Depending on the requirements of your application, 
  7875. you can choose to install an IOProc on a temporary, semipermanent, or permanent 
  7876. basis. 
  7877.  
  7878. The following MMIO functions allow you to install an IOProc: 
  7879.  
  7880. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7881. ΓöéFunction                      ΓöéDescription                   Γöé
  7882. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7883. ΓöémmioOpen                      ΓöéTemporarily installs an I/O   Γöé
  7884. Γöé                              Γöéprocedure.                    Γöé
  7885. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7886. ΓöémmioInstallIOProc             ΓöéAdds, replaces, finds, or     Γöé
  7887. Γöé                              Γöéremoves an entry in the MMIO  Γöé
  7888. Γöé                              ΓöéIOProc table.                 Γöé
  7889. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7890. ΓöémmioIniFileHandler            ΓöéAdds, replaces, finds, or     Γöé
  7891. Γöé                              Γöéremoves an entry in the       Γöé
  7892. Γöé                              Γöéinitialization file           Γöé
  7893. Γöé                              Γöé(MMPMMMIO.INI).               Γöé
  7894. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7895.  
  7896. Temporary Installation Using mmioOpen 
  7897.  
  7898. You can temporarily install an I/O procedure using mmioOpen.  In this case, the 
  7899. IOProc is only used when a file opened by the MMIO Manager does not install the 
  7900. IOProc in the I/O procedure table. 
  7901.  
  7902. To specify an I/O procedure when you open a file using mmioOpen, use the 
  7903. pmmioinfo parameter to reference an MMIOINFO structure as follows: 
  7904.  
  7905.    1. Load the DLL using the DosLoadModule and DosQueryProcAddr functions to 
  7906.       install and obtain the procedure address of the IOProc as shown in the 
  7907.       following code fragment. 
  7908.  
  7909.             strcpy( acMMIOProcName,
  7910.                     acStringBuffer[ IDS_MMIO_INSTALLPROC_NAME - 1 ] );
  7911.  
  7912.             ldosAPIRc =
  7913.               DosLoadModule(
  7914.                &acFailureNameBuffer[ 0 ],    /* Object name if failure occurs.  */
  7915.                FILE_NAME_SIZE,               /* Size of the name buffer.        */
  7916.                acStringBuffer[ IDS_MMIO_INSTALLPROC_DLL_NAME - 1 ], /* DLL Name.*/
  7917.                &hmModHandle );               /* Handle to the module.           */
  7918.                  .
  7919.                  .
  7920.                  .
  7921.  
  7922.             ldosAPIRc =
  7923.               DosQueryProcAddr(
  7924.                hmModHandle,                /* Handle to the DLL module.         */
  7925.                (ULONG) NULL,               /* NULL gives the entry point.       */
  7926.                acMMIOProcName,             /* Name of the Installable procedure.*/
  7927.                (PFN *) &pmmioprocIoProc ); /* Pointer to the Installable proc.  */
  7928.  
  7929.    2. In the MMIOINFO structure passed to mmioOpen, store the procedure address 
  7930.       of the IOProc type in the pIOProc field.  Set the fccIOProc field to 
  7931.       NULL. 
  7932.  
  7933.    3. Call mmioOpen to use the IOProc with a file, passing the MMIOINFO 
  7934.       structure in as the second parameter.  This sends a MMIOM_OPEN message to 
  7935.       the temporary IOProc.  (Note that this does not make the IOProc available 
  7936.       for use with other files.) 
  7937.  
  7938.    4. Set all other fields to 0 (unless you are opening a memory file, or 
  7939.       directly reading or writing to the file I/O buffer). 
  7940.  
  7941.  This strategy allows a file format IOProc to replace a default IOProc (such as 
  7942.  the DOS IOProc), simply by using the address of a replacement custom routine. 
  7943.  
  7944.  Semipermanent Installation Using mmioInstallIOProc 
  7945.  
  7946.  You can install an IOProc during run-time from your application. This method 
  7947.  is semipermanent because the IOProc can only be called while the process is 
  7948.  active.  When the process terminates, it is removed from the IOProc table. 
  7949.  Once the DLL is removed from memory, the next loading of the MMIO DLL does not 
  7950.  load this IOProc.  Because this IOProc is installed by specifically calling 
  7951.  mmioInstallIOProc, as shown in the following figure, the IOProc is available 
  7952.  for any files opened within that process. 
  7953.  
  7954.   PMMIOPROC  pmmioprocSpecialIOProc; /* Pointer once IOProc
  7955.                                         is installed.       */
  7956.  
  7957.  
  7958.    pmmioprocSpecialIOProc =
  7959.      mmioInstallIOProc(
  7960.       fccIOProc,          /* The identifier (FOURCC) of the procedure.*/
  7961.       pmmioprocIoProc,    /* Pointer to the installable procedure.    */
  7962.       MMIO_INSTALLPROC ); /* Flag to install the procedure.           */
  7963.  
  7964.  The mmioInstallIOProc function maintains a separate list of installed I/O 
  7965.  procedures for each OS/2 application that uses MMIO.  This allows different 
  7966.  applications to use the same I/O procedure identifier for different I/O 
  7967.  procedures without causing conflict.  When you install an I/O procedure using 
  7968.  mmioInstallIOProc, the procedure remains installed until you remove it.  The 
  7969.  mmioInstallIOProc function does not prevent an application from installing two 
  7970.  different I/O procedures with the same identifier, or installing an I/O 
  7971.  procedure with the same identifier as a internal I/O procedure (DOS, MEM, or 
  7972.  CF).  When mmioInstallIOProc is called with the MMIO_REMOVEPROC flag set, as 
  7973.  shown in the following code fragment, the most recently installed procedure is 
  7974.  the first one to be removed. 
  7975.  
  7976.   PMMIOPROC  pmmioprocSpecialIOProc; /* Pointer once IOProc
  7977.                                         is installed.               */
  7978.  
  7979.    pmmioprocSpecialIOProc =
  7980.      mmioInstallIOProc(
  7981.        fccIOProc,               /* The identifier of the procedure. */
  7982.        pmmioprocIoProc,         /* Pointer to the Installable proc. */
  7983.        MMIO_REMOVEPROC );       /* Flag to deinstall the proc.      */
  7984.  
  7985.  Permanent Installation Using mmioIniFileHandler 
  7986.  
  7987.  You can permanently install an IOProc in your system by identifying the IOProc 
  7988.  in the initialization file (MMPMMMIO.INI) when you start your system.  This 
  7989.  method allows the IOProc to be used by any process because it is installed in 
  7990.  the IOProc table for every process (like the internal I/O procedures). 
  7991.  Therefore, a call to mmioInstallIOProc is not necessary every time the IOProc 
  7992.  is needed. 
  7993.  
  7994.  The advantage of installing I/O procedures in the MMPMMMIO.INI file is to 
  7995.  achieve application transparency; I/O procedures become built-in as soon as 
  7996.  you restart your system.  Note that the IOProc must be contained in a DLL 
  7997.  file, although more than one IOProc can be contained in the DLL if necessary. 
  7998.  
  7999.  To permanently install an IOProc, an IOProc entry is added to the MMPMMMIO.INI 
  8000.  file.  This is accomplished by either writing an INI change control file or 
  8001.  writing an application using the mmioIniFileHandler function with the 
  8002.  MMIO_INSTALLPROC specified.  The IOProc is installed in the IOProc table ahead 
  8003.  of the MMIO default IOProcs (DOS, MEM, and CF). 
  8004.  
  8005.  The following code fragment is an example of how an application uses the 
  8006.  mmioIniFileHandler function to permanently install the OS/2 1.3 PM bit-map 
  8007.  image IOProc. 
  8008.  
  8009.   #define FOURCC_OS13   mmioFOURCC( 'O', 'S', '1', '3' )
  8010.  
  8011.   #pragma linkage( mmioIniFileHandler, system )
  8012.  
  8013.   void main ()
  8014.   {
  8015.    ULONG   ul;
  8016.    MMINIFILEINFO  mminifileinfo;
  8017.    mminifileinfo.fccIOProc = FOURCC_OS13;
  8018.    strcpy (mminifileinfo.szDLLName, "OS13PROC");
  8019.    strcpy (mminifileinfo.szProcName, "OS13BITMAPIOPROC");
  8020.    mminifileinfo.ulExtendLen = 16L;
  8021.    mminifileinfo.ulFlags = 0L;
  8022.    mminifileinfo.ulMediaType = MMIO_MEDIA_IMAGE;
  8023.    mminifileinfo.ulIOProcType = MMIO_IOPROC_FILEFORMAT;
  8024.    strcpy (mmioinifileinfo.szDefExt, "");
  8025.  
  8026.    printf ("Installing OS/2 PM Bitmap (V1.3) IOProc\n");
  8027.  
  8028.    rc = mmioIniFileHandler (&mminifileinfo, MMIO_INSTALLPROC);
  8029.    switch (rc)
  8030.    {
  8031.    case MMIO_SUCCESS:
  8032.     printf ("Installing Complete\n");
  8033.     break;
  8034.    case MMIOERR_INVALID_PARAMETER:
  8035.     printf ("Error in this install program\n");
  8036.     break;
  8037.    case MMIOERR_INTERNAL_SYSTEM:
  8038.     printf ("OS/2 MPM System Error\n");
  8039.     break;
  8040.    case MMIOERR_NO_CORE:
  8041.     printf ("Memory unavailable for this IOProc\n");
  8042.     break;
  8043.    case MMIOERR_INI_OPEN:
  8044.     printf ("Unable to access the OS/2 MMPMMMIO.INI file\n");
  8045.     break;
  8046.    case MMIOERR_INVALID_FILENAME:
  8047.     printf ("Cannot find the file : OS13PROC.DLL\n");
  8048.     break;
  8049.    default:
  8050.     printf ("Unknown error attempting to install OS/2 Bitmap V(1.3)\n");
  8051.     break;
  8052.    }
  8053.   }
  8054.  
  8055.  
  8056. ΓòÉΓòÉΓòÉ 15.3. CODEC Procedures ΓòÉΓòÉΓòÉ
  8057.  
  8058. CODEC procedures are similar to I/O procedures (IOProcs). They are dynamic-link 
  8059. library (DLL) routines that operate on data within a file or buffer.  Based on 
  8060. the data content, a particular CODEC procedure is loaded typically by a file 
  8061. format IOProc to either compress or decompress the data. 
  8062.  
  8063. The following table describes the video CODEC procedures provided with OS/2 
  8064. multimedia. 
  8065.  
  8066. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8067. ΓöéCODEC     ΓöéFormat        ΓöéFOURCC                ΓöéDescription               Γöé
  8068. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8069. ΓöéULDC      ΓöéUltimotion    ΓöéULTI                  ΓöéDecompressor              Γöé
  8070. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8071. ΓöéINDEO     ΓöéIndeo 2.1     Γöért21/RT21             ΓöéCompressor/Decompressor   Γöé
  8072. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8073. ΓöéINDDEC32  ΓöéIndeo 3.1/3.2 Γöéiv31/IV31/iv32/IV32   ΓöéDecompressor              Γöé
  8074. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8075. ΓöéULCORT    ΓöéUltimotion    ΓöéULTI                  ΓöéReal-time compressor      Γöé
  8076. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8077. ΓöéULCOASYM  ΓöéUltimotion    ΓöéULTI                  ΓöéFrame-step compressor     Γöé
  8078. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8079. ΓöéINDRTR31  ΓöéIndeo 3.1     ΓöéIV31                  ΓöéReal-time compressor      Γöé
  8080. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8081. ΓöéINDFSR31  ΓöéIndeo 3.1     ΓöéIV31                  ΓöéFrame-step compressor     Γöé
  8082. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8083. ΓöéMONDO     ΓöéUncompressed  ΓöéDIB                   ΓöéSupports SW               Γöé
  8084. Γöé          Γöé              Γöé                      Γöémonitor/RGB16-YUV411      Γöé
  8085. Γöé          Γöé              Γöé                      Γöéplayback                  Γöé
  8086. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8087. ΓöéAUTOPROC  ΓöéFLI/FLC       Γöéflic                  ΓöéSupports AutoDesk AnimatorΓöé
  8088. Γöé          Γöé              Γöé                      Γöéplayback                  Γöé
  8089. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8090. ΓöéMPGDC     ΓöéMPEG          ΓöéMPEG                  ΓöéMPEG hardware interface   Γöé
  8091. Γöé          Γöé              Γöé                      ΓöéCODEC                     Γöé
  8092. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8093.  
  8094. The following table describes the audio CODEC procedures provided with OS/2 
  8095. multimedia. 
  8096.  
  8097. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8098. ΓöéCODEC     ΓöéFormat        ΓöéFormat TagΓöéComp.  ΓöéDecomp.ΓöéDescription               Γöé
  8099. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8100. ΓöéIMAADPCM  ΓöéMS ADPCM      Γöé2         ΓöéX      ΓöéX      ΓöéCompression is not        Γöé
  8101. Γöé          Γöé              Γöé          Γöé       Γöé       Γöéreal-time                 Γöé
  8102. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8103. ΓöéIMAADPCM  ΓöéIMA ADPCM     Γöé17        ΓöéX      ΓöéX      ΓöéReal-time compression     Γöé
  8104. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8105.  
  8106.  
  8107. ΓòÉΓòÉΓòÉ 15.3.1. CODEC Functions, Messages, and Data Structures ΓòÉΓòÉΓòÉ
  8108.  
  8109. There are enough differences between CODEC procedures and I/O procedures that 
  8110. several additional functions and messages are needed for CODEC processing. Both 
  8111. applications and I/O procedures can call these CODEC functions and messages. 
  8112.  
  8113. The MMIO subsystem supports the CODEC functions listed in the following table. 
  8114.  
  8115. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8116. ΓöéFunction                 ΓöéDescription                                  Γöé
  8117. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8118. ΓöémmioIniFileCODEC         ΓöéAdds, replaces, removes, or finds a CODEC    Γöé
  8119. Γöé                         Γöéentry in the MMPMMMIO.INI file.              Γöé
  8120. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8121. ΓöémmioQueryCODECName       ΓöéQueries the ID string of a CODEC procedure.  Γöé
  8122. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8123. ΓöémmioQueryCODECNameLength ΓöéQueries the length of a CODEC procedure ID   Γöé
  8124. Γöé                         Γöéstring.                                      Γöé
  8125. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8126. ΓöémmioLoadCODECProc        ΓöéLoads the CODEC procedure and returns the    Γöé
  8127. Γöé                         Γöéentry point.                                 Γöé
  8128. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8129. ΓöémmioSet                  ΓöéSets or queries extended file information.   Γöé
  8130. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8131. The messages listed in the following table are supported by I/O procedures. 
  8132.  
  8133. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8134. ΓöéMessage                   ΓöéDescription                                 Γöé
  8135. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8136. ΓöéMMIOM_COMPRESS            ΓöéSent to an IOProc to compress data.         Γöé
  8137. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8138. ΓöéMMIOM_DECOMPRESS          ΓöéSent to an IOProc to decompress data.       Γöé
  8139. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8140. ΓöéMMIOM_MULTITRACKREAD      ΓöéSent to an IOProc to read multi-track data  Γöé
  8141. Γöé                          Γöéfrom a file.                                Γöé
  8142. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8143. ΓöéMMIOM_MULTITRACKWRITE     ΓöéSent to an IOProc to writes multi-track dataΓöé
  8144. Γöé                          Γöéto a file.                                  Γöé
  8145. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8146. ΓöéMMIOM_SET                 ΓöéSets and queries CODEC attributes of the    Γöé
  8147. Γöé                          ΓöéCODEC procedure.                            Γöé
  8148. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8149. The messages listed in the following table are supported by CODEC procedures. 
  8150.  
  8151. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8152. ΓöéMessage                            ΓöéDescription                        Γöé
  8153. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8154. ΓöéMMIOM_CODEC_OPEN                   ΓöéOpens a CODEC instance.            Γöé
  8155. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8156. ΓöéMMIOM_CODEC_CLOSE                  ΓöéCloses a CODEC instance.           Γöé
  8157. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8158. ΓöéMMIOM_CODEC_QUERYNAME              ΓöéQueries the CODEC procedure ID     Γöé
  8159. Γöé                                   Γöéstring.                            Γöé
  8160. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8161. ΓöéMMIOM_CODEC_QUERYNAMELENGTH        ΓöéQueries the length of the CODEC    Γöé
  8162. Γöé                                   Γöéprocedure ID string.               Γöé
  8163. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8164. ΓöéMMIOM_CODEC_COMPRESS               ΓöéCompresses data.                   Γöé
  8165. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8166. ΓöéMMIOM_CODEC_DECOMPRESS             ΓöéDecompresses data.                 Γöé
  8167. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8168. The data structures listed in the following table are supported by I/O 
  8169. procedures and CODEC procedures. The CODEC.H and MMIOOS2.H header files define 
  8170. these data structures. Include the CODEC.H and MMIOOS2.H header files and 
  8171. define INCL_MMIO_CODEC in any source that uses CODEC functions. 
  8172.  
  8173. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8174. ΓöéData Structure           ΓöéDescription                                  Γöé
  8175. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8176. ΓöéMMEXTENDINFO             ΓöéUsed by mmioSet and MMIOM_SET.               Γöé
  8177. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8178. ΓöéMMMULTITRACKREAD         ΓöéUsed by MMIOM_MULTITRACKREAD.                Γöé
  8179. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8180. ΓöéMMMULTITRACKWRITE        ΓöéUsed by MMIOM_MULTITRACKWRITE.               Γöé
  8181. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8182. ΓöéMMMOVIEHEADER            ΓöéStandard presentation movie header.          Γöé
  8183. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8184. ΓöéMMVIDEOHEADER            ΓöéStandard presentation video header.          Γöé
  8185. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8186. ΓöéMMVIDEOOPEN              ΓöéUsed by MMIOM_OPEN.                          Γöé
  8187. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8188. ΓöéMMCOMPRESS               ΓöéUsed by MMIOM_CODEC_COMPRESS and             Γöé
  8189. Γöé                         ΓöéMMIOM_COMPRESS.                              Γöé
  8190. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8191. ΓöéMMDECOMPRESS             ΓöéUsed by MMIOM_CODEC_DECOMPRESS and           Γöé
  8192. Γöé                         ΓöéMMIOM_DECOMPRESS.                            Γöé
  8193. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8194. ΓöéCODECVIDEOHEADER         ΓöéUsed by MMIOM_CODEC_OPEN.                    Γöé
  8195. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8196. ΓöéCODECOPEN                ΓöéUsed by MMIOM_CODEC_OPEN.                    Γöé
  8197. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8198. ΓöéCODECINIFILEINFO         ΓöéUsed by mmioIniFileCODEC.                    Γöé
  8199. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8200.  
  8201.  
  8202. ΓòÉΓòÉΓòÉ 15.3.2. Installing a CODEC Procedure ΓòÉΓòÉΓòÉ
  8203.  
  8204. Unlike I/O procedures that have several methods of installation, CODEC 
  8205. procedures are installed by registering them in the MMPMMMIO.INI file using the 
  8206. mmioIniFileCODEC function.  Once registered in the MMPMMMIO.INI file, queries 
  8207. can be made on CODEC properties associated with the file format of the opened 
  8208. file.  A particular CODEC procedure can be associated with different file 
  8209. formats.  A separate entry is required for each different file format a CODEC 
  8210. procedure supports.  Allowing CODEC procedures to be queried and dynamically 
  8211. loaded based on the data content alleviates the need to statically load CODEC 
  8212. procedures with the file format IOProc, or hard code DLL names with the IOProc. 
  8213. The following code fragment shows how to install a CODEC procedure using 
  8214. mmioIniFileCODEC. 
  8215.  
  8216.  
  8217.  CODECINIFILEINFO codecIniFileInfo;
  8218.  ULONG ulFlags = 0L;
  8219.  ULONG rc;
  8220.        .
  8221.        .
  8222.        .
  8223.  memset( &codecIniFileInfo, '\0', sizeof(CODECINIFILEINFO) );
  8224.  codecIniFileInfo.ulStructLen = sizeof(CODECINIFILEINFO);
  8225.  codecIniFileInfo.fcc = FOURCC_MYPROC;
  8226.  codecIniFileInfo.ulCompressType = COMPRESSTYPE_MYPROC;
  8227.  codecIniFileInfo.ulCompressSubType = COMPRESSSUBTYPE_MYPROC;
  8228.  codecIniFileInfo.ulMediaType = MEDIATYPE_MYPROC;
  8229.  codecIniFileInfo.ulCapsFlags = CODEC_DECOMPRESS;
  8230.  codecIniFileInfo.ulFlags = 0;
  8231.  codecIniFileInfo.szHWID = HWID_MYPROC;
  8232.  codecIniFileInfo.ulMaxSrcBufLen = MAXBUFLEN_MYPROC;
  8233.  codecIniFileInfo.ulSyncMethod = 1;
  8234.  codecIniFileInfo.ulReserved1 = 0;
  8235.  codecIniFileInfo.ulXalignment = XALIGNMENT_MYPROC;
  8236.  codecIniFileInfo.ulYalignment = YALIGNMENT_MYPROC;
  8237.  strncpy( codecIniFileInfo.szDLLName, "MYPROC.DLL", DLLNAME_SIZE );
  8238.  strncpy( codecIniFileInfo.szProcName, "MyCODECProc", PROCNAME_SIZE );
  8239.  ulFlags = MMIO_INSTALLPROC | MMIO_MATCHCOMPRESSTYPE |
  8240.            MMIO_MATCHCOMPRESSSUBTYPE |
  8241.            MMIO_MATCHCAPSFLAGS | MMIO_MATCHHWID;
  8242.  
  8243.  rc = mmioIniFileCODEC( &codecIniFileInfo,
  8244.                          ulFlags);
  8245.  if (rc)
  8246.    /* error */
  8247.  else
  8248.        .
  8249.        .
  8250.        .
  8251.  
  8252.  
  8253. ΓòÉΓòÉΓòÉ 15.4. MMIO Data Structures ΓòÉΓòÉΓòÉ
  8254.  
  8255. The MMIOOS2.H header file, supplied with the Toolkit, defines data structures 
  8256. used in passing information between an application and MMIO file services. 
  8257. Include the MMIOOS2.H file in any source that uses multimedia file I/O 
  8258. functions.  Also include the main header file, OS2.H, which contains a 
  8259. declaration statement for the MMIOOS2.H file.  The MMIOOS2.H file defines MMIO 
  8260. data structures listed in the following table. 
  8261.  
  8262. Note:  The MMMIDIHEADER data structure is defined in the MIDIOS2.H file. 
  8263.  
  8264.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8265.   ΓöéData Structure  ΓöéDescription                                  Γöé
  8266.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8267.   ΓöéMMAUDIOHEADER   ΓöéContains descriptive information about a     Γöé
  8268.   Γöé                Γöédigital audio element (such as the sample    Γöé
  8269.   Γöé                Γöérate, bits per sample, and so forth).        Γöé
  8270.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8271.   ΓöéMMCFINFO        ΓöéContains information about a RIFF compound   Γöé
  8272.   Γöé                Γöéfile.                                        Γöé
  8273.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8274.   ΓöéMMCKINFO        ΓöéContains information about a chunk in a RIFF Γöé
  8275.   Γöé                Γöéfile.                                        Γöé
  8276.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8277.   ΓöéMMCTOCENTRY     ΓöéContains information about an entry in the   Γöé
  8278.   Γöé                Γöécompound file table of contents (CTOC) of a  Γöé
  8279.   Γöé                ΓöéRIFF compound file.                          Γöé
  8280.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8281.   ΓöéMMFORMATINFO    ΓöéContains information about the format of a   Γöé
  8282.   Γöé                Γöéfile or file element.                        Γöé
  8283.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8284.   ΓöéMMIMAGEHEADER   ΓöéContains descriptive information about an    Γöé
  8285.   Γöé                Γöéimage (such as the size, color type and      Γöé
  8286.   Γöé                Γöéextent, palette information, and so forth).  Γöé
  8287.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8288.   ΓöéMMINIFILEINFO   ΓöéContains information about the MMPMMMIO.INI  Γöé
  8289.   Γöé                Γöéfile.                                        Γöé
  8290.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8291.   ΓöéMMIOINFO        ΓöéDescribes the current state of an open file. Γöé
  8292.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8293.   ΓöéMMMIDIHEADER    ΓöéContains descriptive information about a MIDIΓöé
  8294.   Γöé                Γöéfile.                                        Γöé
  8295.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8296.  
  8297.  Note:  Initialize all fields in MMIO data structures that are not used in a 
  8298.         given function to NULL.  In addition, set unused flags and bits in 
  8299.         flags that are not used to 0. 
  8300.  
  8301.  
  8302. ΓòÉΓòÉΓòÉ 15.5. Basic I/O Functions ΓòÉΓòÉΓòÉ
  8303.  
  8304. The following MMIO functions enable applications to manage basic multimedia 
  8305. file I/O operations.  These functions, together with media independent 
  8306. operations, provide applications independence from a specific media type. 
  8307. Basic multimedia file I/O services are shown in the following table. 
  8308.  
  8309. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8310. ΓöéFunction       ΓöéDescription                                  Γöé
  8311. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8312. ΓöémmioOpen       ΓöéOpens or creates a file for reading, writing,Γöé
  8313. Γöé               Γöéor both.                                     Γöé
  8314. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8315. ΓöémmioRead       ΓöéReads a specified number of bytes from an    Γöé
  8316. Γöé               Γöéopen file.                                   Γöé
  8317. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8318. ΓöémmioWrite      ΓöéWrites a specified number of bytes to an openΓöé
  8319. Γöé               Γöéfile.                                        Γöé
  8320. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8321. ΓöémmioSeek       ΓöéChanges the current position for reading,    Γöé
  8322. Γöé               Γöéwriting, or both in an open file.            Γöé
  8323. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8324. ΓöémmioClose      ΓöéCloses an open file.                         Γöé
  8325. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8326.  
  8327.  
  8328. ΓòÉΓòÉΓòÉ 15.5.1. Opening or Creating a File ΓòÉΓòÉΓòÉ
  8329.  
  8330. To perform I/O operations on a new or existing file, an application must first 
  8331. establish a connection by calling the mmioOpen function.  This returns a file 
  8332. handle, which identifies the open file when calling other file I/O functions. 
  8333. Specify the pmmioinfo parameter to identify a pointer to a caller-provided 
  8334. MMIOINFO block containing extra parameters used by mmioOpen.  pmmioinfo may be 
  8335. NULL if the default values of the fields of pmmioinfo are sufficient.  By 
  8336. specifying an MMIOINFO structure, you can open a memory file, specify a file 
  8337. format I/O procedure, supply a buffer, or specify data transfers in a standard 
  8338. presentation format.  For basic file I/O services, set pmmioinfo to NULL.  For 
  8339. example, the following code sample shows how to open a data file without a 
  8340. buffer. 
  8341.  
  8342. hmmio = mmioOpen("filename.ext", NULL, 0);
  8343.  
  8344. Basic options for mmioOpen are shown in the following table. 
  8345.  
  8346. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8347. ΓöéFlag                          ΓöéDescription                   Γöé
  8348. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8349. ΓöéMMIO_ALLOCBUF                 ΓöéSystem allocates an internal  Γöé
  8350. Γöé                              ΓöéI/O buffer.                   Γöé
  8351. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8352. ΓöéMMIO_APPEND                   ΓöéAllows appending to the end ofΓöé
  8353. Γöé                              Γöéa file.                       Γöé
  8354. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8355. ΓöéMMIO_BUFSHARED                ΓöéUses shared memory if MMIO    Γöé
  8356. Γöé                              Γöéallocates an I/O buffer.      Γöé
  8357. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8358. ΓöéMMIO_CREATE                   ΓöéCreates a new file.           Γöé
  8359. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8360. ΓöéMMIO_DELETE                   ΓöéDeletes the file if it alreadyΓöé
  8361. Γöé                              Γöéexists.                       Γöé
  8362. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8363. ΓöéMMIO_NOIDENTIFY               ΓöéDoes not attempt to identify  Γöé
  8364. Γöé                              Γöéthe file type.                Γöé
  8365. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8366. ΓöéMMIO_READ                     ΓöéOpens a file for reading only Γöé
  8367. Γöé                              Γöé(default).                    Γöé
  8368. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8369. ΓöéMMIO_READWRITE                ΓöéOpens a file for both reading Γöé
  8370. Γöé                              Γöéand writing.                  Γöé
  8371. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8372. ΓöéMMIO_VERTBAR                  ΓöéUses the vertical bar         Γöé
  8373. Γöé                              Γöécharacter (|) as a file       Γöé
  8374. Γöé                              Γöéseparator character rather    Γöé
  8375. Γöé                              Γöéthan the plus sign (+).       Γöé
  8376. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8377. ΓöéMMIO_WRITE                    ΓöéOpens a file for writing only.Γöé
  8378. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8379.  
  8380. The following example creates a new file named NEW.TXT and opens it for 
  8381. writing: 
  8382.  
  8383. hmmio = mmioOpen("NEW.TXT", NULL, MMIO_CREATE | MMIO_WRITE);
  8384.  
  8385. You can also use mmioOpen to specify sharing options for data files.  These 
  8386. options enable DOS files to be opened and accessed by more than one process, 
  8387. allowing an application to take advantage of the multi-processing feature of 
  8388. the OS/2 operating system. 
  8389.  
  8390. Sharing options for data files are shown in the following table. 
  8391.  
  8392. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8393. ΓöéFlag           ΓöéDescription                                  Γöé
  8394. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8395. ΓöéMMIO_DENYNONE  ΓöéOpens a file without denying other processes Γöé
  8396. Γöé               Γöéread or write access to the file.            Γöé
  8397. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8398. ΓöéMMIO_DENYREAD  ΓöéOpens a file and denies other processes read Γöé
  8399. Γöé               Γöéaccess to the file.                          Γöé
  8400. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8401. ΓöéMMIO_DENYWRITE ΓöéOpens a file and denies other processes writeΓöé
  8402. Γöé               Γöéaccess to the file.                          Γöé
  8403. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8404. ΓöéMMIO_EXCLUSIVE ΓöéOpens a file with exclusive mode, denying    Γöé
  8405. Γöé               Γöéother processes both read and write access toΓöé
  8406. Γöé               Γöéthe file.                                    Γöé
  8407. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8408.  
  8409.  
  8410. ΓòÉΓòÉΓòÉ 15.5.2. Reading from and Writing to a File ΓòÉΓòÉΓòÉ
  8411.  
  8412. Use the mmioRead and mmioWrite functions to read and write to files opened by 
  8413. mmioOpen.  Use the pch parameter to specify the buffer to read to (mmioRead) or 
  8414. the buffer to write from (mmioWrite).  Use the cch parameter to specify the 
  8415. number of bytes to read to or write from pch to the file.  (The read and write 
  8416. operations are not limited to 64KB.) 
  8417.  
  8418. The following example shows how to read 20 bytes from a file. 
  8419.  
  8420. mmioRead(hmmio, achBuffer, 20)
  8421.  
  8422. The following example shows how to write 20 bytes to a file. 
  8423.  
  8424. mmioWrite(hmmio, achBuffer, 20)
  8425.  
  8426. Note:  Where translation (MMIO_TRANSLATEDATA) is enabled, the translation takes 
  8427.        place during the read and write operation. 
  8428.  
  8429.  
  8430. ΓòÉΓòÉΓòÉ 15.5.3. Changing the Position in a File ΓòÉΓòÉΓòÉ
  8431.  
  8432. Use the mmioSeek function to change the current position of the file pointer in 
  8433. an open file.  This is the place where the next read or write operation is 
  8434. going to take place.  The lOffset parameter specifies an offset to move the 
  8435. file position to.  The lOrigin parameter specifies how the offset is 
  8436. interpreted. 
  8437.  
  8438. The following example illustrates how to seek to the beginning of an open file. 
  8439.  
  8440. mmioSeek(hFile, 0L, SEEK_SET);
  8441.  
  8442. To seek to the current file position: 
  8443.  
  8444. mmioSeek(hFile, 0L, SEEK_CUR);
  8445.  
  8446. To seek to the end of a file: 
  8447.  
  8448. mmioSeek(hFile, 0L, SEEK_END);
  8449.  
  8450. To seek to a position 20 bytes from the end of an open file: 
  8451.  
  8452. mmioSeek(hFile, -20L, SEEK_END);
  8453.  
  8454. The return value is the new file position (specified in bytes) from the 
  8455. beginning of the file.  If an error occurs, the return code is MMIO_ERROR.  Use 
  8456. caution when seeking past the end of the file.  Instead of returning 
  8457. MMIO_ERROR, mmioSeek returns the offset of the new file position. 
  8458.  
  8459. Note:  The mmioSeek function supports seeking in translation mode within the 
  8460.        limits and capabilities of the specific file format IOProc that handles 
  8461.        that format. 
  8462.  
  8463.  
  8464. ΓòÉΓòÉΓòÉ 15.5.4. Retrieving an Error ΓòÉΓòÉΓòÉ
  8465.  
  8466. Use the mmioGetLastError function to return the last error condition stored in 
  8467. the system for this process.  This function assists you in obtaining additional 
  8468. information about the failing condition for error routine analysis. 
  8469.  
  8470. Note:  This function only works if you have an MMIO handle. 
  8471.  
  8472.  
  8473. ΓòÉΓòÉΓòÉ 15.6. Buffered File I/O ΓòÉΓòÉΓòÉ
  8474.  
  8475. Using buffers improves the performance of multimedia applications that perform 
  8476. numerous file I/O operations when accessing media devices.  With buffered file 
  8477. I/O, the system maintains a block of memory that the operating system uses to 
  8478. store data as it is read from (or written to) the disk.  If data is already in 
  8479. the buffer, the operating system can transfer the record to the application's 
  8480. area without reading the sector from the disk.  This improves performance by 
  8481. reducing the number of times the application accesses the disk for read or 
  8482. write operations.  The application only accesses the media device when the 
  8483. buffer must be filled from or written to the disk. 
  8484.  
  8485. Many factors must be considered when deciding whether or not to use buffered 
  8486. file I/O; for example, the number and size of read and write operations. 
  8487. Although it is difficult to identify criteria for using buffered I/O, there are 
  8488. some general guidelines you can follow.  It is a good idea to use buffered I/O 
  8489. for applications that perform many I/O operations, less than 4KB each. 
  8490. However, if you are performing I/O operations where buffer sizes may be larger 
  8491. than 4KB (as in the case of streaming), it might be best to use unbuffered I/O. 
  8492. If an application such as the Sync/Stream Manager (SSM) provides its own 
  8493. internal buffers, a secondary set of buffers during run-time may hinder, rather 
  8494. than improve, performance.  Experiment to optimize file I/O for your 
  8495. application's requirements. 
  8496.  
  8497.  
  8498. ΓòÉΓòÉΓòÉ 15.6.1. Opening a File Using Buffered File I/O ΓòÉΓòÉΓòÉ
  8499.  
  8500. When a file is opened for buffered I/O, the buffer is essentially transparent 
  8501. to the application.  You can read, write, and seek in the same way as 
  8502. unbuffered I/O.  To open a file using buffered file I/O, you can either provide 
  8503. an I/O buffer in an application, or allow the system to allocate an internal 
  8504. buffer.  To provide a user-supplied I/O buffer, you can either use mmioOpen and 
  8505. have the pmmioinfo field point to the buffer, or use mmioSetBuffer (see the 
  8506. table of buffered I/O functions in the next subsection.) To provide a 
  8507. system-supplied buffer, specify the MMIO_ALLOCBUF option of the mmioOpen 
  8508. function.  Unless you have a performance-sensitive application that directly 
  8509. accesses an I/O buffer or opens a memory file, it is a good idea to use the 
  8510. MMIO Manager to allocate the buffer.  For example, the following code sample 
  8511. opens a DOS file and directs mmioOpen to allocate a standard-sized buffer. 
  8512.  
  8513. hmmio = mmioOpen("EXAMPLE.DIB", NULL, MMIO_ALLOCBUF);
  8514.  
  8515.  
  8516. ΓòÉΓòÉΓòÉ 15.6.2. Managing Buffered I/O ΓòÉΓòÉΓòÉ
  8517.  
  8518. The MMIO functions shown in the following table allow you to manage an I/O 
  8519. buffer. 
  8520.  
  8521. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8522. ΓöéFunction          ΓöéDescription                                  Γöé
  8523. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8524. ΓöémmioFlush         ΓöéForces the contents of an I/O buffer to be   Γöé
  8525. Γöé                  Γöéwritten to disk.                             Γöé
  8526. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8527. ΓöémmioSetBuffer     ΓöéEnables or disables buffered I/O, and changesΓöé
  8528. Γöé                  Γöéthe buffer or buffer size for an open file.  Γöé
  8529. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8530.  
  8531.  
  8532. ΓòÉΓòÉΓòÉ 15.6.3. Emptying the Contents of an I/O Buffer ΓòÉΓòÉΓòÉ
  8533.  
  8534. Emptying the contents of an I/O buffer means that the contents of the buffer 
  8535. are written to disk.  You can empty the contents of a buffer by calling 
  8536. mmioFlush or mmioClose.  The buffer is automatically emptied when you close a 
  8537. file by calling mmioClose.  If you do not close a file immediately after 
  8538. writing to it, empty the contents of the buffer to make sure the information is 
  8539. written to disk.  You can also use the MMIO_EMPTYBUF flag of mmioFlush to clear 
  8540. the I/O buffer without deallocating the buffer. 
  8541.  
  8542. Note:  The mmioFlush function may fail if there is insufficient disk space to 
  8543.        write the buffer, even if the preceding mmioWrite functions succeeded. 
  8544.  
  8545.  
  8546. ΓòÉΓòÉΓòÉ 15.6.4. Setting or Changing an I/O Buffer ΓòÉΓòÉΓòÉ
  8547.  
  8548. Use the mmioSetBuffer function to enable or disable I/O buffering for reading 
  8549. to or writing from files.  You can also change the size of the internal I/O 
  8550. buffer (8KB default) or supply your own buffer for use as a memory file. 
  8551.  
  8552. The mmioSetBuffer function requires a pchBuffer parameter, which identifies the 
  8553. pointer to a user-supplied buffer for buffered I/O.  If you want mmioSetBuffer 
  8554. to allocate the buffer, or if you want to disable any predefined I/O buffers, 
  8555. set pchBuffer to NULL.  A second parameter, cchBuffer, specifies the size of 
  8556. the caller-supplied buffer.  If you set pchBuffer to NULL, cchBuffer is the 
  8557. size of the buffer that the you want mmioSetBuffer to allocate.  To disable 
  8558. buffering, set pchBuffer and cchBuffer to NULL. 
  8559.  
  8560. The following example illustrates how to open an unbuffered file named TESTING 
  8561. and then allocate an internal 16KB buffer. 
  8562.  
  8563. HMMIO hFile;
  8564. .
  8565. .
  8566. .
  8567. if ((hFile = mmioOpen("TESTING", NULL, MMIO_READ)) !=NULL) {
  8568.    /* File opened successfully; request an I/O buffer */
  8569.    if (mmioSetBuffer(hFile, NULL, 16384L, 0))
  8570.        /* Buffer cannot be allocated */
  8571.    else
  8572.        /* Buffer allocated successfully */
  8573. }
  8574. else
  8575.      /* File cannot be opened */
  8576.  
  8577. The following example illustrates how to open a buffered file named TESTING and 
  8578. then disable buffered I/O. 
  8579.  
  8580. HMMIO hmmio;
  8581. .
  8582. .
  8583. .
  8584. if ((hmmio = mmioOpen("TESTING", NULL, MMIO_ALLOCBUF)) !=NULL) {
  8585.    /* File opened successfully; disable buffered I/O */
  8586.    if (mmioSetBuffer(hFile, NULL, NULL, 0))
  8587.        /* Cannot disable buffered I/O  */
  8588.    else
  8589.        /* Buffered I/O disabled successfully */
  8590. }
  8591. else
  8592.        /* File cannot be opened */
  8593.  
  8594.  
  8595. ΓòÉΓòÉΓòÉ 15.7. Directly Accessing a File I/O Buffer ΓòÉΓòÉΓòÉ
  8596.  
  8597. Applications that are performance-sensitive can optimize file I/O performance 
  8598. by directly accessing the file I/O buffer.  Exercise care if you choose to do 
  8599. this-by accessing the file I/O buffer directly, you bypass some of the 
  8600. safeguards and error checking provided by the MMIO Manager. 
  8601.  
  8602. The MMIO functions shown in the following table allow you to support direct I/O 
  8603. buffer access on a file opened for buffered I/O. 
  8604.  
  8605. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8606. ΓöéFunction          ΓöéDescription                                  Γöé
  8607. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8608. ΓöémmioGetInfo       ΓöéRetrieves information on the file I/O buffer Γöé
  8609. Γöé                  Γöéof a file opened for buffered I/O.           Γöé
  8610. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8611. ΓöémmioAdvance       ΓöéFills and empties the contents of an I/O     Γöé
  8612. Γöé                  Γöébuffer of a file set up for direct I/O bufferΓöé
  8613. Γöé                  Γöéaccess.                                      Γöé
  8614. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8615. ΓöémmioSetInfo       ΓöéChanges information on the file I/O buffer ofΓöé
  8616. Γöé                  Γöéa file opened for buffered I/O.              Γöé
  8617. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8618.  
  8619. Note:  After you call mmioGetInfo, do not call any MMIO functions other than 
  8620.        mmioAdvance.  You can begin calling MMIO functions again after you call 
  8621.        the mmioSetInfo function. 
  8622.  
  8623.  The MMIO Manager uses the MMIOINFO data structure to maintain state 
  8624.  information on an open file.  The MMIOINFO data structure is defined in the 
  8625.  MMIOOS2.H header file as as shown. 
  8626.  
  8627.   typedef struct _MMIOINFO {       /* mmioinfo                    */
  8628.      ULONG       ulFlags;          /* Open flags                  */
  8629.      FOURCC      fccIOProc;        /* FOURCC of the IOProc to use */
  8630.      PMMIOPROC   pIOProc;          /* Function Pointer to IOProc to use */
  8631.      ULONG       ulErrorRet;       /* Extended Error return code  */
  8632.      LONG        cchBuffer;        /* I/O buff size (if used), Fsize if MEM */
  8633.      PCHAR       pchBuffer;        /* Start of I/O buff           */
  8634.      PCHAR       pchNext;          /* Next char to read or write in buff */
  8635.      PCHAR       pchEndRead;       /* Last char in buff can be read + 1  */
  8636.      PCHAR       pchEndWrite;      /* Last char in buff can be written + 1 */
  8637.      LONG        lBufOffset;       /* Offset in buff to pchNext */
  8638.      LONG        lDiskOffset;      /* Disk offset in file       */
  8639.      ULONG       aulInfo[4];       /* IOProc specific fields    */
  8640.      LONG        lLogicalFilePos;  /* Actual file position, buffered or not */
  8641.      ULONG       ulTranslate;      /* Translation field         */
  8642.      FOURCC      fccChildIOProc;   /* FOURCC of Child IOProc    */
  8643.      PVOID       pExtraInfoStruct; /* Pointer to a structure of related data */
  8644.      HMMIO       hmmio;            /* Handle to media element   */
  8645.      } MMIOINFO;
  8646.  
  8647.  
  8648. ΓòÉΓòÉΓòÉ 15.7.1. Getting Buffer Information ΓòÉΓòÉΓòÉ
  8649.  
  8650. Use mmioGetInfo to obtain information about a file I/O buffer, such as the 
  8651. buffer size and address.  The mmioGetInfo function also sets up a file for 
  8652. direct I/O buffer manipulation. 
  8653.  
  8654. The mmioGetInfo function identifies a pointer to an MMIOINFO structure that 
  8655. mmioGetInfo fills with information about the file I/O buffer.  The return value 
  8656. is 0 if the operation is successful; otherwise, the return value specifies an 
  8657. error code. 
  8658.  
  8659.  
  8660. ΓòÉΓòÉΓòÉ 15.7.2. Reading from and Writing to the Buffer ΓòÉΓòÉΓòÉ
  8661.  
  8662. The following table shows three fields in the MMIOINFO structure used for 
  8663. reading from and writing to the file I/O buffer. 
  8664.  
  8665. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8666. ΓöéField        ΓöéDescription                                  Γöé
  8667. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8668. ΓöépchNext      ΓöéPoints to the next location in the buffer to Γöé
  8669. Γöé             Γöéread or write.  You must increment pchNext asΓöé
  8670. Γöé             Γöéyou read and write the buffer.               Γöé
  8671. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8672. ΓöépchEndRead   ΓöéIdentifies the location containing the last  Γöé
  8673. Γöé             Γöévalid character you can read from the buffer.Γöé
  8674. Γöé             ΓöéThis is the memory location following the    Γöé
  8675. Γöé             Γöélast valid data in the buffer.               Γöé
  8676. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8677. ΓöépchEndWrite  ΓöéIdentifies the last location in the buffer   Γöé
  8678. Γöé             Γöéyou can write to.  This is the memory        Γöé
  8679. Γöé             Γöélocation following the end of buffer.        Γöé
  8680. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8681.  
  8682.  
  8683. ΓòÉΓòÉΓòÉ 15.7.3. Advancing the File I/O Buffer ΓòÉΓòÉΓòÉ
  8684.  
  8685. When you reach the end of the file I/O buffer, use mmioAdvance to advance the 
  8686. buffer.  Advancing the buffer allows you to fill a file I/O buffer from disk 
  8687. (MMIO_READ).  If there is not enough data remaining in the file to fill the 
  8688. buffer, the pchEndRead field in the MMIOINFO structure points to the location 
  8689. following the last valid byte in the buffer. 
  8690.  
  8691. mmioAdvance also allows you to empty the contents of the current buffer to disk 
  8692. (MMIO_WRITE) by setting the MMIO_DIRTY flag in the ulFlags field of the 
  8693. MMIOINFO structure.  mmioAdvance updates the fields in the MMIOINFO structure 
  8694. to reflect the new state of the I/O buffer (including pchNext, pchEndRead, and 
  8695. pchEndWrite). 
  8696.  
  8697.  
  8698. ΓòÉΓòÉΓòÉ 15.7.3.1. Advancing a File I/O Buffer for Reading ΓòÉΓòÉΓòÉ
  8699.  
  8700. The following figure shows how the file I/O buffer is advanced as a file is 
  8701. read from. 
  8702.  
  8703.  (1)    The application opens the file for buffered I/O.  The buffer is 
  8704.         initially empty, so mmioOpen sets pchNext and pchEndRead to point to 
  8705.         the beginning of the file I/O buffer. 
  8706.  
  8707.  (2)    The application calls mmioAdvance to fill the I/O buffer.  The 
  8708.         mmioAdvance function fills the buffer and sets pchNext to point to the 
  8709.         beginning of the buffer. 
  8710.  
  8711.  (3)    The application reads from the I/O buffer and increments pchNext. 
  8712.  
  8713.  (4)    The application continues to read the buffer and call mmioAdvance to 
  8714.         refill the buffer when it is empty.  When mmioAdvance reaches the end 
  8715.         of the file, there is not enough information to fill the buffer.  The 
  8716.         mmioAdvance function sets pchEndRead to point to the end of the valid 
  8717.         data in the buffer. 
  8718.  
  8719.  
  8720. ΓòÉΓòÉΓòÉ 15.7.3.2. Advancing a File I/O Buffer for Writing ΓòÉΓòÉΓòÉ
  8721.  
  8722. The following figure shows how the file I/O buffer is advanced as a file is 
  8723. written to. 
  8724.  
  8725.  (1)    The application opens the file for buffered I/O by calling mmioOpen. 
  8726.         The mmioOpen function sets pchNext to point to the beginning of the 
  8727.         file I/O buffer and pchEndWrite to point to the end of the buffer. 
  8728.  
  8729.  (2)    The application writes to the I/O buffer and increments pchNext. 
  8730.  
  8731.  (3)    Once the application fills the buffer, it calls mmioAdvance to empty 
  8732.         the contents of the buffer to disk.  The mmioAdvance function resets 
  8733.         pchNext to point to the beginning of the buffer. 
  8734.  
  8735.  (4)    The application continues to write to the buffer and call mmioAdvance 
  8736.         to empty the contents of the buffer when its full.  At the end of the 
  8737.         file, there is not enough information to fill the buffer.  When the 
  8738.         application calls mmioAdvance to empty the contents of the buffer, 
  8739.         pchNext points to the end of the valid data in the buffer. 
  8740.  
  8741.  
  8742. ΓòÉΓòÉΓòÉ 15.7.4. Ending Direct Access of a File I/O Buffer ΓòÉΓòÉΓòÉ
  8743.  
  8744. When you finish accessing a file I/O buffer, pass the MMIOINFO structure filled 
  8745. by mmioGetInfo to mmioSetInfo to end direct access to the I/O buffer.  Before 
  8746. calling mmioSetInfo, make sure that you set the MMIO_DIRTY flag of the ulFlags 
  8747. field of pmmioinfo if you have written to the buffer.  Otherwise, the contents 
  8748. of the buffer will not get emptied to disk.  When mmioSetInfo is called, then 
  8749. the caller should stop accessing the I/O buffer directly and revert to using 
  8750. mmioRead and mmioWrite to read from and write to the file. 
  8751.  
  8752. The following code fragment illustrates how to directly read an I/O buffer. 
  8753.  
  8754. mmioGetInfo(hmmio, &mmioinfo, 0)
  8755. mmioAdvance(hmmio, &mmioinfo, MMIO_READ)
  8756. for (i=0, iCount=0;  i<20; i++)
  8757.  iCount += *(mmioinfo.pchNext)++;
  8758. mmioSetInfo(hmmio, &mmioinfo, 0);
  8759.  
  8760.  
  8761. ΓòÉΓòÉΓòÉ 15.8. File I/O in Memory ΓòÉΓòÉΓòÉ
  8762.  
  8763. A memory file is a block of memory that is perceived as a file by an 
  8764. application.  This can be useful if you already have a file image in memory. 
  8765. Memory files let you reduce the number of special-case conditions in your code 
  8766. because, for I/O purposes, you can treat file memory images as if they were 
  8767. disk-based files. 
  8768.  
  8769. Like I/O buffers, memory files can use memory allocated by the application or 
  8770. by the MMIO Manager.  In addition, memory files can be expandable or 
  8771. non-expandable. 
  8772.  
  8773. Memory is expandable when the system allocates an internal buffer using the 
  8774. MMIO_ALLOCBUF flag of the mmioOpen function.  When the MMIO Manager reaches the 
  8775. end of an expandable memory file, it expands the memory file by a predefined 
  8776. increment. 
  8777.  
  8778. Use the mmioOpen function to open a memory file.  Specify NULL for the 
  8779. szFileName parameter and the MMIO_READWRITE flag, as shown: 
  8780.  
  8781. hmmio = mmioOpen(NULL, &mmioinfo, MMIO_READWRITE);
  8782.  
  8783. In addition, set the pmmioinfo parameter to point to an MMIOINFO structure set 
  8784. up as follows: 
  8785.  
  8786.      Set the pIOProc field to NULL. 
  8787.      Set the fccIOProc field to FOURCC_MEM. 
  8788.      Set the pchBuffer field to point to the memory block.  To request that 
  8789.       the MMIO Manager allocate the memory block, set pchBuffer to NULL. 
  8790.      Set the cchBuffer field to the initial size of the memory block. 
  8791.      Set the aulInfo[0] field to the minimum expansion size of the memory 
  8792.       block.  For a non-expandable memory file, set aulInfo[0] to NULL. 
  8793.      Set all other fields to 0. 
  8794.  
  8795.  The following code fragment shows how to open a memory file using a buffer 
  8796.  named achMyBuffer. 
  8797.  
  8798.           /* set mmioinfo structure to 0 */
  8799.           mmioinfo.fccIOProc= FOURCC_MEM
  8800.           mmioinfo.pchBuffer= achMyBuffer
  8801.           mmioinfo.cchBuffer= cchMyBuffer
  8802.   hmmio = mmioOpen("NULL", &mmioinfo, 0);
  8803.  
  8804.  The following code fragment shows how to open a memory file with 1 byte 
  8805.  initially and expand up to 1KB as required. 
  8806.  
  8807.           /* set mmioinfo structure to 0 */
  8808.           mmioinfo.fccIOProc= FOURCC_MEM
  8809.           mmioinfo.pchBuffer= NULL
  8810.           mmioinfo.cchBuffer= 1
  8811.           mmioinfo.aulInfo[0] = 1024;
  8812.   hmmio = mmioOpen("NULL", &mmioinfo, MMIO_CREATE)
  8813.  
  8814.  Allocating Memory for Memory Files 
  8815.  
  8816.  There are no restrictions on allocating memory for use as a non-expandable 
  8817.  memory file.  You can use static memory or stack memory, or you can use 
  8818.  locally allocated or globally allocated memory. 
  8819.  
  8820.  
  8821. ΓòÉΓòÉΓòÉ 16. Resource Interchange File Format (RIFF) Services ΓòÉΓòÉΓòÉ
  8822.  
  8823. The Resource Interchange File Format (RIFF) is the standard file format used 
  8824. for storing multimedia files.  RIFF enables audio, image, animation, and other 
  8825. multimedia elements to be stored in a common format.  RIFF is also used as the 
  8826. basis for defining new file formats for OS/2 multimedia software. 
  8827.  
  8828. RIFF file I/O provides simple functions to locate, create, enter, exit, and 
  8829. access the RIFF chunk-the basic building block of a RIFF file.  You can open, 
  8830. read from, and write to RIFF files the same way as other file types.  Blocks of 
  8831. data are identified by tags.  An advantage of tagged file formats is that an 
  8832. application can process blocks that it understands while ignoring blocks that 
  8833. do not concern it.  RIFF can also be expanded upon (by adding new tags) without 
  8834. breaking existing applications. 
  8835.  
  8836. A RIFF file created with mmioOpen can hold a single data object or, if it is 
  8837. built as a compound file, multiple data objects.  Data objects in a compound 
  8838. file are referred to as chunks.  Chunks in a compound file are its table of 
  8839. contents, and the multiple data objects stored in the resource group. 
  8840.  
  8841. Note:  Refer to the OS/2 Multimedia Programming Reference for detailed 
  8842.        information on how to define an application using the RIFF tagged file 
  8843.        structure. 
  8844.  
  8845.  
  8846. ΓòÉΓòÉΓòÉ 16.1. RIFF File Structural Overview ΓòÉΓòÉΓòÉ
  8847.  
  8848. A RIFF chunk begins with a chunk ID, which is a four-character code (FOURCC) 
  8849. that identifies the representation of the chunk data.  A program reading a RIFF 
  8850. file can skip over any chunk whose chunk ID it does not recognize.  The chunk 
  8851. ID is followed by a four-character chunk size (ULONG) specifying the size of 
  8852. the data field in the chunk.  Lastly, it contains a data field containing the 
  8853. actual data of the chunk. If the chunk ID is RIFF, the first four characters of 
  8854. the data portion of the chunk are a form type; if the chunk ID is LIST, the 
  8855. first four characters are a list type. 
  8856.  
  8857. The only chunks allowed to contain other chunks (subchunks) are those with a 
  8858. chunk ID of RIFF or LIST.  The first chunk in a RIFF file must be a RIFF chunk. 
  8859. All other chunks in the file are subchunks of the RIFF chunk as shown. 
  8860.  
  8861.  
  8862. ΓòÉΓòÉΓòÉ 16.1.1. RIFF Chunks ΓòÉΓòÉΓòÉ
  8863.  
  8864. RIFF chunks include an additional field in the first 4 bytes of the data field. 
  8865. This additional field provides the form type of the field, which is a 
  8866. four-character code identifying the format of the data stored in the file.  A 
  8867. RIFF form is simply a chunk with a chunk ID of RIFF.  For example, waveform 
  8868. audio files (WAVE files) have a form type of WAVE. 
  8869.  
  8870.  
  8871. ΓòÉΓòÉΓòÉ 16.1.2. LIST Chunks ΓòÉΓòÉΓòÉ
  8872.  
  8873. A LIST chunk contains a list, or ordered sequence, of subchunks.  LIST chunks 
  8874. also include an additional field in the first 4 bytes of the data field.  This 
  8875. additional field contains the list type of the field, which is a four-character 
  8876. code identifying the contents of the list.  For example, a LIST chunk with a 
  8877. list type of INFO can contain ICOP and ICRD chunks providing copyright and 
  8878. creation date information. 
  8879.  
  8880. If an application recognizes the list type, it should know how to interpret the 
  8881. sequence of subchunks.  However, since a LIST chunk may contain only subchunks 
  8882. (after the list type), an application that does not know about a specific list 
  8883. type can still navigate through the sequence of subchunks. 
  8884.  
  8885.  
  8886. ΓòÉΓòÉΓòÉ 16.2. RIFF File Functions ΓòÉΓòÉΓòÉ
  8887.  
  8888. The following MMIO functions enable you to manage RIFF files: 
  8889.  
  8890. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8891. ΓöéFunction               ΓöéDescription                                  Γöé
  8892. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8893. ΓöémmioFOURCC             ΓöéConverts four characters into a              Γöé
  8894. Γöé                       Γöéfour-character code (FOURCC).                Γöé
  8895. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8896. ΓöémmioStringToFOURCC     ΓöéConverts a null-terminated string into a     Γöé
  8897. Γöé                       Γöéfour-character code.                         Γöé
  8898. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8899. ΓöémmioCreateChunk        ΓöéCreates a chunk in a RIFF file that was      Γöé
  8900. Γöé                       Γöéopened by mmioOpen.                          Γöé
  8901. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8902. ΓöémmioAscend             ΓöéAscends out of a chunk in a RIFF file that   Γöé
  8903. Γöé                       Γöéwas descended into by mmioDescend or created Γöé
  8904. Γöé                       Γöéby mmioCreateChunk.                          Γöé
  8905. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8906. ΓöémmioDescend            ΓöéDescends into a RIFF file chunk beginning at Γöé
  8907. Γöé                       Γöéthe current file position, or searches for a Γöé
  8908. Γöé                       Γöéspecified chunk.                             Γöé
  8909. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8910.  
  8911.  
  8912. ΓòÉΓòÉΓòÉ 16.2.1. The MMCKINFO Data Structure ΓòÉΓòÉΓòÉ
  8913.  
  8914. Several multimedia file I/O functions use the MMCKINFO structure to specify and 
  8915. retrieve information about a chunk in a RIFF file.  The MMIOOS2.H header file 
  8916. defines the MMCKINFO structure as as shown. 
  8917.  
  8918. typedef struct _MMCKINFO {   /* mmckinfo                              */
  8919.   FOURCC      ckid;          /* Chunk id (FOURCC)                     */
  8920.   ULONG       ulSize;        /* Chunk size (bytes)                    */
  8921.   FOURCC      fccType;       /* FOURCC type (if ckid RIFF or LIST)    */
  8922.   ULONG       ulDataOffset;  /* File offset of data portion of chunk  */
  8923.   ULONG       ulFlags;       /* MMIO_DIRTY (if new chunk)             */
  8924. } MMCKINFO;
  8925.  
  8926.  
  8927. ΓòÉΓòÉΓòÉ 16.2.2. Four-Character Codes ΓòÉΓòÉΓòÉ
  8928.  
  8929. A four-character code is a 32-bit quantity representing a sequence of one to 
  8930. four ASCII alphanumeric characters, padded on the right with blank characters. 
  8931. The data type for a four-character code is FOURCC.  Use the mmioFOURCC function 
  8932. to convert four characters to a four-character code.  For example, to use a 
  8933. four-character code for WAVE: 
  8934.  
  8935.             FOURCC   fccIOProc;
  8936.  
  8937.             fccIOProc = mmioFOURCC( 'W', 'A', 'V', 'E' ) ;
  8938.  
  8939. To convert a null-terminated string into a four-character code, use the 
  8940. mmioStringToFOURCC function.  The following example also generates a 
  8941. four-character code for WAVE. 
  8942.  
  8943.             FOURCC fccIOProc;
  8944.  
  8945.             fccIOProc = mmioStringToFOURCC("WAVE", 0);
  8946.  
  8947. The second parameter in mmioStringToFOURCC specifies options for converting the 
  8948. string to a four-character code.  If you specify the MMIO_TOUPPER flag, 
  8949. mmioStringToFOURCC converts all alphabetic characters in the string to 
  8950. uppercase.  This is useful when you need to specify a four-character code to 
  8951. identify a custom I/O procedure.  (Four-character codes are case-sensitive.) 
  8952.  
  8953.  
  8954. ΓòÉΓòÉΓòÉ 16.2.3. Creating RIFF Chunks ΓòÉΓòÉΓòÉ
  8955.  
  8956. Use the mmioCreateChunk function to create a new chunk by writing a chunk 
  8957. header at the current position in an open file and then "descending" into the 
  8958. chunk.  (See Descending into a Chunk for further information.)  You must 
  8959. specify a pointer to a MMCKINFO structure containing information about the new 
  8960. chunk.  You also need to determine which chunk type to create by specifying 
  8961. MMIO_CREATERIFF or MMIO_CREATELIST.  The return value is 0 if the chunk is 
  8962. successfully created; otherwise, the return value specifies an error code. 
  8963.  
  8964. The following code fragment illustrates how to create a new chunk with a chunk 
  8965. ID of RIFF and the form type of WAVE. 
  8966.  
  8967. HMMIO         hmmio;
  8968. MMCKINFO      mmckinfo;
  8969. .
  8970. .
  8971. .
  8972. mmckinfo.fccType = mmioFOURCC('W', 'A', 'V', 'E');
  8973. mmioCreateChunk(hmmio, mmckinfo, MMIO_CREATERIFF);
  8974.  
  8975. If you are creating a RIFF or LIST chunk, you must specify the form type in the 
  8976. fccType field of the MMCKINFO structure.  In the previous example, the form 
  8977. type is WAVE. 
  8978.  
  8979. If you know the size of the data field in the new chunk, set the ckSize field 
  8980. in the MMCKINFO structure when you create the chunk.  This value is written to 
  8981. the ckSize field in the new chunk.  If this value is not correct when you call 
  8982. mmioAscend to mark the end of the chunk, it is automatically rewritten to 
  8983. reflect the correct size of the data field. 
  8984.  
  8985. After you create a new chunk using mmioCreateChunk, the file position is set to 
  8986. the data field of the chunk (8 bytes from the beginning of the chunk).  If the 
  8987. chunk is a RIFF or LIST chunk, the file position is set to the location 
  8988. following the form type or list type (12 bytes from the beginning of the 
  8989. chunk).  The ckSize field is assumed to be a "proposed chunk size" if it turns 
  8990. out to be correct (if you write that much data into the chunk before calling 
  8991. mmioAscend to end the chunk, the mmioAscend will not have to seek back and 
  8992. correct the chunk header.) 
  8993.  
  8994.  
  8995. ΓòÉΓòÉΓòÉ 16.2.4. Moving between Chunks ΓòÉΓòÉΓòÉ
  8996.  
  8997. RIFF files may consist of nested chunks of information.  MMIO services include 
  8998. two functions you can use to move between chunks in a RIFF file:  mmioAscend 
  8999. and mmioDescend.  You might think of these functions as high-level seek 
  9000. functions.  When you descend into a chunk, the file position is set to the data 
  9001. field of the chunk (8 bytes from the beginning of the chunk).  For RIFF and 
  9002. LIST chunks, the file position is set to the location following the form type 
  9003. or list type (12 bytes from the beginning of the chunk).  When you ascend out 
  9004. of a chunk, the file position is set to the location following the end of the 
  9005. chunk. 
  9006.  
  9007.  
  9008. ΓòÉΓòÉΓòÉ 16.2.5. Descending into a Chunk ΓòÉΓòÉΓòÉ
  9009.  
  9010. The mmioDescend function descends into a chunk or searches for a chunk, 
  9011. beginning at the current file position.  The mmioDescend function requires a 
  9012. pckinfo parameter, which specifies a pointer to a MMCKINFO structure that 
  9013. mmioDescend fills with information on the current chunk.  You can also specify 
  9014. the pckinfoParent parameter, which specifies an optional caller-supplied 
  9015. structure that refers to the parent of the chunk that is being searched for. 
  9016. If there is no parent chunk, set pckinfoParent to NULL. 
  9017.  
  9018. The usFlags parameter specifies options for searching for a chunk.  Choose from 
  9019. the following options: 
  9020.  
  9021. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9022. ΓöéFlag             ΓöéDescription                        Γöé
  9023. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9024. ΓöéMMIO_FINDCHUNK   ΓöéSearches for a chunk with a        Γöé
  9025. Γöé                 Γöéspecific chunk ID.  The ckid field Γöé
  9026. Γöé                 Γöépckinfo should contain the chunk IDΓöé
  9027. Γöé                 Γöéof the chunk to search for when    Γöé
  9028. Γöé                 ΓöémmioDescend is called.             Γöé
  9029. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9030. ΓöéMMIO_FINDRIFF    ΓöéSearches for a chunk with a RIFF   Γöé
  9031. Γöé                 Γöéchunk ID and with a specific form  Γöé
  9032. Γöé                 Γöétype.  The fccType field of pckinfoΓöé
  9033. Γöé                 Γöéshould contain the form type of theΓöé
  9034. Γöé                 ΓöéRIFF chunk to search for when      Γöé
  9035. Γöé                 ΓöémmioDescend is called.             Γöé
  9036. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9037. ΓöéMMIO_FINDLIST    ΓöéSearches for a chunk with a chunk  Γöé
  9038. Γöé                 ΓöéID of LIST and with a specific listΓöé
  9039. Γöé                 Γöétype.  The fccType field of pckinfoΓöé
  9040. Γöé                 Γöéshould contain the list type of theΓöé
  9041. Γöé                 ΓöéLIST chunk to search for when      Γöé
  9042. Γöé                 ΓöémmioDescend is called.             Γöé
  9043. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9044.  
  9045. Note:  If you do not specify any flags, mmioDescend descends into the chunk 
  9046.        that starts at the current file position. 
  9047.  
  9048.  The mmioDescend function fills an MMCKINFO structure with information on the 
  9049.  chunk.  This information includes the chunk ID (ckid), the size of the data 
  9050.  field (ckSize), and the form type, or list type, depending on whether the 
  9051.  chunk is a RIFF or LIST chunk.  The mmioDescend function assumes that the 
  9052.  current file position is the beginning of a chunk header when mmioDescend is 
  9053.  called.  If pckinfoParent is given, mmioDescend assumes that the current file 
  9054.  position is within pckinfoParent (a RIFF or LIST chunk). 
  9055.  
  9056.  
  9057. ΓòÉΓòÉΓòÉ 16.2.6. Searching for a Chunk ΓòÉΓòÉΓòÉ
  9058.  
  9059. To search for a chunk in an open RIFF file, use mmioDescend with the 
  9060. MMIO_FINDCHUNK parameter.  Also set the ckid field of the MMCKINFO structure 
  9061. referenced by pckinfo to the four-character code of the chunk you want to 
  9062. search for. 
  9063.  
  9064. If you are searching for a RIFF or LIST chunk, the mmioDescend function sets 
  9065. the ckid field of the MMCKINFO structure.  Set the fccType field to the 
  9066. four-character code of the form type or list type of the chunk. 
  9067.  
  9068.  
  9069. ΓòÉΓòÉΓòÉ 16.2.7. Ascending out of a Chunk ΓòÉΓòÉΓòÉ
  9070.  
  9071. After you descend into a chunk and read the data in the chunk, you can move the 
  9072. file position (pointer) to the beginning of the next chunk.  This is 
  9073. accomplished by ascending out of the chunk using the mmioAscend function.  The 
  9074. mmioAscend function specifies a pointer to an MMCKINFO structure identifying a 
  9075. chunk.  The function ascends to the location following the end of this chunk. 
  9076. The return value is 0 if the operation is successful; otherwise, the return 
  9077. value specifies an error code. 
  9078.  
  9079. If the chunk was descended into using mmioDescend, then mmioAscend seeks to the 
  9080. location following the end of the chunk (past the extra pad byte, if any). 
  9081.  
  9082. If the chunk was created and descended into using mmioCreateChunk (the 
  9083. MMIO_DIRTY flag in the ulFlags field of pckinfo is set), then the current file 
  9084. position is assumed to mark the end of the data portion of the chunk.  If the 
  9085. chunk size is not the same as the value that was stored in ckSize of pckinfo 
  9086. before mmioCreateChunk was called, then mmioAscend seeks back and corrects the 
  9087. chunk size in the chunk header before ascending from the chunk.  Also, if the 
  9088. chunk size is odd, then mmioAscend writes a null pad byte at the end of the 
  9089. chunk. 
  9090.  
  9091.  
  9092. ΓòÉΓòÉΓòÉ 16.3. RIFF Compound File Overview ΓòÉΓòÉΓòÉ
  9093.  
  9094. Files based upon the compound file structure contain the following two RIFF 
  9095. chunks at the "top level" of a RIFF file-(as subchunks of the RIFF chunk): 
  9096.  
  9097.      Compound File Resource Group (CGRP) chunk 
  9098.  
  9099.      Compound File Table of Contents (CTOC) chunk 
  9100.  
  9101.  The CGRP chunk contains all the compound file elements, concatenated together. 
  9102.  An element may be a RIFF file, but it may also be a non-RIFF file, or an 
  9103.  arbitrary RIFF chunk, or arbitrary binary data.  The definition of the form 
  9104.  that contains the CGRP chunk may specify exactly what the elements of the CGRP 
  9105.  chunk may be.  The CTOC chunk indexes the CGRP chunk, which contains the 
  9106.  actual multimedia data elements.  Each entry contains the name of the element 
  9107.  and other information about the element, including the offset of the element 
  9108.  within the CGRP chunk.  All the CTOC entries of a table are of the same length 
  9109.  and can be specified when the file is created. 
  9110.  
  9111.  The CTOC chunk may appear either before or after the CGRP chunk.  Generally, 
  9112.  the CTOC chunk is placed at the front of the file to reduce the seek and read 
  9113.  times required to access it.  See the following figure. 
  9114.  
  9115.  
  9116. ΓòÉΓòÉΓòÉ 16.4. RIFF Compound File Functions ΓòÉΓòÉΓòÉ
  9117.  
  9118. A RIFF compound file can contain multiple file elements.  A file element is an 
  9119. individual file that is part of a RIFF compound file.  An element of a compound 
  9120. file also could be an entire RIFF file.  The MMIO Manager provides service to 
  9121. find, query, and access any file elements in a compound file.  It also supports 
  9122. the function of file compaction. 
  9123.  
  9124. The following MMIO functions enable you to manage RIFF compound files: 
  9125.  
  9126. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9127. ΓöéFunction                      ΓöéDescription                   Γöé
  9128. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9129. ΓöémmioCFOpen                    ΓöéOpens a RIFF compound file by Γöé
  9130. Γöé                              Γöéname.                         Γöé
  9131. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9132. ΓöémmioCFClose                   ΓöéCloses a RIFF compound file   Γöé
  9133. Γöé                              Γöéthat was opened by mmioCFOpen.Γöé
  9134. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9135. ΓöémmioCFGetInfo                 ΓöéRetrieves the CTOC header of  Γöé
  9136. Γöé                              Γöéan open RIFF compound file.   Γöé
  9137. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9138. ΓöémmioCFSetInfo                 ΓöéModifies information that is  Γöé
  9139. Γöé                              Γöéstored in the CTOC header of  Γöé
  9140. Γöé                              Γöéan open RIFF compound file.   Γöé
  9141. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9142. ΓöémmioCFAddEntry                ΓöéAdds an entry to the CTOC     Γöé
  9143. Γöé                              Γöéchunk of an open RIFF compoundΓöé
  9144. Γöé                              Γöéfile.                         Γöé
  9145. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9146. ΓöémmioCFChangeEntry             ΓöéChanges a CTOC entry in an    Γöé
  9147. Γöé                              Γöéopen RIFF compound file.      Γöé
  9148. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9149. ΓöémmioCFFindEntry               ΓöéFinds a CTOC entry in an open Γöé
  9150. Γöé                              ΓöéRIFF compound file.           Γöé
  9151. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9152. ΓöémmioCFDeleteEntry             ΓöéDeletes a CTOC entry in an    Γöé
  9153. Γöé                              Γöéopen RIFF compound file.      Γöé
  9154. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9155. ΓöémmioCFAddElement              ΓöéAdds an element to the CGRP   Γöé
  9156. Γöé                              Γöéchunk of an open RIFF compoundΓöé
  9157. Γöé                              Γöéfile.                         Γöé
  9158. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9159. ΓöémmioCFCopy                    ΓöéCopies the CTOC and CGRP      Γöé
  9160. Γöé                              Γöéchunks from an open RIFF      Γöé
  9161. Γöé                              Γöécompound file to another RIFF Γöé
  9162. Γöé                              Γöécompound file.                Γöé
  9163. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9164. ΓöémmioCFCompact                 ΓöéCompacts a RIFF compound file Γöé
  9165. Γöé                              Γöéby removing elements marked asΓöé
  9166. Γöé                              Γöédeleted.                      Γöé
  9167. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9168. ΓöémmioFindElement               ΓöéEnumerates the entries of a   Γöé
  9169. Γöé                              Γöécompound file.                Γöé
  9170. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9171. ΓöémmioRemoveElement             ΓöéRemoves the specified element Γöé
  9172. Γöé                              Γöéin a compound file.           Γöé
  9173. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9174.  
  9175.  
  9176. ΓòÉΓòÉΓòÉ 16.4.1. The MMCFINFO Structure ΓòÉΓòÉΓòÉ
  9177.  
  9178. The MMIO Manager uses the MMCFINFO data structure to maintain state information 
  9179. on an open file.  The MMCFINFO data structure is defined in the MMIOOS2.H 
  9180. header file as shown. 
  9181.  
  9182. typedef struct _MMCFINFO  /* mmcfinfo                                   */
  9183.  {
  9184.  ULONG  ulHeaderSize;     /* CTOC header size                            */
  9185.  ULONG  ulEntriesTotal;   /* Num of CTOC table entries                   */
  9186.  ULONG  ulEntriesDeleted; /* Num of CTOC table entries to deleted CGRP   */
  9187.  ULONG  ulEntriesUnused;  /* Num of unused CTOC entries                  */
  9188.  ULONG  ulBytesTotal;     /* Combined byte size of all CGRP elements     */
  9189.  ULONG  ulBytesDeleted;   /* Byte size of all deleted CGRP elements      */
  9190.  ULONG  ulHeaderFlags;    /* Information about entire compound file (CF) */
  9191.  USHORT usEntrySize;      /* Size of each CTOC table entry               */
  9192.  USHORT usNameSize;       /* Size of name field in entry, default 13     */
  9193.  USHORT usExHdrFields;    /* Num CTOC header extra fields                */
  9194.  USHORT usExEntFields;    /* Num CTOC entry extra fields                 */
  9195.  } MMCFINFO;
  9196.  
  9197.  
  9198. ΓòÉΓòÉΓòÉ 16.4.2. Opening or Creating a RIFF Compound File ΓòÉΓòÉΓòÉ
  9199.  
  9200. To perform I/O procedures on a new or existing RIFF compound file, an 
  9201. application issues the mmioCFOpen function.  This function constructs a CTOC in 
  9202. memory for a RIFF compound file.  Specify the pmmiocfinfo parameter to identify 
  9203. a pointer to a user-supplied CTOC header structure containing optional header 
  9204. information.  The pmmiocfinfo parameter can be NULL if the default values of 
  9205. the fields are sufficient.  You can also specify the pmmioinfo parameter, which 
  9206. identifies a pointer to a user-supplied info structure containing optional open 
  9207. information that is passed to mmioOpen. 
  9208.  
  9209. The ulFlags options for mmioCFOpen include the following. 
  9210.  
  9211. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9212. ΓöéFlag                ΓöéDescription                                  Γöé
  9213. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9214. ΓöéMMIO_READ           ΓöéOpens a file for reading only (default).     Γöé
  9215. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9216. ΓöéMMIO_WRITE          ΓöéOpens a file for writing only.               Γöé
  9217. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9218. ΓöéMMIO_READWRITE      ΓöéOpens a file for both reading and writing.   Γöé
  9219. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9220. ΓöéMMIO_CREATE         ΓöéCreates a new file.                          Γöé
  9221. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9222. ΓöéMMIO_EXCLUSIVE      ΓöéOpens a file with exclusive mode, denying    Γöé
  9223. Γöé                    Γöéother processes both read and write access toΓöé
  9224. Γöé                    Γöéthe file.                                    Γöé
  9225. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9226. ΓöéMMIO_DENYWRITE      ΓöéOpens a file and denies other processes writeΓöé
  9227. Γöé                    Γöéaccess to the file.                          Γöé
  9228. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9229. ΓöéMMIO_DENYREAD       ΓöéOpens a file and denies other processes read Γöé
  9230. Γöé                    Γöéaccess to the file.                          Γöé
  9231. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9232. ΓöéMMIO_DENYNONE       ΓöéOpens a file without denying other processes Γöé
  9233. Γöé                    Γöéread or write access to the file.            Γöé
  9234. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9235.  
  9236. If the file does not exist, an error is returned unless you specified the 
  9237. MMIO_CREATE option.  If the file exists but is not a RIFF compound file, the 
  9238. system returns an error, regardless of whether or not you specified 
  9239. MMIO_CREATE. 
  9240.  
  9241. The access and sharing flags are maintained only within the set of compound 
  9242. file (CF) functions.  If the RIFF compound file or elements are accessed 
  9243. without using the CF functions, the access and sharing modes are unpredictable. 
  9244. An mmioOpen function with a fully qualified element name is considered a CF 
  9245. function since it internally calls mmioCFOpen, thus the flags are predictable 
  9246. in that case. 
  9247.  
  9248.  
  9249. ΓòÉΓòÉΓòÉ 16.4.3. Closing a RIFF Compound File ΓòÉΓòÉΓòÉ
  9250.  
  9251. Use the mmioCFClose function to close a RIFF compound file that was opened by 
  9252. mmioCFOpen.  The mmioCFClose function writes the CTOC back to the RIFF compound 
  9253. file.  You can also open an element using the mmioOpen function with the BND 
  9254. and element both specified on the open call (see to Opening or Creating a 
  9255. File).  In that case, you would call the mmioClose function, which would close 
  9256. the element and RIFF compound file. 
  9257.  
  9258. If the process ends, all open elements are closed and the CTOC is rewritten. 
  9259. If the compound file was opened for read only, the CTOC is not rewritten. 
  9260.  
  9261. If the mmioCFClose fails and you modified CGRP elements, the data stored on the 
  9262. file is inconsistent.  Attempt to correct the inconsistency by freeing file 
  9263. space and trying to close the file again. 
  9264.  
  9265.  
  9266. ΓòÉΓòÉΓòÉ 16.4.4. Retrieving Information ΓòÉΓòÉΓòÉ
  9267.  
  9268. Use the mmioCFGetInfo function to retrieve the CTOC header of an open RIFF 
  9269. compound file.  The mmioCFGetInfo function requires a pmmcfinfo parameter which 
  9270. identifies a pointer to a user-supplied buffer that will be filled with the 
  9271. CTOC header.  Use the cBytes parameter to specify the size of the pmmcfinfo 
  9272. buffer.  This is the maximum number of bytes that will be copied. 
  9273.  
  9274. The information copied to pmmcfinfo consists of a MMCFINFO structure followed 
  9275. by variable length arrays aulExHdrFldUsage, aulExEntFldUsage, and 
  9276. aulExHdrField. 
  9277.  
  9278. To find out how large a buffer the user needs to allocate, call mmioCFGetInfo 
  9279. with cBytes equal to the size of a ULONG.  This returns the first field of the 
  9280. CTOC header, which happens to be the size of the header.  This size can then be 
  9281. used as cBytes on the subsequent call. 
  9282.  
  9283.  
  9284. ΓòÉΓòÉΓòÉ 16.4.5. Modifying the CTOC Header ΓòÉΓòÉΓòÉ
  9285.  
  9286. Use the mmioCFSetInfo function to modify information that is stored in the CTOC 
  9287. header of an open RIFF compound file.  You should only modify the 
  9288. aulExHdrFldUsage and aulExHdrField fields. 
  9289.  
  9290. The mmioCFSetInfo function requires a pmmcfinfo parameter which identifies a 
  9291. pointer to a user-supplied buffer that contains the modified CTOC header.  This 
  9292. buffer was filled in by mmioCFGetInfo and then modified by the user.  Use the 
  9293. cBytes parameter to specify the size of the pmmcfinfo buffer.  This is the 
  9294. maximum number of bytes that will be copied. 
  9295.  
  9296.  
  9297. ΓòÉΓòÉΓòÉ 16.4.6. The MMCTOCENTRY Structure ΓòÉΓòÉΓòÉ
  9298.  
  9299. The MMIO Manager uses the MMCTOCENTRY data structure to maintain state 
  9300. information on an open file.  The MMCTOCENTRY data structure is defined in the 
  9301. MMIOOS2.H header file as shown. 
  9302.  
  9303. typedef struct _MMCTOCENTRY  {
  9304.  ULONG    ulOffset;         /* Offset of element within CGRP       */
  9305.  ULONG    ulSize;           /* Size of element                     */
  9306.  ULONG    ulMedType;        /* FOURCC of element                   */
  9307.  ULONG    ulMedUsage;       /* Possible sub type                   */
  9308.  ULONG    ulCompressTech;   /* Compression technique used          */
  9309.  ULONG    ulUncompressBytes;/* Actual size of uncompressed element */
  9310.  } MMCTOCENTRY;
  9311.  
  9312.  
  9313. ΓòÉΓòÉΓòÉ 16.4.7. Adding an Entry to the CTOC Chunk ΓòÉΓòÉΓòÉ
  9314.  
  9315. Use the mmioCFAddEntry function to add an entry to the CTOC chunk of an open 
  9316. RIFF compound file.  (Do not duplicate entries.)  The mmioCFAddEntry function 
  9317. requires a pmmctocentry parameter which identifies a pointer to a user-supplied 
  9318. CTOC structure containing the CTOC data. The "identifier" for the entry is the 
  9319. element name, which is passed in the pmmctocentry buffer.  If mmioCFAddEntry 
  9320. expands the current number of entries past the number currently allocated, on a 
  9321. mmioCFClose the CTOC is written following the CGRP in the file. 
  9322.  
  9323.  
  9324. ΓòÉΓòÉΓòÉ 16.4.8. Changing a CTOC Entry ΓòÉΓòÉΓòÉ
  9325.  
  9326. Use the mmioCFChangeEntry function to modify a CTOC entry in an open RIFF 
  9327. compound file.  The mmioCFChangeEntry function requires a pmmctocentry 
  9328. parameter which identifies a pointer to a user-supplied CTOC structure 
  9329. containing modified CTOC data.  The "identifier" for the entry is the element 
  9330. name, which is passed in the pmmctocentry buffer.  The mmioCFChangeEntry 
  9331. function updates the CTOC entry with the information contained in the user's 
  9332. pmmctocentry.  If you change the compression technique, you must also modify 
  9333. the ulUncompressBytes field.  When the compression technique is NULL, the 
  9334. uncompressed bytes field must be the size in bytes of the element when it is 
  9335. uncompressed. 
  9336.  
  9337.  
  9338. ΓòÉΓòÉΓòÉ 16.4.9. Finding a CTOC Entry ΓòÉΓòÉΓòÉ
  9339.  
  9340. The mmioCFFindEntry function enables you to find a particular entry in an open 
  9341. RIFF compound file.  The mmioCFFindEntry function requires the pmmctocentry 
  9342. parameter which identifies a pointer to a user-supplied CTOC structure 
  9343. containing the name of the RIFF compound file element to search for.  You can 
  9344. set flags in ulFlags to specify that an element is to be searched for by some 
  9345. attribute other than its name. 
  9346.  
  9347. Flags for mmioCFFindEntry include the following. 
  9348.  
  9349. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9350. ΓöéFlag                          ΓöéDescription                   Γöé
  9351. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9352. ΓöéMMIO_FINDFIRST                ΓöéFinds the first entry in the  Γöé
  9353. Γöé                              ΓöéCTOC table.                   Γöé
  9354. Γöé                              ΓöéNote: MMIO_FINDFIRST is       Γöé
  9355. Γöé                              Γöéignored if you set either     Γöé
  9356. Γöé                              ΓöéMMIO_FINDDELETED or           Γöé
  9357. Γöé                              ΓöéMMIO_FINDNEXT.                Γöé
  9358. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9359. ΓöéMMIO_FINDNEXT                 ΓöéFinds the next entry in the   Γöé
  9360. Γöé                              ΓöéCTOC table after the entry    Γöé
  9361. Γöé                              Γöéthat contains the element     Γöé
  9362. Γöé                              Γöésearched for.                 Γöé
  9363. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9364. ΓöéMMIO_FINDDELETED              ΓöéFinds the first entry in the  Γöé
  9365. Γöé                              Γöétable that has been marked as Γöé
  9366. Γöé                              Γöé"deleted", or the next deletedΓöé
  9367. Γöé                              Γöéentry following the entry thatΓöé
  9368. Γöé                              Γöécontains the element to searchΓöé
  9369. Γöé                              Γöéfor.                          Γöé
  9370. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9371.  
  9372. The search is case-insensitive.  If no flags are set, the search is for the 
  9373. element only.  If the function succeeds, the pmmctocentry buffer is filled with 
  9374. information about the CTOC entry.  You can progress through the CTOC entry list 
  9375. by doing a FINDFIRST followed by a series of FINDNEXT, using the information 
  9376. from the previous function. 
  9377.  
  9378.  
  9379. ΓòÉΓòÉΓòÉ 16.4.10. Deleting a CTOC Entry ΓòÉΓòÉΓòÉ
  9380.  
  9381. Use the mmioCFDeleteEntry function to delete a CTOC entry in an open RIFF 
  9382. compound file.  The mmioCFDeleteEntry function requires a pmmctocentry 
  9383. parameter, which identifies a pointer to a user-supplied CTOC structure 
  9384. containing the RIFF compound file element name.  The "identifier" for the entry 
  9385. is the element name, which is passed in the pmmctocentry field.  The entry is 
  9386. marked "deleted" by the FOURCC of FOURCC_DEL.  The actual element data remains 
  9387. in place.  To physically remove both the entry and the element's data, use the 
  9388. mmioCFCopy function. 
  9389.  
  9390.  
  9391. ΓòÉΓòÉΓòÉ 16.4.11. Adding an Element to the CGRP Chunk ΓòÉΓòÉΓòÉ
  9392.  
  9393. Use mmioCFAddElement to add an element to the CGRP chunk of an open RIFF 
  9394. compound file.  The mmioCFAddElement function requires: 
  9395.  
  9396.      A pointer to the name of the element that you want to add to the CGRP 
  9397.       chunk (pszElementName) 
  9398.  
  9399.      The four-character code of the element (fccType) 
  9400.  
  9401.      A pointer to the caller-supplied buffer containing the element data 
  9402.       (pchBuffer) 
  9403.  
  9404.      The size of the caller-supplied buffer (cchBytes). 
  9405.  
  9406.  The CTOC entry for the element does not have to exist before you call 
  9407.  mmioCFAddElement.  If the CTOC entry exists, mmioCFChangeEntry modifies its 
  9408.  contents.  If the CTOC entry does not exist, mmioCFAddEntry is called to add 
  9409.  the CTOC entry for this element.  The mmioCFAddElement function writes the 
  9410.  element to the end of the CGRP chunk.  The user's buffer contains the element 
  9411.  data. 
  9412.  
  9413.  The CGRP chunk may precede the CTOC chunk and overwrite the CTOC on the file 
  9414.  system.  This is corrected when the RIFF compound file is closed and the CTOC 
  9415.  is rewritten. 
  9416.  
  9417.  Note:  You can also add an element to the CGRP chunk by specifying MMIO_CREATE 
  9418.         using the mmioOpen function. 
  9419.  
  9420.  
  9421. ΓòÉΓòÉΓòÉ 16.4.12. Copying CTOC and CGRP Chunks ΓòÉΓòÉΓòÉ
  9422.  
  9423. Use the mmioCFCopy function to copy the CTOC and CGRP chunks from an open RIFF 
  9424. compound file to another RIFF compound file.  The mmioCFCopy function requires 
  9425. a pszDestFileName parameter, which identifies the pointer to the name of the 
  9426. destination file. 
  9427.  
  9428. The mmioCFCopy function opens the destination file for MMIO_CREATE (using 
  9429. mmioOpen) and builds a RIFF BND header at the beginning of the file.  The CTOC 
  9430. and CGRP chunks are then copied.  The newly written CGRP chunk is compacted; it 
  9431. has no deleted elements. 
  9432.  
  9433.  
  9434. ΓòÉΓòÉΓòÉ 16.4.13. Compacting RIFF Compound Files ΓòÉΓòÉΓòÉ
  9435.  
  9436. Use the mmioCFCompact function to compact a RIFF compound file in place.  The 
  9437. file must not be opened by any other process or the compaction fails.  Upon 
  9438. success a new CGRP is written into the same source file with no deleted 
  9439. elements. 
  9440.  
  9441.  
  9442. ΓòÉΓòÉΓòÉ 17. Sample Application Programs ΓòÉΓòÉΓòÉ
  9443.  
  9444. This section gives a brief overview of the sample application programs provided 
  9445. with the Toolkit, including programming concepts and program flow diagrams for 
  9446. each of the sample programs. 
  9447.  
  9448. The purpose of the OS/2 multimedia sample programs is to illustrate multimedia 
  9449. programming concepts and establish a basis for creating your own multimedia 
  9450. applications.  The programs provide you with practical examples that span a 
  9451. range of multimedia concepts. The source code provided shows you how to use 
  9452. multimedia controls and functions to create multimedia applications. Each 
  9453. sample program serves as a template that can be modified easily to meet your 
  9454. multimedia application requirements. The samples were compiled and verified 
  9455. using the IBM C Set ++ and VisualAge C compilers. 
  9456.  
  9457. Some samples require specific hardware devices. Without these devices, you can 
  9458. still compile and run the sample programs; however, you might not receive the 
  9459. full effect of the program.  For example, if a sample program has audio, you 
  9460. will not hear it unless you have a supported audio adapter and speakers 
  9461. installed. 
  9462.  
  9463.  
  9464. ΓòÉΓòÉΓòÉ 17.1. Subdirectory Structure ΓòÉΓòÉΓòÉ
  9465.  
  9466. Code for the sample programs (and associated files such as waveform audio files 
  9467. and movie files) are located in the following subdirectories. 
  9468.  
  9469.  
  9470. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9471. ΓöéTOOLKIT Γöé OS/2 Developer's Toolkit
  9472. ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9473.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9474.    Γö£ΓöÇΓöñ   H    Γöé Header Files
  9475.    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9476.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9477.    Γö£ΓöÇΓöñ  INC   Γöé Include Files
  9478.    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9479.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9480.    Γö£ΓöÇΓöñ  LIB   Γöé Library Files
  9481.    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9482.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9483.    ΓööΓöÇΓöñSAMPLES Γöé Samples
  9484.      ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  9485.          Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9486.          ΓööΓöÇΓöñ   MM   Γöé OS/2 Multimedia Samples
  9487.            ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  9488.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9489.                Γö£ΓöÇΓöñASYMREC Γöé Asymmetric Recording Sample
  9490.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9491.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9492.                Γö£ΓöÇΓöñAVCINST Γöé AVC I/O Procedure Installation Sample
  9493.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9494.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9495.                Γö£ΓöÇΓöñ CAPDLL Γöé Caption DLL
  9496.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9497.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9498.                Γö£ΓöÇΓöñ CAPSAMPΓöé Caption Sample Application
  9499.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9500.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9501.                Γö£ΓöÇΓöñ CAPTIONΓöé Caption Creation Utility
  9502.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9503.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9504.                Γö£ΓöÇΓöñ CLOCK  Γöé Memory Playlist Sample
  9505.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9506.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9507.                Γö£ΓöÇΓöñ DIVE   Γöé DIVE Sample
  9508.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9509.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9510.                Γö£ΓöÇΓöñ DUET1  Γöé Streaming Device Duet Sample
  9511.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9512.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9513.                Γö£ΓöÇΓöñ DUET2  Γöé Streaming and Non-Streaming Device Duet Sample
  9514.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9515.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9516.                Γö£ΓöÇΓöñ MCISPY Γöé MCISpy Sample
  9517.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9518.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9519.                Γö£ΓöÇΓöñMCISTRNGΓöé Media Control Interface String Test Sample
  9520.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9521.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9522.                Γö£ΓöÇΓöñMMBROWSEΓöé Image Browser Sample
  9523.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9524.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9525.                Γö£ΓöÇΓöñ MOVIE  Γöé Movie Sample
  9526.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9527.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9528.                Γö£ΓöÇΓöñRECORDERΓöé Audio Recorder Sample
  9529.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9530.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9531.                Γö£ΓöÇΓöñSHORTCF Γöé Control File Templates
  9532.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9533.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9534.                ΓööΓöÇΓöñULTIEYESΓöé Non-Linear Video Sample
  9535.                  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9536.  
  9537.  
  9538.  
  9539. Note:  The SHORTCF subdirectory contains control file templates you can utilize 
  9540.        when installing a program using MINSTALL. See Installing a Program Using 
  9541.        MINSTALL for further details. 
  9542.  
  9543.  
  9544. ΓòÉΓòÉΓòÉ 17.2. Programming Concepts ΓòÉΓòÉΓòÉ
  9545.  
  9546. The following table lists programming concepts illustrated in the OS/2 
  9547. multimedia sample programs.  The sample programs are identified by their 
  9548. associated subdirectories. 
  9549.  
  9550.                               +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  9551.                               |   |   |   |   |   |   |   |   |   | M | M |   | R | U |
  9552.                               | A |   | C | C |   |   |   |   |   | C | M |   | E | L |
  9553.                               | V | C | A | A |   |   |   |   | M | I | B |   | C | T |
  9554.                               | C | A | P | P | C |   | D | D | C | S | R | M | O | I |
  9555.                               | I | P | S | T | L | D | U | U | I | T | O | O | R | E |
  9556.                               | N | D | A | I | O | I | E | E | S | R | W | V | D | Y |
  9557.                               | S | L | M | O | C | V | T | T | P | N | S | I | E | E |
  9558. Programming Concept           | T | L | P | N | K | E | 1 | 2 | Y | G | E | E | R | S |
  9559. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9560. Sending string commands to    |   | X | X |   |   |   |   |   | X | X |   | X |   |   |
  9561. the Media Device Manager      |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9562. (MDM)                         |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9563. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9564. Using the memory playlist to  |   |   |   |   | X |   |   |   |   |   |   |   |   |   |
  9565. create audio special effects  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9566. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9567. Using the captioning flag     |   |   | X |   | X |   |   |   |   |   |   |   |   |   |
  9568. to determine function         |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9569. implementation                |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9570. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9571. Installing an I/O procedure   | X |   |   |   |   |   |   |   |   |   |X  |   |   |   |
  9572. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9573. Controlling a group of        |   |   |   |   |   |   | X |   |   |   |   |   |   |   |
  9574. data-streaming devices        |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9575. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9576. Controlling a device group    |   |   |   |   |   |   |   | X |   |   |   |   |   |   |
  9577. that includes a non-streaming |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9578. device                        |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9579. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9580. Displaying non-linear video   |   |   |   |   |   |   |   |   |   |   |   |   |   | X |
  9581. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9582. Manipulating the audio volume |   |   | X | X |   |   | X | X |   |   |   | X | X |   |
  9583. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9584. Converting an image format    |   |   |   |   |   |   |   |   |   |   | X |   |   |   |
  9585. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9586. Monitoring multimedia         |   |   |   |   |   |   |   |   | X |   |   |   |   |   |
  9587. subsystem messages            |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9588. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9589. Incorporating multimedia      |   |   |   |   |   |   | X | X |   |   |   |   |   |   |
  9590. function into help            |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9591. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9592. Playing and editing a movie   |   |   |   |   |   |   |   |   |   |   |   | X |   |   |
  9593. in an application-defined     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9594. window and in a default       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9595. window                        |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9596. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9597. Issuing status messages to    |   |   |   | X |   |   |   |   |   |   |   |   |   |   |
  9598. get information about media   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9599. positions                     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9600. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9601. Implementing a media position |   |   | X | X |   |   |   |   |   |   |   |   |   |   |
  9602. slider bar                    |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9603. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9604. Incorporating text captioning |   |   | X |   |   |   |   |   |   |   |   |   |   |   |
  9605. into an application           |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9606. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9607. Recording audio and changing  |   |   |   |   |   |   |   |   |   |   |   |   | X |   |
  9608. the capabilities of the       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9609. device and recording          |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9610. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---|
  9611. Writing directly to the       |   |   |   |   |   | X |   |   |   |   |   |   |   |   |
  9612. video hardware                |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  9613. ------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  9614.  
  9615.  
  9616. ΓòÉΓòÉΓòÉ 17.3. Media Control Interface String Test Sample ΓòÉΓòÉΓòÉ
  9617.  
  9618. The String Test Sample serves as a powerful testing and debugging tool that 
  9619. enables developers writing media drivers to control their devices at the 
  9620. application level.  The String Test Sample illustrates how an application uses 
  9621. the interpretive string interface provided by the media control interface.  It 
  9622. also illustrates how notification messages are returned from the media drivers 
  9623. to the application. 
  9624.  
  9625. The media control interface of OS/2 multimedia provides the primary mechanism 
  9626. for application control of media devices.  Applications interface with the 
  9627. media control interface (and thus with media devices) in two ways-through a 
  9628. procedural interface or through a string interface.  The procedural interface 
  9629. (also referred to as command message interface) is used for sending messages to 
  9630. the media control interface from an application using the mciSendCommand 
  9631. function.  The string interface is used for sending command language statements 
  9632. to the media control interface from an application using the mciSendString 
  9633. function. 
  9634.  
  9635. The string interface has a few advantages over the procedural interface. 
  9636. First, the string interface enables you to interactively control devices with a 
  9637. PM or command line interface.  In addition, applications that currently use 
  9638. script languages can integrate "string commands" in their script languages 
  9639. allowing you to integrate multimedia in your applications with a very low cost 
  9640. and development impact.  Finally, in certain programming circumstances, the 
  9641. string interface is also easier to use than the procedural interface.  The 
  9642. string interface simply passes a character-string buffer to the function, in 
  9643. contrast to the procedural interface, which requires the setup of certain data 
  9644. structures. 
  9645.  
  9646. Note:  The procedural interface is illustrated in the Duet Samples. 
  9647.  
  9648.  
  9649. ΓòÉΓòÉΓòÉ 17.3.1. Program Flow ΓòÉΓòÉΓòÉ
  9650.  
  9651. The following figure illustrates the interaction between OS/2 multimedia system 
  9652. components and the Media Control Interface String Test Sample program. Source 
  9653. code is located in the \TOOLKIT\SAMPLES\MM\MCISTRNG subdirectory. 
  9654.  
  9655. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9656. Γöé String Test  Γöé
  9657. ΓöéSample ProgramΓöé
  9658. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  9659.          Γöé
  9660. (4)Γöé   (1)
  9661. ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöÇΓöÇΓöÇΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9662. Γöé Media Device Γöé(2) Γöé   Command    Γöé
  9663. Γöé    Manager   ΓöéΓöÇΓöÇΓöÇΓöé    Table     Γöé
  9664. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9665.          Γöé
  9666. (4)Γöé   (3)
  9667. ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9668. Γöé Media Driver Γöé
  9669. Γöé              Γöé
  9670. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9671.  
  9672.  (1)    String Test waits for you to enter a string command.  When you select 
  9673.         Send, the program calls mciSendString to send the string command to the 
  9674.         Media Device Manager (MDM). 
  9675.  
  9676.  (2)    The MDM receives the string command and uses the command table to parse 
  9677.         the string and convert it to the media control interface command 
  9678.         format. 
  9679.  
  9680.  (3)    The Media Device Manager passes the command to the appropriate media 
  9681.         driver, which acts on the command. 
  9682.  
  9683.  (4)    Notification messages are sent back to the application from the media 
  9684.         device to indicate such operations as completion of a device function 
  9685.         or the passing of device ownership from one process to another.  These 
  9686.         messages can be viewed in the Display Messages dialog box of the String 
  9687.         Test Sample. 
  9688.  
  9689.  
  9690. ΓòÉΓòÉΓòÉ 17.4. Memory Playlist Sample ΓòÉΓòÉΓòÉ
  9691.  
  9692. The Memory Playlist Sample (CLOCK) illustrates the use of the memory playlist 
  9693. feature of OS/2 multimedia.  The memory playlist feature provides for easy 
  9694. manipulation of multimedia data in memory to create unique effects based on 
  9695. user input or other dynamic events.  In the case of the Memory Playlist Sample, 
  9696. multimedia data is manipulated dynamically to create sound effects (chimes) 
  9697. based on the time.  The sample program also illustrates the use of the 
  9698. captioning indicator provided by OS/2 multimedia. The Memory Playlist Sample 
  9699. uses this indicator to decide if it should provide users with a visual cue of 
  9700. chimes. 
  9701.  
  9702.  
  9703. ΓòÉΓòÉΓòÉ 17.4.1. Program Flow ΓòÉΓòÉΓòÉ
  9704.  
  9705. The following figure illustrates the interaction between OS/2 multimedia system 
  9706. components and the Memory Playlist Sample. Source code is located in the 
  9707. \TOOLKIT\SAMPLES\MM\CLOCK subdirectory. (Source code for the Waveform Audio 
  9708. Media Driver is located in \TOOLKIT\SAMPLES\MM\ADMCT.) 
  9709.  
  9710. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9711. Γöé Memory Playlist Γöé  (2) Γöé Audio  Γöé
  9712. Γöé Sample Program  ΓöéΓöÇΓöÇΓöÇ  Γöé File   Γöé
  9713. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9714.     (1) 
  9715. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9716. Γöé Media Device  Γöé
  9717. Γöé    Manager    Γöé
  9718. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9719.     (3) 
  9720. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9721. ΓöéWaveform Audio Γöé
  9722. Γöé Media Driver  Γöé
  9723. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9724.     (3) 
  9725. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9726. Γöé    Memory     Γöé
  9727. Γöé   Playlist    Γöé
  9728. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9729.  
  9730.  (1)    The Memory Playlist Sample queries the Media Device Manager using the 
  9731.         mciQuerySysValue function to determine whether the captioning flag is 
  9732.         set.  If the flag is set, the bell in the primary window will swing 
  9733.         back and forth when a chime occurs. 
  9734.  
  9735.  (2)    The Memory Playlist Sample program initializes the playlist and loads 
  9736.         the audio files into memory. 
  9737.  
  9738.  (3)    When a chime occurs, the Memory Playlist Sample program calls the 
  9739.         Waveform Audio Media Driver through the MDM to interpret instructions 
  9740.         for the playing of three audio files in memory.  The clock chimes are 
  9741.         stored in three files:  A, B, and C.  Depending on the time a chime is 
  9742.         requested, the memory playlist consists of the following: 
  9743.  
  9744.             At 15 minutes past the hour, the chime plays A. 
  9745.             At 30 minutes past the hour, the chime plays A+B. 
  9746.             At 45 minutes past the hour, the chime plays A+B+A. 
  9747.             On the hour, the chime plays A+B+A+B+ (C x Hour). 
  9748.  
  9749.  
  9750. ΓòÉΓòÉΓòÉ 17.4.2. Playing a Chime ΓòÉΓòÉΓòÉ
  9751.  
  9752. Every time you want to play a chime, open the device you want to play, play it, 
  9753. and close it.  The logic for the Memory Playlist Sample implementation of the 
  9754. playlist is outlined in in the following figure. 
  9755.  
  9756.                                                           (6)
  9757.                                                            Γöé
  9758.                                                            
  9759. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9760. Γöé  "Play Chime"   Γöé     ΓöéDeal with chimingΓöé      Γöé  MM_MCINOTIFY   Γöé
  9761. Γöé  push button    Γöé     Γöé     (Open)      Γöé      Γöé (Play or Open)  Γöé
  9762. Γöé                 Γöé     Γöé                 Γöé      Γöé                 Γöé
  9763. ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9764.  (1)                        (2)Γöé                       (7)
  9765. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ             Γöé                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9766. ΓöéFind the nearest Γöé             Γöé                   Γöé Chiming is done.Γöé
  9767. Γöéchime time and   Γöé             Γöé                   Γöé Stop swinging   Γöé
  9768. Γöéplay it (Open)   Γöé             Γöé                   Γöé   the bell      Γöé
  9769. ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             Γöé                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9770.      Γöé                          
  9771.      Γöé                  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9772.      Γöé                  Γöé  Find and play  Γöé
  9773.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé   the correct   Γöé
  9774.                         Γöé      chime      Γöé
  9775.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9776.                              (3)Γöé
  9777.                                 
  9778.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9779.                         Γöé  Open Playlist  Γöé
  9780.                         Γöé   chime device  Γöé
  9781.                         Γöéwith MCI_WAIT setΓöé
  9782.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9783.                              (4)Γöé
  9784.                                 
  9785.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9786.                         ΓöéSet up chime fileΓöé
  9787.                         Γöé   information   Γöé
  9788.                         Γöé                 Γöé
  9789.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9790.                              (5)Γöé
  9791.                                 
  9792.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9793.                         Γöé  Play Playlist  Γöé
  9794.                         Γöé with notify set Γöé
  9795.                         Γöé                 Γöé
  9796.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9797.                                 Γöé
  9798.                                 
  9799.                                (6)
  9800.  
  9801.  (1)       If Play chime is selected, processing is passed to the 
  9802.            FindTheNearestChimeTimeAndPlayIt procedure, which calculates the 
  9803.            next hour so its chime can be played.  The procedure calls 
  9804.            FindAndPlayTheCorrectChime to do the actual work required to play 
  9805.            the chime. 
  9806.  
  9807.  (2)       If it is a normally scheduled chime time (if a quarter hour has been 
  9808.            reached), processing is passed to FindAndPlayTheCorrectChime. 
  9809.  
  9810.  (3)       FindAndPlayTheCorrectChime calls OpenPlaylistChimeDevice to do open 
  9811.            processing with MCI_WAIT specified. 
  9812.  
  9813.  (4)       When the OPEN command completes, the Waveform Audio Media Driver 
  9814.            needs information about the waveform file.  The 
  9815.            FindAndPlayTheCorrectChime procedure calls SetupChimeFileInformation 
  9816.            to pass this information to the driver. 
  9817.  
  9818.  (5)       After calling SetupChimeFileInformation, the 
  9819.            FindAndPlayTheCorrectChime procedure issues the mciSendCommand 
  9820.            request to play the chime with the notify flag set. 
  9821.  
  9822.  (6)       After the chime has finished playing, a notification message is sent 
  9823.            to the MainDialogProc and handled by the MM_MCINOTIFY case of the 
  9824.            switch statement. 
  9825.  
  9826.  (7)       In the MM_MCINOTIFY case of MainDialogProc, when the 
  9827.            usMCIUserParameter is set to indicate the chime has stopped playing, 
  9828.            the swinging of the bell is stopped and the device is closed. 
  9829.  
  9830.  
  9831. ΓòÉΓòÉΓòÉ 17.5. AVC I/O Procedure Installation Sample ΓòÉΓòÉΓòÉ
  9832.  
  9833. This sample (AVCINST) explains how an application can install and remove an I/O 
  9834. procedure to use multimedia input/output (MMIO) file services. The AVC I/O 
  9835. Procedure Installation Sample is a simple PM application that allows you to 
  9836. install or deinstall the audio AVC I/O procedure, AVCAPROC.DLL. 
  9837.  
  9838. Note:  This sample shows the installation and removal of a system-defined I/O 
  9839.        procedure.  Typically, you would install a custom I/O procedure that was 
  9840.        not built into the MMPMMMIO.INI file during installation. 
  9841.  
  9842.  
  9843. ΓòÉΓòÉΓòÉ 17.5.1. Program Flow ΓòÉΓòÉΓòÉ
  9844.  
  9845. The following figure illustrates the interaction between OS/2 multimedia system 
  9846. components and the AVC I/O Procedure Installation sample program. Source code 
  9847. is located in the \TOOLKIT\SAMPLES\MM\AVCINST subdirectory. 
  9848.  
  9849.  
  9850. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9851. ΓöéAVO I/O Procedure InstallationΓöé
  9852. Γöé       Sample Program         Γöé
  9853. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9854.        (1)     
  9855.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9856.     Γöé    MMIO Manager     Γöé
  9857.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9858.        (2)     
  9859.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9860.     Γöé  AVC I/O Procedure  Γöé
  9861.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9862.  
  9863.  (1)    When OK is selected, the AVC I/O Procedure Installation program calls 
  9864.         the mmioInstallfIOProc function to install or deinstall the AVC I/O 
  9865.         procedure (AVCAPROC.DLL) in the system. 
  9866.  
  9867.  (2)    The MMIO Manager installs or deinstalls the AVC I/O procedure. 
  9868.  
  9869.  
  9870. ΓòÉΓòÉΓòÉ 17.6. Duet Samples ΓòÉΓòÉΓòÉ
  9871.  
  9872. This section describes the use of the media control interface layer of the OS/2 
  9873. multimedia system to manipulate devices in a hardware-independent manner.  The 
  9874. Duet sample programs (DUET1 and DUET2) illustrate the OS/2 multimedia concept 
  9875. of device grouping and integrating multimedia into an application's help 
  9876. information. See the example in the Duet Player IPF Sample section for an 
  9877. example of how multimedia can be used in an application's help information. 
  9878.  
  9879. The Duet sample programs communicate with the media control interface subsystem 
  9880. to control multimedia devices from an application in a device-independent 
  9881. manner.  This concept is illustrated by the Duet samples when they play, pause, 
  9882. resume, stop, and change the volume of their songs.  This function is 
  9883. implemented using the procedural interface, as opposed to the string interface 
  9884. described in the Media Control Interface String Test Sample. 
  9885.  
  9886. The Duet sample applications are identical except for minor software 
  9887. differences in how the hardware devices are controlled. DUET1 plays both parts 
  9888. of the duet on a streaming device-a device that streams data through the SPI 
  9889. subsystem of OS/2 multimedia.  DUET2 groups a streaming and a non-streaming 
  9890. device-a device that handles data internally and does not stream data through 
  9891. the SPI subsystem. 
  9892.  
  9893. The hardware differences between the Duet samples have little impact on the 
  9894. applications.  The media drivers and stream handlers manage the 
  9895. hardware-dependent function. 
  9896.  
  9897. Note:  To hear the duets when you run the Duet sample programs, an audio device 
  9898.        is required, for example, the M-Audio adapter.  If you do not have an 
  9899.        audio adapter, you can still compile and run the sample programs; 
  9900.        however, you will not be able to play any duets or audio help. 
  9901.  
  9902.  
  9903. ΓòÉΓòÉΓòÉ 17.6.1. Streaming Device Duet Sample ΓòÉΓòÉΓòÉ
  9904.  
  9905. The Streaming Device Duet Sample (DUET1) illustrates the concepts of grouping 
  9906. two streaming devices. Each song that is played by DUET1 is recorded into two 
  9907. separate waveform files (instead of a single waveform file, which is the most 
  9908. common and efficient means to record).  Think of each song as a duet, with each 
  9909. part of the duet stored in a separate waveform file. 
  9910.  
  9911. Note:  The DUET1 program will not execute correctly when using a Sound Blaster 
  9912.        adapter because the adapter does not support playing two wave files 
  9913.        simultaneously. 
  9914.  
  9915.  
  9916. ΓòÉΓòÉΓòÉ 17.6.2. Program Flow ΓòÉΓòÉΓòÉ
  9917.  
  9918. The following figure illustrates how the DUET1 sample program interfaces with 
  9919. the Media Device Manager (MDM) to handle the concept of grouping. Source code 
  9920. for DUET1 is located in the \TOOLKIT\SAMPLES\MM\DUET1 subdirectory. 
  9921.  
  9922.  
  9923.                               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9924.                               Γöé    DUET1      Γöé
  9925.                               Γöé    Sample     Γöé
  9926.                               Γöé    Program    Γöé
  9927.                               ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  9928.                                ΓöîΓöÇΓöÇΓöÿ  (1)  ΓööΓöÇΓöÉ
  9929.                                            
  9930.                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9931.                 Γöé   Waveform     Γöé          Γöé   Waveform     Γöé
  9932.                 Γöé     Audio      Γöé          Γöé     Audio      Γöé
  9933.                 ΓöéDevice Context 1Γöé   (2)    ΓöéDevice Context 2Γöé
  9934.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ          ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9935.                              ΓööΓöÇΓöÉ             ΓöîΓöÇΓöÿ
  9936.                                             
  9937.                               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9938.                               Γöé Media Device  Γöé
  9939.                               Γöé    Manager    Γöé
  9940.                               Γöé               Γöé
  9941.                               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9942.                                       Γöé
  9943. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ                                
  9944. ΓöéWAVEΓöé                        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9945. ΓöéFileΓöéΓöÉ                      Γöé   Waveform    Γöé
  9946. ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé  ΓöîΓöÇΓöÉ                 Γöé Audio Media   Γöé
  9947.        ΓööΓöÇΓöéMΓöé                 Γöé    Driver     Γöé
  9948.           ΓöéMΓöé                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9949.        ΓöîΓöÇΓöéIΓöé                    (3)  Γöé
  9950.        Γöé  ΓöéOΓöé                         
  9951. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé  ΓööΓöÇΓöÿ                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9952. ΓöéWAVEΓöéΓöÿ                     Γöé  Sync/Stream  Γöé
  9953. ΓöéFileΓöé     Γöé                  Γöé    Manager    Γöé
  9954. ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé                  Γöé               Γöé
  9955.            Γöé                  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9956.            Γöé                               
  9957.            Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9958.            Γöé                                            
  9959.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                (4)           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9960.      Γöé  File System Γöé            ΓöîΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÉ       Γöé     Audio    Γöé
  9961.      ΓöéStream HandlerΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé Γöé Γöé Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñStream HandlerΓöé
  9962.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ            ΓööΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓöÿ       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9963.                                                             (5)
  9964.                                                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9965.                                                    Γöé   Audio DD   Γöé
  9966.                                                    Γöé              Γöé
  9967.                                                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9968.                                                           
  9969.                                                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9970.                                                    Γöé   Audio HW   Γöé
  9971.                                                    Γöé              Γöé
  9972.                                                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÿ
  9973.                                                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ
  9974.  
  9975.  (1)    The DUET1 program directly interfaces with media control interface 
  9976.         services using the procedural interface. 
  9977.  
  9978.         Each part of the duet is played through the OS/2 multimedia system 
  9979.         using a separate instance of a logical media device.  In this case, it 
  9980.         uses two instances of the logical waveform device, the Waveform Audio 
  9981.         Media Driver.  When the Duet Player is ready to play a song, it issues 
  9982.         the MCI_GROUP command to the MDM to set up a group of two logical 
  9983.         waveform devices.  The MDM returns a group handle to the application, 
  9984.         so that the application can refer to that group as a single unit 
  9985.         (instead of having to manage each logical device separately).  The MDM 
  9986.         handles the management of the logical media devices for the 
  9987.         application. 
  9988.  
  9989.  (2)    The MDM sets up two Waveform Audio Media Drivers as a group. 
  9990.  
  9991.  (3)    The Waveform Audio Media Driver handles the creation and management of 
  9992.         the source and target stream handlers.  In this example, the source 
  9993.         stream handler is the File System Stream Handler, and the target stream 
  9994.         handler is the Audio Stream Handler.  When the Waveform Audio Media 
  9995.         Driver receives an MCI_OPEN command from the program, it creates the 
  9996.         stream handlers. 
  9997.  
  9998.         When you select Play, Pause, or Stop, the application issues an 
  9999.         MCI_PLAY, MCI_PAUSE, or MCI_STOP message to the MDM.  The MDM then 
  10000.         passes this message to the appropriate media devices in the group. 
  10001.  
  10002.  (4)    The media driver issues SPI functions to the Sync/Stream Manager (SSM) 
  10003.         to process the play, pause, resume, and close messages from the 
  10004.         application.  The SSM controls the registration and activities of all 
  10005.         stream handlers.  SPI services enable media drivers to create, start, 
  10006.         and end data streams.  SPI also provides real-time services to enable 
  10007.         stream handlers to synchronize events.  The File System Stream Handler 
  10008.         and the Audio Stream Handler are responsible for controlling the flow 
  10009.         of application data in a continuous, real-time manner. 
  10010.  
  10011.  (5)    The target stream handlers interface with the audio device driver 
  10012.         through the inter-device-driver communication (IDC) interface.  This is 
  10013.         the interface between the stream handler and the physical device driver 
  10014.         (PDD).  The IDC interface includes Stream Handler Device (SHD) messages 
  10015.         and device driver command (DDCMD) messages. 
  10016.  
  10017.  
  10018. ΓòÉΓòÉΓòÉ 17.6.3. Streaming and Non-Streaming Device Duet Sample ΓòÉΓòÉΓòÉ
  10019.  
  10020. Code for the Streaming and Non-Streaming Device Duet Sample (DUET2) is almost 
  10021. identical to DUET1.  The difference is that DUET2 demonstrates how one of the 
  10022. devices in the multimedia device group can be a non-streaming device.  The song 
  10023. in DUET2 is divided in two parts, just as the song in DUET1.  However, DUET2 
  10024. plays one part of the song from a CD in a CD-ROM device connected to the 
  10025. system.  This difference in hardware is almost totally isolated from the 
  10026. application.  There is a difference of approximately 10 lines of code between 
  10027. the Duet sample programs to handle the major difference in hardware 
  10028. configurations. 
  10029.  
  10030. This major difference in hardware configuration is buffered from DUET2 by the 
  10031. media drivers. The CD Media Driver performs differently from the Waveform Audio 
  10032. Media Driver because it is dealing with a non-streaming device.  When the CD 
  10033. media driver receives a media control interface message from the program (such 
  10034. as PLAY or STOP), it must communicate with the CD-ROM device driver through the 
  10035. IOCtl interface. This is the difference between a media driver that controls a 
  10036. streaming device and a media driver that controls a non-streaming device. 
  10037.  
  10038.  
  10039. ΓòÉΓòÉΓòÉ 17.7. Caption Creation Utility ΓòÉΓòÉΓòÉ
  10040.  
  10041. The Caption Creation Utility (CAPTION) is part of the sample captioning system 
  10042. provided with the Toolkit. See Captioning for additional information on this 
  10043. sample captioning system. 
  10044.  
  10045. The Caption Creation Utility program enables a user to synchronize an audio 
  10046. file with a text file. 
  10047.  
  10048. Note:  This concept can be extended beyond audio and text to apply to many 
  10049.        possibilities, such as synchronizing audio and video, or synchronizing 
  10050.        video and text. 
  10051.  
  10052.  While the audio file is playing, the Caption Creation Utility program issues 
  10053.  the MCI_STATUS command to obtain a media-position value of the audio file. The 
  10054.  media-position value is combined with the text file to produce a caption file. 
  10055.  An application can use the resulting caption file in conjunction with the 
  10056.  Caption DLL to provide captioning in an application. 
  10057.  
  10058.  
  10059. ΓòÉΓòÉΓòÉ 17.7.1. Program Flow ΓòÉΓòÉΓòÉ
  10060.  
  10061. The following figure illustrates the interaction between the audio, text, and 
  10062. caption file with the Caption Creation Utility program. Source code for the 
  10063. Caption Creation Utility is located in the \TOOLKIT\SAMPLES\MM\CAPTION 
  10064. subdirectory. 
  10065.  
  10066.  (1)    The user selects an audio file and a corresponding text file to 
  10067.         synchronize with the selected audio file. For example, the user might 
  10068.         want to synchronize the text of a poem with an audio file of someone 
  10069.         reading the poem.  When the user opens a text file, the first line of 
  10070.         text appears at the bottom of the text window.  The first line of the 
  10071.         text file selected in the example shown in the previous figure is 
  10072.         "Welcome to MMPM/2's sample captioning system." 
  10073.  
  10074.  (2)    In order to begin the synchronization process, the user must select 
  10075.         Start timing.  The audio file begins to play and Advance line becomes 
  10076.         enabled. 
  10077.  
  10078.  (3)    The user selects Advance line to scroll to the next line of text.  The 
  10079.         next line of text is scrolled and appears in the text window. 
  10080.  
  10081.  (4)    When Advance line is selected, the Caption Creation Utility program 
  10082.         passes the device ID, MCI_STATUS command with the MCI_STATUS_ITEM flag, 
  10083.         and the MCI_STATUS_PARMS data structure with the ulItem field set to 
  10084.         MCI_STATUS_POSITION to the Media Device Manager (MDM). Upon return, the 
  10085.         ulReturn field of the MCI_STATUS_PARMS data structure contains the 
  10086.         current position of the device in MMTIME units. 
  10087.  
  10088.  (5)    When the Caption Creation Utility program receives the position value, 
  10089.         it writes the time value and the line of text to the caption file. The 
  10090.         caption file contains the same text as the text file, but each line in 
  10091.         the caption file is preceded by the time in the audio file when that 
  10092.         line of text should be displayed. 
  10093.  
  10094.  
  10095. ΓòÉΓòÉΓòÉ 17.8. Caption Sample Application and Caption DLL ΓòÉΓòÉΓòÉ
  10096.  
  10097. The Caption Sample Application (CAPSAMP) and Caption DLL (CAPDLL) are part of 
  10098. the sample captioning system provided with the Toolkit.  See Captioning for 
  10099. additional information on this sample captioning system. 
  10100.  
  10101. The Caption Sample Application and Caption DLL are provided to demonstrate how 
  10102. captioning can be integrated into applications using caption files in 
  10103. conjunction with the Caption DLL. 
  10104.  
  10105.  
  10106. ΓòÉΓòÉΓòÉ 17.8.1. Program Flow ΓòÉΓòÉΓòÉ
  10107.  
  10108. The following figure illustrates the interaction between the captioning 
  10109. components and the media control interface layer. Source code for the Caption 
  10110. Sample Application and Caption DLL are located respectively in the 
  10111. \TOOLKIT\SAMPLES\MM\CAPSAMP and \TOOLKIT\SAMPLES\MM\CAPDLL subdirectories. 
  10112.  
  10113.  
  10114. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10115. Γöé      Caption      Γöé
  10116. Γöé      Sample       Γö£ΓöÇΓöÇΓöÇ(2D)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10117. Γöé    Application    Γöé             Γöé
  10118. ΓööΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼Γöÿ             Γöé
  10119. (2)(3)(4)(1)(2)(4)(5)             Γöé
  10120.  Γöé  Γöé  Γöé                      Γöé
  10121.  Γöé  Γöé  Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ
  10122.  Γöé  Γöé  Γöé Γöé  Caption DLL  Γöé(2D) ΓöéCaptionΓöé
  10123.  Γöé  Γöé  Γöé Γöé               Γöé     Γöé File  Γöé
  10124.  Γöé  Γöé  Γöé ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10125.  Γöé  Γöé  Γöé (2B) 
  10126.  Γöé  Γöé  Γöé  Γöé  (2C)
  10127. ----------Γöé-----------------------------------
  10128. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     OS/2 Multimedia
  10129. Γöé   Media Control Interface Γöé
  10130. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10131.  
  10132.  (1)    As part of its initialization and termination routines, the Caption 
  10133.         Sample Application issues ccInitialize and ccTerminate, respectively, 
  10134.         to notify the Caption DLL to begin and end captioning. As part of the 
  10135.         termination process, the Caption DLL releases any resources previously 
  10136.         allocated for captioning. 
  10137.  
  10138.  (2)    When the user selects Play, the Caption Sample Application opens the 
  10139.         audio file, obtains a device ID, and plays the audio file.  The Caption 
  10140.         Sample Application checks the captioning flag found on the System page 
  10141.         in the Multimedia Setup object. this flag is on, the application issues 
  10142.         the ccSendCommand with a CC_START message to the Caption DLL. The 
  10143.         Caption DLL then begins to provide captioning for the application. 
  10144.  
  10145.  (2B)   When the Caption DLL receives the request to begin captioning, it 
  10146.         issues a set position advise message to the multimedia system for every 
  10147.         1500 time units. 
  10148.  
  10149.  (2C)   When the device moves 1500 time units, the Caption DLL receives an 
  10150.         MM_MCIPOSITIONCHANGE message from the multimedia system. 
  10151.  
  10152.  (2D)   Whenever the Caption DLL receives the MM_MCIPOSITIONCHANGE message, it 
  10153.         checks the caption file for the appropriate line to display, based on 
  10154.         the current position of the audio file. The Caption DLL then scrolls 
  10155.         the caption window in the application, to display the appropriate line. 
  10156.  
  10157.  (3)    If the user pauses the audio file, changes the volume, or moves the 
  10158.         audio slider position, the Caption Sample Application does not have to 
  10159.         perform any additional processing to manage the caption window.  This 
  10160.         processing is managed by the Caption DLL. 
  10161.  
  10162.  (4)    When the user selects Stop, the Caption Sample Application issues an 
  10163.         MCI_STOP message to the audio device.  The application then issues the 
  10164.         ccSendCommand with a CC_STOP message, informing the Caption DLL to stop 
  10165.         displaying the caption window in the application. 
  10166.  
  10167.  (5)    When the user selects Settings from the Options pull-down menu of the 
  10168.         Caption Sample Application, several properties of the caption window 
  10169.         can be changed.  The application issues the ccSendCommand with a 
  10170.         CC_STATUS message to query the current properties of the caption 
  10171.         window.  When the user selects OK to save the desired properties, the 
  10172.         Caption Sample Application issues the ccSendCommand with a CC_SET 
  10173.         message to the Caption DLL.  The Caption DLL handles changing and 
  10174.         displaying the new properties of the caption window. 
  10175.  
  10176.  
  10177. ΓòÉΓòÉΓòÉ 17.9. Audio Recorder Sample ΓòÉΓòÉΓòÉ
  10178.  
  10179. The Audio Recorder Sample (RECORDER) illustrates the concept of recording audio 
  10180. through the media control interface and how to query a device to find out the 
  10181. recording capabilities.  The sample program also illustrates how to change the 
  10182. audio recording and audio device properties, such as bits per sample, samples 
  10183. per second, input level, and input source. 
  10184.  
  10185.  
  10186. ΓòÉΓòÉΓòÉ 17.9.1. Program Flow ΓòÉΓòÉΓòÉ
  10187.  
  10188. The following figure illustrates how the Audio Recorder Sample program 
  10189. interfaces with the Media Device Manager (MDM). Source code for the Audio 
  10190. Recorder Sample is located in the \TOOLKIT\SAMPLES\MM\RECORDER subdirectory. 
  10191.  
  10192.  
  10193.          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10194.          Γöé Audio RecorderΓöé
  10195.          Γöé    Sample     Γöé
  10196.          ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  10197.            (1)      (2)
  10198.                     
  10199.        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10200.        Γöé  Media Device   Γöé
  10201.        Γöé   Manager       Γöé
  10202.        ΓööΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  10203.        (1) (2)      (2)
  10204.                    
  10205.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10206.      ΓöéWave AudioΓöéΓöé Amp-MixerΓöé
  10207.      Γöé   MCD    ΓöéΓöé   MCD    Γöé
  10208.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10209.  
  10210.  (1)    Upon initialization, the Audio Recorder Sample program issues an 
  10211.         MCI_GETDEVCAPS command, with the MCI_GETDEVCAPS_EXTENDED flag set. The 
  10212.         Audio Recorder Sample uses the device capability information that is 
  10213.         returned to disable any options in the Audio Recorder Sample menus that 
  10214.         do not apply to the installed audio device. 
  10215.  
  10216.  (2)    When the user selects Record, the Audio Recorder Sample program checks 
  10217.         all of the menu settings and sets up the device accordingly.  The Audio 
  10218.         Recorder Sample issues an MCI_SET command to the Waveform Audio Media 
  10219.         Driver to set up the bits per sample, samples per second, and channels 
  10220.         of the recording.  The sample also issues an MCI_CONNECTOR command to 
  10221.         the Waveform Audio Media Driver to set up the input source. It gets the 
  10222.         device ID of the Amp-Mixer Media Driver and issues an MCI_SET command 
  10223.         to that device to set up monitor input and input level.  It also issues 
  10224.         an MCI_SET command to the Amp-Mixer Media Driver to set the input level 
  10225.         of the recording. Finally, the Audio Recorder Sample issues an 
  10226.         MCI_RECORD command to the waveaudio device to begin recording. 
  10227.  
  10228.  
  10229. ΓòÉΓòÉΓòÉ 17.10. Movie Sample ΓòÉΓòÉΓòÉ
  10230.  
  10231. The Movie Sample (MOVIE) demonstrates device control of a software motion video 
  10232. device. It also illustrates how to cut, copy, paste, and delete movie data from 
  10233. an application. A movie can be played in an application-defined window or in 
  10234. the system default window provided by the software motion video subsystem. The 
  10235. Movie Sample program uses the string interface to interact with the media 
  10236. control interface layer. 
  10237.  
  10238.  
  10239. ΓòÉΓòÉΓòÉ 17.10.1. Program Flow ΓòÉΓòÉΓòÉ
  10240.  
  10241. The following figure illustrates the interaction between the Movie Sample 
  10242. program and the Media Device Manager (MDM). Source code for the Movie Sample is 
  10243. located in the \TOOLKIT\SAMPLES\MM\MOVIE subdirectory. 
  10244.  
  10245.  
  10246.              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10247.              Γöé     Movie       Γö£ΓöÇΓöÇΓöÇΓöé    Initialize   Γöé
  10248.              Γöé     Sample      Γöé(1) Γöé      Open       Γöé
  10249.              Γöé                 Γöé    Γöé     Device      Γöé
  10250.              ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10251.   Application  (2)         (3) Default
  10252.     Window                   Window
  10253.              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10254.              Γöé     Media       Γöé
  10255.              Γöé     Device      Γöé
  10256.              Γöé    Manager      Γöé
  10257.              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10258.                     (4)
  10259.                      
  10260.              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10261.              Γöé     Digital     Γöé
  10262.              Γöé      Video      Γöé
  10263.              Γöé       MCD       Γöé
  10264.              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10265.  
  10266.  (1)    The Movie Sample creates a standard window with a style of 
  10267.         CS_MOVENOTIFY for the application window during initialization.  The 
  10268.         Movie Sample also initializes and loads a movie file into memory during 
  10269.         initialization time. 
  10270.  
  10271.  (2)    If the user chooses to play the movie in an application window, three 
  10272.         string commands are generated and sent to the digital video MCD. They 
  10273.         are window, load, and put. The following list describes these commands. 
  10274.  
  10275.         window           Specifies the characteristics of the 
  10276.                          application-defined window. 
  10277.  
  10278.                          Note:  When a window handle is selected with the 
  10279.                                 window command, the digital video MCD queries 
  10280.                                 the size and position of the window.  If the 
  10281.                                 window is visible, the digital video MCD alters 
  10282.                                 the size and position of the video accordingly. 
  10283.                                 However, if the window size and position is 
  10284.                                 changed while the window is hidden, the digital 
  10285.                                 video MCD does not note the new size and 
  10286.                                 position. 
  10287.  
  10288.         load             Loads the digital video file. 
  10289.  
  10290.         put              Places the movie in the application-defined window. 
  10291.  
  10292.         These commands (window, load, and put) must be issued in sequence to 
  10293.         play the movie in the application-defined window. 
  10294.  
  10295.  (3)    If the user chooses to play the movie in a default window, the load 
  10296.         command is generated and issued to the digital video MCD. 
  10297.  
  10298.  (4)    When the user selects Play, the Movie Sample program calls the digital 
  10299.         video MCD, through the Media Device Manager, to play the movie file. 
  10300.  
  10301.         If the user selects Edit, processing is passed to the EditTheMovie 
  10302.         procedure which loads the movie, and sets the data format to frames. It 
  10303.         copies the first 25 frames to the clipboard.  The 25 frames are pasted 
  10304.         four times to the end of the movie file (duplicating the first 25 
  10305.         frames four times). Next, the EditTheMovie procedure cuts the first 10 
  10306.         frames from the movie, seeks to the end of the movie, and pastes the 10 
  10307.         frames to the end.  The cut command deletes the specified number of 
  10308.         frames from the position the application specifies to start the cut. 
  10309.         Once the movie is edited, selecting Play causes the edited version of 
  10310.         the movie to play.  To play the original "unedited" movie file, exit 
  10311.         the Movie Sample program, restart it, and select Play. 
  10312.  
  10313.  
  10314. ΓòÉΓòÉΓòÉ 17.11. Asymmetric Recording Sample ΓòÉΓòÉΓòÉ
  10315.  
  10316. This sample (ASYMREC) illustrates how to include asymmetric recording function 
  10317. in your multimedia application.  Modules include source code extracted from the 
  10318. Video IN Recorder application, which enables frame-step recording using 
  10319. Ultimotion compression techniques. 
  10320.  
  10321. Frame-step recording captures the audio and video in a two-pass operation. 
  10322. First, it captures the audio in real-time.  It then returns to the point in the 
  10323. media where recording started to capture the video frame by frame. 
  10324.  
  10325.  
  10326. ΓòÉΓòÉΓòÉ 17.11.1. Source Code ΓòÉΓòÉΓòÉ
  10327.  
  10328. Source code for the asymmetric recording sample is located in the 
  10329. \TOOLKIT\SAMPLES\MM\ASYMREC subdirectory. 
  10330.  
  10331. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10332. ΓöéFile           ΓöéDescription                                  Γöé
  10333. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10334. ΓöéASYMREC.H      ΓöéIs the header file for the asymmetric        Γöé
  10335. Γöé               Γöérecording sample.  See this file for a       Γöé
  10336. Γöé               Γöécomplete description of the asymmetric       Γöé
  10337. Γöé               Γöérecorder data structures.                    Γöé
  10338. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10339. ΓöéASYMREC.C      ΓöéIs the sample program code for the asymmetricΓöé
  10340. Γöé               Γöérecording sample. It includes code for the   Γöé
  10341. Γöé               Γöéfollowing functions:                         Γöé
  10342. Γöé               ΓöéOpenMMIO  -  Opens and identifies the I/O    Γöé
  10343. Γöé               Γöéprocedure to install.                        Γöé
  10344. Γöé               ΓöéIdentifyIOProc  -  Loads and installs the    Γöé
  10345. Γöé               Γöéknown I/O procedure. It also, attempts to    Γöé
  10346. Γöé               Γöéopen the movie file using this I/O procedure.Γöé
  10347. Γöé               ΓöéAssociateCodec  -  Sends MMIOM_SET to        Γöé
  10348. Γöé               Γöéassociate the CODEC for later use in         Γöé
  10349. Γöé               Γöécompression.                                 Γöé
  10350. Γöé               ΓöéInitiateFrameStepRecord  -  Initializes the  Γöé
  10351. Γöé               Γöéenvironment for frame-step recording and     Γöé
  10352. Γöé               Γöéstarts a frame-step record thread.           Γöé
  10353. Γöé               ΓöéCompressBuffer  -  Calls the AVI I/O         Γöé
  10354. Γöé               Γöéprocedure and Ultimotion CODEC procedure to  Γöé
  10355. Γöé               Γöécompress a buffer.                           Γöé
  10356. Γöé               ΓöéStartVideoThread  -  Starts a recording      Γöé
  10357. Γöé               Γöéthread for doing the frame-step. Detailed    Γöé
  10358. Γöé               Γöéinformation about each function is provided  Γöé
  10359. Γöé               Γöéin the source code.                          Γöé
  10360. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10361.  
  10362.  
  10363. ΓòÉΓòÉΓòÉ 17.11.2. Real-Time Capture and Asymmetric Capture ΓòÉΓòÉΓòÉ
  10364.  
  10365. Typically, a stream is established to read a series of moving images from the 
  10366. device.  This continuous capture mode is called symmetric or real-time capture, 
  10367. and is performed at a constant frame rate and constant frame size.  When 
  10368. established, a stream captures images continuously without assistance from the 
  10369. application code.  However, video images can be captured one frame at a time 
  10370. when directed by the application.  This type of capture mode is referred to as 
  10371. asymmetric capture because the time between successive frames is not constant. 
  10372. The frame rate is determined by how long the application delays between taking 
  10373. image snapshots.  Asymmetric capture is performed with IOCtls only; the OS/2 
  10374. multimedia streaming mechanism is not used. 
  10375.  
  10376.  
  10377. ΓòÉΓòÉΓòÉ 17.11.3. Asymmetric Recording Architecture ΓòÉΓòÉΓòÉ
  10378.  
  10379. Several passes through the source data are required to produce an Ultimotion 
  10380. movie file. 
  10381.  
  10382. During the first pass, the capture routines position the video source device to 
  10383. the starting position in the source video.  It then uses OS/2 multimedia to 
  10384. record the desired audio track.  If the desired final format for the movie 
  10385. requires both audio and video to be interleaved, MULTITRACKWRITE interleaves 
  10386. them. 
  10387.  
  10388. During the second pass, capture routines use OS/2 multimedia to position the 
  10389. video source at the desired location.  For each frame in the movie, an MCI_STEP 
  10390. message is sent to the MCD controlling the source device.  When the resulting 
  10391. image has been "grabbed" or "digitized" by the capture hardware, the video data 
  10392. is retrieved and written to disk through the AVI I/O procedure. This process 
  10393. continues until the required video is captured. 
  10394.  
  10395. Note:  Only the second pass is used if you are recording video without audio. 
  10396.  
  10397.  The following figure illustrates the architecture of the components involved 
  10398.  in doing asymmetric capture and compression of video from frame accurate 
  10399.  devices. 
  10400.  
  10401.  
  10402.  
  10403.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10404.    Γöé Asymmetric Recorder ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                   Γöé
  10405.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                                Γöé                   Γöé
  10406.   ΓöîΓöÿ Γöé Media Control Interface Commands and Notifications Γöé                   Γöé
  10407.   ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  10408.   ΓöéΓöé Media Device Manager                                                    ΓöéΓöé
  10409.   ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé
  10410.   Γöé  .WAV data   Γöé                Γöé                Γöé                      ΓöîΓöÇΓöÇΓöÇΓöÿ
  10411.   Γöé ΓöîΓö¼Γö¼Γö¼Γö¼ΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÉ
  10412.   Γöé ΓööΓö┤Γö┤Γö┤Γö┤ΓöÿΓöÇΓöÇΓöñAmplifier MixerΓöé  ΓöéVideo DiscΓöé     ΓöéDigital Media Γöé    ΓöéAVI   Γö£ΓöÉ
  10413.   Γöé Γöé        ΓöéMedia Driver   Γöé  ΓöéDriver    Γöé     ΓöéDriver        Γöé  ΓöîΓöÇIOProcΓöéΓöé
  10414.   Γöé Γöé        ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ  Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé
  10415.   Γöé Γöé         Γöé           Γöé              Γöé               Γöé        Γöé    Γöé    Γöé
  10416.   Γöé Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓö¼Γö¼Γö¼Γö╝ΓöÉ   Γöé    Γöé
  10417.   Γöé Γöé  ΓöéAudio    Γöé   ΓöéSPI InterfacesΓöé Γöé Laser DiscΓöé ΓöéVSD   Γöé   ΓööΓö┤Γö┤Γö┤Γö┤Γöÿ   ΓööΓöÇΓöÇΓöÉ Γöé
  10418.   Γöé Γöé  ΓöéAdapter  Γöé   ΓöéSSM           Γöé Γöé           Γöé ΓöéDriverΓöé   uncompressedΓöé Γöé
  10419.   Γöé Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   video frame Γöé Γöé
  10420.   Γöé Γöé          audio data   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé              ΓöîΓöÇΓöÇΓöÿ Γöé
  10421.   Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓö¼Γö¼Γö¼Γö¼ΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  10422.   Γöé ΓööΓöÇ MMIOΓöéΓöÇΓööΓö┤Γö┤Γö┤Γö┤ΓöÿΓöÇ Multitrack     Γöé      Γöé     ΓöéVideo CaptureΓöé ΓöéCODEC  ΓöéΓöé
  10423.   Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé Stream Handler Γöé      Γöé     ΓöéPDD          Γöé Γöé       ΓöéΓöé
  10424.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé
  10425.                             Γöé                 Γöé          Γöé                   Γöé
  10426.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé
  10427.                       Γöé MMIO           Γöé      Γöé     ΓöéVideo AdapterΓöé          Γöé
  10428.                       Γöé Manager        Γöé      Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ          Γöé
  10429.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöîΓö¼Γö¼Γö¼Γö¼ΓöÉΓöÇΓöÇΓöÇΓöÇΓöÿ
  10430.                             Γöé                                     ΓööΓö┤Γö┤Γö┤Γö┤Γöÿ
  10431.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                           Compressed
  10432.                       Γöé AVI            Γöé                           Data
  10433.                       Γöé IOProc         Γöé
  10434.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10435.                             Γöé
  10436.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10437.                       Γöé Movie          Γöé
  10438.                       Γöé File           Γöé
  10439.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10440.  
  10441.  
  10442. ΓòÉΓòÉΓòÉ 17.11.4. MMMULTITRACKREAD Operations ΓòÉΓòÉΓòÉ
  10443.  
  10444. The MMMULTITRACKREAD structure contains the following parameters: 
  10445.  
  10446.      Pointer to the read buffer (pBuffer) 
  10447.      Length of the read buffer (ulLength) 
  10448.      Read flags (ulFlags) 
  10449.      Number of track entries or number of tracks (ulNumTracks) 
  10450.      Pointer to a track map list (pTrackMapList) 
  10451.      Actual buffer length available in MULTITRACKREAD extended mode 
  10452.       (ulBufferLength) 
  10453.  
  10454.  The track map list is a list of valid track numbers for the current file and 
  10455.  is used to map a track to a record table. Each track map list contains: 
  10456.  
  10457.      A track ID (ulTrackID) 
  10458.      The number of record entries (ulNumEntries) 
  10459.      A pointer to a record table (pRecordTabList) 
  10460.  
  10461.  Each element of the record table contains a pointer to (pBuffer) and the 
  10462.  length (ulLength) of the corresponding data in the buffer. 
  10463.  
  10464.  For example, if the number of track entries is two, the track map list will 
  10465.  contain two track map tables, one for each track.  There is a corresponding 
  10466.  record table for each track.  The number of entries in the track map table for 
  10467.  each track is the number of entires in the record table for a particular 
  10468.  track. The following figure illustrates the multitrack read data structure. 
  10469.  
  10470.  
  10471.     MMMULTITRACKREAD
  10472.                                                   pBuffer
  10473.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10474.   Γöé ulLength      Γö£ΓöÇΓöÿ  TRACKMAP         RECORDTAB             Γöé
  10475.   Γöé pBuffer       Γöé    TABLE                  AUDIO           Γöé
  10476.   Γöé ulFlags       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöÉ
  10477.   Γöé ulNumTracks   Γöé  Γöé ulTrackID     Γöé  Γöé pRecord  1 Γö£ΓöÇΓöÇΓöÇΓöÇ Audio  Γöé Γöé
  10478.   Γöé pTrackMapList Γö£ΓöÇΓöÇ ulNumEntries  Γö£ΓöÇΓöÇ ulLength   Γöé    Γöé Data 1 Γöé Γöé
  10479.   Γöé               Γöé  Γöé pRecordTabListΓöé  Γöé ulParm1    Γöé    Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10480.   Γöé               Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé ulParm2    Γöé ΓöîΓöÇΓöÇ Video  Γöé Γöé
  10481.   Γöé ulBufferLengthΓöé  Γöé ulTrackID     Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé  Γöé Data 1 Γöé Γöé
  10482.   Γöé(extended mode)Γöé  Γöé ulNumEntries  Γö£ΓöÉ Γöé .        2 Γöé Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10483.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé pRecordTabListΓöéΓöé Γöé .          Γö£ΓöÇΓö╝ΓöÇΓöÇ Audio  Γöé Γöé
  10484.                      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓöé Γöé .          Γöé Γöé  Γöé Data 2 Γöé Γöé
  10485.                      Γöé .             ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10486.                      Γöé .             ΓöéΓöé RECORDTAB      Γöé  Γöé Video  Γöé Γöé
  10487.                      Γöé .             ΓöéΓöé       VIDEO    ΓöéΓöîΓöÇ Data 2 Γöé Γöé ulLength
  10488.                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöéΓöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10489.                                       Γöé Γöé pRecord  1 Γöé ΓöéΓöé Γöé .      Γöé Γöé
  10490.                                       ΓööΓöÇ ulLength   Γö£ΓöÇΓöÿΓöé Γöé .      Γöé Γöé
  10491.                                         Γöé ulParm1    Γöé  Γöé Γöé .      Γöé Γöé
  10492.                                         Γöé ulParm2    Γöé  Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10493.                                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé Γöé        Γöé Γöé
  10494.                                         Γöé .        2 Γö£ΓöÇΓöÇΓöÿ Γöé        Γöé Γöé
  10495.                                         Γöé .          Γöé    Γöé        Γöé Γöé
  10496.                                         Γöé .          Γöé    Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10497.                                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé        Γöé Γöé
  10498.                                                           Γöé        Γöé Γöé
  10499.                                                           Γöé        Γöé Γöé
  10500.   MMMULTITRACKREAD                       pBuffer          Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10501.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé        Γöé Γöé
  10502.   Γöé ulLength      Γö£ΓöÇΓöÿ  TRACKMAP         RECORDTAB      Γöé  Γöé        Γöé Γöé
  10503.   Γöé pBuffer       Γöé    TABLE                  AUDIO    Γöé  Γöé        Γöé Γöÿ
  10504.   Γöé ulFlags       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓööΓöÇΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ ΓöÉ
  10505.   Γöé ulNumTracks   Γöé  Γöé ulTrackID     Γöé  Γöé pRecord  1 Γö£ΓöÇΓöÇΓöÇΓöÇ Audio  Γöé Γöé
  10506.   Γöé pTrackMapList Γö£ΓöÇΓöÇ ulNumEntries  Γö£ΓöÇΓöÇ ulLength   Γöé    Γöé Data 1 Γöé Γöé
  10507.   Γöé               Γöé  Γöé pRecordTabListΓöé  Γöé ulParm1    Γöé    Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10508.   Γöé               Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé ulParm2    Γöé ΓöîΓöÇΓöÇ Video  Γöé Γöé
  10509.   Γöé ulBufferLengthΓöé  Γöé ulTrackID     Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé  Γöé Data 1 Γöé Γöé
  10510.   Γöé(extended mode)Γöé  Γöé ulNumEntries  Γö£ΓöÉ Γöé .        2 Γöé Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé ulLength
  10511.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé pRecordTabListΓöéΓöé Γöé .          Γö£ΓöÇΓö╝ΓöÇΓöÇ Audio  Γöé Γöé
  10512.                      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓöé Γöé .          Γöé Γöé  Γöé Data 2 Γöé Γöé
  10513.                      Γöé .             ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10514.                      Γöé .             ΓöéΓöé RECORDTAB      Γöé  Γöé Video  Γöé Γöé
  10515.                      Γöé .             ΓöéΓöé       VIDEO    ΓöéΓöîΓöÇ Data 2 Γöé Γöé
  10516.                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöéΓöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10517.                                       Γöé Γöé pRecord  1 Γöé ΓöéΓöé Γöé .      Γöé Γöé
  10518.                                       ΓööΓöÇ ulLength   Γö£ΓöÇΓöÿΓöé Γöé .      Γöé Γöé
  10519.                                         Γöé ulParm1    Γöé  Γöé Γöé .      Γöé Γöé
  10520.                                         Γöé ulParm2    Γöé  Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöÿ
  10521.                                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  10522.                                         Γöé .        2 Γö£ΓöÇΓöÇΓöÿ
  10523.                                         Γöé .          Γöé
  10524.                                         Γöé .          Γöé
  10525.                                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10526.  
  10527.  
  10528. ΓòÉΓòÉΓòÉ 17.11.5. Multitrack Reading ΓòÉΓòÉΓòÉ
  10529.  
  10530. MULTITRACKREAD is supplied an empty buffer.  The size is determined by 
  10531. ulLength, and it is pointed to by pBuffer.  MULTITRACKREAD processes the data 
  10532. by reading ulLength bytes of data into the buffer, and then parsing the data in 
  10533. the buffer by media type (audio or video) into records. A pointer to the data 
  10534. in the buffer is placed in the appropriate record table. 
  10535.  
  10536. Note:  A record is a contiguous buffer containing data of the same media type. 
  10537.  
  10538.  During the processing of MULTITRACKREAD in extended mode, pBuffer points to 
  10539.  the beginning of the buffer on the first call to MULTITRACKREAD and ulLength 
  10540.  indicates the number of bytes to be read into the buffer. With each call to 
  10541.  MULTITRACKREAD, ulBufferLength (the actual total buffer length) is reduced by 
  10542.  ulLength bytes, and pBuffer points to the current location in the buffer. 
  10543.  Subsequent calls to MULTITRACKREAD reads ulLength bytes of data into the 
  10544.  buffer starting at pBuffer and repeats the process until ulBufferLength is 
  10545.  reached. 
  10546.  
  10547.  This implementation of MULTITRACKREAD allows smaller amounts of data to be 
  10548.  read at one time while allowing frames greater than the ulLength of the read. 
  10549.  For example, if the program wanted to fill a 128KB buffer while doing 32KB 
  10550.  reads, the calling sequence to MULTITRACKREAD would be (32KB, 128KB), (32KB, 
  10551.  96KB), (32KB, 64KB), and (32KB, 32KB) for (ulLength, ulBufferLength). With 
  10552.  this setup, MULTITRACKREAD can span frames across the 32KB buffers and know 
  10553.  the size of the 128KB buffer. 
  10554.  
  10555.  During MULTITRACKREAD processing in regular mode, pBuffer always points to the 
  10556.  beginning of the buffer and ulLength indicates the number of bytes to be read 
  10557.  into the buffer. The buffer is filled completely with each call to 
  10558.  MULTITRACKREAD and subsequent calls, to MULTITRACKREAD, read ulLength bytes of 
  10559.  data into the buffer starting at the beginning of the buffer (pointed to by 
  10560.  pBuffer). 
  10561.  
  10562.  Note:  If the MULTITRACKREAD_EXTENDED bit flag is set, the calling routine has 
  10563.         passed the extended MMMULTITRACKREAD structure with the new 
  10564.         ulBufferLength field in this structure. 
  10565.  
  10566.  
  10567. ΓòÉΓòÉΓòÉ 17.11.6. MMMULTITRACKWRITE Operations ΓòÉΓòÉΓòÉ
  10568.  
  10569. The MMMULTITRACKWRITE structure contains the following parameters: 
  10570.  
  10571.      Number of tracks (ulNumTracks) 
  10572.      A pointer to a track map list (pTrackMapList) 
  10573.      Read flags (ulFlags) 
  10574.  
  10575.  The track map list is a list of valid track numbers for the current file and 
  10576.  is used to map a track for a record table.  Each track map list contains: 
  10577.  
  10578.      A track ID (ulTrackID) 
  10579.      Number of record entries (ulNumEntries) 
  10580.      A pointer to a record table (pRecordTabList) 
  10581.  
  10582.  Each element of the record table contains a pointer (pRecord) to and the 
  10583.  length (ulLength) of the corresponding data in the buffer. 
  10584.  
  10585.  For example, if the number of track entries is two, the track map list 
  10586.  contains two track map tables, one for each track. There is a corresponding 
  10587.  write record table for each track.  The number of entries in the track map 
  10588.  table for each track is the number of entries in the write record table for a 
  10589.  particular track. 
  10590.  
  10591.  Note:  A record is a contiguous buffer containing data of the same media type. 
  10592.  
  10593.  The following figure illustrates the multitrack write data structure. 
  10594.  
  10595.  
  10596.      MMMULTITRACKWRITE
  10597.  
  10598.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10599.    Γöé ulNumtracks   Γö£ΓöÇΓöÿ  TRACKMAP         RECORDTAB             Γöé
  10600.    Γöé pTrackMapList Γöé    TABLE                  AUDIO           Γöé
  10601.    Γöé ulFlags       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10602.    Γöé ulNumTracks   Γöé  Γöé ulTrackID     Γöé  Γöé pRecord  1 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Audio  Γöé
  10603.    Γöé               Γö£ΓöÇΓöÇ ulNumEntries  Γö£ΓöÇΓöÇ ulLength   Γöé     Γöé Data 1 Γöé
  10604.    Γöé               Γöé  Γöé pRecordTabListΓöé  Γöé ulParm1    Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10605.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé ulParm2    Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10606.                       Γöé ulTrackID     Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé Audio  Γöé
  10607.                       Γöé ulNumEntries  Γö£ΓöÉ Γöé .        2 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Data 2 Γöé
  10608.                       Γöé pRecordTabListΓöéΓöé Γöé .          Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10609.                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓöé Γöé .          Γöé
  10610.                       Γöé .             ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10611.                       Γöé .             ΓöéΓöé
  10612.                       Γöé .             ΓöéΓöé
  10613.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10614.                                        Γöé Γöé pRecord  1 Γöé     Γöé Video  Γöé
  10615.                                        ΓööΓöÇ ulLength   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Data 1 Γöé
  10616.                                          Γöé ulParm1    Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10617.                                          Γöé ulParm2    Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10618.                                          Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé Video  Γöé
  10619.                                          Γöé .        2 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Data 2 Γöé
  10620.                                          Γöé .          Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10621.                                          Γöé .          Γöé
  10622.                                          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10623.  
  10624.  
  10625. ΓòÉΓòÉΓòÉ 17.11.7. Multitrack Writing ΓòÉΓòÉΓòÉ
  10626.  
  10627. MULTITRACKWRITE provides a list of records by media type and processes the data 
  10628. by using the pointers in the write record table to locate the data in the 
  10629. buffers and write the data to the file. 
  10630.  
  10631. If the MULTITRACKWRITE_MERGE bit flag is not set, MULTITRACKWRITE writes all of 
  10632. the records sequentially from the first entry in the track map table (for the 
  10633. first track) followed by all records for the second track. 
  10634.  
  10635. If the MULTITRACKWRITE_MERGE bit flag is set, MULTITRACKWRITE attempts to 
  10636. interleave the digitalvideo track with the digitalaudio track.  Interleaving is 
  10637. accomplished based on the size of the audio buffer.  For example, if a 4KB 
  10638. audio buffer represents one-third of a second and the frame rate is 15 frames 
  10639. per second, the interleave factor would be 5:1 (5 video frames to 1 audio 
  10640. chunk). 
  10641.  
  10642.  
  10643. ΓòÉΓòÉΓòÉ 17.12. DIVE Sample ΓòÉΓòÉΓòÉ
  10644.  
  10645. The DIVE Sample illustrates the use of direct interface video extensions 
  10646. (DIVE), which enables OS/2 programmers to perform high-speed blitting in the 
  10647. context of the PM desktop. These functions are designed to operate in a 
  10648. software-only environment and also take advantage of acceleration hardware when 
  10649. it is available. 
  10650.  
  10651. Using DIVE, the sample program blits a series of 16 compressed 256-color bit 
  10652. maps to the screen. For more information on how to use the DIVE functions 
  10653. included in this sample program, see Direct Interface Video Extensions (DIVE). 
  10654.  
  10655.  
  10656. ΓòÉΓòÉΓòÉ 17.13. Image Browser Sample ΓòÉΓòÉΓòÉ
  10657.  
  10658. The Image Browser Sample (MMBROWSE) illustrates how to use the multimedia I/O 
  10659. subsystem (MMIO) to install I/O procedures for various image formats and then 
  10660. convert these image formats to any of the supported image formats. 
  10661.  
  10662. This sample demonstrates the various ways to install an I/O procedure: 
  10663.  
  10664.      On a temporary basis for an individual file. 
  10665.      On a semi-permanent basis for the duration of a process. 
  10666.      On a permanent basis for use by any process in the system. 
  10667.  
  10668.  To install an I/O procedure, you must know its four-character code. For more 
  10669.  information on how to use the functions included in this sample program, see 
  10670.  Multimedia I/O File Services. 
  10671.  
  10672.  
  10673. ΓòÉΓòÉΓòÉ 17.14. MCISpy Sample ΓòÉΓòÉΓòÉ
  10674.  
  10675. The MCISpy Sample (MCISPY) monitors media control interface messages that are 
  10676. exchanged between applications and the OS/2 multimedia subsystem. In addition 
  10677. to teaching you about multimedia messages, MCISpy also serves as a debugging 
  10678. aid. 
  10679.  
  10680. To begin monitoring messages and saving them in a log file: 
  10681.  
  10682.    1. Start MCISpy. 
  10683.    2. Select LogFile from the MCISpy menu bar. 
  10684.    3. Select Enable Message Logging. 
  10685.    4. Start the multimedia application you want to monitor. 
  10686.  
  10687.  As you interact with the application, information is displayed in the MCISpy 
  10688.  window and written to the default log file MCISPY.LOG. MCISpy monitors both 
  10689.  the string interface and the command message interface. 
  10690.  
  10691.  For the command message interface, the information consists of: 
  10692.  
  10693.      Originating process ID (PID) 
  10694.      Device ID 
  10695.      Message name 
  10696.      Message flag value 
  10697.      User parameter 
  10698.      Data 
  10699.  For the string interface, the information consists of the PID and the string 
  10700.  input. 
  10701.  
  10702.  To specify a log file other than the default log file, select Open. Use the 
  10703.  Edit functions to manage the contents of the log file. 
  10704.  
  10705.  The View menu provides views of useful information. The Installed Devices view 
  10706.  lists the logical and physical device names and product information for each 
  10707.  installed multimedia device. The MCI Flag Values view shows you the text 
  10708.  string equivalents for the hexadecimal flag values that accompany the messages 
  10709.  displayed by MCISpy during the monitoring process. 
  10710.  
  10711.  The Filter menu offers a variety of filters for the messages that are 
  10712.  displayed in the log file. You can filter the messages by: 
  10713.  
  10714.      Selecting the message names you want to see. 
  10715.  
  10716.      Selecting the device type or open device ID of the device whose messages 
  10717.       you want to see. 
  10718.  
  10719.      Disabling input from mciSendCommand, mciSendString or mdmDriverNotify 
  10720.       functions. This choice takes precedence over any other filters in effect. 
  10721.  
  10722.  Initially no filters are in effect and therefore all messages are displayed. 
  10723.  
  10724.  
  10725. ΓòÉΓòÉΓòÉ 17.14.1. Program Flow ΓòÉΓòÉΓòÉ
  10726.  
  10727. The following diagram depicts the MCISpy application implementation model. The 
  10728. stub or proxy DLL replaces the true MDM.DLL, which is renamed to MCI.DLL. The 
  10729. proxy MDM exports the same APIs at the same ordinals as the true MDM. The proxy 
  10730. MDM has forwarder entries into the MCI.DLL for the API workers. That is, the 
  10731. proxy exports and also imports the same APIs from the true MDM. 
  10732.  
  10733.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10734.                   Γöé Shared Memory  Γöé
  10735.                   Γöé  (Named)       Γöé
  10736.                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10737.  Exported APIs    Γöé                Γöé                     Γöé True MDM     Γöé
  10738.                   Γöé Stub or        Γöé                     Γöé containing   Γöé
  10739.  mciSendCommand() Γöé Proxy          Γöé Forwarder entry     Γöé the API      Γöé
  10740.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ MDM.DLL        Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöñ workers is   Γöé
  10741.  mciSendString()  Γöé                Γöé Forwarder entry     Γöé renamed to   Γöé
  10742.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Maintain Open  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöñ MCI.DLL.     Γöé
  10743.  mdmDriverNotify()Γöé Device Ids     Γöé Forwarder entry     Γöé              Γöé
  10744.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöñ              Γöé
  10745.                   Γöé Notify Spy     Γöé                     Γöé              Γöé
  10746.                   Γöé Application    Γöé                     Γöé              Γöé
  10747.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10748.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10749.                   Γöé Shared Memory  Γöé
  10750.                   Γöé  (Named)       Γöé
  10751.                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10752.                   Γöé MCISpy         Γöé
  10753.                   Γöé Sample Program Γöé
  10754.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10755.  
  10756.  
  10757. ΓòÉΓòÉΓòÉ 17.15. Non-Linear Video Sample ΓòÉΓòÉΓòÉ
  10758.  
  10759. The Non-Linear Video Sample (ULITEYES) demonstrates the use of non-linear video 
  10760. by displaying segments from a movie clip in response to input from the mouse. 
  10761. Whenever the mouse changes position, ULTIEYES calculates the angle of the mouse 
  10762. pointer to the center of the ULTIEYES video window. It then displays a frame 
  10763. from the movie ULTIEYES.AVI that corresponds to the position of the mouse 
  10764. pointer. As the mouse pointer is moved around the desk top, the eyes shown in 
  10765. the video window appear to follow the mouse. The movie file also contains 
  10766. segments of the eyes winking and blinking. ULTIEYES shows these segments when 
  10767. it detects a mouse button 1 click on the left side, center or right side of the 
  10768. video window. 
  10769.  
  10770.  
  10771. ΓòÉΓòÉΓòÉ 17.15.1. Creating a Movie Clip ΓòÉΓòÉΓòÉ
  10772.  
  10773. If you have Video IN and one of the supported video capture cards, you can 
  10774. easily replace ULTIEYES.AVI with a movie clip of your own eyes. Make the 
  10775. following settings in the Video IN Recorder setup notebook before you record 
  10776. the movie: 
  10777.  
  10778.    1. Set the reference frame rate to 1. 
  10779.    2. Set the audio to Record no audio. 
  10780.  
  10781.  After you record the movie, you are ready to select the frames ULTIEYES 
  10782.  program will display when the mouse pointer is at various positions in 
  10783.  relation to ULTIEYES: East, East by Northeast, Northeast, and so on. 
  10784.  
  10785.    1. Set the time format of the Video IN Recorder to frames. 
  10786.    2. Step through the movie frame by frame. 
  10787.    3. Jot down the frame number for each position on the compass. Also note the 
  10788.       beginning and ending frames of the segments for the left and right winks 
  10789.       and the blink. (Note that video segments must be at least one second in 
  10790.       length.) 
  10791.    4. Create an ASCII file that contains 25 lines in the following format: 
  10792.           The first line in the file is the name of the AVI movie file. 
  10793.  
  10794.           The next 24 lines comprise the frame number table (0-23). A 
  10795.            description of the table contents is shown in the following figure. 
  10796.            Letter characters on each line indicate the direction of the gaze 
  10797.            associated with that particular line number. For example, in the 
  10798.            frame on line 12 the eyes should be gazing south by southwest. To 
  10799.            see what an actual frame table looks like, open the ULTIEYES.EYE 
  10800.            file. 
  10801.  
  10802.    0      - Eyes turned inward frame.
  10803.    1      - E
  10804.    2      - ENE
  10805.    3      - NE
  10806.    4      - NNE
  10807.    5      - N
  10808.    6      - NNW
  10809.    7      - NW
  10810.    8      - WNW
  10811.    9      - W
  10812.   10      - WSW
  10813.   11      - SW
  10814.   12      - SSW
  10815.   13      - S
  10816.   14      - SSE
  10817.   15      - SE
  10818.   16      - ESE
  10819.   17      - E (again)
  10820.   18-19   - Right-eye wink sequence (left side of video)
  10821.   20-21   - Left-eye wink sequence (right side of video)
  10822.   22-23   - Blink sequence
  10823.  
  10824.  To start your ULTIEYES version, enter: 
  10825.  
  10826.   ULTIEYES filename
  10827.  where filename is the name of the ASCII file you created. 
  10828.  
  10829.  
  10830. ΓòÉΓòÉΓòÉ 18. Installing a Program Using MINSTALL ΓòÉΓòÉΓòÉ
  10831.  
  10832. This section describes the procedures for preparing control files for 
  10833. installing a multimedia application using the multimedia installation program 
  10834. (MINSTALL). 
  10835.  
  10836. The MINSTALL program utilizes features provided by the OS/2 multimedia 
  10837. installation engine, such as creating workplace shell objects and changing the 
  10838. CONFIG.SYS file, providing a consistent installation process. 
  10839.  
  10840. Note:  For installation requirements when writing a subsystem, refer to the 
  10841.        OS/2 Multimedia Subsystem Programming Guide. 
  10842.  
  10843.  
  10844. ΓòÉΓòÉΓòÉ 18.1. Installation Overview ΓòÉΓòÉΓòÉ
  10845.  
  10846. The MINSTALL program (MINSTALL.EXE) requires specific file information to 
  10847. install each program.  This file information is provided by the master control 
  10848. file CONTROL.SCR. 
  10849.  
  10850. The master control file, CONTROL.SCR, tells the installation program what to 
  10851. install, where to install it, how to display it to the user, and what system 
  10852. files need to be updated.  CONTROL.SCR uses keywords to specify these 
  10853. instructions to MINSTALL.  (See Master Control File.) 
  10854.  
  10855. The following important keywords used in CONTROL.SCR specify subsequent control 
  10856. files that list the installation files, create necessary entries in the 
  10857. initialization file, and add appropriate lines in the CONFIG.SYS file: 
  10858.  
  10859.      The keyword FILELIST specifies the name of the file list control file, 
  10860.       which lists all the files in the installation package.  (See File List 
  10861.       Control File.) 
  10862.  
  10863.      The keyword SSINICH identifies a control file that is used to define 
  10864.       folders and programs. 
  10865.  
  10866.      The keyword SSCONFIGCH identifies a control file that contains all the 
  10867.       changes to be made to the CONFIG.SYS file for a particular installable 
  10868.       item or subsystem. 
  10869.  
  10870.  For each installation, an error log called MINSTALL.LOG is created.  If a 
  10871.  problem occurs during installation, the problem is recorded in the error log 
  10872.  and might also be displayed on the screen.  You can read the log for more 
  10873.  information about the error. 
  10874.  
  10875.  
  10876. ΓòÉΓòÉΓòÉ 18.2. Master Control File ΓòÉΓòÉΓòÉ
  10877.  
  10878. The master control file, CONTROL.SCR, contains information about each 
  10879. installable feature.  It identifies specific file information that MINSTALL 
  10880. requires to install the requested features.  This control file must be named 
  10881. CONTROL.SCR and must reside on the first media unit (diskette or CD) of the 
  10882. installation package. 
  10883.  
  10884. During installation, if any errors are detected in the master control file, the 
  10885. main installation selection window will be empty and the errors will be logged 
  10886. in the error log MINSTALL.LOG.  You can access this file for information about 
  10887. the errors. 
  10888.  
  10889. The CONTROL.SCR file consists of a header section and a subsystem definition 
  10890. section.  The header section comes first and provides general information for 
  10891. the installation procedure.  The subsystem definition section comes next and 
  10892. provides information about the features in the installation package. 
  10893.  
  10894.  
  10895. ΓòÉΓòÉΓòÉ 18.2.1. CONTROL.SCR Header ΓòÉΓòÉΓòÉ
  10896.  
  10897. The header section of the CONTROL.SCR file contains the following information: 
  10898.  
  10899.      Name of the installation package 
  10900.      Code page used when creating the file 
  10901.      Name of the file list control file 
  10902.      Number of features in the installation package 
  10903.      Number of media units required for installation 
  10904.      Names of the media units required for installation 
  10905.      Source and destination directory names (optional) 
  10906.  
  10907.  The following is an example of the CONTROL.SCR header located in the 
  10908.  \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory. 
  10909.  
  10910.   package="IBM Multimedia Presentation Manager Toolkit/2"
  10911.   codepage=437
  10912.   filelist="filelist.tk2"
  10913.   groupcount=2
  10914.   munitcount=1
  10915.   medianame="IBM Multimedia Presentation Manager Toolkit/2 Installation
  10916.             Diskette 1"
  10917.  
  10918.   sourcedir = "\\"                               = 4
  10919.   sourcedir = "\\MCISTRNG\\"                     = 11
  10920.  
  10921.   destindir = "\\MMOS2\\"                                = 0
  10922.   destindir = "\\MMOS2\\INSTALL\\"                       = 4
  10923.   destindir = "\\MMOS2\\MMTOOLKT\\SAMPLES\\MCISTRNG\\"   = 11
  10924.  
  10925.  A larger and more complex example of installing multiple items using MINSTALL 
  10926.  is located in the \TOOLKIT\SAMPLES\MM\CF subdirectory. 
  10927.  
  10928.  The following table describes the keywords used in the CONTROL.SCR header. 
  10929.  
  10930.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10931.   ΓöéKeyword         ΓöéDescription                                 Γöé
  10932.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10933.   ΓöéPACKAGE         ΓöéThis required keyword specifies the name of Γöé
  10934.   Γöé                Γöéthe installation package in the form of a   Γöé
  10935.   Γöé                Γöéquoted string.  For example:                Γöé
  10936.   Γöé                ΓöéPACKAGE="IBM Multimedia Presentation ManagerΓöé
  10937.   Γöé                ΓöéToolkit/2"                                  Γöé
  10938.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10939.   ΓöéCODEPAGE        ΓöéThis required keyword specifies the code    Γöé
  10940.   Γöé                Γöépage that the file was created under.  For  Γöé
  10941.   Γöé                Γöéexample:                                    Γöé
  10942.   Γöé                ΓöéCODEPAGE = 437                              Γöé
  10943.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10944.   ΓöéFILELIST        ΓöéThis required keyword specifies the name of Γöé
  10945.   Γöé                Γöéthe file list control file. This control    Γöé
  10946.   Γöé                Γöéfile contains a list of files that make up  Γöé
  10947.   Γöé                Γöéeach subsystem, identifies on which media   Γöé
  10948.   Γöé                Γöéunits they reside in the installation       Γöé
  10949.   Γöé                Γöépackage, and specifies the destination to   Γöé
  10950.   Γöé                Γöéwhich they will be copied.  For example:    Γöé
  10951.   Γöé                ΓöéFILELIST = "FILELIST.TK2"                   Γöé
  10952.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10953.   ΓöéGROUPCOUNT      ΓöéThis required keyword specifies the number  Γöé
  10954.   Γöé                Γöéof subsystems in the installation package.  Γöé
  10955.   Γöé                ΓöéAll groups are counted, including group 0   Γöé
  10956.   Γöé                Γöé(if present).  For example:                 Γöé
  10957.   Γöé                ΓöéGROUPCOUNT = 2                              Γöé
  10958.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10959.   ΓöéMUNITCOUNT      ΓöéThis required keyword specifies the number  Γöé
  10960.   Γöé                Γöéof media units (diskettes, CDs) that will beΓöé
  10961.   Γöé                Γöéused if all features are installed.  This   Γöé
  10962.   Γöé                Γöénumber must be greater than 0.  This is the Γöé
  10963.   Γöé                Γöénumber of diskettes or CDs on which the     Γöé
  10964.   Γöé                Γöéinstallation package resides.  For example: Γöé
  10965.   Γöé                ΓöéMUNITCOUNT = 1                              Γöé
  10966.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10967.   ΓöéMEDIANAME       ΓöéThis required keyword specifies a unique    Γöé
  10968.   Γöé                Γöémedia name, which is a character string on  Γöé
  10969.   Γöé                Γöéthe diskette or CD label.  For each media   Γöé
  10970.   Γöé                Γöéunit, this keyword must be repeated once, inΓöé
  10971.   Γöé                Γöéthe form of a quoted string.  This          Γöé
  10972.   Γöé                Γöéinformation is used during installation to  Γöé
  10973.   Γöé                Γöéprompt the user to insert a diskette or CD  Γöé
  10974.   Γöé                Γöéwhen needed.  For example:                  Γöé
  10975.   Γöé                ΓöéMEDIANAME = "IBM Multimedia Presentation    Γöé
  10976.   Γöé                ΓöéManager Toolkit/2             Installation  Γöé
  10977.   Γöé                ΓöéDiskette 1"                                 Γöé
  10978.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10979.   ΓöéSOURCEDIR       ΓöéThis optional keyword specifies the name of Γöé
  10980.   Γöé                Γöéa source directory and its associated       Γöé
  10981.   Γöé                Γöénumber.  This keyword can be repeated and isΓöé
  10982.   Γöé                Γöéspecified by a quoted string followed by an Γöé
  10983.   Γöé                Γöéequal sign (=) and a number.  The number is Γöé
  10984.   Γöé                Γöéused to identify the particular directory inΓöé
  10985.   Γöé                Γöélater scripts.  This can be NULL, in which  Γöé
  10986.   Γöé                Γöécase two default backslash characters (\\)  Γöé
  10987.   Γöé                Γöéare used with an encoding of 0.  The path   Γöé
  10988.   Γöé                Γöémust be surrounded by path separators.  For Γöé
  10989.   Γöé                Γöéexample:                                    Γöé
  10990.   Γöé                ΓöéSOURCEDIR="\\LIB\\" = 1                     Γöé
  10991.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10992.   ΓöéDESTINDIR       ΓöéThis optional keyword specifies the         Γöé
  10993.   Γöé                Γöédestination directory and its encodings.    Γöé
  10994.   Γöé                ΓöéThis keyword can be repeated and can be     Γöé
  10995.   Γöé                ΓöéNULL, in which case the default is the      Γöé
  10996.   Γöé                Γöé\MMOS2 subdirectory.  The path must be      Γöé
  10997.   Γöé                Γöésurrounded by path separators and any       Γöé
  10998.   Γöé                Γöédirectory that does not exist will be       Γöé
  10999.   Γöé                Γöécreated. For example:                       Γöé
  11000.   Γöé                ΓöéDESTINDIR = "\\MMOS2\\" = 0                 Γöé
  11001.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11002.  
  11003.  Observe the following guidelines when you create or change a CONTROL.SCR 
  11004.  header: 
  11005.  
  11006.      You must place the keywords MUNITCOUNT and MEDIANAME so that MUNITCOUNT 
  11007.       comes directly before MEDIANAME.  The order of the other keywords is not 
  11008.       significant. 
  11009.  
  11010.      The destination directory (DESTINDIR) must have a unique number. 
  11011.  
  11012.      A subsystem group can be spread across several media units.  It does not 
  11013.       have to reside on one media unit. 
  11014.  
  11015.      A subsystem can define any directory.  MINSTALL will create any 
  11016.       subdirectories defined with the DESTINDIR keyword that do not exist. 
  11017.  
  11018.      If you move the installation package files to media of a different size, 
  11019.       the number of media units ( MEDIACOUNT) might change. 
  11020.  
  11021.      You may use comments in the header section in the form of blank lines or 
  11022.       text enclosed with "/* and */".  You may not use nested comments. 
  11023.  
  11024.      You may use blank spaces around the equal sign; blank spaces are ignored. 
  11025.  
  11026.      If you want to use a double quotation mark or a backslash in a string, 
  11027.       you must precede it with the escape character (\). 
  11028.  
  11029.      You may use the escape sequence \n (new line). 
  11030.  
  11031.  
  11032. ΓòÉΓòÉΓòÉ 18.2.2. CONTROL.SCR Subsystem Definition ΓòÉΓòÉΓòÉ
  11033.  
  11034. The subsystem definition section of the CONTROL.SCR file follows the header 
  11035. section and contains the definitions for all the installable items in the 
  11036. installation package.  A block of information must be included for each 
  11037. subsystem. 
  11038.  
  11039. The subsystem definition section contains the following information: 
  11040.  
  11041.      The group or item number 
  11042.      The item name 
  11043.      The version of the item 
  11044.      The size of all the files for the item installation 
  11045.      The names of the control files that change the MMPM2.INI and CONFIG.SYS 
  11046.       files 
  11047.      The names of installation DLL files and entry points 
  11048.  
  11049.  The following is an example of a CONTROL.SCR subsystem definition. 
  11050.  
  11051.   ssgroup=0              /*  base group */
  11052.   sssize=41
  11053.   ssname="mmbase"
  11054.   ssversion="1.0.9"
  11055.   ssinich="TLKBASE.SCR"
  11056.  
  11057.   /*           - 11 = mcistrng */
  11058.   ssgroup=11
  11059.   ssname="Media Control Interface String Test"
  11060.   ssversion="1.0.9"
  11061.   sssize=200
  11062.   ssinich="TLKSTRN.SCR"
  11063.   ssicon="mcistrng.ico"
  11064.  
  11065.  The CONTROL.SCR subsystem definition consists of the following keywords. 
  11066.  
  11067.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11068.   ΓöéKeyword             ΓöéDescription                             Γöé
  11069.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11070.   ΓöéSSGROUP             ΓöéThis required keyword specifies the     Γöé
  11071.   Γöé                    Γöégroup or item number.  This marks the   Γöé
  11072.   Γöé                    Γöébeginning of a group for this item and  Γöé
  11073.   Γöé                    Γöéassigns it a number. Each item must haveΓöé
  11074.   Γöé                    Γöéa unique number from 0-49 within the    Γöé
  11075.   Γöé                    Γöépackage; however, the same number can beΓöé
  11076.   Γöé                    Γöéused with different installation        Γöé
  11077.   Γöé                    Γöépackages.  The groups are displayed in  Γöé
  11078.   Γöé                    Γöéthe installation main selection window  Γöé
  11079.   Γöé                    Γöéin ascending order by group number.  ForΓöé
  11080.   Γöé                    Γöéexample:                                Γöé
  11081.   Γöé                    ΓöéSSGROUP = 11                            Γöé
  11082.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11083.   ΓöéSSNAME              ΓöéThis required keyword specifies the itemΓöé
  11084.   Γöé                    Γöéname, which names the current group as  Γöé
  11085.   Γöé                    Γöéan ASCII string.  This keyword is case  Γöé
  11086.   Γöé                    Γöésensitive and takes the form of a quotedΓöé
  11087.   Γöé                    Γöéstring.  The name may include special   Γöé
  11088.   Γöé                    Γöécharacters and may be translated.  The  Γöé
  11089.   Γöé                    Γöéname is displayed in the main           Γöé
  11090.   Γöé                    Γöéinstallation selection window.  For     Γöé
  11091.   Γöé                    Γöéexample:                                Γöé
  11092.   Γöé                    ΓöéSSNAME = "CD Audio"                     Γöé
  11093.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11094.   ΓöéSSVERSION           ΓöéThis required keyword specifies the     Γöé
  11095.   Γöé                    Γöéversion of the component in the form of Γöé
  11096.   Γöé                    Γöéa quoted string.  This string must be inΓöé
  11097.   Γöé                    Γöéthe format "dd.dd.dd" (where dd         Γöé
  11098.   Γöé                    Γöérepresents digits).  Any version not    Γöé
  11099.   Γöé                    Γöéspecified in this format will be        Γöé
  11100.   Γöé                    Γöéconverted to that format.  All string   Γöé
  11101.   Γöé                    Γöéitems that are not digits or periods    Γöé
  11102.   Γöé                    Γöéwill be converted to zeros. Any periods Γöé
  11103.   Γöé                    Γöéafter the second period will be         Γöé
  11104.   Γöé                    Γöéconverted to zeros.  For example:       Γöé
  11105.   Γöé                    ΓöéSSVERSION = "1.1.0"                     Γöé
  11106.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11107.   ΓöéSSSIZE              ΓöéThis required keyword specifies the     Γöé
  11108.   Γöé                    Γöétotal size of all the files in the item.Γöé
  11109.   Γöé                    ΓöéThe size denotes the number of bytes in Γöé
  11110.   Γöé                    Γöéthousands (500 = 500KB).  This number isΓöé
  11111.   Γöé                    Γöéused to help determine if there is      Γöé
  11112.   Γöé                    Γöéenough disk space to support the        Γöé
  11113.   Γöé                    Γöéinstallation.  If you do not know the   Γöé
  11114.   Γöé                    Γöécorrect size of a item, overstate its   Γöé
  11115.   Γöé                    Γöésize.  For example:                     Γöé
  11116.   Γöé                    ΓöéSSSIZE = 1024                           Γöé
  11117.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11118.   ΓöéSSINICH             ΓöéThis optional keyword specifies the nameΓöé
  11119.   Γöé                    Γöéof the file that contains the changes toΓöé
  11120.   Γöé                    Γöéthe MMPM2.INI file.  If this statement  Γöé
  11121.   Γöé                    Γöéis missing, there are no changes to the Γöé
  11122.   Γöé                    ΓöéMMPM2.INI file.  For example:           Γöé
  11123.   Γöé                    ΓöéSSINICH = "ACPAINI.CH"                  Γöé
  11124.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11125.   ΓöéSSCONFIGCH          ΓöéThis optional keyword specifies the nameΓöé
  11126.   Γöé                    Γöéof the file that contains the changes toΓöé
  11127.   Γöé                    Γöéthe CONFIG.SYS file.  If this statement Γöé
  11128.   Γöé                    Γöéis missing, there are no changes to the Γöé
  11129.   Γöé                    ΓöéCONFIG.SYS file.  For example:          Γöé
  11130.   Γöé                    ΓöéSSCONFIGCH = "ACPACON.CH"               Γöé
  11131.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11132.   ΓöéSSCOREQS            ΓöéThis optional keyword specifies a list  Γöé
  11133.   Γöé                    Γöéof corequisites needed for this item to Γöé
  11134.   Γöé                    Γöérun.  It also specifies what other      Γöé
  11135.   Γöé                    Γöécomponents the current components dependΓöé
  11136.   Γöé                    Γöéon.  These other components must be     Γöé
  11137.   Γöé                    Γöéinstalled for the current component to  Γöé
  11138.   Γöé                    Γöéfunction.  (If this statement is        Γöé
  11139.   Γöé                    Γöémissing, there are no corequisites.)    Γöé
  11140.   Γöé                    ΓöéThe corequisite is identified by its    Γöé
  11141.   Γöé                    Γöégroup number. Corequisite groups should Γöé
  11142.   Γöé                    Γöépoint to each other only if they requireΓöé
  11143.   Γöé                    Γöéeach other.  It is possible to have     Γöé
  11144.   Γöé                    Γöésubsystem A list subsystem B as a       Γöé
  11145.   Γöé                    Γöécorequisite and subsystem B have no     Γöé
  11146.   Γöé                    Γöécorequisites.  If the user selects a    Γöé
  11147.   Γöé                    Γöésubsystem with a corequisite, but does  Γöé
  11148.   Γöé                    Γöénot select all corequisites, the user isΓöé
  11149.   Γöé                    Γöénotified before the installation starts.Γöé
  11150.   Γöé                    ΓöéThis entry can be repeated as necessary.Γöé
  11151.   Γöé                    ΓöéFor example:                            Γöé
  11152.   Γöé                    ΓöéSSCOREQS = 1                            Γöé
  11153.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11154.   ΓöéSSICON              ΓöéThis optional keyword names the icon    Γöé
  11155.   Γöé                    Γöéfile for this component that is to be   Γöé
  11156.   Γöé                    Γöédisplayed in the main installation      Γöé
  11157.   Γöé                    Γöéselection window.  The icon file to be  Γöé
  11158.   Γöé                    Γöédisplayed in the selection window must  Γöé
  11159.   Γöé                    Γöéreside on the first installation media  Γöé
  11160.   Γöé                    Γöéunit.  If this statement is missing, a  Γöé
  11161.   Γöé                    Γöédefault icon is used.  For example:     Γöé
  11162.   Γöé                    ΓöéSSICON = "ACPA.ICO"                     Γöé
  11163.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11164.   ΓöéSSDLL               ΓöéThis optional keyword names a DLL file  Γöé
  11165.   Γöé                    Γöéthat is to be run during the            Γöé
  11166.   Γöé                    Γöéinstallation process.  The DLL          Γöé
  11167.   Γöé                    Γöéreferenced will be run after all files  Γöé
  11168.   Γöé                    Γöéare copied to the destination, but      Γöé
  11169.   Γöé                    Γöébefore any script processing is         Γöé
  11170.   Γöé                    Γöéperformed. If this keyword is present,  Γöé
  11171.   Γöé                    Γöéthe SSDLLENTRY keyword must also be     Γöé
  11172.   Γöé                    Γöépresent.  For example:                  Γöé
  11173.   Γöé                    ΓöéSSDLL="MY.DLL"                          Γöé
  11174.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11175.   ΓöéSSDLLENTRY          ΓöéThis optional keyword specifies the nameΓöé
  11176.   Γöé                    Γöéof the entry point into SSDLL in the    Γöé
  11177.   Γöé                    Γöéform of a quoted string.  If this       Γöé
  11178.   Γöé                    Γöékeyword is present, the SSDLL keyword   Γöé
  11179.   Γöé                    Γöémust also be present.  For example:     Γöé
  11180.   Γöé                    ΓöéSSDLLENTRY="MyEntry"                    Γöé
  11181.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11182.   ΓöéSSTERMDLL           ΓöéThis optional keyword names a DLL file  Γöé
  11183.   Γöé                    Γöéthat is to be run during the            Γöé
  11184.   Γöé                    Γöéinstallation process.  The DLL          Γöé
  11185.   Γöé                    Γöéreferenced will be run after all files  Γöé
  11186.   Γöé                    Γöéare copied to the destination and after Γöé
  11187.   Γöé                    Γöéall script processing is done. The      Γöé
  11188.   Γöé                    Γöépurpose of this keyword is to allow for Γöé
  11189.   Γöé                    Γöéprocessing to occur on a fully          Γöé
  11190.   Γöé                    Γöéconfigured multimedia system.  If this  Γöé
  11191.   Γöé                    Γöékeyword is present, the SSTERMDLLENTRY  Γöé
  11192.   Γöé                    Γöékeyword must also be present.  For      Γöé
  11193.   Γöé                    Γöéexample:                                Γöé
  11194.   Γöé                    ΓöéSSTERMDLL="MYTERM.DLL"                  Γöé
  11195.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11196.   ΓöéSSTERMDLLENTRY      ΓöéThis optional keyword specifies the nameΓöé
  11197.   Γöé                    Γöéof the entry point into SSTERMDLL in theΓöé
  11198.   Γöé                    Γöéform of a quoted string.  If this       Γöé
  11199.   Γöé                    Γöékeyword is present, the SSTERMDLL       Γöé
  11200.   Γöé                    Γöékeyword must also be present.  For      Γöé
  11201.   Γöé                    Γöéexample:                                Γöé
  11202.   Γöé                    ΓöéSSTERMDLLENTRY="MyTermEntry"            Γöé
  11203.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11204.   ΓöéSSSELECT            ΓöéThis optional keyword determines the    Γöé
  11205.   Γöé                    Γöépreselection of items for installation. Γöé
  11206.   Γöé                    ΓöéFive values are supported:              Γöé
  11207.   Γöé                    Γöé"ALWAYS" - This value specifies that theΓöé
  11208.   Γöé                    Γöégroup will always be installed.  It is  Γöé
  11209.   Γöé                    Γöéthe only valid value for Group 0.       Γöé
  11210.   Γöé                    ΓöéGroups with this value will not be      Γöé
  11211.   Γöé                    Γöédisplayed in the installation selection Γöé
  11212.   Γöé                    Γöéwindow.  This is the default.           Γöé
  11213.   Γöé                    Γöé"REQUIRED" - This value specifies that  Γöé
  11214.   Γöé                    Γöéthe group will be preselected for       Γöé
  11215.   Γöé                    Γöéinstallation.  If the group had been    Γöé
  11216.   Γöé                    Γöépreviously installed, it cannot be      Γöé
  11217.   Γöé                    Γöéunselected by the user if this          Γöé
  11218.   Γöé                    Γöéinstallation package is newer than the  Γöé
  11219.   Γöé                    Γöéinstalled version.  If the group has notΓöé
  11220.   Γöé                    Γöébeen previously installed, it can be    Γöé
  11221.   Γöé                    Γöéunselected by the user.                 Γöé
  11222.   Γöé                    Γöé"VERSION" - This value specifies that   Γöé
  11223.   Γöé                    Γöéthe group will be preselected only if itΓöé
  11224.   Γöé                    Γöéwas previously installed and this       Γöé
  11225.   Γöé                    Γöéinstallation package is newer than the  Γöé
  11226.   Γöé                    Γöéinstalled version.  However, it can be  Γöé
  11227.   Γöé                    Γöéunselected by the user.                 Γöé
  11228.   Γöé                    Γöé"YES" - This value specifies that the   Γöé
  11229.   Γöé                    Γöégroup will be preselected whether or notΓöé
  11230.   Γöé                    Γöéit was previously installed.  It can be Γöé
  11231.   Γöé                    Γöéunselected by the user.                 Γöé
  11232.   Γöé                    Γöé"NO" - This value specifies that the    Γöé
  11233.   Γöé                    Γöégroup is never preselected but can be   Γöé
  11234.   Γöé                    Γöéselected by the user.                   Γöé
  11235.   Γöé                    Γöé"BASENEWER" - This value specifies that Γöé
  11236.   Γöé                    Γöéfiles belonging to this group will only Γöé
  11237.   Γöé                    Γöébe copied if the user's machine has no  Γöé
  11238.   Γöé                    Γöépackage installed or if the package     Γöé
  11239.   Γöé                    Γöéinstalled is older than the current     Γöé
  11240.   Γöé                    Γöépackage.                                Γöé
  11241.   Γöé                    Γöé"ONLYNEWER" - This value specifies that Γöé
  11242.   Γöé                    Γöéa user will not be able to to install anΓöé
  11243.   Γöé                    Γöéolder version of a package on top of a  Γöé
  11244.   Γöé                    Γöénewer version. Files belonging to this  Γöé
  11245.   Γöé                    Γöégroup will only be copied if the user   Γöé
  11246.   Γöé                    Γöéhas an older version (or the same       Γöé
  11247.   Γöé                    Γöéversion) installed.  If no version is   Γöé
  11248.   Γöé                    Γöéinstalled or if the version installed isΓöé
  11249.   Γöé                    Γöéhigher than the one in the package, no  Γöé
  11250.   Γöé                    Γöéfiles will be copied.                   Γöé
  11251.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11252.  
  11253.  Observe the following guidelines when you create or change a CONTROL.SCR 
  11254.  subsystem definition: 
  11255.  
  11256.      The SSGROUP keyword must be the first statement in the information block. 
  11257.      An item may reside on different media. 
  11258.      Each statement in the information block must have a value. 
  11259.      You may use comments in the header section in the form of blank lines or 
  11260.       text enclosed with "/* and */".  You may not use nested comments. 
  11261.      You may use blank spaces around the equal sign; blank spaces are ignored. 
  11262.      If you want to use a double quotation mark or a backslash in a string, 
  11263.       you must precede it with the escape character (\). 
  11264.      You may use the escape sequence \n (new line). 
  11265.  
  11266.  
  11267. ΓòÉΓòÉΓòÉ 18.3. File List Control File ΓòÉΓòÉΓòÉ
  11268.  
  11269. The master control file, CONTROL.SCR, specifies a FILELIST keyword which 
  11270. identifies the name of a file list control file that lists all the installable 
  11271. files in the installation package.  The file list control file also contains 
  11272. the following additional information: 
  11273.  
  11274.      The name of the file 
  11275.      The number of the media unit where the file is stored 
  11276.      The destination directory where the file will be copied 
  11277.      The group or feature the file is identified with 
  11278.  
  11279.  The following is an example of the file list control file (FILELIST.TK2) 
  11280.  located in the \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory.  The first nonblank, 
  11281.  noncomment line is a count of the number of files (or file name lines) in the 
  11282.  file. 
  11283.  
  11284.   /***********************************************************************/
  11285.   /* This file contains install information.  Comments are delimited     */
  11286.   /* as these comments are.  Blank lines are ignored.  Non-blank lines   */
  11287.   /* will be parsed and extraneous characters will cause errors.  First  */
  11288.   /* non-comment line must be the total number of files to be installed. */
  11289.   /***********************************************************************/
  11290.   /* all files on the install disk(s) are listed below. Other            */
  11291.   /* information is also given, as follows:                              */
  11292.   /*                                                                     */
  11293.   /* Disk#    - The number of the disk on which the file resides.        */
  11294.   /*            (Ignored if installing from CD-ROM). These are sorted    */
  11295.   /*            from 0 to the number of disks, ascending.                */
  11296.   /*                                                                     */
  11297.   /* Group#   - The logical group to which the file belongs. Group       */
  11298.   /*            starts at 0.                                             */
  11299.   /*                                                                     */
  11300.   /* Dest#    - The destination subdirectory into which the file will be */
  11301.   /*            copied.  Dest# starts at 0.                              */
  11302.   /*                                                                     */
  11303.   /* Source #- The installation disk(s) subdirectory where the file      */
  11304.   /*            resides.                                                 */
  11305.   /*                                                                     */
  11306.   /* FileName - The base filename.                                       */
  11307.   /*                                                                     */
  11308.   /*sourcedir="\\"                     = 4                               */
  11309.   /*sourcedir="\\MCISTRNG\\"           = 11                              */
  11310.   /*                                                                     */
  11311.   /* destindir="\\MMOS2\\"                                = 0            */
  11312.   /* destindir="\\MMOS2\\INSTALL\\"                       = 4            */
  11313.   /* destindir="\\MMOS2\\MMTOOLKT\\SAMPLES\\MCISTRNG\\"   = 11           */
  11314.   /*                                                                     */
  11315.   /*        groups                                                       */
  11316.   /*                0 = Base                                             */
  11317.   /*            - 11 = MCI String Test                                   */
  11318.   /*                                                                     */
  11319.   /***********************************************************************/
  11320.   /* Total number of entries is 20. This must be the first parameter other*/
  11321.   /*than comments*/
  11322.   /***********************************************************************/
  11323.  
  11324.       20
  11325.  
  11326.   /*It is a good practice to make groups and list the amount of files in
  11327.   /*them (9 files)*/
  11328.   /*A comment can not be the last line in a filelist.*/
  11329.  
  11330.   /*            mmtoolkt\samples\cf  9   41K           */
  11331.  
  11332.       0    0   11     4    "CONTROL.SCR"
  11333.       0    0   11     4    "FILELIST.TK2"
  11334.       0    0   11      4   "TLKSTRN.SCR"
  11335.       0    0   11     4    "TLKBASE.SCR"
  11336.       0    0    4     4    "TLKSTRN.SCR"
  11337.       0    0    4     4    "TLKBASE.SCR"
  11338.       0    0    4     4    "MCISTRNG.ICO"
  11339.       0    0    4    4     "MMTOOLKT.ICO"
  11340.       0    0   11    4    "TOOLKIT.CH"
  11341.  
  11342.   /* 11 files */
  11343.   /*           mmtoolkt\samples\mcistrng  11   197K   */
  11344.       0   11   11   11   "mcistrng.c"
  11345.       0   11   11   11   "mcistrng.h"
  11346.       0   11   11   11   "mcistrng.rc"
  11347.       0   11   11   11   "mcistrng.dlg"
  11348.       0   11   11   11   "mcistrng.def"
  11349.       0   11   11   11   "makefile"
  11350.       0   11   11   11   "UMB.DAT"
  11351.       0   11   11   11   "mcistrng.exe"
  11352.       0   11   11   11   "mcistrng.hlp"
  11353.       0   11   11   11   "mcistrng.ipf"
  11354.       0   11   11   11   "mcistrng.ico"
  11355.  
  11356.  The following table describes the columns in the file list control file. 
  11357.  
  11358.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11359.   ΓöéColumn                   ΓöéDescription                                       Γöé
  11360.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11361.   ΓöéMedia#                   ΓöéSpecifies the number of the media unit (diskette  Γöé
  11362.   Γöé                         Γöéor CD) where the file is stored.  The units are   Γöé
  11363.   Γöé                         Γöénumbered starting from 0.  This number will be    Γöé
  11364.   Γöé                         Γöéused for all installation media except for the    Γöé
  11365.   Γöé                         Γöéhard disk.  The Media# column must be sorted in   Γöé
  11366.   Γöé                         Γöéascending order.  A media unit does not have to beΓöé
  11367.   Γöé                         Γöéfilled (there can be unused space on any numbered Γöé
  11368.   Γöé                         Γöéunit).                                            Γöé
  11369.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11370.   ΓöéGroup or subsystem#      ΓöéSpecifies the group to which the file belongs.    Γöé
  11371.   Γöé                         ΓöéThe group or item number must be a positive       Γöé
  11372.   Γöé                         Γöéinteger, with numbering starting at 0 (the groups Γöé
  11373.   Γöé                         Γöéare defined in CONTROL.SCR by the SSGROUP         Γöé
  11374.   Γöé                         Γöékeyword).  This number is used to determine which Γöé
  11375.   Γöé                         Γöéfiles belong to a item selected for installation. Γöé
  11376.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11377.   ΓöéDestination#             ΓöéSpecifies the destination subdirectory where the  Γöé
  11378.   Γöé                         Γöéfile will be copied.  The destination number is   Γöé
  11379.   Γöé                         Γöédefined in the CONTROL.SCR file by the DESTINDIR  Γöé
  11380.   Γöé                         Γöékeyword.  This field must always be a defined     Γöé
  11381.   Γöé                         Γöénumber (for example, 14 for the \MMOS2\DLL path). Γöé
  11382.   Γöé                         ΓöéIf you specify a DESTINDIR statement in the masterΓöé
  11383.   Γöé                         Γöécontrol file, you only have to specify the        Γöé
  11384.   Γöé                         Γöécorresponding group number (for example, 1).      Γöé
  11385.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11386.   ΓöéSource#                  ΓöéSpecifies the path name of the source file.  The  Γöé
  11387.   Γöé                         Γöésource number is defined in the CONTROL.SCR file  Γöé
  11388.   Γöé                         Γöéby the SOURCEDIR keyword.  This field must always Γöé
  11389.   Γöé                         Γöébe defined with a number (for example, 1 for the  Γöé
  11390.   Γöé                         Γöé\LIB path).                                       Γöé
  11391.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11392.   ΓöéFile name                ΓöéSpecifies the base file name, which must be in    Γöé
  11393.   Γöé                         Γöédouble quotes.  For example, "MINSTALL.EXE".      Γöé
  11394.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11395.  
  11396.  
  11397. ΓòÉΓòÉΓòÉ 18.4. Change Control Files ΓòÉΓòÉΓòÉ
  11398.  
  11399. Change control files are script files that make changes to the CONFIG.SYS file 
  11400. and INI files.  The master control file, CONTROL.SCR, identifies the change 
  11401. control files when you specify the SSINICH and SSCONFIGCH keywords. 
  11402.  
  11403.  
  11404. ΓòÉΓòÉΓòÉ 18.4.1. Supported Macros ΓòÉΓòÉΓòÉ
  11405.  
  11406. Macros can be used in the change control files. Macros can also be used in the 
  11407. master control file. When a supported macro is used, drives and paths do not 
  11408. have to be identified until the time of installation. At installation, macros 
  11409. can perform the following: 
  11410.  
  11411.      Replace the full destination path of the file 
  11412.      Replace the installation target drive letter 
  11413.      Replace the default destination drive and path as defined in CONTROL.SCR 
  11414.      Replace the startup (boot) drive letter of the operating system 
  11415.      Delete specified files 
  11416.  
  11417.  The following table describes the supported macros.  Refer to the TLKSTRN.SCR 
  11418.  file in the \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory for an example. 
  11419.  
  11420.  Macro                              Description 
  11421.  
  11422.   destindir = "$(DELETE)\\path\\"
  11423.   = number
  11424.                                     The $(DELETE) macro can only be used with 
  11425.                                     the DESTINDIR keyword in the master control 
  11426.                                     file. The relative number is listed in the 
  11427.                                     file list control file.  Every file that 
  11428.                                     has this number will be deleted from the 
  11429.                                     user's machine. 
  11430.  
  11431.  $(DEST)filename                    $(DEST) is replaced with the full 
  11432.                                     destination path of the file.  For example: 
  11433.  
  11434.                                                                         $(DEST)CLOCK.EXE
  11435.  
  11436.                                     becomes 
  11437.  
  11438.                                                                         D:\MMOS2\MMTOOLKT\SAMPLES\CLOCK\CLOCK.EXE
  11439.  
  11440.  $(DRIVE)                           $(DRIVE) is replaced by the installation 
  11441.                                     target drive letter.  (Do not append a 
  11442.                                     colon.)  For example: 
  11443.  
  11444.                                                                         $(DRIVE)\MMOS2\TEST1.EXE
  11445.  
  11446.                                     becomes 
  11447.  
  11448.                                                                         D:\MMOS2\TEST1.EXE
  11449.  
  11450.  $(DIR)#                            #  is the number of the destination 
  11451.                                     directory as stated in the file 
  11452.                                     CONTROL.SCR.  The macro is replaced by the 
  11453.                                     default drive and path defined in the 
  11454.                                     CONTROL.SCR file for the specified 
  11455.                                     DESTINDIR definition.  For example: 
  11456.  
  11457.                                                                         $(DIR)4\MINSTALL.LOG
  11458.  
  11459.                                     becomes 
  11460.  
  11461.                                                                         D:\MMOS2\INSTALL\MINSTALL.LOG
  11462.  
  11463.  $(BOOT)                            Replaces the startup (boot) drive letter of 
  11464.                                     the operating system. (Do not append a 
  11465.                                     colon.) For example: 
  11466.  
  11467.                                                                         $(BOOT)\OS2\NEW.SYS
  11468.  
  11469.                                     becomes 
  11470.  
  11471.                                                                         C:\OS2\NEW.SYS
  11472.  
  11473.                                     where C: is the drive on which OS/2 is 
  11474.                                     installed. 
  11475.  
  11476.  Note:  Using multiple macros is supported. 
  11477.  
  11478.  
  11479. ΓòÉΓòÉΓòÉ 18.4.2. INI Change Control Files ΓòÉΓòÉΓòÉ
  11480.  
  11481. You can use an INI change control file to do the following: 
  11482.  
  11483.      Define folders and add them to the system 
  11484.      Define programs and add them to a folder 
  11485.      Install subsystems such as media control drivers, stream handlers, and 
  11486.       I/O procedures.  (See the OS/2 Multimedia Subsystem Programming Guide for 
  11487.       further details.) 
  11488.  
  11489.  The following WPObject structures call the OS/2 WinCreateObject function, 
  11490.  which adds an icon and title to the desktop.  This structure indirectly 
  11491.  changes the OS2.INI file.  See the OS/2 Presentation Manager Programming 
  11492.  Reference for object class definitions and supported keywords for the object 
  11493.  class you are creating. 
  11494.  
  11495.  
  11496. ΓòÉΓòÉΓòÉ 18.4.2.1. Defining Folders ΓòÉΓòÉΓòÉ
  11497.  
  11498. Use the following structure to define a folder.  Refer to the TLKBASE.SCR file 
  11499. located in the \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory for an example. 
  11500.  
  11501. WPObject =
  11502.  (
  11503.  WPClassName = "WPFolder"
  11504.  WPTitle = "title"
  11505.  WPSetupString = "ICONFILE=$(DEST)icon;OBJECTID=<folderobjid>"
  11506.  WPLocation = "<parentfolderobjid>"
  11507.  WPFlags = 0
  11508.  )
  11509.  
  11510.  title              Specifies the folder title to be displayed below the 
  11511.                     object. 
  11512.  
  11513.  icon               Specifies the name of the icon to displayed on the desktop. 
  11514.  
  11515.  folderobjid        Specifies the OS/2 unique object ID that is used to find 
  11516.                     this folder. This is used by the installation program to 
  11517.                     determine if this folder exists or not.  It is also used in 
  11518.                     the WPLocation field of other WPObject definitions. 
  11519.  
  11520.  parentfolderobjid  Specifies the folder object ID of the folder in which this 
  11521.                     folder is to be placed.  For example, "<WP_DESKTOP>" is the 
  11522.                     object ID for the Workplace Shell desktop folder. 
  11523.  
  11524.  WPFlags = 0        Specifies creation control.  These flags are also 
  11525.                     documented under WinCreateObject in the OS/2 Presentation 
  11526.                     Manager Programming Reference. already exist. Possible 
  11527.                     values include: 
  11528.  
  11529.                         0 (CO_FAILIFEXISTS) - The folder is to be replaced if 
  11530.                          it exists, or added if it does not already exist. 
  11531.                         1 (CO_REPLACEIFEXISTS) - The folder is to be replaced 
  11532.                          if it exists, or added if it does not already exist. 
  11533.                         2 (CO_UPDATEIFEXISTS) - The folder is to be updated 
  11534.                          with the values supplied if it exists, or added using 
  11535.                          values supplied and defaults if it does not already 
  11536.                          exist. 
  11537.  
  11538.  In the following example, a folder called Multimedia Presentation Manager 
  11539.  Toolkit/2 will be added to the desktop. 
  11540.  
  11541.   WPObject =
  11542.       (
  11543.       WPClassName   = "WPFolder"
  11544.       WPTitle       = "Multimedia Presentation\nManager Toolkit/2"
  11545.       WPSetupString = "ICONFILE=$(DEST)MMTOOLKT.ICO;OBJECTID=<MMPMTLK>"
  11546.       WPLocation    = "<WP_DESKTOP>"
  11547.       WPFlags = 2L
  11548.       )
  11549.  
  11550.  Defining Programs 
  11551.  
  11552.  Use the following structure to define a program that is to be added to a 
  11553.  folder.  Refer to the TLKSTRN.SCR file located in the 
  11554.  \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory for an example. 
  11555.  
  11556.   WPObject =
  11557.   (
  11558.   WPClassName   = "WPProgram"
  11559.   WPTitle       = "title"
  11560.   WPSetupString = "EXENAME=path file;STARTUPDIR=dir;PROGTYPE=PM;
  11561.        ICONFILE=$(DEST)icon; [ASSOCTYPE=type;]
  11562.        [ASSOCFILTER=filter;] OBJECTID=<pgmobjid>"
  11563.   WPLocation    = "<parentfolderobjid>"
  11564.   WPFlags = 0
  11565.   )
  11566.  
  11567.  Note:  The program setup information (WPSetupString) must be on one line, not 
  11568.         two as shown in the previous figure. 
  11569.  
  11570.  title            Specifies the title to be displayed below the object in the 
  11571.                   parent folder. 
  11572.  
  11573.  path             Specifies a supported macro or the full path for the EXE 
  11574.                   file. 
  11575.  
  11576.  icon             Specifies the name of the icon to be displayed on the 
  11577.                   desktop. 
  11578.  
  11579.  file             Specifies the EXE file name. 
  11580.  
  11581.  dir              Specifies the full path of the startup directory or the macro 
  11582.                   $(DIR)# (where # is a defined destination directory in 
  11583.                   CONTROL.SCR). 
  11584.  
  11585.  type             Specifies one or more association types such as "Waveform." 
  11586.                   Multiple values are separated by commas. 
  11587.  
  11588.  filter           Specifies one or more association filter types such as 
  11589.                   "*.WAV." Multiple values are separated by commas. 
  11590.  
  11591.  pgmobjid         Specifies the OS/2 unique object ID that is used to find this 
  11592.                   program.  This is used by the installation program to 
  11593.                   determine if this program exists in the parent folder.  It is 
  11594.                   not used in the WPLocation field of any WPObject definition. 
  11595.  
  11596.  parentfolderobjid Specifies the folder object ID of the folder in which this 
  11597.                   program is to be placed. 
  11598.  
  11599.  WPFlags = 0      Specifies that the program is to be added to the folder only 
  11600.                   if it does not already exist. 
  11601.  
  11602.  
  11603. ΓòÉΓòÉΓòÉ 19. Caption DLL ΓòÉΓòÉΓòÉ
  11604.  
  11605. This section describes captioning functions and data structures provided in the 
  11606. Caption DLL found in the \TOOLKIT\SAMPLES\MM\CAPDLL subdirectory. 
  11607.  
  11608.  
  11609. ΓòÉΓòÉΓòÉ 19.1. ccInitialize ΓòÉΓòÉΓòÉ
  11610.  
  11611.  
  11612. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Syntax ΓòÉΓòÉΓòÉ
  11613.  
  11614. This function creates a captioning window and returns the handle of that window 
  11615. to the application.  This caption window is a child of hwndParent, and does not 
  11616. become visible until the Caption DLL is sent a CC_START command. 
  11617.  
  11618. An application calls this function once, during its initialization (or before 
  11619. it wants to use the caption services). 
  11620.  
  11621. #include <os2.h>
  11622.  
  11623. HWND     hwndParent;
  11624. ULONG    rc;
  11625.  
  11626. rc = ccInitialize(hwndParent);
  11627.  
  11628.  
  11629. ΓòÉΓòÉΓòÉ <hidden> ccInitialize Parameter - hwndParent ΓòÉΓòÉΓòÉ
  11630.  
  11631.  hwndParent (HWND) - input 
  11632.     Parent window handle. 
  11633.  
  11634.  
  11635. ΓòÉΓòÉΓòÉ <hidden> ccInitialize Return Value - rc ΓòÉΓòÉΓòÉ
  11636.  
  11637.  rc (ULONG) - returns 
  11638.     If the function is successful, the caption window handle is returned. 
  11639.     Possible return code inidicating type of failure: 
  11640.  
  11641.     CCERR_INVALID_WINDOW_HANDLE 
  11642.             The window handle passed was not valid. 
  11643.  
  11644.  
  11645. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Parameters ΓòÉΓòÉΓòÉ
  11646.  
  11647.  hwndParent (HWND) - input 
  11648.     Parent window handle. 
  11649.  
  11650.  rc (ULONG) - returns 
  11651.     If the function is successful, the caption window handle is returned. 
  11652.     Possible return code inidicating type of failure: 
  11653.  
  11654.     CCERR_INVALID_WINDOW_HANDLE 
  11655.             The window handle passed was not valid. 
  11656.  
  11657.  
  11658. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Related Functions ΓòÉΓòÉΓòÉ
  11659.  
  11660.      ccSendCommand 
  11661.      ccTerminate 
  11662.  
  11663.  
  11664. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Example Code ΓòÉΓòÉΓòÉ
  11665.  
  11666.  
  11667.    /*
  11668.     * Create the caption window and save the handle for further use.
  11669.     */
  11670.    hwndCaption = ccInitialize ( (HWND) hwndMainDialogBox );
  11671.  
  11672.  
  11673. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Topics ΓòÉΓòÉΓòÉ
  11674.  
  11675. Select an item: 
  11676.  
  11677. Syntax
  11678. Parameters
  11679. Returns
  11680. Example Code
  11681. Related Functions
  11682. Glossary
  11683.  
  11684.  
  11685. ΓòÉΓòÉΓòÉ 19.2. ccSendCommand ΓòÉΓòÉΓòÉ
  11686.  
  11687.  
  11688. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Syntax ΓòÉΓòÉΓòÉ
  11689.  
  11690. This function is used to control the captioning window once it has been 
  11691. created. 
  11692.  
  11693. #include <os2.h>
  11694.  
  11695. USHORT    usMsg;
  11696. MPARAM    mp1;
  11697. MPARAM    mp2;
  11698. ULONG     rc;
  11699.  
  11700. rc = ccSendCommand(usMsg, mp1, mp2);
  11701.  
  11702.  
  11703. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Parameter - usMsg ΓòÉΓòÉΓòÉ
  11704.  
  11705.  usMsg (USHORT) - input 
  11706.     This is one of the following commands you want to send to the captioning 
  11707.     window. 
  11708.  
  11709.     CC_START (1) 
  11710.             Use this command to start captioning.  "Start captioning" means to 
  11711.             display the window that was created in the ccInitialize command, 
  11712.             and to begin scrolling the appropriate text file in synch with an 
  11713.             audio file. Set mp2 to point to a CC_START_PARMS structure. 
  11714.  
  11715.     CC_STOP (2) 
  11716.             Use this command to stop captioning.  This command hides the 
  11717.             caption window.  Set mp1 and mp2 to zero. 
  11718.  
  11719.     CC_SET (3) 
  11720.  
  11721.             Use this command to set the status of the captioning system.  The 
  11722.             same items that can be queried can also be set.  mp2 should point 
  11723.             to a CC_SET_PARMS structure.  Note that these items can be queried 
  11724.             and set even while captioning is going on. 
  11725.  
  11726.     CC_STATUS (4) 
  11727.             Use this command to query the status of the captioning system. 
  11728.             Status items you can query and set include: 
  11729.  
  11730.                 Number of text columns 
  11731.                 Number of text rows 
  11732.                 Text color 
  11733.                 Background color 
  11734.                 Caption window X and Y coordinates 
  11735.  
  11736.             mp2 should point to a CC_STATUS_PARMS structure. 
  11737.  
  11738.  
  11739. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Parameter - mp1 ΓòÉΓòÉΓòÉ
  11740.  
  11741.  mp1 (MPARAM) - input 
  11742.     Caption window handle (returned from ccInitialize). 
  11743.  
  11744.  
  11745. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Parameter - mp2 ΓòÉΓòÉΓòÉ
  11746.  
  11747.  mp2 (MPARAM) - input 
  11748.     Data structure corresponding to the command message in usMsg. 
  11749.  
  11750.  
  11751. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Return Value - rc ΓòÉΓòÉΓòÉ
  11752.  
  11753.  rc (ULONG) - returns 
  11754.     The CC_STOP return value is 0; the other commands have the following return 
  11755.     codes indicating success or failure: 
  11756.  
  11757.     0 
  11758.               Returns if the function is successful. 
  11759.  
  11760.     CCERR_CANNOT_CREATE_BITMAP 
  11761.               Returned to CC_START or CC_SET; the bit map cannot be created. 
  11762.  
  11763.     CCERR_FILE_FORMAT 
  11764.               Returned to CC_START; invalid file format was used. 
  11765.  
  11766.     CCERR_NO_DEVICE_NAME 
  11767.               Returned to CC_START; no device name was given. 
  11768.  
  11769.     CCERR_TOO_MANY_LINES 
  11770.               Returned to CC_START; caption file has more than 500 lines. 
  11771.  
  11772.     DOS error codes 
  11773.               Returned to CC_START. 
  11774.  
  11775.     OS/2 multimedia error codes 
  11776.               Returned to CC_START. 
  11777.  
  11778.  
  11779. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Parameters ΓòÉΓòÉΓòÉ
  11780.  
  11781.  usMsg (USHORT) - input 
  11782.     This is one of the following commands you want to send to the captioning 
  11783.     window. 
  11784.  
  11785.     CC_START (1) 
  11786.             Use this command to start captioning.  "Start captioning" means to 
  11787.             display the window that was created in the ccInitialize command, 
  11788.             and to begin scrolling the appropriate text file in synch with an 
  11789.             audio file. Set mp2 to point to a CC_START_PARMS structure. 
  11790.  
  11791.     CC_STOP (2) 
  11792.             Use this command to stop captioning.  This command hides the 
  11793.             caption window.  Set mp1 and mp2 to zero. 
  11794.  
  11795.     CC_SET (3) 
  11796.  
  11797.             Use this command to set the status of the captioning system.  The 
  11798.             same items that can be queried can also be set.  mp2 should point 
  11799.             to a CC_SET_PARMS structure.  Note that these items can be queried 
  11800.             and set even while captioning is going on. 
  11801.  
  11802.     CC_STATUS (4) 
  11803.             Use this command to query the status of the captioning system. 
  11804.             Status items you can query and set include: 
  11805.  
  11806.                 Number of text columns 
  11807.                 Number of text rows 
  11808.                 Text color 
  11809.                 Background color 
  11810.                 Caption window X and Y coordinates 
  11811.  
  11812.             mp2 should point to a CC_STATUS_PARMS structure. 
  11813.  
  11814.  mp1 (MPARAM) - input 
  11815.     Caption window handle (returned from ccInitialize). 
  11816.  
  11817.  mp2 (MPARAM) - input 
  11818.     Data structure corresponding to the command message in usMsg. 
  11819.  
  11820.  rc (ULONG) - returns 
  11821.     The CC_STOP return value is 0; the other commands have the following return 
  11822.     codes indicating success or failure: 
  11823.  
  11824.     0 
  11825.               Returns if the function is successful. 
  11826.  
  11827.     CCERR_CANNOT_CREATE_BITMAP 
  11828.               Returned to CC_START or CC_SET; the bit map cannot be created. 
  11829.  
  11830.     CCERR_FILE_FORMAT 
  11831.               Returned to CC_START; invalid file format was used. 
  11832.  
  11833.     CCERR_NO_DEVICE_NAME 
  11834.               Returned to CC_START; no device name was given. 
  11835.  
  11836.     CCERR_TOO_MANY_LINES 
  11837.               Returned to CC_START; caption file has more than 500 lines. 
  11838.  
  11839.     DOS error codes 
  11840.               Returned to CC_START. 
  11841.  
  11842.     OS/2 multimedia error codes 
  11843.               Returned to CC_START. 
  11844.  
  11845.  
  11846. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Related Functions ΓòÉΓòÉΓòÉ
  11847.  
  11848.      ccInitialize 
  11849.      ccTerminate 
  11850.  
  11851.  
  11852. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Example Code ΓòÉΓòÉΓòÉ
  11853.  
  11854.  
  11855.  /*
  11856.   * Close caption flag is ON.
  11857.   * Fill in the CC_START_PARMS structure and the call ccSendCommand
  11858.   * to make the captioning window visible.  The hwndOwner field holds
  11859.   * the window handle that we want the Caption DLL to send the position
  11860.   * change messages to, when it is done processing them.
  11861.   */
  11862.  
  11863.  csp.pszDeviceName    = (PSZ)   "capsamp";     /* Alias name          */
  11864.  csp.pszCaptionFile   = (PSZ)   "CAPSAMP._CC"; /* File name to use    */
  11865.  csp.hwndOwner        =  hwnd;                 /* for position change */
  11866.  
  11867.  ulReturn = ccSendCommand ( CC_START, MPFROMHWND(hwndCaption), &csp );
  11868.                                                /* Start captioning    */
  11869.  
  11870.  
  11871. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Topics ΓòÉΓòÉΓòÉ
  11872.  
  11873. Select an item: 
  11874.  
  11875. Syntax
  11876. Parameters
  11877. Returns
  11878. Example Code
  11879. Related Functions
  11880. Glossary
  11881.  
  11882.  
  11883. ΓòÉΓòÉΓòÉ 19.3. ccTerminate ΓòÉΓòÉΓòÉ
  11884.  
  11885.  
  11886. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Syntax ΓòÉΓòÉΓòÉ
  11887.  
  11888. Call this function once at the end of the application (or when the application 
  11889. wishes to cease captioning).  It closes the captioning system and releases any 
  11890. resources that were allocated on behalf of captioning. 
  11891.  
  11892. #include <os2.h>
  11893.  
  11894. HWND    hwndCaption;
  11895.  
  11896. ccTerminate(hwndCaption);
  11897.  
  11898.  
  11899. ΓòÉΓòÉΓòÉ <hidden> ccTerminate Parameter - hwndCaption ΓòÉΓòÉΓòÉ
  11900.  
  11901.  hwndCaption (HWND) 
  11902.     Caption window handle. 
  11903.  
  11904.  
  11905. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Return Value ΓòÉΓòÉΓòÉ
  11906.  
  11907.     This function does not return a value. 
  11908.  
  11909.  
  11910. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Parameters ΓòÉΓòÉΓòÉ
  11911.  
  11912.  hwndCaption (HWND) 
  11913.     Caption window handle. 
  11914.  
  11915.     This function does not return a value. 
  11916.  
  11917.  
  11918. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Related Functions ΓòÉΓòÉΓòÉ
  11919.  
  11920.      ccInitialize 
  11921.      ccSendCommand 
  11922.  
  11923.  
  11924. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Example Code ΓòÉΓòÉΓòÉ
  11925.  
  11926.  /*
  11927.   * Close the captioning system. This will release all the
  11928.   * resources that were allocated.
  11929.   */
  11930.   ccTerminate(hwndCaption);
  11931.  
  11932.  
  11933. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Topics ΓòÉΓòÉΓòÉ
  11934.  
  11935. Select an item: 
  11936.  
  11937. Syntax
  11938. Parameters
  11939. Returns
  11940. Example Code
  11941. Related Functions
  11942. Glossary
  11943.  
  11944.  
  11945. ΓòÉΓòÉΓòÉ 19.4. CC_SET_PARMS ΓòÉΓòÉΓòÉ
  11946.  
  11947. This data structure contains information for the ccSendCommand function when 
  11948. using the CC_SET message. 
  11949.  
  11950. typedef struct _CC_SET_PARMS {
  11951.   ULONG     ulRows;
  11952.   ULONG     ulBackgroundColor;
  11953.   ULONG     ulTextColor;
  11954.   ULONG     ulXposition;
  11955.   ULONG     ulYposition;
  11956.   ULONG     ulColumns;
  11957. } CC_SET_PARMS;
  11958.  
  11959. typedef CC_SET_PARMS FAR *PCC_SET_PARMS;
  11960.  
  11961.  
  11962. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulRows ΓòÉΓòÉΓòÉ
  11963.  
  11964.  ulRows (ULONG) 
  11965.     This is item is set to the desired number of text rows to display in the 
  11966.     caption window. 
  11967.  
  11968.  
  11969. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulBackgroundColor ΓòÉΓòÉΓòÉ
  11970.  
  11971.  ulBackgroundColor (ULONG) 
  11972.     This item is set to the desired color index of the background color in the 
  11973.     caption window. 
  11974.  
  11975.  
  11976. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulTextColor ΓòÉΓòÉΓòÉ
  11977.  
  11978.  ulTextColor (ULONG) 
  11979.     This item is set to the desired color index of the text color in the 
  11980.     caption window. 
  11981.  
  11982.  
  11983. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulXposition ΓòÉΓòÉΓòÉ
  11984.  
  11985.  ulXposition (ULONG) 
  11986.     This item is set to the desired X-coordinate position of the caption 
  11987.     window. 
  11988.  
  11989.  
  11990. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulYposition ΓòÉΓòÉΓòÉ
  11991.  
  11992.  ulYposition (ULONG) 
  11993.     This item is set to the desired Y-coordinate position of the caption 
  11994.     window. 
  11995.  
  11996.  
  11997. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulColumns ΓòÉΓòÉΓòÉ
  11998.  
  11999.  ulColumns (ULONG) 
  12000.     This item is set to the desired number of columns to display in the caption 
  12001.     window. 
  12002.  
  12003.  
  12004. ΓòÉΓòÉΓòÉ 19.5. CC_START_PARMS ΓòÉΓòÉΓòÉ
  12005.  
  12006. This data structure contains information for the ccSendCommand function when 
  12007. using the CC_START message. 
  12008.  
  12009. typedef struct _CC_START_PARMS {
  12010.   HWND     hwndOwner;
  12011.   PSZ      pszDeviceID;
  12012.   PSZ      CaptionFile;
  12013. } CC_START_PARMS;
  12014.  
  12015. typedef CC_START_PARMS FAR *PCC_START_PARMS;
  12016.  
  12017.  
  12018. ΓòÉΓòÉΓòÉ <hidden> CC_START_PARMS Field - hwndOwner ΓòÉΓòÉΓòÉ
  12019.  
  12020.  hwndOwner (HWND) 
  12021.     This specifies the handle of the user window.  If this parameter contains a 
  12022.     window handle, then the captioning system will send MM_MCIPOSITIONCHANGE 
  12023.     messages to the window when it is through with them.  If this handle is 
  12024.     NULL, then the application will not receive any MM_MCIPOSITIONCHANGE 
  12025.     messages. 
  12026.  
  12027.  
  12028. ΓòÉΓòÉΓòÉ <hidden> CC_START_PARMS Field - pszDeviceID ΓòÉΓòÉΓòÉ
  12029.  
  12030.  pszDeviceID (PSZ) 
  12031.     This is the ID of the device playing the audio which is to be captioned. If 
  12032.     this parameter is not NULL, then the Caption DLL will request 
  12033.     MM_MCIPOSITIONCHANGE messages from this device.  If this parameter is NULL, 
  12034.     then an error will be returned to the application. 
  12035.  
  12036.  
  12037. ΓòÉΓòÉΓòÉ <hidden> CC_START_PARMS Field - CaptionFile ΓòÉΓòÉΓòÉ
  12038.  
  12039.  CaptionFile (PSZ) 
  12040.     This is a pointer to a NULL terminated string which contains the name of 
  12041.     the caption file.  If this parameter is NULL, or if the file cannot be 
  12042.     opened, then an error will be returned to the application. 
  12043.  
  12044.  
  12045. ΓòÉΓòÉΓòÉ 19.6. CC_STATUS_PARMS ΓòÉΓòÉΓòÉ
  12046.  
  12047. This structure contains information for the ccSendCommand function when using 
  12048. the CC_STATUS message. 
  12049.  
  12050. typedef struct _CC_STATUS_PARMS {
  12051.   ULONG     ulItem;
  12052.   ULONG     ulReturn;
  12053. } CC_STATUS_PARMS;
  12054.  
  12055. typedef CC_STATUS_PARMS FAR *PCC_STATUS_PARMS;
  12056.  
  12057.  
  12058. ΓòÉΓòÉΓòÉ <hidden> CC_STATUS_PARMS Field - ulItem ΓòÉΓòÉΓòÉ
  12059.  
  12060.  ulItem (ULONG) 
  12061.     This is the item whose status is being queried.  It must be set to one of 
  12062.     the following values: 
  12063.  
  12064.     CC_STATUS_TEXT_COLUMNS (1) 
  12065.             Columns of text in the caption window. 
  12066.  
  12067.     CC_STATUS_TEXT_ROWS (2) 
  12068.             Rows of text in the caption window. 
  12069.  
  12070.     CC_STATUS_TEXT_COLOR (3) 
  12071.             Color index of the text color. 
  12072.  
  12073.     CC_STATUS_BACKGROUND_COLOR (4) 
  12074.             Color index of the background color of the text window. 
  12075.  
  12076.     CC_STATUS_X_POSITION (5) 
  12077.             X-coordinate of the captioning window relative to the parent 
  12078.             window. 
  12079.  
  12080.     CC_STATUS_Y_POSITION (6) 
  12081.             Y-coordinate of the captioning window relative to the parent 
  12082.             window. 
  12083.  
  12084.  
  12085. ΓòÉΓòÉΓòÉ <hidden> CC_STATUS_PARMS Field - ulReturn ΓòÉΓòÉΓòÉ
  12086.  
  12087.  ulReturn (ULONG) 
  12088.     This field contains the return value of the queried item. 
  12089.  
  12090.  
  12091. ΓòÉΓòÉΓòÉ 19.7. BOOL ΓòÉΓòÉΓòÉ
  12092.  
  12093. Boolean. 
  12094.  
  12095. Valid values are FALSE, which is 0, and TRUE, which is 1. 
  12096.  
  12097. typedef unsigned long BOOL;
  12098.  
  12099.  
  12100. ΓòÉΓòÉΓòÉ 19.8. HWND ΓòÉΓòÉΓòÉ
  12101.  
  12102. Window handle. 
  12103.  
  12104. typedef LHANDLE HWND;
  12105.  
  12106.  
  12107. ΓòÉΓòÉΓòÉ 19.9. MPARAM ΓòÉΓòÉΓòÉ
  12108.  
  12109. A 4-byte message-dependent parameter structure. 
  12110.  
  12111. typedef VOID *MPARAM;
  12112.  
  12113. Certain elements of information, placed into the parameters of a message, have 
  12114. data types that do not use all four bytes of this data type. The rules 
  12115. governing these cases are: 
  12116.  
  12117.  BOOL      The value is contained in the low word and the high word is 0. 
  12118.  SHORT     The value is contained in the low word and its sign is extended into 
  12119.            the high word. 
  12120.  USHORT    The value is contained in the low word and the high word is 0. 
  12121.  NULL      The entire four bytes are 0. 
  12122.  
  12123.  The structure of this data type depends on the message. For details, see the 
  12124.  description of the particular message. 
  12125.  
  12126.  
  12127. ΓòÉΓòÉΓòÉ 19.10. PSZ ΓòÉΓòÉΓòÉ
  12128.  
  12129. Pointer to a null-terminated string. 
  12130.  
  12131. If you are using C++ **, you may need to use PCSZ. 
  12132.  
  12133. typedef unsigned char *PSZ;
  12134.  
  12135.  
  12136. ΓòÉΓòÉΓòÉ 19.11. SHORT ΓòÉΓòÉΓòÉ
  12137.  
  12138. Signed integer in the range -32 768 through 32 767. 
  12139.  
  12140. #define SHORT short
  12141.  
  12142.  
  12143. ΓòÉΓòÉΓòÉ 19.12. ULONG ΓòÉΓòÉΓòÉ
  12144.  
  12145. Unsigned integer in the range 0 through 4 294 967 295. 
  12146.  
  12147. typedef unsigned long ULONG;
  12148.  
  12149.  
  12150. ΓòÉΓòÉΓòÉ 19.13. USHORT ΓòÉΓòÉΓòÉ
  12151.  
  12152. Unsigned integer in the range 0 through 65 535. 
  12153.  
  12154. typedef unsigned short USHORT;
  12155.  
  12156.  
  12157. ΓòÉΓòÉΓòÉ 19.14. VOID ΓòÉΓòÉΓòÉ
  12158.  
  12159. A data area of undefined format. 
  12160.  
  12161. #define VOID void
  12162.  
  12163.  
  12164. ΓòÉΓòÉΓòÉ 20. High-Level Service API ΓòÉΓòÉΓòÉ
  12165.  
  12166. This section describes audio-enabling macros and the high-level service 
  12167. routines designed to simplify writing macros. The service routines are valuable 
  12168. for many applications and are needed for information presentation facility 
  12169. (IPF) support. 
  12170.  
  12171. The five functions (high-level service API) are: mciPlayFile, 
  12172. mciRecordAudioFile, mciPlayResource, mmioFindElement, and mmioRemoveElement. 
  12173. These functions are located in MCIAPI.DLL. Define INCL_MACHDR and include 
  12174. OS2ME.H in any source that needs access to the high-level service API. The OS/2 
  12175. Multimedia Programming Reference provides a detailed description of these 
  12176. functions. 
  12177.  
  12178. Note:  These functions are also provided as 16-bit functions. The 16-bit 
  12179.        functions include "16" in the function name as follows: 
  12180.  
  12181.      mci16PlayFile 
  12182.      mci16PlayResource 
  12183.      mci16RecordAudioFile 
  12184.      mmio16FindElement 
  12185.      mmio16RemoveElement 
  12186.  
  12187.  The mciPlayFile function plays a multimedia file or waveaudio bundle element 
  12188.  without displaying a device control panel. The mciPlayResource function 
  12189.  operates much the same as mciPlayFile, except that it plays the multimedia 
  12190.  object that is stored in a program resource and is intended for IPF support, 
  12191.  not audio macros.  The function loads the resource using DosGetResource, 
  12192.  creates a MMIO memory file, and opens the default device to play the memory 
  12193.  file. 
  12194.  
  12195.  The mciRecordAudioFile function provides a very simple recorder window 
  12196.  allowing the recording of audio annotations.  The mciRecordAudioFile function 
  12197.  does not return until the recording is complete and the window is closed. This 
  12198.  function creates the file if it does not exist. The mciRecordAudioFile records 
  12199.  digital audio data from the microphone input of the default waveaudio device. 
  12200.  When the file is initially created the settings are PCM, 11 kHz, mono, and the 
  12201.  default sample size of the audio adapter in use. All play and record 
  12202.  operations are performed from beginning to end. 
  12203.  
  12204.  The mmioRemoveElement function removes an element from a compound file and the 
  12205.  mmioFindElement function enumerates elements in a compound file. For more 
  12206.  information on the compound file structure, see RIFF Compound File Overview. 
  12207.  
  12208.  
  12209. ΓòÉΓòÉΓòÉ 20.1. Creating an Audio-Enabled Macro for an Application ΓòÉΓòÉΓòÉ
  12210.  
  12211. Many applications provide macro languages for extending the application's 
  12212. functionality.  This is a possible way to integrate multimedia (usually audio) 
  12213. into existing applications.  The basic function of an audio macro would be to 
  12214. record audio clips (annotations) and play them.  For example, an audio clip can 
  12215. be associated with a location or object in a document such as a spreadsheet or 
  12216. worksheet. 
  12217.  
  12218. Macros can use compound files to reduce the number of files in the system. 
  12219. Compound files provide a convenient way of grouping multimedia objects that are 
  12220. used together. The compound file structure provides for direct access to 
  12221. multimedia data elements. 
  12222.  
  12223. If you were to annotate the cells of a spreadsheet and store the audio clips in 
  12224. a single compound file, the cell labels can be used as element names for the 
  12225. elements in the compound file.  Then the macro can call mciRecordAudioFile and 
  12226. mciPlayFile to record and play back the elements of the compound file.  The 
  12227. compound file can have the same base name as the worksheet and a file extension 
  12228. of .BND. This naming convention identifies which worksheet the audio files 
  12229. belong to.  The macro does not need to keep track of cells that are moved on a 
  12230. worksheet, only the cell name is necessary to access the corresponding audio 
  12231. element of a compound file. 
  12232.  
  12233. The audio file is created when you record or save the audio file.  If you exit 
  12234. from a worksheet and choose not to save changes, the audio file will still 
  12235. exist. There is no way to recover an audio file after it is deleted (using 
  12236. mmioRemoveElement). 
  12237.  
  12238. If a macro uses compound files and elements are deleted with mmioRemoveElement, 
  12239. the size of the compound file does not change. By specifying the 
  12240. MMIO_RE_COMPACT flag, a macro requests that the compound file be compacted 
  12241. after the element is removed. This allows audio recording into an existing wave 
  12242. element that can exceed the current size of the element.  The resulting 
  12243. compound file can be compacted to save disk space. 
  12244.  
  12245.  
  12246. ΓòÉΓòÉΓòÉ 20.2. Creating a REXX Command File Using MCI String Commands ΓòÉΓòÉΓòÉ
  12247.  
  12248. Audio functions can be called with REXX command files.  The audio functions 
  12249. available are mciRxSendString(), mciRxInit(), mciRxExit(), mciRxGetError(), and 
  12250. mciRxGetDeviceID(). OS/2 multimedia provides examples of REXX command files; 
  12251. PLAY.CMD and RECORD.CMD demonstrate how to play and record audio files. 
  12252. Multimedia with REXX, an online reference provided with OS/2 multimedia, 
  12253. contains more detailed information on the REXX string interface. 
  12254.  
  12255.  
  12256. ΓòÉΓòÉΓòÉ 20.3. Duet Player IPF Sample ΓòÉΓòÉΓòÉ
  12257.  
  12258. The Streaming Device Duet Sample (DUET1) uses mciPlayFile to play audio help. 
  12259. When the application receives an HM_INFORM message, mciPlayFile is issued as 
  12260. shown in the following code fragment. 
  12261.  
  12262.  
  12263.     case HM_INFORM:
  12264.  /*
  12265.   * The user has selected the "Play Audio Help" selection in the
  12266.   * IPF help panel.
  12267.   *
  12268.   * To initiate the playing of audio help, we need to issue
  12269.   * mciPlayFile.
  12270.   *
  12271.   * Note that we assume the HM_INFORM message came from the "Play
  12272.   * Audio Help" selection since it is the only :link. with an inform
  12273.   * reftype in the .ipf file.  If there were more, we would have to
  12274.   * check the resource identifier to determine for which selection
  12275.   * this message was generated.
  12276.   */
  12277.  
  12278.  /*
  12279.   * Load the name of the audio help file from the resource.
  12280.   */
  12281.  WinLoadString( hab,
  12282.                 (HMODULE) NULL,
  12283.                 IDS_HELP_WAVEFILE,
  12284.                 (SHORT) sizeof( achAudioHelpFile),
  12285.                 achAudioHelpFile);
  12286.  
  12287.  ulError = mciPlayFile( (HWND)NULL,            /* Ignore owner
  12288.                                                   window            */
  12289.                         (PSZ)achAudioHelpFile, /* Audio file
  12290.                                                   to play           */
  12291.                         MCI_ASYNC,             /* Command processed
  12292.                                                   asynchronously    */
  12293.                         (PSZ)NULL,             /* Ignore title      */
  12294.                         (HWND)NULL );          /* Ignore viewport
  12295.                                                   window            */
  12296.  if (ulError)
  12297.  {
  12298.     ShowMCIErrorMessage( ulError);
  12299.  }
  12300.  return( (MRESULT) 0);
  12301.  
  12302.  
  12303. ΓòÉΓòÉΓòÉ 21. Notices ΓòÉΓòÉΓòÉ
  12304.  
  12305. First Edition (October 1994) 
  12306.  
  12307. The following paragraph does not apply to the United Kingdom or any country 
  12308. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  12309. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  12310. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  12311. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  12312. do not allow disclaimer of express or implied warranties in certain 
  12313. transactions, therefore, this statement may not apply to you. 
  12314.  
  12315. This publication could include technical inaccuracies or typographical errors. 
  12316. Changes are periodically made to the information herein; these changes will be 
  12317. incorporated in new editions of the publication. IBM may make improvements 
  12318. and/or changes in the product(s) and/or the program(s) described in this 
  12319. publication at any time. 
  12320.  
  12321. It is possible that this publication may contain reference to, or information 
  12322. about, IBM products (machines and programs), programming, or services that are 
  12323. not announced in your country.  Such references or information must not be 
  12324. construed to mean that IBM intends to announce such IBM products, programming, 
  12325. or services in your country. 
  12326.  
  12327. Requests for technical information about IBM products should be made to your 
  12328. IBM reseller or IBM marketing representative. 
  12329.  
  12330.  
  12331. ΓòÉΓòÉΓòÉ 21.1. Copyright Notices ΓòÉΓòÉΓòÉ
  12332.  
  12333. COPYRIGHT LICENSE: This publication contains printed sample application 
  12334. programs in source language, which illustrate OS/2 programming techniques. You 
  12335. may copy, modify, and distribute these sample programs in any form without 
  12336. payment to IBM, for the purposes of developing, using, marketing or 
  12337. distributing application programs conforming to the OS/2 application 
  12338. programming interface. 
  12339.  
  12340. Each copy of any portion of these sample programs or any derivative work, which 
  12341. is distributed to others, must include a copyright notice as follows: "(C) 
  12342. (your company name) (year).  All rights reserved." 
  12343.  
  12344. (C) Copyright International Business Machines Corporation 1994. All rights 
  12345. reserved. 
  12346. Note to U.S. Government Users - Documentation related to restricted rights - 
  12347. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  12348. Schedule Contract with IBM Corp. 
  12349.  
  12350.  
  12351. ΓòÉΓòÉΓòÉ 21.2. Disclaimers ΓòÉΓòÉΓòÉ
  12352.  
  12353. References in this publication to IBM products, programs, or services do not 
  12354. imply that IBM intends to make these available in all countries in which IBM 
  12355. operates. Any reference to an IBM product, program or service is not intended 
  12356. to state or imply that only IBM's product, program, or service may be used. Any 
  12357. functionally equivalent product, program, or service that does not infringe any 
  12358. of IBM's intellectual property rights or other legally protectable rights may 
  12359. be used instead of the IBM product, program, or service. Evaluation and 
  12360. verification of operation in conjunction with other products, programs, or 
  12361. services, except those expressly designated by IBM, are the user's 
  12362. responsibility. 
  12363.  
  12364. IBM may have patents or pending patent applications covering subject matter in 
  12365. this document. The furnishing of this document does not give you any license to 
  12366. these patents. You can send license inquiries, in writing, to the IBM Director 
  12367. of Licensing, IBM Corporation, 500 Columbus Avenue, Thornwood, NY 10594, U.S.A. 
  12368.  
  12369. Licensees of this program who wish to have information about it for the purpose 
  12370. of enabling:  (i) the exchange of information between independently created 
  12371. programs and other programs (including this one) and (ii) the mutual use of the 
  12372. information which has been exchanged, should contact IBM Corporation, 
  12373. Department RM1A, 1000 N.W. 51st Street, Boca Raton, FL 33431, U.S.A.  Such 
  12374. information may be available, subject to appropriate terms and conditions, 
  12375. including in some cases, payment of a fee. 
  12376.  
  12377.  
  12378. ΓòÉΓòÉΓòÉ 21.3. Trademarks ΓòÉΓòÉΓòÉ
  12379.  
  12380. The following terms are trademarks of the IBM Corporation in the United States 
  12381. or other countries or both: 
  12382.  
  12383. Audio Visual Connection
  12384. Common User Access
  12385. CUA
  12386. IBM
  12387. Multimedia Presentation Manager/2
  12388. OS/2
  12389. Personal System/2
  12390. Presentation Manager
  12391. PS/2
  12392. Ultimotion
  12393. Workplace Shell
  12394.  
  12395. The following terms are trademarks of other companies: 
  12396.  
  12397.  DVI                           Intel Corporation 
  12398.  Indeo                         Intel Corporation 
  12399.  Philips                       Philips Electronics N.V. 
  12400.  Pioneer                       Pioneer Electronic Corporation 
  12401.  Pro AudioSpectrum 16          Media Vision, Inc. 
  12402.  ReelMagic                     Sigma Designs, Inc. 
  12403.  Sony                          Sony Corporation 
  12404.  Sound Blaster                 Creative Labs, Inc. 
  12405.  WinTV                         Hauppauge Computer Works, Inc. 
  12406.  
  12407.  Windows is a trademark of Microsoft Corporation. 
  12408.  
  12409.  Other company, product, and service names, which may be denoted by a double 
  12410.  asterisk (**), may be trademarks or service marks of others. 
  12411.  
  12412.  
  12413. ΓòÉΓòÉΓòÉ 22. Glossary ΓòÉΓòÉΓòÉ
  12414.  
  12415.  
  12416. ΓòÉΓòÉΓòÉ <hidden> Glossary ΓòÉΓòÉΓòÉ
  12417.  
  12418. Select the starting letter of the glossary term you want to locate. 
  12419.  
  12420.  
  12421. ΓòÉΓòÉΓòÉ <hidden> A ΓòÉΓòÉΓòÉ
  12422.  
  12423.  AB roll Synchronized playback of two recorded video images so that one can 
  12424.    perform effects, such as dissolves, wipes, or inserts, using both images 
  12425.    simultaneously. 
  12426.  
  12427.  ACPA Audio capture and playback adapter. 
  12428.  
  12429.  active matrix A technology that gives every pel (dot) on the screen its own 
  12430.    transistor to control it more accurately.  (This allows for better contrast 
  12431.    and less motion smearing.) 
  12432.  
  12433.  adaptive differential pulse code modulation A bit-rate reduction technique 
  12434.    where the difference in pulse code modulation samples are not compressed 
  12435.    before being stored. 
  12436.  
  12437.  ADC Analog-to-digital converter. 
  12438.  
  12439.  ADPCM Adaptive differential pulse code modulation. 
  12440.  
  12441.  aliasing The phenomenon of generating a false (alias) frequency, along with 
  12442.    the correct one, as an artifact of sampling a signal at discrete points.  In 
  12443.    audio, this produces a "buzz."  In imagery, this produces a jagged edge, or 
  12444.    stair-step effect. 
  12445.  
  12446.  all points addressable (APA) In computer graphics, pertaining to the ability 
  12447.    to address and display or not display each picture element on a display 
  12448.    surface. 
  12449.  
  12450.  AM Animation metafile. 
  12451.  
  12452.  ambience In audio, the reverberation pattern of a particular concert hall, or 
  12453.    listening space. 
  12454.  
  12455.  ambient noise In acoustics, the noise associated with a particular 
  12456.    environment, usually a composite of sounds from many distant or nearby 
  12457.    sources. 
  12458.  
  12459.  American National Standards Institute (ANSI) An organization consisting of 
  12460.    producers, consumers, and general interest groups, that establishes the 
  12461.    procedures by which accredited organizations create and maintain voluntary 
  12462.    industry standards in the United States. 
  12463.  
  12464.  AMF Animation metafile format. 
  12465.  
  12466.  amp See amplifier. 
  12467.  
  12468.  amp-mixer (1) A combination amplifier and mixer that is used to control the 
  12469.    characteristics of an audio signal from one or more audio sources. (2) Also 
  12470.    referred to as an amplifier-mixer. 
  12471.  
  12472.  amplifier (1) A device that increases the strength of input signals (either 
  12473.    voltage or current) (2) Also referred to as an amp. 
  12474.  
  12475.  analog Pertaining to data consisting of continuously variable physical 
  12476.    quantities. Contrast with digital. 
  12477.  
  12478.  analog audio Audio in which all information representing sounds is stored or 
  12479.    transmitted in a continuous-scale electrical signal, such as line level 
  12480.    audio in stereo components. See also digital audio. 
  12481.  
  12482.  analog video Video in which all the information representing images is in a 
  12483.    continuous-scale electrical signal for both amplitude and time. See also 
  12484.    digital video. 
  12485.  
  12486.  analog video overlay See overlay. 
  12487.  
  12488.  analog-to-digital converter (ADC) A functional unit that converts data from an 
  12489.    analog representation to a digital representation. (I) (A) 
  12490.  
  12491.  anchor An area of a display screen that is activated to accept user input. 
  12492.    Synonymous with hot spot, touch area, and trigger. 
  12493.  
  12494.  animate Make or design in such a way as to create apparently spontaneous, 
  12495.    lifelike movement. 
  12496.  
  12497.  animated Having the appearance of something alive. 
  12498.  
  12499.  animated screen capture Recording a computing session for replay on a similar 
  12500.    computer with voice annotation.  (An example is sending a spreadsheet with 
  12501.    an accompanying screen recording as an explanation and overview.) 
  12502.  
  12503.  animatic A limited animation consisting of artwork shot on film or videotape 
  12504.    and edited to serve as an on-screen storyboard. 
  12505.  
  12506.  animation metafile A compound file format, the elements of which are the 
  12507.    frames of animation themselves.  These frames are stored sequentially so 
  12508.    that they can be played back in time by streaming to the video agent. 
  12509.  
  12510.  animation metafile format (AMF) The file format used to store animated frame 
  12511.    sequences. 
  12512.  
  12513.  annotation The linking of an object with another, where the second contains 
  12514.    some information related to the first.  For example, an audio annotation of 
  12515.    a spreadsheet cell might a verbal explanation about the contents of the 
  12516.    cell. 
  12517.  
  12518.  ANSI American National Standards Institute. 
  12519.  
  12520.  anthropomorphic software agent The concept of a simulated agent, seemingly 
  12521.    living inside the computer, that talks to and listens to the user, and then 
  12522.    acts for the user on command. 
  12523.  
  12524.  antiliasing (1) In imagery, using several intensities of colors (a ramp) 
  12525.    between the color of the line and the background color to create the effect 
  12526.    of smoother curves and fewer jagged edges on curves and diagonals. (2) In 
  12527.    imagery or audio, removing aliases by eliminating frequencies above half the 
  12528.    sample frequencies. 
  12529.  
  12530.  AOCA Audio Object Content Architecture. 
  12531.  
  12532.  APA All points addressable. 
  12533.  
  12534.  APA graphics All Points Addressable graphics.  See bit-mapped graphics. 
  12535.  
  12536.  API Application programming interface. 
  12537.  
  12538.  Application programming interface (API). A functional interface supplied by 
  12539.    the operating system or a separately orderable licensed program that allows 
  12540.    an application program written in a high-level language to use specific data 
  12541.    or functions of the operating system or the licensed program. 
  12542.  
  12543.  application-defined video window An application can specify to the multimedia 
  12544.    system that it wants video played in a specific window (controlled by the 
  12545.    application) instead of the default window (controlled by the multimedia 
  12546.    system).  The application-defined video window can be used to implement 
  12547.    advanced features not supported by the default video window.  Also referred 
  12548.    to as an alternate video window. 
  12549.  
  12550.  artifact A product resulting from human activity; in computer activity, a 
  12551.    (usually unwanted) by-product of a process. 
  12552.  
  12553.  aspect ratio (1) On a display screen, the ratio of the maximum length of a 
  12554.    display line to the maximum length of a display column. (2) The ratio of 
  12555.    height to width.  (This term applies to areas or individual pels.)  Refer to 
  12556.    enhanced graphics adapter and video graphics adapter. 
  12557.  
  12558.  asymmetric video compression In multimedia applications, the use of a powerful 
  12559.    computer to compress a video for mastering so that a less powerful (less 
  12560.    expensive) system is needed to decompress it. Contrast with symmetric video 
  12561.    compression. 
  12562.  
  12563.  audible cue A sound generated by the computer to draw a user's attention to, 
  12564.    or provide feedback about, an event or state of the computer.  Audible cues 
  12565.    enhance and reinforce visible cues. 
  12566.  
  12567.  audio Pertaining to the portion of recorded information that can be heard. 
  12568.  
  12569.  audio attribute control Provides access to and operation of the standard audio 
  12570.    attributes: mute, volume, balance, treble, and bass. All device 
  12571.    communication and user interface support is handled by the control. 
  12572.  
  12573.  audio attributes Refers to the standard audio attributes. mute, volume, 
  12574.    balance, treble and bass. 
  12575.  
  12576.  audio clip A section of recorded audio material. 
  12577.  
  12578.  Audio Object Content Architecture A data format for multimedia products. 
  12579.  
  12580.  audio processing Manipulating digital audio to, for example, edit or create 
  12581.    special effects. 
  12582.  
  12583.  audio segment A contiguous set of recorded data from an audio track.  An audio 
  12584.    segment might or might not be associated with a video segment. 
  12585.  
  12586.  audio track (1) The audio (sound) portion of the program. (2) The physical 
  12587.    location where the audio is placed beside the image.  (A system with two 
  12588.    audio tracks can have either stereo sound or two independent audio tracks.) 
  12589.    (3) Synonymous with sound track. 
  12590.  
  12591.  Audio Visual Connection (AVC) An authoring system used on an IBM PS/2 to 
  12592.    develop and display audiovisual productions. 
  12593.  
  12594.  audiovisual A generic term referring to experiences, equipment, and materials 
  12595.    used for communication that make use of both hearing and sight. 
  12596.  
  12597.  audiovisual computer program A computer program that makes use of both hearing 
  12598.    and sight. 
  12599.  
  12600.  authoring A structured approach to combining all media elements within an 
  12601.    interactive production, assisted by computer software designed for this 
  12602.    purpose. 
  12603.  
  12604.  authoring system A set of tools used to create an interactive multimedia 
  12605.    application without implementing formal programming. 
  12606.  
  12607.  AVI file format The Audio/Video Interleaved (AVI) file format is the standard 
  12608.    file format used to support software motion video.  AVI files can contain 
  12609.    multiple streams (tracks) of data (for example, a video and an audio 
  12610.    stream).  The streams may be interleaved to improve access times during 
  12611.    playback. The present implementation is limited to a single video stream and 
  12612.    a single, optional, audio stream. 
  12613.  
  12614.  
  12615. ΓòÉΓòÉΓòÉ <hidden> B ΓòÉΓòÉΓòÉ
  12616.  
  12617.  background image The part of a display image, such as a form overlay, that is 
  12618.    not changed during a particular sequence of transactions. Contrast with 
  12619.    foreground image. 
  12620.  
  12621.  background music In videotaping, music that accompanies dialog or action. 
  12622.  
  12623.  balance For audio, refers to the relative strength of the left and right 
  12624.    channels.  A balance level of 0 is left channel only.  A balance level of 
  12625.    100 is right channel only. 
  12626.  
  12627.  basic input/output system (BIOS) In an IBM personal computer, microcode that 
  12628.    controls basic hardware operations, such as interactions with diskette 
  12629.    drives, hard disk drives, and the keyboard.  (For example, the IBM Enhanced 
  12630.    Graphics Adapter has an addressable BIOS, located on the adapter itself, 
  12631.    that is used to control the IBM InfoWindow. 
  12632.  
  12633.  beta format A consumer and industrial 0.5-inch tape format. 
  12634.  
  12635.  BG Script abbreviation for background. 
  12636.  
  12637.  BIOS Basic input/output system. 
  12638.  
  12639.  bit map A coded representation in which each bit, or group of bits, represents 
  12640.    or corresponds to an item, for example, a configuration of bits in main 
  12641.    storage in which each bit indicates whether a peripheral device or a storage 
  12642.    block is available or in which each group of bits corresponds to one pel of 
  12643.    a display image. 
  12644.  
  12645.  bit-block transfer Transfer of a rectangular array of bit-map data. 
  12646.  
  12647.  bit-map graphics A form of graphics whereby all points on the display are 
  12648.    directly addressable.  See also all points addressable. 
  12649.  
  12650.  bitblt Bit-block transfer.  Synonymous with blit. 
  12651.  
  12652.  blit Synonym for bitblt. 
  12653.  
  12654.  blitter Hardware that performs bit-block transfer operations. 
  12655.  
  12656.  BND (1) An internal I/O procedure, provided by the OS/2 multimedia system, 
  12657.    that supports RIFF compound files (commonly called bundle files). (2) The 
  12658.    four-character code (FOURCC) of a bundle file. See RIFF compound file. 
  12659.  
  12660.  BND file A RIFF compound file. 
  12661.  
  12662.  BND IOProc An internal I/O procedure, provided by the OS/2 multimedia system, 
  12663.    that supports the elements in a RIFF compound file. See also CF IOProc. 
  12664.  
  12665.  boom A long, relatively horizontal supporting brace used for holding a 
  12666.    microphone or camera; sometimes used to refer to the machinery that supports 
  12667.    the camera and allows it to move while shooting. 
  12668.  
  12669.  brightness Refers to the level of luminosity of the video signal. A brightness 
  12670.    level of 0 produces a maximally white signal.  A brightness level of 100 
  12671.    produces a maximally black signal. 
  12672.  
  12673.  buffer A portion of storage used to hold input or output data temporarily. 
  12674.  
  12675.  bundle file (BND) A file that contains many individual files, called file 
  12676.    elements, bound together.  The MMIO file manager provides services to 
  12677.    locate, query, and access file elements in a bundle file. (2) A RIFF 
  12678.    compound file. 
  12679.  
  12680.  bus A facility for transferring data between several devices located between 
  12681.    two end points, only one device being able to transmit at a given moment. 
  12682.  
  12683.  buy In videotaping, footage that is judged acceptable for use in the final 
  12684.    video.  Synonymous with keeper. 
  12685.  
  12686.  
  12687. ΓòÉΓòÉΓòÉ <hidden> C ΓòÉΓòÉΓòÉ
  12688.  
  12689.  CAI Computer-assisted instruction.  Synonymous with CBT. 
  12690.  
  12691.  calibration The adjustment of a piece of equipment so that it meets normal 
  12692.    operational standards.  (For example, for the IBM InfoWindow system, 
  12693.    calibration refers to touching a series of points on the screen so that the 
  12694.    system can accurately determine their location for further reference.) 
  12695.  
  12696.  camcorder A compact, hand-held video camera with integrated videotape 
  12697.    recorder. 
  12698.  
  12699.  capture To take a snapshot of motion video and retain it in memory.  The video 
  12700.    image may then be saved to a file or restored to the display. 
  12701.  
  12702.  cast animation (1) A sequence of frames consisting of manipulations of 
  12703.    graphical objects. (2) The action of bringing a computer program, routine, 
  12704.    or subroutine into effect, usually by specifying the entry conditions and 
  12705.    jumping to an entry point.  See also frame animation. 
  12706.  
  12707.  CAV Constant angular velocity. 
  12708.  
  12709.  CBT Computer-based training.  Synonym for CAI. 
  12710.  
  12711.  CCITT Comite Consultatif International Telegraphique et Telephonique. The 
  12712.    International Telegraph and Telephone Consultative Committee. 
  12713.  
  12714.  CD Compact disc. 
  12715.  
  12716.  CD-DA Compact disc, digital audio. 
  12717.  
  12718.  CD-I Compact Disc-Interactive. 
  12719.  
  12720.  CD-ROM Compact disc, read-only memory. 
  12721.  
  12722.  CD-ROM XA Compact disc, read-only memory extended architecture. 
  12723.  
  12724.  cel A single frame (display screen) of an animation.  (The term originated in 
  12725.    cartooning days when the artist drew each image on a sheet of celluloid 
  12726.    film.) 
  12727.  
  12728.  CF IOProc An internal I/O procedure, provided by the OS/2 multimedia system, 
  12729.    that supports RIFF compound files.  The CF IOProc operates on the entire 
  12730.    compound file (rather than on the elements in a RIFF compound file, as with 
  12731.    the BND IOProc).  The CF IOProc is limited to operations required by the 
  12732.    system to ensure storage system transparency at the application level. See 
  12733.    also BND IOProc. 
  12734.  
  12735.  CGA Color graphics adapter. 
  12736.  
  12737.  CGRP Compound file resource group. 
  12738.  
  12739.  channel mapping The translation of a MIDI channel number for a sending device 
  12740.    to an appropriate channel for a receiving device. 
  12741.  
  12742.  check disc A videodisc produced from the glass master that is used to check 
  12743.    the quality of the finished interactive program. 
  12744.  
  12745.  chord To press more than one button at a time on a pointing device. 
  12746.  
  12747.  chroma signal The portion of image information that provides the color (hue 
  12748.    and saturation). 
  12749.  
  12750.  chroma-key color The specified first color in a combined signal.  See also 
  12751.    chroma-keying. 
  12752.  
  12753.  chroma-keying Combining two video signals that are in sync.  The combined 
  12754.    signal is the second signal whenever the first is of some specified color, 
  12755.    called the chroma-key color, and is the first signal otherwise.  (For 
  12756.    example, the weatherman stands in front of a blue background - blue is the 
  12757.    chroma-key color.)  At home, the TV viewer sees the weather map in place of 
  12758.    the chroma-key color, with the weatherman suspended in front. 
  12759.  
  12760.  chrominance The difference between a color and a reference white of the same 
  12761.    luminous intensity. 
  12762.  
  12763.  chunk (1) The basic building block of a RIFF file. (2) A RIFF term for a 
  12764.    formalized data area.  There are different types of chunks, depending on the 
  12765.    chunk ID. See LIST chunk and RIFF chunk. 
  12766.  
  12767.  chunk ID A four-character code (FOURCC) that identifies the representation of 
  12768.    the chunk data. 
  12769.  
  12770.  circular slider control A knob-like control that performs like a control on a 
  12771.    TV or stereo. 
  12772.  
  12773.  circular slider knob A knob-like dial that operates like a control on a 
  12774.    television or stereo. 
  12775.  
  12776.  class A categorization or grouping of objects that share similar behaviors and 
  12777.    characteristics.  Synonymous with object class. 
  12778.  
  12779.  click To press and release a button on a pointing device without moving the 
  12780.    pointer off the object or choice.  See double-click. 
  12781.  
  12782.  clip A section of recorded, filmed, or videotaped material.  See also audio 
  12783.    clip and video clip. 
  12784.  
  12785.  close-up In videotaping, the picture obtained when the camera is positioned to 
  12786.    show only the head and shoulders of a subject; in the case of an object, the 
  12787.    camera is close enough to show details clearly. See also extreme close-up. 
  12788.  
  12789.  closed circuit A system of transmitting television signals from a point of 
  12790.    origin to one or many restricted destination points specially equipped to 
  12791.    receive the signals. 
  12792.  
  12793.  CLP Common loader primitive. 
  12794.  
  12795.  CODEC compressor/decompressor. 
  12796.  
  12797.  CLUT Color look-up table.  Synonym for color palette. 
  12798.  
  12799.  CLV Constant linear velocity. 
  12800.  
  12801.  collaborative document production A system feature that provides the ability 
  12802.    for a group of people to manage document production. 
  12803.  
  12804.  collision An unwanted condition that results from concurrent transmissions on 
  12805.    a channel. (T)  (For example, an overlapping condition that occurs when one 
  12806.    sprite hides another as it passes over it.) 
  12807.  
  12808.  color cycling An animation effect in which colors in a series are displayed in 
  12809.    rapid succession. 
  12810.  
  12811.  color graphics adapter (CGA) An adapter that simultaneously provides four 
  12812.    colors and is supported on all IBM Personal Computer and Personal System/2. 
  12813.  
  12814.  color palette A set of colors that can be displayed on the screen at one time. 
  12815.    This can be a standard set used for all images or a set that can be 
  12816.    customized for each image.  Synonymous with CLUT. See also standard palette 
  12817.    and custom palette. 
  12818.  
  12819.  colorization The color tinting of a monochrome original. 
  12820.  
  12821.  common loader primitive A system service that provides a high-level interface 
  12822.    to hardware-specific loaders. 
  12823.  
  12824.  common user access (CUA) (1) Guidelines for the dialog between a human and a 
  12825.    workstation or terminal. (2) One of the three SAA architectural areas. 
  12826.  
  12827.  compact disc (CD) A disc, usually 4.75 inches in diameter, from which data is 
  12828.    read optically by means of a laser. 
  12829.  
  12830.  Compact Disc-Interactive (CD-I) A low-cost computer, being developed by N.V. 
  12831.    Phillips (The Netherlands) and Sony (Japan), that plugs into standard 
  12832.    television sets to display text and video stored on compact discs. 
  12833.  
  12834.  compact disc, digital audio (CD-DA) The specification for audio compact discs. 
  12835.    See also Redbook audio. 
  12836.  
  12837.  compact disc, read-only memory (CD-ROM) High-capacity, read-only memory in the 
  12838.    form of an optically read compact disc. 
  12839.  
  12840.  compact disc, read-only memory extended architecture (CD-ROM XA) An extension 
  12841.    to CD-ROM supporting additional audio and video levels for compression and 
  12842.    interlacing of audio, video, and digital data. 
  12843.  
  12844.  component video A video signal using three signals, one of which is luminance, 
  12845.    and the other two of which are the color vectors. See also composite video 
  12846.    and S-video. 
  12847.  
  12848.  composed view A view of an object in which relationships of the parts 
  12849.    contribute to the overall meaning.  Composed views are provided primarily 
  12850.    for data objects. 
  12851.  
  12852.  composite The combination of two or more film, video, or electronic images 
  12853.    into a single frame or display.  See also composite video. 
  12854.  
  12855.  composite monitor A monitor that can decode a color image from a single 
  12856.    signal, such as NTSC or PAL. Contrast with RGB. 
  12857.  
  12858.  composite object An object that contains other objects.  For example, a 
  12859.    document object that contains not only text, but graphics, audio, image, 
  12860.    and/or video objects, each of which can be manipulated separately as an 
  12861.    individual object. 
  12862.  
  12863.  composite video A single signal composed of chroma, luminance, and sync.  NTSC 
  12864.    is the composite video that is currently the U.S. standard for television. 
  12865.    See also component video and S-video. 
  12866.  
  12867.  compound device A multimedia device model for hardware that requires 
  12868.    additional data objects, referred to as device elements, before multimedia 
  12869.    operations can be performed. 
  12870.  
  12871.  compound file A file that contains multiple file elements. 
  12872.  
  12873.  compound file resource group (CGRP) A RIFF chunk that contains all the 
  12874.    compound file elements, concatenated together. 
  12875.  
  12876.  compound file table of contents (CTOC) A RIFF chunk that indexes the CGRP 
  12877.    chunk, which contains the actual multimedia data elements.  Each entry 
  12878.    contains the name of, and other information about, the element, including 
  12879.    the offset of the element within the CGRP chunk.  All the CTOC entries of a 
  12880.    table are of the same length and can be specified when the file is created. 
  12881.  
  12882.  compressor/decompressor (CODEC) An algorithm implemented either in hardware or 
  12883.    software that can either compress or decompress a data object.  For example, 
  12884.    a CODEC procedure can compress raw digital images into a smaller form so 
  12885.    that they use less storage space.  When used in the context of playing 
  12886.    motion video, decompressors reconstruct the original image from the 
  12887.    compressed data.  This is done at a high rate of speed to simulate motion. 
  12888.  
  12889.  computer-controlled device An external video source device with frame-stepping 
  12890.    capability, usually a videodisc player, whose output can be controlled by 
  12891.    the multimedia subsystem. 
  12892.  
  12893.  computer-animated graphics Graphics animated by using a computer, compared to 
  12894.    using videotape or film. 
  12895.  
  12896.  computer-assisted instruction (CAI) A data processing application in which a 
  12897.    computing system is used t assist in the instruction of students.  The 
  12898.    application usually involves a dialog between the student and a computer 
  12899.    program.  An example is the OS/2 tutorial. Synonymous with computer-based 
  12900.    training. 
  12901.  
  12902.  computer-based training (CBT) Synonym for computer-assisted instruction. 
  12903.  
  12904.  conforming Performing final editing on film or video using an offline edited 
  12905.    master as a guide. 
  12906.  
  12907.  connection The establishment of the flow of information from a connector on 
  12908.    one device to a compatible connector on another device. A connection can be 
  12909.    made that is dependent on a physical connection, for example the attachment 
  12910.    of a speaker to an audio adapter with a speaker wire.  A connection can also 
  12911.    be made that is completely internal to the PC, such as the connection 
  12912.    between the waveaudio media device and the ampmix device. See also 
  12913.    connector. 
  12914.  
  12915.  connector A software representation of the physical way in which multimedia 
  12916.    data moves from one device to another. A connector can have an external 
  12917.    representation, such as a headphone jack on a CD-ROM player. A connector can 
  12918.    also have an internal representation, such as the flow of digital 
  12919.    information into an audio adapter. See also connection. 
  12920.  
  12921.  contrast The difference in brightness or color between a display image and the 
  12922.    area in which it is displayed. A contrast level of 0 is minimum difference. 
  12923.    A contrast level of 100 is maximum difference. 
  12924.  
  12925.  constant angular velocity (CAV) Refers to both the format of data stored on a 
  12926.    videodisc and the videodisc player rotational characteristics. CAV 
  12927.    videodiscs contain 1 frame per track.  This allows approximately 30 minutes 
  12928.    of playing time per videodisc side.  CAV videodisc players spin at a 
  12929.    rotational speed (1800 rpm for NTSC or 1500 rpm for PAL) and play 1 frame 
  12930.    per disc revolution.  CAV player support frame accurate searches. allowing 
  12931.    freeze-frame and slow-motion.  See also constant linear velocity. 
  12932.  
  12933.  constant linear velocity (CLV) Refers to both the format of data stored on a 
  12934.    videodisc and the videodisc player rotational characteristics.  CLV 
  12935.    videodiscs contain 1 frame on the innermost track and gradually increase to 
  12936.    3 frames on the outermost track. This allows approximately 1 hour of playing 
  12937.    time per videodisc side. CLV videodisc players vary the rotational speed 
  12938.    from approximately 1800 rpm at the inner tracks to 600 rpm at the outer 
  12939.    tracks (for NTSC). 
  12940.  
  12941.    Currently, few CLV players support frame-accurate searches. They only 
  12942.    support search or play to within one second (30 frames for NTSC or 25 frames 
  12943.    for PAL). See also constant angular velocity. 
  12944.  
  12945.  container An object whose specific purpose is to hold other objects.  A folder 
  12946.    is an example of a container object. 
  12947.  
  12948.  contents view A view of an object that shows the contents of the object in 
  12949.    list form.  Contents views are provided for container objects and for any 
  12950.    object that has container behavior, for example, a device object such as a 
  12951.    printer. 
  12952.  
  12953.  continuity In videotaping, consistency maintained from shot to shot and 
  12954.    throughout the take.  For example, a switch that is on in one shot should 
  12955.    not be off in the next unless it was shown being turned off. 
  12956.  
  12957.  continuous media object A data object that varies over time; a stream-oriented 
  12958.    data object.  Examples include audio, animation, and video. 
  12959.  
  12960.  control A visual user interface component that allows a user to interact with 
  12961.    data. 
  12962.  
  12963.  coordinate graphics (1) Computer graphics in which display images are 
  12964.    generated from display commands and coordinate data. (2) Contrast with 
  12965.    raster graphics. (3) Synonymous with line graphics. 
  12966.  
  12967.  crop To cut off; to trim (for example, a tape). 
  12968.  
  12969.  cross-platform Used to describe applications that are operable with more than 
  12970.    one operating system. 
  12971.  
  12972.  cross-platform transmission Electronic transmission of information (such as 
  12973.    mail) between incompatible operating systems. 
  12974.  
  12975.  crossfade Synonym for dissolve. 
  12976.  
  12977.  CTOC Compound file table of contents. 
  12978.  
  12979.  CU Script abbreviation for close-up. 
  12980.  
  12981.  CUA Common User Access. 
  12982.  
  12983.  cue point A point that the system recognizes as a signal that may be acted 
  12984.    upon. 
  12985.  
  12986.  custom palette A set of colors that is unique to one image or one application. 
  12987.    See also standard palette and color palette. 
  12988.  
  12989.  cut The procedure of instantly replacing a picture from one source with a 
  12990.    picture from another.  (This is the most common form of editing scene to 
  12991.    scene.) 
  12992.  
  12993.  
  12994. ΓòÉΓòÉΓòÉ <hidden> D ΓòÉΓòÉΓòÉ
  12995.  
  12996.  DAC Digital-to-analog converter. 
  12997.  
  12998.  data object In an application, an element of a data structure (such as a file, 
  12999.    an array, or an operand) that is needed for program execution and that is 
  13000.    named or otherwise specified by the allowable character set of the language 
  13001.    in which the program is coded. 
  13002.  
  13003.  data stream All data transmitted through a data channel. 
  13004.  
  13005.  data streaming Real-time, continuous flowing of data. 
  13006.  
  13007.  DCP See device control panel. 
  13008.  
  13009.  decode (1) To convert data by reversing the effect of previous encoding. (2) 
  13010.    To interpret a code. (3) To convert encoded text into plain text by means of 
  13011.    a code system. Contrast with encode. 
  13012.  
  13013.  default video window Refers to where video is displayed when an application 
  13014.    does not indicate an application-defined window with the MCI_WINDOW message. 
  13015.    This is provided by and managed for the application by the multimedia 
  13016.    system. See also application-defined window. 
  13017.  
  13018.  default window See default video window. 
  13019.  
  13020.  delta frame Refers to one or more frames occurring between reference frames in 
  13021.    the output stream.  Unlike a reference frame, which stores a complete image, 
  13022.    a delta frame stores only the changes in the image form one frame to the 
  13023.    next.  See reference frame. 
  13024.  
  13025.  destination rectangle An abstract region that defines the size of an image to 
  13026.    be created during the recording of images for software motion video 
  13027.    playback. The ratio of the size of this rectangle to that of the source 
  13028.    rectangle determines the scaling factor to be applied to the video. 
  13029.  
  13030.  destination window See destination rectangle. 
  13031.  
  13032.  DevHlp Device helper. 
  13033.  
  13034.  device capabilities The functionality of a device, including supported 
  13035.    component functions. 
  13036.  
  13037.  device context The device status and characteristics associated with an opened 
  13038.    instance of a media control interface device. 
  13039.  
  13040.  device control panel (DCP) An integrated set of controls that is used to 
  13041.    control a device or media object (such as by playing, rewinding, increasing 
  13042.    volume, and so on). 
  13043.  
  13044.  device controls See standard multimedia device controls. 
  13045.  
  13046.  device driver A program that contains the code needed to attach and use a 
  13047.    device. 
  13048.  
  13049.  device element A data object, such as a file, utilized by a compound device. 
  13050.  
  13051.  device helper (DevHlp) (1) A kernel service (memory, hardware interrupt, 
  13052.    software interrupt, queuing, semaphore, and so forth) provided to physical 
  13053.    device drivers. (2) A callable C-language or assembler-language routine that 
  13054.    provides an operating system service for an OS/2 device driver. 
  13055.  
  13056.  device object An object that provides a means for communication between a 
  13057.    computer and the outside world.  A printer is an example of a device object. 
  13058.  
  13059.  device sharing (1) The ability to share a device among many different 
  13060.    applications simultaneously.  If a device is opened shareable, the device 
  13061.    context will be saved by the operating system when going from one 
  13062.    application to another application. (2) Allowing a device context to be 
  13063.    switched between media control interface devices. 
  13064.  
  13065.  device-specific format The storage or transmission format used by a device, 
  13066.    especially if it is different from an accepted standard. 
  13067.  
  13068.  dialog In an interactive system, a series of related inquiries and responses 
  13069.    similar to a conversation between two people. 
  13070.  
  13071.  digital Pertaining to data in the form of numeric characters. Contrast with 
  13072.    analog. 
  13073.  
  13074.  digital audio Material that can be heard that has been converted to digital 
  13075.    form. Synonymous with digitized audio. 
  13076.  
  13077.  digital signal processor (DSP) A high-speed coprocessor designed to do 
  13078.    real-time manipulation of signals. 
  13079.  
  13080.  digital video Material that can be seen that has been converted to digital 
  13081.    form. Synonymous with digitized video. 
  13082.  
  13083.  digital video device A device which can record and/or play files containing 
  13084.    digitally stored video. 
  13085.  
  13086.  digital video effects (DVE) An online editing technique that manipulates 
  13087.    on-screen a full video image; activity for creating sophisticated 
  13088.    transitions and special effects.  Digital video effects (DVE) can involve 
  13089.    moving, enlarging, or overlaying pictures. 
  13090.  
  13091.  Digital Video Interactive (DVI) A system for bringing full-screen, full-motion 
  13092.    television pictures and sound to a regular PC.  DVI is a chip set and uses 
  13093.    delta compression; that is, only the image-to-image changes in each frame 
  13094.    are saved rather than the whole frame.  Data (video footage) is compressed 
  13095.    into a form that reduces memory requirements by factors of 100 or greater. 
  13096.    This compressed data is stored on optical discs and can be retrieved at a 
  13097.    rate of 30 frames per second.  (The DVI technology was developed by RCA and 
  13098.    then sold to Intel.  IBM has chosen this technology for future use in the 
  13099.    PS/2.) 
  13100.  
  13101.  digital-to-analog converter (DAC) (1) A functional unit that converts data 
  13102.    from a digital representation to an analog representation. (2) A device that 
  13103.    converts a digital value to a proportional analog signal. 
  13104.  
  13105.  digitize To convert an analog signal into digital format. (An analog signal 
  13106.    during conversion must be sampled at discrete points and quantized to 
  13107.    discrete numbers.) 
  13108.  
  13109.  digitized audio Synonym for digital audio. 
  13110.  
  13111.  digitized video Synonym for digital video. 
  13112.  
  13113.  digitizer A device that converts to digital format any image captured by the 
  13114.    camera. 
  13115.  
  13116.  direct manipulation A set of techniques that allow a user to work with an 
  13117.    object by dragging it with a pointing device or interacting with its pop-up 
  13118.    menu. 
  13119.  
  13120.  direct memory access The transfer of data between memory and input and output 
  13121.    units without processor intervention. 
  13122.  
  13123.  direct-read-after-write (DRAW) disc A videodisc produced directly from a 
  13124.    videotape, one copy at a time.  A DRAW disc usually is used to check program 
  13125.    material and author applications before replicated discs are available. 
  13126.  
  13127.  disc Alternate spelling for disk. 
  13128.  
  13129.  discard stop In data streaming, requests that the data stream be stopped and 
  13130.    the data remaining in the stream buffers be discarded. 
  13131.  
  13132.  disk A round, flat, data medium that is rotated in order to read or write 
  13133.    data. 
  13134.  
  13135.  display image A collection of display elements or segments that are 
  13136.    represented together at any one time on a display surface. See also 
  13137.    background image and foreground image. 
  13138.  
  13139.  dissolve To fade down one picture as the next fades up. Synonymous with 
  13140.    crossfade. 
  13141.  
  13142.  dithering When different pixels in an image are prebiased with a varying 
  13143.    threshold to produce a more continuous gray scale despite a limited palette. 
  13144.    This technique is used to soften a color line or shape.  This technique also 
  13145.    is used for alternating pixel colors to create the illusion of a third 
  13146.    color. 
  13147.  
  13148.  DLL Dynamic-link library. 
  13149.  
  13150.  dolly A wheeled platform for a camera; a camera movement where the tripod on 
  13151.    which the camera is mounted physically moves toward or away from the 
  13152.    subject. 
  13153.  
  13154.  DOS IOProc An internal I/O procedure, provided by the OS/2 multimedia system, 
  13155.    that supports DOS files. 
  13156.  
  13157.  double-click To press and release a button on a pointing device twice without 
  13158.    moving the pointer off of the object or choice. 
  13159.  
  13160.  DRAW disc Direct-read-after-write disc. 
  13161.  
  13162.  drop-frame time code A nonsequential time code used to keep tape time code 
  13163.    matched to real time. Must not be used in tapes intended for videodisc 
  13164.    mastering. 
  13165.  
  13166.  DSP Digital signal processor. 
  13167.  
  13168.  DTMF Dual-tone modulation frequency. 
  13169.  
  13170.  dual plane video system Refers to when graphics from the graphics adapter are 
  13171.    separate from the analog video.  That is, there is a separate graphics plane 
  13172.    and video plane. The analog video appears behind the graphics, showing 
  13173.    through only in the areas that are transparent. Since graphics and video are 
  13174.    separate, capturing the graphics screen will only obtain graphics, and 
  13175.    capturing the video screen will  only obtain video.  This is also true for 
  13176.    restoring images. See also single plane video system. 
  13177.  
  13178.  dual-state push button A push button that has two states, in and out.  It is 
  13179.    used for setting and resetting complementary states, such as Mute and 
  13180.    Unmute. 
  13181.  
  13182.  dual-tone modulation frequency (DTMF) Pushbutton phone tones. 
  13183.  
  13184.  dub To copy a tape; to add (sound effects or new dialog) to a film; to provide 
  13185.    a new audio track of dialog in a different language.  (Often used with "in" 
  13186.    as "dub in".) 
  13187.  
  13188.  DVE Digital video effects. 
  13189.  
  13190.  DVI Digital Video Interface 
  13191.  
  13192.  dynamic icon An icon that changes to convey some information about the object 
  13193.    that it represents.  For example, a folder icon can show a count, indicating 
  13194.    the number of objects contained within the folder.  Also, a tape player icon 
  13195.    can show an animation of turning wheels to indicate that the machine 
  13196.    playing. 
  13197.  
  13198.  dynamic linking A function that enables programs to have external references 
  13199.    to segments of a program that are not included in the program's .EXE file. 
  13200.    See also dynamic-link library (DLL). 
  13201.  
  13202.  dynamic-link library (DLL) A file that has the same format as an .EXE file and 
  13203.    contains the actual dynamic-link run-time code. Contrast with LIB. See also 
  13204.    dynamic linking. 
  13205.  
  13206.  dynamic resource A multimedia program unit of data that resides in system 
  13207.    memory. Contrast with static resource. 
  13208.  
  13209.  
  13210. ΓòÉΓòÉΓòÉ <hidden> E ΓòÉΓòÉΓòÉ
  13211.  
  13212.  earcon An icon with an audio enhancement, such as a ringing telephone. 
  13213.  
  13214.  ECB Event control block. 
  13215.  
  13216.  ECU Script abbreviation for extreme close-up. 
  13217.  
  13218.  edit decision list (EDL) Synonym for edit list. 
  13219.  
  13220.  edit list A list of the specific video footage, with time-code numbers, that 
  13221.    will be edited together to form the program.  It is completed during the 
  13222.    offline edit and used during the online edit. Synonymous with edit decision 
  13223.    list (EDL). 
  13224.  
  13225.  edit master The final videotape from which all copies are made. See also glass 
  13226.    master. 
  13227.  
  13228.  editing Assembling various segments into the composite program. 
  13229.  
  13230.  EDL Edit decision list. 
  13231.  
  13232.  EGA Enhanced graphics adapter. 
  13233.  
  13234.  element (1) A file or other stored data item. (2) An individual file that is 
  13235.    part of a RIFF compound file.  An element of a compound file also could be 
  13236.    an entire RIFF file, a non-RIFF file, an arbitrary RIFF chunk, or arbitrary 
  13237.    binary data. (3) The particular resource within a subarea that is identified 
  13238.    by an element address. 
  13239.  
  13240.  emphasis Highlighting, color change, or other visible indication of the 
  13241.    condition of an object or choice and the effect of that condition on a 
  13242.    user's ability to interact with that object or choice.  Emphasis can also 
  13243.    give a user additional information about the state of an object or choice. 
  13244.  
  13245.  encode To convert data by the use of a code in such a manner that reconversion 
  13246.    to the original form is possible.  Contrast with decode. 
  13247.  
  13248.  enhanced graphics adapter (EGA) A graphics controller for color displays.  The 
  13249.    pel resolution of an enhanced graphics adapter is 3:4. 
  13250.  
  13251.  entry field An area into which a user places text.  Its boundaries are usually 
  13252.    indicated. 
  13253.  
  13254.  erasable optical discs Optical discs that can be erased and written to 
  13255.    repeatedly. 
  13256.  
  13257.  establishing shot In videotaping, a long shot used in the beginning of a 
  13258.    program or segment to establish where the action is taking place and to give 
  13259.    the sense of an environment. 
  13260.  
  13261.  EVCB Event control block. 
  13262.  
  13263.  event An occurrence of significance to a task; for example, the completion of 
  13264.    an asynchronous operation, such as I/O. 
  13265.  
  13266.  event control block (ECB or EVCB) A control block used to represent the status 
  13267.    of an event. 
  13268.  
  13269.  event queue In computer graphics, a queue that records changes in input 
  13270.    devices such as buttons, valuators, and the keyboard.  The event queue 
  13271.    provides a time-ordered list of input events. 
  13272.  
  13273.  event semaphore (1) Used when one or more threads must wait for a single event 
  13274.    to occur. (2) A blocking flag used to signal when an event has occurred. 
  13275.  
  13276.  explicit event An event supported by only some handlers, such as a custom 
  13277.    event unique to a particular type of data. 
  13278.  
  13279.  EXT Script abbreviation for exterior. 
  13280.  
  13281.  extended selection A type of selection optimized for the selection of a single 
  13282.    object.  A user can extend selection to more than one object, if required. 
  13283.    The two kinds of extended selection are contiguous extended selection and 
  13284.    discontiguous extended selection. 
  13285.  
  13286.  extreme close-up The shot obtained when the camera is positioned to show only 
  13287.    the face or a single feature of the subject; in the case of an object, the 
  13288.    camera is close enough to reveal an individual part of the object clearly. 
  13289.  
  13290.  
  13291. ΓòÉΓòÉΓòÉ <hidden> F ΓòÉΓòÉΓòÉ
  13292.  
  13293.  facsimile machine A functional unit that converts images to signals for 
  13294.    transmission over a telephone system or that converts received signals back 
  13295.    to images. 
  13296.  
  13297.  fade To change the strength or loudness of a video or audio signal, as in 
  13298.    "fade up" or "fade down." 
  13299.  
  13300.  fast threads Threads created by an application that provide minimal process 
  13301.    context, for example, just stack, register, and memory.  With the reduced 
  13302.    function, fast threads can be processed quickly. 
  13303.  
  13304.  FAX machine Synonym for facsimile machine. 
  13305.  
  13306.  file cleanup The removal of superfluous or obsolete data from a file. 
  13307.  
  13308.  file compaction Any method of encoding data to reduce its required storage 
  13309.    space. 
  13310.  
  13311.  file element (1) An individual file that is part of a RIFF compound file. (2) 
  13312.    An element of a compound file can also be an entire RIFF file, a non-RIFF 
  13313.    file, an arbitrary RIFF chunk, or arbitrary binary data. See media element. 
  13314.  
  13315.  file format A language construct that specifies the representation, in 
  13316.    character form, of data objects in a file.  For example, MIDI, M-Motion, or 
  13317.    AVC. 
  13318.  
  13319.  file format handler I/O procedure. Provides functions that operate on the 
  13320.    media object of a particular data format.  These functions include opening, 
  13321.    reading, writing, seeking, and closing elements of a storage system. 
  13322.  
  13323.  file format IOProc An installable I/O procedure that is responsible for all 
  13324.    technical knowledge of the format of a specific type of data, such as 
  13325.    headers and data compression schemes.  A file format IOProc manipulates 
  13326.    multimedia data at the element level.  A file format IOProc handles the 
  13327.    element type it was written for and does not rely on any other file format 
  13328.    IOProcs to do any processing.  However, a file format IOProc might need to 
  13329.    call a storage system IOProc to obtain data within a file containing 
  13330.    multiple file elements. See IOProc and storage system IOProc. 
  13331.  
  13332.  final script The finished script that will be used as a basis for shooting the 
  13333.    video. Synonymous with shooting script. 
  13334.  
  13335.  first draft A rough draft of the complete script. 
  13336.  
  13337.  first generation In videotaping, the original or master tape; not a copy. 
  13338.  
  13339.  flashback Interruption of chronological sequence by interjection of events 
  13340.    occurring earlier. 
  13341.  
  13342.  flush stop In data streaming, requests that the source stream handler be 
  13343.    stopped but the target stream handler continue until the last buffer held at 
  13344.    the time the stop was requested is consumed by the target stream handler. 
  13345.  
  13346.  flutter A phenomenon that occurs in a videodisc freeze-frame when both video 
  13347.    fields are not identically matched, thus creating two different pictures 
  13348.    alternating every 1/60th of a second. 
  13349.  
  13350.  fly-by Animation simulating a bird's-eye view of a three-dimensional 
  13351.    environment. 
  13352.  
  13353.  fly-in A DVE where one picture "flies" into another. 
  13354.  
  13355.  folder A container used to organize objects. 
  13356.  
  13357.  footage The total number of running feet of film used (as for a scene). 
  13358.  
  13359.  foreground image The part of a display image that can be changed for every 
  13360.    transaction. Contrast with background image. 
  13361.  
  13362.  form overlay A pattern such as a report form, grid, or map used as background 
  13363.    for a display image. 
  13364.  
  13365.  form type A field in the first four bytes of the data field of a RIFF chunk. 
  13366.    It is a four-character code identifying the format of the data stored in the 
  13367.    file.  A RIFF form is a chunk with a chunk ID of RIFF. For example, waveform 
  13368.    audio files (WAVE files) have a form type of WAVE. 
  13369.  
  13370.  Format 0 MIDI file All MIDI data is stored on a single track. 
  13371.  
  13372.  Format 1 MIDI file All MIDI data is stored on multiple tracks. 
  13373.  
  13374.  four-character code (FOURCC) A 32-bit quantity representing a sequence of one 
  13375.    to four ASCII alphanumeric characters (padded on the right with blank 
  13376.    characters). Four-character codes are unique identifiers that represent the 
  13377.    file format and I/O procedure. 
  13378.  
  13379.  FOURCC Four-character code. 
  13380.  
  13381.  fps Frames per second. 
  13382.  
  13383.  frame A complete television picture frame is composed of two scanned fields, 
  13384.    one of the even lines and one of the odd lines.  In the NTSC system, a frame 
  13385.    has 525 horizontal lines and is scanned in 1/30th of a second.  In the PAL 
  13386.    system, a frame has 625 horizontal lines and is scanned in 1/25th of a 
  13387.    second. 
  13388.  
  13389.  frame-step recording Refers to the capturing of video and audio data frame by 
  13390.    frame, from a computer-controlled, frame-steppable video source device, or a 
  13391.    previously recorded AVI file. 
  13392.  
  13393.  frame-accurate searches The ability of a videodisc player to play or search to 
  13394.    specific frames on the videodisc via software or remote control.  This 
  13395.    capability is available on all CAV players, but currently only on a few CLV 
  13396.    players. Most CLV players can only search or play to within one second (30 
  13397.    frames for NTSC or 25 frames for PAL). 
  13398.  
  13399.  frame animation A process where still images are shown at a constant rate. See 
  13400.    also cast animation. 
  13401.  
  13402.  frame grabber A device that digitizes video images. 
  13403.  
  13404.  frame number The number used to identify a frame.  On videodisc, frames are 
  13405.    numbered sequentially from 1 to 54,000 on each side and can be accessed 
  13406.    individually; on videotape, the numbers are assigned by way of the SMPTE 
  13407.    time code. 
  13408.  
  13409.  frame rate The speed at which the frames are scanned.  For a videodisc player, 
  13410.    the speed at which frames are scanned is 30 frames a second for NTSC video 
  13411.    and 25 frames a second in PAL video.  For most videotape devices, the speed 
  13412.    is 24 frames a second. 
  13413.  
  13414.  freeze Disables updates to all or part of the video buffer. The last video 
  13415.    displayed remains visible. See also unfreeze. 
  13416.  
  13417.  freeze-frame A frame of a motion-picture film that is repeated so as to give 
  13418.    the illusion of a still picture. 
  13419.  
  13420.  full-frame time code A standardized method, set by the Society of Motion 
  13421.    Picture and Television Engineers (SMPTE), of address coding a videotape.  It 
  13422.    gives an accurate frame count rather than an accurate clock time. Synonymous 
  13423.    with nondrop time code. 
  13424.  
  13425.  full-motion video Video playback at 30 frames per second for NTSC signals or 
  13426.    25 frames per second for PAL signals. 
  13427.  
  13428.  
  13429. ΓòÉΓòÉΓòÉ <hidden> G ΓòÉΓòÉΓòÉ
  13430.  
  13431.  game port A connector on a computer used to attach hardware devices, such as 
  13432.    joy sticks. 
  13433.  
  13434.  GDT Global Descriptor Table. 
  13435.  
  13436.  general purpose interface bus An adapter that controls the interface between 
  13437.    the PC, Personal Computer XT or Personal Computer AT and, for example, the 
  13438.    InfoWindow display; also known as the IBM IEEE 488. 
  13439.  
  13440.  genlock A device that comes on an adapter or plugs into a computer port and 
  13441.    provides the technology to overlay computer-generated titles and graphics 
  13442.    onto video images.  It does this by phase-locking the sync generation of two 
  13443.    video signals together so they can be merged. Genlock also converts a 
  13444.    digital signal to NTSC or PAL format.  (For example, flying logos and 
  13445.    scrolling text on television shows are overlaid using a genlock.) 
  13446.  
  13447.  glass master The final videodisc format from which copies are made. 
  13448.  
  13449.  Global Descriptor Table (GDT) Defines code and data segments available to all 
  13450.    tasks in an application. 
  13451.  
  13452.  GOCA Graphic Object Content Architecture. 
  13453.  
  13454.  Graphic Object Content Architecture (GOCA) (1) A data format for multimedia 
  13455.    products. (2) A push button with graphic, two-state, and animation 
  13456.    capabilities. 
  13457.  
  13458.  graphics overlay The nature of dual plane video systems makes it possible to 
  13459.    place graphics over video.  Only the pels of the designated transparent 
  13460.    color allows the video to show through.  All other graphics pels appear on 
  13461.    top of the video.  Note that the video still exists in the video buffer 
  13462.    under the non-transparent graphics pels. 
  13463.  
  13464.  graphics plane In a dual plane video system, the graphics plane contains 
  13465.    material drawn or generated by the graphics adapter.  The graphics plane 
  13466.    will be combined with the video plane to create an entire display image. 
  13467.  
  13468.  grayscale See greyscale. 
  13469.  
  13470.  greyscale When video is displayed in shades of black and white. 
  13471.  
  13472.  grouping For media control interface devices, refers to the ability to 
  13473.    associate dissimilar devices for a common purpose. 
  13474.  
  13475.  
  13476. ΓòÉΓòÉΓòÉ <hidden> H ΓòÉΓòÉΓòÉ
  13477.  
  13478.  handshaking The exchange of predetermined signals when a connection is 
  13479.    established between two data set devices. 
  13480.  
  13481.  help view A view of an object that provides information to assist users in 
  13482.    working with that object. 
  13483.  
  13484.  HID Handler identification. 
  13485.  
  13486.  High Sierra Group (HSG) (1) A group that set the standards for information 
  13487.    exchange for a CD-ROM. (2) HSG also refers to those standards (HSG 
  13488.    standards). 
  13489.  
  13490.  Hi8 High-band 8mm videotape format. 
  13491.  
  13492.  HMS (1) Hours-minutes-seconds. (2) A time format for videodisc players. 
  13493.  
  13494.  HMSF Hours-minutes-seconds-frames. A time format for videodisc players. 
  13495.  
  13496.  hot spot The area of a display screen that is activated to accept user input. 
  13497.    Synonymous with touch area. 
  13498.  
  13499.  HSG High Sierra Group. 
  13500.  
  13501.  HSI Hue saturation intensity. 
  13502.  
  13503.  hue Describes the position of a color in a range from blue to green.  A hue 
  13504.    level of 0 is maximum blue.  A hue level of 100 is maximum green. Also 
  13505.    referred to as tint. 
  13506.  
  13507.  hue saturation intensity (HSI) A method of describing color in 
  13508.    three-dimensional color space. 
  13509.  
  13510.  HWID Hardware identifier. 
  13511.  
  13512.  hypermedia Navigation or data transfer between connected objects of different 
  13513.    media types.  For example, a user might navigate from an image object to an 
  13514.    audio object that describes the image over a hypermedia link. Or, a 
  13515.    representation of a graph object might be embedded in a document object with 
  13516.    a hypermedia data transfer link, such that when the graph object is changed, 
  13517.    the representation of that object in the document is also changed. 
  13518.  
  13519.  Hytime An ANSI standard proposal that addresses the synchronization and 
  13520.    linking of multimedia objects. 
  13521.  
  13522.  
  13523. ΓòÉΓòÉΓòÉ <hidden> I ΓòÉΓòÉΓòÉ
  13524.  
  13525.  I-frame A video frame that contains information to reconstruct the complete 
  13526.    image. Synonymous with key frame and reference frame. See delta frame. 
  13527.  
  13528.  IDC Inter-device communication mechanism provided by the OS/2 function 
  13529.    ATTACHDD DevHelp. 
  13530.  
  13531.  identifier (1) A sequence of bits or characters that identifies a program, 
  13532.    device, or system to another program, device, or system. (2) In the C 
  13533.    language, a sequence of letters, digits, and underscores used to identify a 
  13534.    data object or function. See four-character code (FOURCC). 
  13535.  
  13536.  IDOCA Integrated Data Object Content Architecture. 
  13537.  
  13538.  image An electronic representation of a video still. 
  13539.  
  13540.  image bitsperpel Pertaining to the number of colors supported by the current 
  13541.    pel format. The currently accepted standard values are those supported by 
  13542.    OS/2 bit maps, for example, 1, 4, 8, or 24 bits per pel.  In addition, 12 
  13543.    bits per pel formats are accepted for YUV images (including the 'yuvb' pel 
  13544.    format for RDIB files). 
  13545.  
  13546.  image buffer A location in memory where video images are stored for later use. 
  13547.  
  13548.  image buffer formats The format or representation of data buffers containing 
  13549.    video images. 
  13550.  
  13551.  image compression The method of compressing video image data to conserve 
  13552.    storage space. 
  13553.  
  13554.  image file format The format or representation of data files containing video 
  13555.    images. 
  13556.  
  13557.  Image Object Content Architecture (IOCA) A data format for multimedia 
  13558.    products. 
  13559.  
  13560.  image pelformat Indicates the color representation that is to be used for 
  13561.    images that are captured and saved.  This normally includes palettized RGB, 
  13562.    true-color RGB, or YUV color formats. 
  13563.  
  13564.  image quality Represents the user's or application's subjective evaluation of 
  13565.    complexity and quality of the image to be captured or saved. This setting is 
  13566.    used to determine specific compression methods to use for saving the image. 
  13567.  
  13568.  implicit event An event that all stream handlers always must support, such as 
  13569.    end of stream or preroll complete). 
  13570.  
  13571.  implicit event An event that all stream handlers always must support, such as 
  13572.    end of stream or preroll complete). 
  13573.  
  13574.  in frame Refers to a subject that is included within the frame. See also 
  13575.    frame. 
  13576.  
  13577.  in-betweening Synonym for tweening. 
  13578.  
  13579.  InfoWindow system A display system that can combine text, graphics, and video 
  13580.    images on a single display.  The minimum system configuration is the IBM 
  13581.    InfoWindow Color Display, a system unit, a keyboard, and one or two 
  13582.    videodisc players. 
  13583.  
  13584.  input locking mask A filter, or mask, that controls which areas of the display 
  13585.    can display or freeze video. 
  13586.  
  13587.  input/output control (IOCtl) A system function that provides a method for an 
  13588.    application to send device-specific control commands to a device driver. 
  13589.  
  13590.  installable I/O procedure A file format handler that provides functions that 
  13591.    operate on the media object of a particular data format.  These functions 
  13592.    include opening, reading, writing, seeking, and closing elements. 
  13593.  
  13594.  INT Script abbreviation for interior. 
  13595.  
  13596.  Integrated Data Object Control Architecture (IDOCA) A data format for 
  13597.    multimedia products. 
  13598.  
  13599.  interactive multimedia The delivery of information content through 
  13600.    combinations of video, computer graphics, sound, and text in a manner that 
  13601.    allows the user to interact. 
  13602.  
  13603.  interactive program A running program that can receive input from the keyboard 
  13604.    or another input device.  Contrast with noninteractive program. 
  13605.  
  13606.  interactive videodisc system (IVS) A system in which a user can interact with 
  13607.    a videodisc display image by entering commands to the computer through a 
  13608.    device such as a keyboard or keypad or by touching a touch-sensitive screen 
  13609.    at specific points on the display surface. 
  13610.  
  13611.  interlace flicker The apparent flicker when one field of an interlaced image 
  13612.    contains more light than the other field due to the placement of image 
  13613.    details with respect to the separate fields.  Two methods used to avoid 
  13614.    interlace flicker:  limit the vertical resolution on natural images (as 
  13615.    opposed to text or graphics); design characters so that each character has 
  13616.    an equal number of pels in each field. 
  13617.  
  13618.  interlacing A characteristic of video image display that results in greater 
  13619.    image clarity.  In effect, the video image is traced across the screen 
  13620.    twice.  (The time delay between the two tracings makes this effect 
  13621.    undesirable for normal computer-generated graphics.)  Synonymous with 
  13622.    interleaving. 
  13623.  
  13624.  interleaving The simultaneous accessing of two or more bytes or streams of 
  13625.    data from distinct storage units. Synonymous with interlacing. 
  13626.  
  13627.  internal I/O procedure An I/O procedure that is built in to the OS/2 
  13628.    multimedia system, including DOS, MEM, and CF IOProcs. 
  13629.  
  13630.  International Organization for Standardization (ISO) An organization of 
  13631.    national standards bodies from various countries established to promote 
  13632.    development of standards to facilitate international exchange of goods and 
  13633.    services, and develop cooperation in intellectual, scientific, 
  13634.    technological, and economic activity. 
  13635.  
  13636.  IOCtl Input/output control. 
  13637.  
  13638.  IOProc A file format handler that provides functions that operate on the media 
  13639.    object of a particular data format.  These processes include opening, 
  13640.    reading, writing, seeking, and closing elements of a storage system.  There 
  13641.    are two classes of I/O procedures: file format and storage system. 
  13642.  
  13643.  iris To fade a picture by operating the iris (aperture) on the camera in a 
  13644.    certain way; the type of computer image dissolve accomplished by operating 
  13645.    the aperture in a certain way. 
  13646.  
  13647.  ISO International Organization for Standardization. 
  13648.  
  13649.  ISP IBM Signal Processor.  An IBM proprietary digital signal processor. 
  13650.  
  13651.  ISPOS IBM Signal Processor Operating System. 
  13652.  
  13653.  ISV Independent software vendor. 
  13654.  
  13655.  items Options, choices or keywords such as one or more of the following 
  13656.    options, choices or keywords can or should be specified.  Sometimes use of 
  13657.    these items can also be exclusive or some items may not be compatible with 
  13658.    other items. 
  13659.  
  13660.  IVS Interactive videodisc system. 
  13661.  
  13662.  
  13663. ΓòÉΓòÉΓòÉ <hidden> J ΓòÉΓòÉΓòÉ
  13664.  
  13665.  JIT Just in time.  (Often used with "learning" as "JIT learning.)  Multimedia 
  13666.    help functions, closely integrated with applications, that employ voice 
  13667.    output to guide the user. 
  13668.  
  13669.  Joint Photographic Experts Group (JPEG) A group that is working to establish a 
  13670.    standard for compressing and storing still images in digital form.  JPEG 
  13671.    also refers to the standard under development by this group (JPEG standard). 
  13672.  
  13673.  joy stick In computer graphics, a lever that can pivot in all directions and 
  13674.    that is used as a locater device.  (Resembles an airplane's joy stick). 
  13675.  
  13676.  JPEG Joint Photographic Experts Group. 
  13677.  
  13678.  
  13679. ΓòÉΓòÉΓòÉ <hidden> K ΓòÉΓòÉΓòÉ
  13680.  
  13681.  keeper Synonym for buy. 
  13682.  
  13683.  kernel The part of the operating system that performs basic functions. 
  13684.  
  13685.  key frames The start and end frames of a single movement in an animation 
  13686.    sequence; also can refer to the periodic full-frame image interspersed in 
  13687.    the stream to allow random starts from these full-frame images (key frames). 
  13688.  
  13689.  keypad A small, often hand-held, keyboard. 
  13690.  
  13691.  
  13692. ΓòÉΓòÉΓòÉ <hidden> L ΓòÉΓòÉΓòÉ
  13693.  
  13694.  laser Light amplification by stimulated emission of radiation; the device that 
  13695.    produces this light. 
  13696.  
  13697.  latency In video, the time it takes for the light from the phosphor screen to 
  13698.    decay after the excitation is removed. Long-persistence phosphor has less 
  13699.    flicker of still images, but more blurring of moving images. 
  13700.  
  13701.  level one videodisc applications Interactive applications based on manual 
  13702.    keypad functions, picture stops, and chapter stops. 
  13703.  
  13704.  level three videodisc applications Interactive applications controlled by an 
  13705.    external computer that uses the videodisc player as a peripheral device. 
  13706.  
  13707.  level two videodisc applications Interactive applications controlled by the 
  13708.    keypad and the videodisc player's internal computer. The control program is 
  13709.    recorded on the videodisc itself. 
  13710.  
  13711.  LIB Dynamic-link definition library.  A file containing the data needed to 
  13712.    build a program .EXE file but which does not contain the dynamic-link 
  13713.    programs themselves. Contrast with dynamic-link library. 
  13714.  
  13715.  light pen A light-sensitive pick device that is used by pointing it at the 
  13716.    display surface. 
  13717.  
  13718.  line graphics Synonym for coordinate graphics. 
  13719.  
  13720.  line pairing A faulty interlace pattern in which the lines of the second field 
  13721.    begin to pair with the lines of the first field rather than fit exactly 
  13722.    within them. 
  13723.  
  13724.  linear audio The analog audio on the linear track of videotape that can be 
  13725.    recorded without erasing existing video; used for audio dubbing after video 
  13726.    is edited. 
  13727.  
  13728.  linear video A sequence of motion footage played from start to finish without 
  13729.    stops or branching, like a movie. 
  13730.  
  13731.  LIST chunk A chunk that contains a list or an ordered sequence of subchunks. 
  13732.  
  13733.  list type (1) A field in the first four bytes of the data field of a LIST 
  13734.    chunk (2) A four-character code identifying the contents of the list. 
  13735.  
  13736.  locked memory An area of memory that is not available for use because it is 
  13737.    being held by another process. 
  13738.  
  13739.  long shot A camera angle that reveals the subject and the surroundings. Often 
  13740.    used as an establishing shot.  Synonymous with wide shot. 
  13741.  
  13742.  LS Script abbreviation for long shot. 
  13743.  
  13744.  luminance signal The portion of image information that provides brightness. 
  13745.    Alone, luminance provides a monochrome image. 
  13746.  
  13747.  
  13748. ΓòÉΓòÉΓòÉ <hidden> M ΓòÉΓòÉΓòÉ
  13749.  
  13750.  M-ACPA M-Audio Capture and Playback Adapter. 
  13751.  
  13752.  M-Audio Capture and Playback Adapter (M-ACPA) An adapter card (for use with 
  13753.    the IBM PS/2 product line) that provides the ability to record and play back 
  13754.    high quality sound.  The adapter converts the audio input (analog) signals 
  13755.    to a digital format that is compressed and stored for later use. 
  13756.  
  13757.  M-Control Program/2 The software interface required for the M-Motion Video 
  13758.    Adapter/A. It consists of APIs or toolkits for DOS, Windows, Windows Media 
  13759.    Control Interface, OS/2, and OS/2 multimedia. It also includes Pioneer and 
  13760.    Sony videodisc player drivers for these environments. See also M-Motion 
  13761.    Video Adapter/A. 
  13762.  
  13763.  M-Motion A multimedia platform that offers analog video in addition to quality 
  13764.    sound and images.  The M-Motion environment consists of the M-Motion Video 
  13765.    Adapter/A and the M-Control Program/2 master stream handler. 
  13766.  
  13767.  M-Motion Video Adapter/A (1) A Micro Channel adapter that receives and 
  13768.    processes signals from multiple video and audio sources, and then sends 
  13769.    these signals to a monitor and speakers. (2) Dual plane video hardware that 
  13770.    offers analog video in addition to quality sound and images. (3) The 
  13771.    M-Motion Video Adapter/A requires the M-Control Program/2. 
  13772.  
  13773.  master stream handler Controls the behavior of one or more subordinate objects 
  13774.    (the slave streams). 
  13775.  
  13776.  matte In film, an opaque piece of art or a model that leaves a selected area 
  13777.    unexposed to be filled on a subsequent pass or in composite. 
  13778.  
  13779.  MCD Media Control Driver. 
  13780.  
  13781.  MDM Media Device Manager. 
  13782.  
  13783.  media More than one hardware medium. 
  13784.  
  13785.  media component A processor of audiovisual information or media.  Media 
  13786.    components can be either internal or external physical devices or defined 
  13787.    mechanisms for effecting higher-level function from internal hardware and 
  13788.    software subsystems.  (An example is a waveform player that utilizes the DSP 
  13789.    subsystem and data streaming services to effect audio playback functions.) 
  13790.  
  13791.  media control driver (MCD) A software implementation or method that effects 
  13792.    the function of a media component.  For OS/2, a media control driver, or 
  13793.    media driver, is a dynamic-link library (or set of libraries) that utilizes 
  13794.    physical device drivers, MCI services, and OS/2 to implement the function of 
  13795.    the media component. 
  13796.  
  13797.  media device capabilities The functionality of a media component, including 
  13798.    component functions that are supported. 
  13799.  
  13800.  media device connection A physical or logical link between media component 
  13801.    connectors for a particular set of media component instances. 
  13802.  
  13803.  media device connector A physical or logical input or output on a media 
  13804.    component. 
  13805.  
  13806.  media device connector index An identifier for a media component connector. 
  13807.  
  13808.  media device ID Media component identification.  A unique identifier for a 
  13809.    component. 
  13810.  
  13811.  media device instance A case of an application's use of a media component. 
  13812.  
  13813.  media component type A class of media components that exhibit similar behavior 
  13814.    and capabilities.  Examples of media component types are analog video 
  13815.    display hardware and MIDI synthesizers. 
  13816.  
  13817.  media control interface A generalized interface to control multimedia devices. 
  13818.    Each device has its own media control interface driver that implements a 
  13819.    standard set of media control interface functions.  In addition, each media 
  13820.    driver can implement functions that are specific to the particular device. 
  13821.  
  13822.  media device capabilities The functionality of a media component, including 
  13823.    supported component functions. 
  13824.  
  13825.  media device connection A physical or logical link between media component 
  13826.    connectors for a particular set of media component instances. 
  13827.  
  13828.  media device connector A physical or logical input or output on a media 
  13829.    component. 
  13830.  
  13831.  media device connector index An identifier for a media component connector. 
  13832.  
  13833.  media device manager (MDM) A system service that, when two or more 
  13834.    applications attempt to control a media device, determines which process 
  13835.    gains access. 
  13836.  
  13837.  media driver A device driver for a multimedia device. See also device driver. 
  13838.  
  13839.  media driver A software implementation or method that effects the function of 
  13840.    a media device. 
  13841.  
  13842.  media element manager (MEM) A system service that manipulates multimedia data. 
  13843.  
  13844.  media programming interface (MPI) A subsystem that provides a comprehensive 
  13845.    system programming API layer for multimedia applications. 
  13846.  
  13847.  media segment An audiovisual object of some type, such as a waveform, song, 
  13848.    video clip, and so on. 
  13849.  
  13850.  media unit A medium on which files are stored; for example, a diskette. 
  13851.  
  13852.  media volume A (possibly heterogeneous) physical or logical collection of 
  13853.    media segments.  (Examples are a videodisc, video tape, compact audio disc, 
  13854.    OFF file, and RIFF file.) 
  13855.  
  13856.  media volume file A media volume that is embodied as a conventional binary 
  13857.    computer file within a computer file system on storage devices such as 
  13858.    disks, diskettes, or CD-ROMs.  Such storage devices can be either local or 
  13859.    remote.  Media volume files can be of various formats, such as OFF or RIFF, 
  13860.    and contain segments of various types. 
  13861.  
  13862.  medium shot A camera angle that reveals more of the subject than a close-up 
  13863.    but less than a wide shot, usually from face to waistline; sometimes called 
  13864.    a mid-shot. 
  13865.  
  13866.  MEM Media element manager. 
  13867.  
  13868.  MEM IOProc An internal I/O procedure provided by the OS/2 multimedia system 
  13869.    that supports memory files. 
  13870.  
  13871.  memory file A block of memory that is perceived as a file by an application. 
  13872.  
  13873.  memory playlist A data structure in the application used to specify the memory 
  13874.    addresses to play from or record to.  The application can modify the 
  13875.    playlist to achieve various effects in controlling the memory stream. 
  13876.  
  13877.  message interface See command message interface. 
  13878.  
  13879.  mid-shot See medium shot. 
  13880.  
  13881.  MIDI Mapper Provides the ability to translate and redirect MIDI messages to 
  13882.    achieve device-independent playback of MIDI sequences. 
  13883.  
  13884.  millisecond One thousandth of a second. 
  13885.  
  13886.  minutes-seconds-frames (MSF) A time format based on the 75-frames-per-second 
  13887.    CD digital audio standard. 
  13888.  
  13889.  MIPS Millions of instructions per second.  A unit of measure of processing 
  13890.    performance equal to one million instructions per second. 
  13891.  
  13892.  mix The combination of audio or video sources during postproduction. 
  13893.  
  13894.  mixed-media system Synonym for multimedia system. 
  13895.  
  13896.  mixer A device used to simultaneously combine and blend several inputs into 
  13897.    one or two outputs. 
  13898.  
  13899.  mixing (1) In computer graphics, the result of the intersection of two or more 
  13900.    colors. (2) In filming, the combining of audio and video sources that is 
  13901.    accomplished during postproduction at the mix. (3) In recording, the 
  13902.    combining of audio sources. 
  13903.  
  13904.  MMIO Multimedia Input/Output. 
  13905.  
  13906.  MMIO file services System services that enable an application to access and 
  13907.    manipulate multimedia data files. 
  13908.  
  13909.  MMIO manager Multimedia input/output manager.  The MMIO manager provides 
  13910.    services to find, query, and access multimedia data objects. It also 
  13911.    supports the functions of memory allocation and file compaction.  The MMIO 
  13912.    manager uses I/O procedures to direct the input and output associated with 
  13913.    reading from and writing to different types of storage systems or file 
  13914.    formats. 
  13915.  
  13916.  MMPM/2 Multimedia Presentation Manager/2.  See OS/2 Multimedia. 
  13917.  
  13918.  MMTIME Standard time and media position format supported by the media control 
  13919.    interface.  This time unit is 1/3000 second, or 333 microseconds. 
  13920.  
  13921.  mode A method of operation in which the actions that are available to a user 
  13922.    are determined by the state of the system. 
  13923.  
  13924.  model The conceptual and operational understanding that a person has about 
  13925.    something. 
  13926.  
  13927.  module A language construct that consists of procedures or data declarations 
  13928.    and that can interact with other constructs. 
  13929.  
  13930.  moire An independent, usually shimmering pattern seen when two geometrically 
  13931.    regular patterns (as a sampling frequency and a correct frequency) are 
  13932.    superimposed.  The moire pattern is an alias frequency. See also aliasing. 
  13933.  
  13934.  monitor See video monitor. 
  13935.  
  13936.  monitor window A graphical window, available from a digital video device, that 
  13937.    displays the source rectangle and any subset of this video capture region. 
  13938.    See also destination rectangle. 
  13939.  
  13940.  motion video capture adapter An adapter that, when attached to a computer, 
  13941.    allows an ordinary television picture to be displayed on all or part of the 
  13942.    screen, mixing high-resolution computer graphics with video; also enables a 
  13943.    video camera to become an input device. 
  13944.  
  13945.  Motion Video Object Content Architecture (MVOCA) A data format for multimedia 
  13946.    products. 
  13947.  
  13948.  motion-control photography A system for using computers to precisely control 
  13949.    camera movements so that the different elements of a shot-models and 
  13950.    backgrounds, for example-can later be composited with a natural and 
  13951.    believable unity. 
  13952.  
  13953.  Moving Pictures Experts Group (MPEG) A group that is working to establish a 
  13954.    standard for compressing and storing motion video and animation in digital 
  13955.    form. 
  13956.  
  13957.  MPEG Moving Pictures Experts Group. 
  13958.  
  13959.  MPI Media Programming Interface. 
  13960.  
  13961.  MPI application services Media Programming Interface application services. 
  13962.    Functional services provided by MPI to application programs and higher-level 
  13963.    programming constructs, such as multimedia controls. 
  13964.  
  13965.  MS Script abbreviation for medium shot. 
  13966.  
  13967.  MSF Minutes-seconds-frames. 
  13968.  
  13969.  multimedia Material presented in a combination of text, graphics, video, 
  13970.    image, animation, and sound. 
  13971.  
  13972.  multimedia data object In an application, an element of a data structure (such 
  13973.    as a file, an array, or an operand) that is needed for program execution and 
  13974.    that is named or otherwise specified by the allowable character set of the 
  13975.    language in which the program is coded. 
  13976.  
  13977.  Multimedia File I/O Services System services that provide a generalized 
  13978.    interface to manipulate multimedia data.  The services support buffered and 
  13979.    unbuffered file I/O, standard RIFF files, and installable I/O procedures. 
  13980.  
  13981.  multimedia input/output (MMIO) (1) System services that provide a variety of 
  13982.    functions for media file access and manipulation. (2) A consistent 
  13983.    programming interface where an application, media driver, or stream handler 
  13984.    can refer to multimedia files, read and write data to the files, and query 
  13985.    the contents of the files, while remaining independent of the underlying 
  13986.    file formats or the storage systems that contain the files. 
  13987.  
  13988.  multimedia navigation system A tool that gives the information product 
  13989.    designer the freedom to link various kinds and pieces of data in a variety 
  13990.    of ways so that users can move through it nonsequentially. 
  13991.  
  13992.  multimedia system A system capable of presenting multimedia material in its 
  13993.    entirety. Synonymous with mixed-media system. 
  13994.  
  13995.  multiple selection A selection technique in which a user can select any number 
  13996.    of objects, or not select any. 
  13997.  
  13998.  multitrack A file containing multiple types of information, such as 
  13999.    interleaved audio and video. 
  14000.  
  14001.  Musical Instrument Digital Interface (MIDI) A protocol that allows a 
  14002.    synthesizer to send signals to another synthesizer or to a computer, or a 
  14003.    computer to a musical instrument, or a computer to another computer. 
  14004.  
  14005.  mute To temporarily turn off the audio for the associated medium. 
  14006.  
  14007.  mutex Mutually exclusive (semaphore). 
  14008.  
  14009.  mux An abbreviation for multiplexer. See also mixer. 
  14010.  
  14011.  MVOCA Motion Video Object Content Architecture. 
  14012.  
  14013.  
  14014. ΓòÉΓòÉΓòÉ <hidden> N ΓòÉΓòÉΓòÉ
  14015.  
  14016.  NAPLPS North American Presentation Level Protocol Syntax. 
  14017.  
  14018.  National Television Standard Committee (NTSC) A committee that defines the 
  14019.    video standard in the United States. 
  14020.  
  14021.  NTSC (1) The video standard in the United States, Canada, Mexico, and Japan. 
  14022.    (2) 525 lines of resolution at 30 frames per second.  (3) See also National 
  14023.    Television Standard Committee. 
  14024.  
  14025.  non-streaming device (1) A device that contains both source and destination 
  14026.    information for multimedia. (2) A device that transmits data (usually 
  14027.    analog) directly, without streaming to system memory. 
  14028.  
  14029.  nondrop time code Synonym for full-frame time code. 
  14030.  
  14031.  noninteractive program A running program that cannot receive input from the 
  14032.    keyboard or other input device. 
  14033.  
  14034.  North American Presentation Level Protocol Syntax (NAPLPS) A protocol used for 
  14035.    display and communication of text and graphics in a videotex system; a form 
  14036.    of vector graphics. 
  14037.  
  14038.  notebook A graphical representation that resembles a perfect bound or spiral 
  14039.    bound notebook that contains pages separated into sections by tabbed divider 
  14040.    pages. A user can turn the pages of a notebook to move from one section to 
  14041.    another. 
  14042.  
  14043.  NTSC National Television Standard Committee. 
  14044.  
  14045.  null streaming (1) The behavior of a stream that can be created and started 
  14046.    but which has no associated data flow. (2) The behavior of a stream that can 
  14047.    be created and started but which has no associated data flow.  For example, 
  14048.    a CD-DA is a non-streaming device. (3) A device that does not stream its 
  14049.    data through the OS/2 multimedia streaming system. For example, a CD-DA 
  14050.    device is a non-streaming device. 
  14051.  
  14052.  
  14053. ΓòÉΓòÉΓòÉ <hidden> O ΓòÉΓòÉΓòÉ
  14054.  
  14055.  object (1) Anything that exists in and occupies space in storage and on which 
  14056.    operations can be performed; for example, programs, files, libraries, and 
  14057.    folders. (2) Anything to which access is controlled; for example, a file, a 
  14058.    program, an area of main storage. (3) See also data object and media object. 
  14059.  
  14060.  object Anything a user can manipulate as a single unit; icons and files are 
  14061.    examples of objects. 
  14062.  
  14063.  object class A categorization or grouping of objects that share similar 
  14064.    behaviors and characteristics. 
  14065.  
  14066.  object connection A link between two objects.  Connections can be used for 
  14067.    navigation, as with hypermedia, or for data transfer between objects. 
  14068.  
  14069.  Object Content Architecture (OCA) A data format for multimedia products. 
  14070.  
  14071.  object decomposition The process of breaking an object into its component 
  14072.    parts. 
  14073.  
  14074.  object orientation An orientation in a user interface in which user attention 
  14075.    is directed toward the objects the user works with, rather than 
  14076.    applications, to perform a task. 
  14077.  
  14078.  object template An object that can be used to create another object of the 
  14079.    same object class.  The template is a basic framework of the object class, 
  14080.    and the newly created object is an instance of the object class. 
  14081.  
  14082.  object-action paradigm A method where users select the object that they want 
  14083.    to work with, then choose the action they wish to perform on that object. 
  14084.    See object orientation. 
  14085.  
  14086.  object-oriented user interface A type of user interface that implements object 
  14087.    orientation and the object-action paradigm. 
  14088.  
  14089.  OCA Object Content Architecture. 
  14090.  
  14091.  OEM Original equipment manufacturer. 
  14092.  
  14093.  OFF Operational file format. 
  14094.  
  14095.  offline edit A preliminary or test edit usually done on a low-cost editing 
  14096.    system using videocassette work tapes.  (An offline edit is done so that 
  14097.    decisions can be made and approvals given prior to the final edit.) 
  14098.  
  14099.  online edit The final edit, using the master tapes to produce a finished 
  14100.    program. 
  14101.  
  14102.  operational file format (OFF) A file format standard. 
  14103.  
  14104.  optical disc A disc with a plastic coating on which information (as sound or 
  14105.    visual images) is recorded digitally as tiny pits and read using a laser. 
  14106.    The three categories of optical discs are CD-ROM, WORM, and erasable. 
  14107.  
  14108.  optical drive Drives that run optical discs. 
  14109.  
  14110.  optical reflective disc A designation of the means by which the laser beam 
  14111.    reads data on an optical videodisc.  In the case of a reflective disc, the 
  14112.    laser beam is reflected off a shiny surface on the disc. 
  14113.  
  14114.  opticals Visual effects produced optically by means of a device (an optical 
  14115.    printer) that contains one camera head and several projectors.  The 
  14116.    projectors are precisely aligned so as to produce multiple exposures in 
  14117.    exact registration on the film as in the camera head. 
  14118.  
  14119.  original footage The footage from which the program is constructed. 
  14120.  
  14121.  OS/2 multimedia A subsystem service of OS/2 that provides a software platform 
  14122.    for multimedia applications.  It defines standard interfaces between 
  14123.    multimedia devices and OS/2 multimedia applications. 
  14124.  
  14125.  overlay The ability to superimpose text and graphics over video. 
  14126.  
  14127.  overlay device (1) Provides support for video overlaying along with video 
  14128.    attribute elements. The video overlaying handles tasks such as displaying, 
  14129.    and sizing video. (2) Also referred to as video overlay device. 
  14130.  
  14131.  
  14132. ΓòÉΓòÉΓòÉ <hidden> P ΓòÉΓòÉΓòÉ
  14133.  
  14134.  PAL See Phase Alteration Line. 
  14135.  
  14136.  palette See color palette, standard palette, and custom palette. 
  14137.  
  14138.  pan A camera movement where the camera moves sideways on its stationary 
  14139.    tripod; left-to-right balance in an audio system. 
  14140.  
  14141.  panel A particular arrangement of information grouped together for 
  14142.    presentation to users in a window. 
  14143.  
  14144.  panning Progressively translating an entire display image to give the visual 
  14145.    impression of lateral movement of the image. 
  14146.  
  14147.    In computer graphics, the viewing of an image that is too large to fit on a 
  14148.    single screen by moving from one part of the image to another. 
  14149.  
  14150.  paradigm An example, pattern, or model. 
  14151.  
  14152.  patch mapping The reassignment of an instrument patch number associated with a 
  14153.    specific synthesizer to the corresponding standard patch number in the 
  14154.    General MIDI specification. 
  14155.  
  14156.  pause To temporarily halt the medium. The halted visual should remain 
  14157.    displayed but no audio should be played. 
  14158.  
  14159.  pause stop In data streaming, a stop that pauses the data stream but does not 
  14160.    disturb any data. 
  14161.  
  14162.  PDC Physical device component. 
  14163.  
  14164.  PDD Physical device driver. 
  14165.  
  14166.  pedestal up/down A camera movement where the camera glides up or down on a 
  14167.    boom. 
  14168.  
  14169.  pel An acronym derived from the words "picture element" that is used when the 
  14170.    associated numerical value is binary, that is, 0 or 1. See also pixel. 
  14171.  
  14172.  Phase Alternation Line (PAL) (1) The video standard in most of Europe, 
  14173.    Australia, and New Zealand. (2) 625 lines of resolution at 25 frames per 
  14174.    second. 
  14175.  
  14176.  physical device driver (PDD) A program that handles hardware interrupts and 
  14177.    supports a set of input and output functions. 
  14178.  
  14179.  picon A  graphic or natural image reduced to icon size.  Similar to thumbnail. 
  14180.  
  14181.  picture element In computer graphics, the smallest element of a display 
  14182.    surface that can be independently assigned color and intensity. 
  14183.  
  14184.  picture-in-picture A video window within a larger video window. 
  14185.  
  14186.  pixel An acronym derived from the words "picture element" that is used when 
  14187.    the associated numerical value defines a gray scale of, for example, 0-255. 
  14188.  
  14189.  plaintext Nonencrypted data. 
  14190.  
  14191.  platform In computer technology, the principles on which an operating system 
  14192.    is based. 
  14193.  
  14194.  playback window A graphical window in which software motion video is 
  14195.    displayed. This window can be supplied by an application, or a default 
  14196.    window can be created by a digital video device. 
  14197.  
  14198.  play backward To play the medium in the backward direction. 
  14199.  
  14200.  play forward To play the medium in the forward direction. 
  14201.  
  14202.  pointer A symbol, usually in the shape of an arrow, that a user can move with 
  14203.    a pointing device.  Users place the pointer over objects they want to work 
  14204.    with. 
  14205.  
  14206.  pointing device A device, such as a mouse, trackball, or joystick, used to 
  14207.    move a pointer on the screen. 
  14208.  
  14209.  polish The version of the script submitted for final approval. 
  14210.  
  14211.  polyphony A synthesizer mode where more than 1 note can be played at a time. 
  14212.    Most synthesizers are 16-note to 32-note polyphonic. 
  14213.  
  14214.  postproduction The online and offline editing process. 
  14215.  
  14216.  PPQN (1) Parts-per-quarter-note. (2) A time format used in musical instrument 
  14217.    digital interface (MIDI). 
  14218.  
  14219.  preproduction The preparation stage for video production, when all logistics 
  14220.    are planned and prepared. 
  14221.  
  14222.  preroll The process of preparing a device to begin a playback or recording 
  14223.    function with minimal latency.  During a multimedia sequence, it might 
  14224.    require that two devices be cued (prerolled) to start playing and recording 
  14225.    at the same time. 
  14226.  
  14227.  primary window A window in which the main interaction between a user and an 
  14228.    object takes place. 
  14229.  
  14230.  Proc See IOProc and CODEC. 
  14231.  
  14232.  production In videotaping, the actual shooting. 
  14233.  
  14234.  production control room The room or location where the monitoring and 
  14235.    switching equipment is placed for the direction and control of a television 
  14236.    production. 
  14237.  
  14238.  progress indicator A control, usually a read-only slider, that informs the 
  14239.    user about the status of a user request. 
  14240.  
  14241.  props In videotaping, support material for the shoot, for example, equipment 
  14242.    being promoted, auxiliary equipment, software, or supplies; anything 
  14243.    provided to make the set look realistic and attractive. 
  14244.  
  14245.  protection master A copy of the edit master that is stored as a backup. 
  14246.  
  14247.  PS/2 CD-ROM-II Drive An IBM CD-ROM drive that can play compact disc digital 
  14248.    audio (CD-DA) and CD-ROM/XA interleaved audio, video, and text, and adheres 
  14249.    to the Small Computer System Interface (SCSI).  The drive can be installed 
  14250.    on Micro Channel and non-Micro Channel IBM PS/2 systems. 
  14251.  
  14252.  pulse code modulation (PCM) In data communication, variation of a digital 
  14253.    signal to represent information. 
  14254.  
  14255.  push button A graphical control, labeled with text, graphics, or both, that 
  14256.    represents an action that will be initiated when a user selects it. For 
  14257.    example, when a user clicks on a Play button, a media object begins playing. 
  14258.  
  14259.  
  14260. ΓòÉΓòÉΓòÉ <hidden> R ΓòÉΓòÉΓòÉ
  14261.  
  14262.  raster graphics Computer graphics in which a display image is composed of an 
  14263.    array of pels arranged in rows and columns. 
  14264.  
  14265.  raw footage Synonym for original footage. 
  14266.  
  14267.  ray-tracing A technique used by 3-D rendering software programs that 
  14268.    automatically figures an object's position in three dimensions and 
  14269.    calculates shadows, reflections, and hidden surfaces based on user-entered 
  14270.    light locations and material characteristics.  (In other words, if the user 
  14271.    orders an object to be a mirror, the computer produces the mirror with all 
  14272.    its correct reflective properties.) 
  14273.  
  14274.  real time (1) Pertaining to the processing of data by a computer in connection 
  14275.    with another process outside the computer according to time requirements 
  14276.    imposed by the outside process.  This term is also used to describe systems 
  14277.    operating in conversational mode and processes that can be influenced by 
  14278.    human intervention while they are in progress. (2) A process control system 
  14279.    or a computer-assisted instruction program, in which response to input is 
  14280.    fast enough to affect subsequent output. 
  14281.  
  14282.  record To transfer data from one source (for example, microphone, CD, 
  14283.    videodisc) or set of sources to another medium. 
  14284.  
  14285.  reference frame Refers to the complete frame that is created at periodic 
  14286.    intervals in the output stream.  An editing operation always begins at a 
  14287.    reference frame. Also referred to as a key frame or an I-frame. See delta 
  14288.    frame. 
  14289.  
  14290.  reference frame interval Frequency with which reference frames are to be 
  14291.    inserted in the output data stream. 
  14292.  
  14293.  Redbook audio The storage format of standard audio CDs. See also compact disc, 
  14294.    digital audio (CD-DA). 
  14295.  
  14296.  reflective disc See optical reflective disc. 
  14297.  
  14298.  render In videotaping, to create a realistic image from objects and light data 
  14299.    in a scene. 
  14300.  
  14301.  repeat A mode which causes the medium to go to the beginning and start 
  14302.    replaying when it reaches the medium's end. 
  14303.  
  14304.  resolution (1) In computer graphics, a measure of the sharpness of an image, 
  14305.    expressed as the number of lines and columns on the display screen or the 
  14306.    number of pels per unit of area. (2) The number of lines in an image that an 
  14307.    imaging system (for example, a telescope, the human eye, a camera, and so 
  14308.    on) can resolve. A higher resolution makes text and graphics appear clearer. 
  14309.  
  14310.  resource As used in the multimedia operating system, any specific unit of data 
  14311.    created or used by a multimedia program. See also static resource and 
  14312.    dynamic resource. 
  14313.  
  14314.  resource handler A system service that loads, saves, and manipulates 
  14315.    multimedia program units of data. 
  14316.  
  14317.  resource interchange file format (RIFF) A tagged file format framework 
  14318.    intended to be the basis for defining new file formats. 
  14319.  
  14320.  resync Recovery processing performed by sync-point services when the failure 
  14321.    of a session, transaction program, or LU occurs during sync-point 
  14322.    processing.  The purpose of resync is to return protected resources to 
  14323.    consistent states. 
  14324.  
  14325.  resync tolerance value A minimum time difference expressed in MMTIME format. 
  14326.  
  14327.  rewind To advance the medium in the backward direction quickly, and optionally 
  14328.    allow the user to scan the medium. 
  14329.  
  14330.  RGB Color coding where the brightness of the additive primary colors of light, 
  14331.    red, green, and blue, are specified as three distinct values of white light. 
  14332.  
  14333.  RIFF Resource interchange file format. 
  14334.  
  14335.  RIFF chunk A chunk with a chunk ID of RIFF.  In a RIFF file, this must be the 
  14336.    first chunk. 
  14337.  
  14338.  RIFF compound file A file containing multiple file elements or one file 
  14339.    element that makes up the entire RIFF file.  The MMIO manager provides 
  14340.    services to find, query, and access any file elements in a RIFF compound 
  14341.    file. Synonymous with bundle file. 
  14342.  
  14343.  rotoscope A camera setup that projects live-action film, one frame at a time, 
  14344.    onto a surface so that an animator can trace complicated movements.  When 
  14345.    filmed, the completed animation matches the motion of the original action. 
  14346.  
  14347.  rough cut (1) The result of the offline edit. (2) A video program that 
  14348.    includes the appropriate footage in the correct order but does not include 
  14349.    special effects. 
  14350.  
  14351.  
  14352. ΓòÉΓòÉΓòÉ <hidden> S ΓòÉΓòÉΓòÉ
  14353.  
  14354.  S-video (1) Separated video or super video. (2) A signal system using a Y/C 
  14355.    format. See also Y/C, composite video, and component video. 
  14356.  
  14357.  S-Video input connector A special connector that separates the chrominance 
  14358.    from the luminance signal. 
  14359.  
  14360.  SAA Systems Application Architecture. 
  14361.  
  14362.  safety An extra shot of a scene that is taken as a backup after an acceptable 
  14363.    shot (the buy) has been acquired. 
  14364.  
  14365.  saturation Refers to the depth of color intensity.  A saturation level of 0 is 
  14366.    no color (greyscale).  A saturation level of 100 is maximum color intensity. 
  14367.    Also referred to as color. 
  14368.  
  14369.  sampler A device that converts real sound into digital information for storage 
  14370.    on a computer. 
  14371.  
  14372.  scan backward To display the video and optionally play the audio while the 
  14373.    medium is advancing in the backward direction rapidly. 
  14374.  
  14375.  scan converter A device that converts digital signal to NTSC or PAL format. 
  14376.  
  14377.  scan forward To display the video and optionally play the audio while the 
  14378.    medium is advancing in the forward direction rapidly. 
  14379.  
  14380.  scan line (1) In a laser printer, one horizontal sweep of the laser beam 
  14381.    across the photoconductor. (2) A single row of picture elements. 
  14382.  
  14383.  scanner A device that examines a spatial pattern, one part after another, and 
  14384.    generates analog or digital signals corresponding to the pattern. 
  14385.  
  14386.  SCB Subsystem control block. 
  14387.  
  14388.  scene A portion of video captured by the camera in one continuous shot.  The 
  14389.    scene is shot repeatedly (each attempt is called a take) until an acceptable 
  14390.    version, called the buy, is taken. 
  14391.  
  14392.  scripting Writing needed dialog. 
  14393.  
  14394.  scroll bar A window component that shows a user that more information is 
  14395.    available in a particular direction and can be scrolled into view. Scroll 
  14396.    bars should not be used to represent an analog setting, like volume. 
  14397.    Sliders should be used. 
  14398.  
  14399.  SCSI Small computer system interface. 
  14400.  
  14401.  SECAM Sequential Couleurs a Memoire.  The French standard for color 
  14402.    television. 
  14403.  
  14404.  second generation A direct copy from the master or original tape. 
  14405.  
  14406.  secondary window A window that contains information that is dependent on 
  14407.    information in a primary window and is used to supplement the interaction in 
  14408.    the primary window. 
  14409.  
  14410.  secondary window manager A sizable dialog manager that enables application 
  14411.    writers to use CUA-defined secondary windows instead of dialog boxes. 
  14412.  
  14413.  selection The act of explicitly identifying one or more objects to which a 
  14414.    subsequent choice will apply. 
  14415.  
  14416.  selection technique The method by which users indicate objects on the 
  14417.    interface that they want to work with. 
  14418.  
  14419.  semaphore (1) A variable that is used to enforce mutual exclusion. (T) (2) An 
  14420.    indicator used to control access to a file; for example, in a multiuser 
  14421.    application, a flag that prevents simultaneous access to a file. 
  14422.  
  14423.  sequencer A digital tape recorder. 
  14424.  
  14425.  set In videotaping, the basic background or area for production. 
  14426.  
  14427.  settings Characteristics of objects that can be viewed and sometimes altered 
  14428.    by the user.  Examples of a file's settings include name, size, and creation 
  14429.    date.  Examples of video clip's settings include brightness, contrast, 
  14430.    color, and tint. 
  14431.  
  14432.  settings view A view of an object that provides a way to change 
  14433.    characteristics and options associated with the object. 
  14434.  
  14435.  SFX Script abbreviation for special effects. 
  14436.  
  14437.  shade To darken with, or as if with, a shadow; to add shading to. 
  14438.  
  14439.  sharpness Refers to the clarity and detail of a video image.  A sharpness 
  14440.    value of 0 causes the video to be generally fuzzy with little detail.  A 
  14441.    sharpness value of 100 causes the video to be generally very detailed, and 
  14442.    may appear grainy. 
  14443.  
  14444.  SHC Stream handler command. 
  14445.  
  14446.  shoot To videotape the needed pictures for the production. 
  14447.  
  14448.  shooting script Synonym for final script. 
  14449.  
  14450.  shot list A list containing each shot needed to complete a production, usually 
  14451.    broken down into a schedule. 
  14452.  
  14453.  simple device A multimedia device model for hardware that does not require any 
  14454.    additional data objects, referred to as device elements, to perform 
  14455.    multimedia operations. 
  14456.  
  14457.  sine wave A waveform that represents periodic oscillations of a pure 
  14458.    frequency. 
  14459.  
  14460.  single plane video system Refers to when video and graphics are combined into 
  14461.    one buffer.  This may appear the same as a dual plane video system, but 
  14462.    since all the data is in one buffer, capture and restore operations will 
  14463.    obtain both graphics and video components in one operation. See also dual 
  14464.    plane video system. 
  14465.  
  14466.  single selection A selection technique in which a user selects one, and only 
  14467.    one, item at a time. 
  14468.  
  14469.  slave stream A stream that is dependent on the master stream to maintain 
  14470.    synchronization. 
  14471.  
  14472.  slave stream handler In SPI, regularly updates the sync pulse EVCB with the 
  14473.    stream time.  The Sync/Stream Manager checks the slave stream handler time 
  14474.    against the master stream time to determine whether to send a sync pulse to 
  14475.    the slave stream handler. 
  14476.  
  14477.  slide-show presentation Synonym for storyboard. 
  14478.  
  14479.  slider A visual component of a user interface that represents a quantity and 
  14480.    its relationship to the range of possible values for that quantity.  A user 
  14481.    can also change the value of the quantity.  Sliders are used for volume and 
  14482.    time control. 
  14483.  
  14484.  slider arm The visual indicator in the slider that a user can move to change 
  14485.    the numerical value. 
  14486.  
  14487.  slider button A button on a slider that a user clicks on to move the slider 
  14488.    arm one increment in a particular direction, as indicated by the directional 
  14489.    arrow on the button. 
  14490.  
  14491.  small computer system interface (SCSI) An input and output bus that provides a 
  14492.    standard interface between the OS/2 multimedia system and peripheral 
  14493.    devices. 
  14494.  
  14495.  SMH Stream manager helper. 
  14496.  
  14497.  SMPTE Society of Motion Picture and Television Engineers. 
  14498.  
  14499.  SMPTE time code A frame-numbering system developed by SMPTE that assigns a 
  14500.    number to each frame of video.  The 8-digit code is in the form HH:MM:SS:FF 
  14501.    (hours, minutes, seconds, frame number).  The numbers track elapsed hours, 
  14502.    minutes, seconds, and frames from any chosen point. 
  14503.  
  14504.  socketable user interface An interface defined by multimedia controls that 
  14505.    enable the interface to be plugged into and unplugged from applications 
  14506.    without affecting the underlying object control subsystem. 
  14507.  
  14508.  sound track Synonym for audio track. 
  14509.  
  14510.  source rectangle An abstract region representing the area available for use by 
  14511.    a video capture adapter.  This area is displayed in the monitor window of a 
  14512.    digital video device.  A subset of the largest possible region to be 
  14513.    captured can be defined; such a subset is indicated by an animated, dashed 
  14514.    rectangle in the monitor window. 
  14515.  
  14516.  source window See source rectangle. 
  14517.  
  14518.  SPCB Stream protocol control block. 
  14519.  
  14520.  special effects In videotaping, any activity that is not live footage, such as 
  14521.    digital effects, computer manipulation of the picture, and nonbackground 
  14522.    music. 
  14523.  
  14524.  SPI Stream programming interface. 
  14525.  
  14526.  split streaming A mechanism provided by the Sync/Stream Manager to create one 
  14527.    data stream source with multiple targets. 
  14528.  
  14529.  SPP A time format based on the number of beats-per-minute in the MIDI file. 
  14530.  
  14531.  sprite An animated object that moves around the screen without affecting the 
  14532.    background. 
  14533.  
  14534.  sprite graphics A small graphics picture, or series of pictures, that can be 
  14535.    moved independently around the screen, producing animated effects. 
  14536.  
  14537.  squeeze-zoom A DVE where one picture is reduced in size and displayed with a 
  14538.    full-screen picture. 
  14539.  
  14540.  SSM Sync/Stream Manager. 
  14541.  
  14542.  standard multimedia device controls These controls provide the application 
  14543.    developer with a CUA compliant interface for controlling audio attributes, 
  14544.    video attributes, and videodisc players. These controls simplify the 
  14545.    programming task required to create the interface and handle the 
  14546.    presentation of the interface and all interaction with the user.  They also 
  14547.    send the media control interface commands to the Media Device Manager (MDM) 
  14548.    for processing. 
  14549.  
  14550.  standard objects A set of common, cross-product objects provided and supported 
  14551.    by the system.  Examples include folders, printers, shredders, and media 
  14552.    players. 
  14553.  
  14554.  standard palette A set of colors that is common between applications or 
  14555.    images. See also custom palette and color palette. 
  14556.  
  14557.  static resource A resource that resides on any read-and-write or read-only 
  14558.    medium. Contrast with dynamic resource. 
  14559.  
  14560.  status area Provides information as to the state of the medium and device, or 
  14561.    both.  It should indicate what button is currently pressed and what modes 
  14562.    (for example, mute) are active. 
  14563.  
  14564.  step backward To move the medium backward one frame or segment at a time. 
  14565.  
  14566.  still A static photograph. 
  14567.  
  14568.  still image See video image. 
  14569.  
  14570.  still video capture adapter An adapter that, when attached to a computer, 
  14571.    enables a video camera to become an input device.  See also motion video 
  14572.    capture adapter. 
  14573.  
  14574.  stop Halt (stops) the medium. 
  14575.  
  14576.  storage system The method or format a functional unit uses to retain or 
  14577.    retrieve data placed within the unit. 
  14578.  
  14579.  storage system IOProc A procedure that unwraps data objects such as RIFF 
  14580.    files, RIFF compound files, and AVC files.  IOProcs are ignorant of the 
  14581.    content of the data they contain.  A storage system IOProc goes directly to 
  14582.    the OS/2 file system (or to memory in the case of a MEM file) and does not 
  14583.    pass information to any other file format or storage system IOProc.  The 
  14584.    internal I/O procedures provided for DOS files, memory files, and RIFF 
  14585.    compound files are examples of storage system IOProcs, because they operate 
  14586.    on the storage mechanism rather than on the data itself. See also file 
  14587.    format IOProc. 
  14588.  
  14589.  storyboard A visual representation of the script, showing a picture of each 
  14590.    scene and describing its corresponding audio. Synonymous with slide-show 
  14591.    presentation. 
  14592.  
  14593.  storyboarding Producing a sequence of still images, such as titles, graphics, 
  14594.    and images, to work out the visual details of a script. 
  14595.  
  14596.  stream To send data from source to destination via buffered system memory. 
  14597.  
  14598.  stream connector A port or connector that a device uses to send or receive. 
  14599.    See also connector. 
  14600.  
  14601.  stream handler A routine that controls a program reaction to a specific 
  14602.    external event through a continuous string of individual data values. 
  14603.  
  14604.  stream handler command (SHC) Synchronous calls provided by both ring 3 DLL 
  14605.    stream handlers as a DLL call and by ring 0 PDD stream handlers as a IDC 
  14606.    call.  The stream handler commands are provided through a single entry 
  14607.    point, SHCEntryPoint, which accepts a parameter structure on input.  This 
  14608.    enables the DLL and PDD interfaces to the stream manager to be the same. 
  14609.  
  14610.  stream manager A system service that controls the registration and activities 
  14611.    of all stream handlers. 
  14612.  
  14613.  stream manager helper (SMH) Routines provided by the stream manager for use by 
  14614.    all stream handlers.  The stream handlers use these helper routines to 
  14615.    register with the manager, report events, and synchronize cues to the 
  14616.    manager to request or return buffers to the manager.  They are synchronous 
  14617.    functions and are available to both ring 3 DLL stream handlers as a DLL call 
  14618.    and to ring 0 PDD stream handlers. 
  14619.  
  14620.  stream programming interface A system service that supports continual flow of 
  14621.    data between physical devices. 
  14622.  
  14623.  stream programming interface (SPI) A system service that supports continual 
  14624.    flow of data between physical devices. 
  14625.  
  14626.  stream protocol control block (SPCB) The system service that controls the 
  14627.    behavior of a specified stream type.  This enables you to subclass a stream 
  14628.    data type, change data buffering characteristics, and alter synchronization 
  14629.    behavior and other stream events. 
  14630.  
  14631.  strike In videotaping, to clear away, remove, or dismantle anything on the 
  14632.    set. 
  14633.  
  14634.  string commands See command string interface. 
  14635.  
  14636.  subchunk The first chunk in a RIFF file is a RIFF chunk; all other chunks in 
  14637.    the file are subchunks of the RIFF chunk. 
  14638.  
  14639.  subclassing The act of intercepting messages and passing them on to their 
  14640.    original intended recipient. 
  14641.  
  14642.  super Titles or graphics overlaid on the picture electronically. See also 
  14643.    superimpose. 
  14644.  
  14645.  superimpose To overlay titles or graphics on the picture electronically. 
  14646.  
  14647.  sweetening (1) The equalization of audio to eliminate noise and obtain the 
  14648.    cleanest and most level sound possible. (2) The addition of laughter to an 
  14649.    audio track. 
  14650.  
  14651.  switching Electronically designating, from between two or more video sources, 
  14652.    which source's pictures are recorded on tape.  Switching can occur during a 
  14653.    shoot or during an edit. 
  14654.  
  14655.  symmetric video compression A technology in which the computer can be used to 
  14656.    create, as well as play back, full-motion, full-color video. 
  14657.  
  14658.  sync Synchronization or synchronized. 
  14659.  
  14660.  sync group A master stream and all its slaves that can be started, stopped, 
  14661.    and searched as a group by using the slaves flag on each of the following 
  14662.    SPI functions: 
  14663.  
  14664.        SpiStartStream 
  14665.        SpiStopStream 
  14666.        SpiSeekStream 
  14667.  
  14668.  sync pulse A system service that enables each slave stream handler to adjust 
  14669.    the activity of that stream so that synchronization can be maintained. Sync 
  14670.    pulses are introduced by transmission equipment into the receiving equipment 
  14671.    to keep the two equipments operating in step. 
  14672.  
  14673.  sync signal Video signal used to synchronize video equipment. 
  14674.  
  14675.  synchronization The action of forcing certain points in the execution 
  14676.    sequences of two or more asynchronous procedures to coincide in time. 
  14677.  
  14678.  synchronous Pertaining to two or more processes that depend upon the 
  14679.    occurrence of specific events such as common timing signals. 
  14680.  
  14681.  synthesizer A musical instrument that allows its user to produce and control 
  14682.    electronically generated sounds. 
  14683.  
  14684.  system message A predefined message sent by the MMIO manager for the message 
  14685.    associated function.  For example, when an application calls mmioOpen, the 
  14686.    MMIO manager sends an MMIOM_OPEN message to an I/O procedure to open the 
  14687.    specified file. 
  14688.  
  14689.  Systems Application Architecture (SAA) A set of IBM software interfaces, 
  14690.    conventions, and protocols that provide a framework for designing and 
  14691.    developing applications that are consistent across systems. 
  14692.  
  14693.  
  14694. ΓòÉΓòÉΓòÉ <hidden> T ΓòÉΓòÉΓòÉ
  14695.  
  14696.  tagged image file format (TIFF) An easily transportable image file type used 
  14697.    by a wide range of multimedia software. 
  14698.  
  14699.  tagged image file format (TIFF) An easily transportable image file type used 
  14700.    by a wide range of multimedia software. 
  14701.  
  14702.  take During the shoot in videotaping, each separate attempt at shooting a 
  14703.    scene. This is expressed as: Scene 1, Take 1; Scene 1, Take 2, and so on. 
  14704.  
  14705.  talent On-screen person (professional or amateur) who appears before the 
  14706.    camera or does voice-over narration. 
  14707.  
  14708.  TAM Telephone answering machine. 
  14709.  
  14710.  tearing Refers to when video is displaced horizontally.  This may be caused by 
  14711.    sync problems. 
  14712.  
  14713.  TelePrompTer A special monitor mounted in front of a camera so that talent can 
  14714.    read text and will appear to be looking at the camera. 
  14715.  
  14716.  thaw See unfreeze. 
  14717.  
  14718.  thumbnail A small representation of an object.  For example, a full screen 
  14719.    image might be presented in a much smaller area in an authoring system time 
  14720.    line.  A picon is an example of a thumbnail. 
  14721.  
  14722.  TIFF Tagged Image File Format time code. 
  14723.  
  14724.  tilt A camera movement where the camera pivots up or down on its stationary 
  14725.    tripod. 
  14726.  
  14727.  timbre The distinctive tone of a musical instrument or human voice that 
  14728.    distinguishes it from other sounds. 
  14729.  
  14730.  time code See SMPTE time code. 
  14731.  
  14732.  time-line processor A type of authoring facility that displays an event as 
  14733.    elements that represent time from the start of the event. 
  14734.  
  14735.  tint See hue. 
  14736.  
  14737.  TMSF A time format expressed in tracks, minutes, seconds, and frames, which is 
  14738.    used primarily by compact disc audio devices. 
  14739.  
  14740.  tone (bass, treble, etc... ) A control that adjusts the various attributes of 
  14741.    the audio. 
  14742.  
  14743.  tool palette A palette containing choices that represent tools, often used in 
  14744.    media editors (such as graphics and audio editors).  For example, a user 
  14745.    might select a "pencil"  choice from the tool palette to draw a line in the 
  14746.    window. 
  14747.  
  14748.  touch area An area of a display screen that is activated to accept user input. 
  14749.    Synonymous with anchor, hot spot, and trigger. 
  14750.  
  14751.  track A path associated with a single Read/Write head as the data medium moves 
  14752.    past it. 
  14753.  
  14754.  track advance To advance the medium to the beginning of the next track. 
  14755.  
  14756.  track reverse To rewind the medium to the beginning of the current track.  If 
  14757.    it is at the beginning of the track it will then jump to the beginning of 
  14758.    the previous track. 
  14759.  
  14760.  transform device A device that modifies a signal or stream received from a 
  14761.    transport device.  Examples are amplifier-mixer and overlay devices. 
  14762.  
  14763.  translator A computer program that can translate.  In telephone equipment the 
  14764.    device that converts dialed digits into call-routine information. 
  14765.  
  14766.  transparency Refers to when a selected color on a graphics screen is made 
  14767.    transparent to allow the video "behind it" to become visible.  Often found 
  14768.    in dual plane video subsystems. 
  14769.  
  14770.  transparent color Video information is considered as being present on the 
  14771.    video plane which is maintained behind the graphics plane.  When an area on 
  14772.    the graphics plane is painted with a transparent color, the video 
  14773.    information in the video plane is made visible. See also dual plane video 
  14774.    system. 
  14775.  
  14776.  transport device A device that plays, records, and positions a media element, 
  14777.    and either presents the result directly or sends the material to a transform 
  14778.    device.  Examples are videodisc players, CD-ROMs, and digital audio (wave) 
  14779.    player. 
  14780.  
  14781.  treatment A detailed design document of the video. 
  14782.  
  14783.  tremolo A vibrating effect of a musical instrument produced by small and rapid 
  14784.    amplitude variations to produce special musical effects. 
  14785.  
  14786.  trigger An area of a display screen that is activated to accept user input. 
  14787.    Synonymous with anchor, hot spot, and touch area. 
  14788.  
  14789.  truck In videotaping, a sideways camera movement of the tripod on which the 
  14790.    camera is mounted. 
  14791.  
  14792.  tweening The process of having the computer draw intermediate animation frames 
  14793.    between key frames.  In other words, the animation tool requires only that 
  14794.    pictures of key sections of a motion be provided; the software calculates 
  14795.    all the in-between movements.  Synonymous with in-betweening. 
  14796.  
  14797.  
  14798. ΓòÉΓòÉΓòÉ <hidden> U ΓòÉΓòÉΓòÉ
  14799.  
  14800.  U-matic A video cassette system using 0.75-inch tape format. 
  14801.  
  14802.  Ultimatte The trade name of a very high-quality, special-effects system used 
  14803.    for background replacement and image composites. 
  14804.  
  14805.  underrun Loss of data caused by the inability of a transmitting device or 
  14806.    channel to provide data to the communication control logic (SDLC or BSC/SS) 
  14807.    at a rate fast enough for the attached data link or loop. 
  14808.  
  14809.  unfreeze (1) To return to action after a freeze. (2) Enables updates to the 
  14810.    video buffer. (3) Also referred to as a thaw. 
  14811.  
  14812.  unidirectional microphone A microphone that responds to sound from only one 
  14813.    direction and is not subject to change of direction.  (A unidirectional 
  14814.    microphone is the type of microphone employed in computers capable of voice 
  14815.    recognition.) 
  14816.  
  14817.  unload To eject the medium from the device. 
  14818.  
  14819.  user interface The area at which a user and an object come together to 
  14820.    interact. As applied to computers, the ensemble of hardware and software 
  14821.    that allows a user to interact with a computer. 
  14822.  
  14823.  user-defined message A private message sent directly to an I/O procedure by 
  14824.    using the mmioSendMessage function.  All messages begin with an MMIOM 
  14825.    prefix, with user-defined messages starting at MMIOM_USER or above. 
  14826.  
  14827.  user's conceptual model A user's mental model about how things should work. 
  14828.    Much of the concepts and expectations that make up the model are derived 
  14829.    from the user's experience with real-world objects of similar type, and 
  14830.    experience with other computer systems. 
  14831.  
  14832.  value set A control used to present a series of mutually exclusive graphical 
  14833.    choices.  A tool palette in a paint program can be implemented using a value 
  14834.    set. 
  14835.  
  14836.  
  14837. ΓòÉΓòÉΓòÉ <hidden> V ΓòÉΓòÉΓòÉ
  14838.  
  14839.  VCR Videocassette recorder. 
  14840.  
  14841.  VDD Virtual device driver. 
  14842.  
  14843.  VDH Virtual device helper. 
  14844.  
  14845.  VDP Video display processor. 
  14846.  
  14847.  vector graphics See coordinate graphics. 
  14848.  
  14849.  vendor-specific driver (VSD) An extension to an MCD to execute 
  14850.    hardware-specific commands. 
  14851.  
  14852.  VHS Very high speed.  A consumer and industrial tape format (VHS format). 
  14853.  
  14854.  vicon A vicon, or video icon, can be an animation or motion video segment in 
  14855.    icon size.  Usually this would be a short, repeating segment, such as an 
  14856.    animation of a cassette tape with turning wheels. 
  14857.  
  14858.  video Pertaining to the portion of recorded information that can be seen. 
  14859.  
  14860.  video aspect ratio See aspect ratio. 
  14861.  
  14862.  video attribute control Provides access to and operation of the standard video 
  14863.    attributes: brightness, contrast, freeze, hue, saturation, and sharpness. 
  14864.    All device communication and user interface support is handled by the 
  14865.    control. 
  14866.  
  14867.  video attributes Refers to the standard video attributes: brightness, 
  14868.    contrast, freeze, hue, saturation, and sharpness. 
  14869.  
  14870.  video clip A section of filmed or videotaped material. 
  14871.  
  14872.  video clipping See clipping. 
  14873.  
  14874.  video digitizer Any system for converting analog video material to digital 
  14875.    representation.  (For example, see DVI.) 
  14876.  
  14877.  video display buffer The buffer containing the visual information to be 
  14878.    displayed.  This buffer is read by the video display controller. 
  14879.  
  14880.  video display controller The graphics or video adapter that connects to a 
  14881.    display and presents visual information. 
  14882.  
  14883.  video encoder A device (adapter) that transforms the high-resolution digital 
  14884.    image from the computer into a standard television signal, thereby allowing 
  14885.    the computer to create graphics for use in video production. 
  14886.  
  14887.  video graphics adapter A graphics controller for color displays.  The pel 
  14888.    resolution of the video graphics adapter is 4:4. 
  14889.  
  14890.  video image A still video image that has been captured. Also referred to as 
  14891.    image or still image. 
  14892.  
  14893.  video monitor A display device capable of accepting a video signal that is not 
  14894.    modulated for broadcast either on cable or over the air; in videotaping, a 
  14895.    television screen located away from the set where the footage can be viewed 
  14896.    as it is being recorded. 
  14897.  
  14898.  video overlay See overlay. 
  14899.  
  14900.  video overlay device See overlay device. 
  14901.  
  14902.  video plane In a dual plane video system, the video plane contains the video. 
  14903.    This video plane will be combined with the graphics plane to create an 
  14904.    entire display image. 
  14905.  
  14906.  video programming interface (VPI) A subsystem that performs output from video 
  14907.    source to video window. 
  14908.  
  14909.  video quality The compression quality level setting to be set for the CODEC. 
  14910.    This value is in the range of 0 (min) - 100 (max). 
  14911.  
  14912.  video record rate Frame rate for recording as an integral number of frames per 
  14913.    second. This sets the target capture rate, but there are no assurances this 
  14914.    rate will be attained.  Drop frame records will be inserted into the output 
  14915.    data stream to indicate frames dropped during the capture/record process. 
  14916.  
  14917.  video record frame duration Frame rate for recording as the time duration of 
  14918.    each frame in microseconds. Useful for setting non-integer frame rates, for 
  14919.    example, 12.5 FPS of a PAL videodisc:  1000000/12.5 = 8000 microseconds. 
  14920.  
  14921.  video signal An electrical signal containing video information.  The signal 
  14922.    must be in some standard format, such as NTSC or PAL. 
  14923.  
  14924.  VSD Vendor-specific driver. 
  14925.  
  14926.  video scaling Expanding or reducing video information in size or area. See 
  14927.    also aspect ratio. 
  14928.  
  14929.  video scan converter A device that emits a video signal in one standard into 
  14930.    another device of different resolution or scan rate. 
  14931.  
  14932.  video segment A contiguous set of recorded data from a video track.  A video 
  14933.    segment might or might not be associated with an audio segment. 
  14934.  
  14935.  video signal An electrical signal containing video information.  The signal 
  14936.    must be in some standard format, such as NTSC or PAL. 
  14937.  
  14938.  video source selection The ability of an application to change to an alternate 
  14939.    video input using the connector command. 
  14940.  
  14941.  video tearing See tearing. 
  14942.  
  14943.  video teleconferencing A means of telecommunication characterized by audio and 
  14944.    video transmission, usually involving several parties.  Desktop video 
  14945.    teleconferencing could involve having the audio and video processed by the 
  14946.    user's computer system, that is, with the other users' voices coming through 
  14947.    the computer's speaker, and video windows of the other users displayed on 
  14948.    the computer's screen. 
  14949.  
  14950.  video windows Graphical PM-style windows in which video is displayed.  Most 
  14951.    often associated with the video overlay device. 
  14952.  
  14953.  videocassette recorder (VCR) A device for recording or playing back 
  14954.    videocassettes. 
  14955.  
  14956.  videodisc A disc on which programs have been recorded for playback on a 
  14957.    computer (or a television set) or a recording on a videodisc.  The most 
  14958.    common format in the United States and Japan is an NTSC signal recorded on 
  14959.    the optical reflective format. 
  14960.  
  14961.  videodisc player control Provides access to and operation of the following 
  14962.    videodisc functions: eject, pause, play forward, play reverse, position, 
  14963.    record, repeat, rewind, scan forward, scan reverse, step forward, step 
  14964.    reverse, and stop. All device communication and user interface support is 
  14965.    handled by the control. 
  14966.  
  14967.  videotape (1) The tape used to record visual images and sound. (2) To make a 
  14968.    videotape of. (3) A recording of visual images and sound made on magnetic 
  14969.    tape.  (All shooting is done in this format, even if the results are later 
  14970.    transferred to videodisc or film.) 
  14971.  
  14972.  videotape recorder (VTR) A device for recording and playing back videotapes. 
  14973.    (The professional counterpart of a consumer VCR.) 
  14974.  
  14975.  videotex A system that provides two-way interactive information services, 
  14976.    including the exchange of alphanumeric and graphic information, over common 
  14977.    carrier facilities to a mass consumer market using modified TV displays with 
  14978.    special decoders and modems. 
  14979.  
  14980.  view The form in which an object is presented.  The four kinds of views are: 
  14981.    composed, contents, settings, and help. 
  14982.  
  14983.  viewport An area on the usable area of the display surface over which the 
  14984.    developer has control of the size, location, and scaling, and in which the 
  14985.    user can view all or a portion of the data outlined by the window. 
  14986.  
  14987.  virtual device driver (VDD) (1) Virtualizes the hardware interfaces of an 
  14988.    option adapter or device, usually to migrate an existing DOS application 
  14989.    into an OS/2 DOS session. (2) Essentially a Dynamic Link Library; a virtual 
  14990.    device driver generally does not interface directly with the hardware. (3) A 
  14991.    32-bit .EXE file that can contain initialization code, initialization data, 
  14992.    and swappable global code. (4) Maintains shadow state of hardware, if 
  14993.    necessary. Allows a DOS session to execute in a window or in the background 
  14994.    by intercepting direct device access and simulating that device. 
  14995.  
  14996.  virtual device helper (VDH) A system service that is available to perform 
  14997.    essential functions. 
  14998.  
  14999.  VO Script abbreviation for voice-over. 
  15000.  
  15001.  voice-over (1) The voice of an unseen narrator in a video presentation. (2) A 
  15002.    voice indicating the thoughts of a visible character without the character' 
  15003.    lips moving. 
  15004.  
  15005.  volume The intensity of sound.  A volume of 0 is minimum volume.  A volume of 
  15006.    100 is maximum volume. 
  15007.  
  15008.  VPI Video programming interface. 
  15009.  
  15010.  VTR Videotape recorder. 
  15011.  
  15012.  
  15013. ΓòÉΓòÉΓòÉ <hidden> W ΓòÉΓòÉΓòÉ
  15014.  
  15015.  walk-through A type of animated presentation that simulates a walking tour of 
  15016.    a three-dimensional scene. 
  15017.  
  15018.  walk-up-and-use interface An interface that the target audience should be able 
  15019.    to use without having to read manuals or instructions, even if they have 
  15020.    never seen the interface. 
  15021.  
  15022.  waveform (1) A graphic representation of the shape of a wave that indicates 
  15023.    its characteristics (such as frequency and amplitude). (2) A digital method 
  15024.    of storing and manipulating audio data. 
  15025.  
  15026.  wide shot Synonym for long shot. 
  15027.  
  15028.  wild footage Synonym for original footage. 
  15029.  
  15030.  window An area of the screen with visible boundaries through which panel 
  15031.    information is displayed. 
  15032.  
  15033.  window An area of the screen with visible boundaries that presents a view of 
  15034.    an object or with which a user conducts a dialog with a computer system. 
  15035.  
  15036.  window coordinates The size and location of a window. 
  15037.  
  15038.  wipe Technical effect of fading away one screen to reveal another. 
  15039.  
  15040.  workplace A container that fills the entire screen and holds all of the 
  15041.    objects that make up the user interface. 
  15042.  
  15043.  write once/read many (WORM) Describes an optical disc that once written to, 
  15044.    cannot be overwritten.  Storage capacity ranges from 400MB to 3.2GB. 
  15045.    Present technology allows only one side to be read at a time; to access the 
  15046.    other side, the disk must be turned over. 
  15047.  
  15048.  WS Script abbreviation for wide shot. 
  15049.  
  15050.  WYSIWYG What You See Is What You Get.  The appearance of the object is in 
  15051.    actual form.  For example, a document that looks the same on a display 
  15052.    screen as it does when it is printed.  Composed views of objects are often 
  15053.    WYSIWYG. 
  15054.  
  15055.  
  15056. ΓòÉΓòÉΓòÉ <hidden> X Y Z ΓòÉΓòÉΓòÉ
  15057.  
  15058.  Y Refers to the luminance portion of a Y/C video signal. 
  15059.  
  15060.  Y/C Color image encoding that separates luminance (Y) and chrominance (C) 
  15061.    signals. 
  15062.  
  15063.  YIQ Image encoding scheme similar to YUV that selects the direction of the two 
  15064.    color axes, I and Q, to align with natural images.  As an average, the I 
  15065.    signal bears much more information than the Q signal.  (YIQ is used in the 
  15066.    NTSC video standard.) 
  15067.  
  15068.  YUV Color image encoding scheme that separates luminance (Y) and two color 
  15069.    signals: red minus Y (U), and blue minus Y (V).  Transmission of YUV can 
  15070.    take advantage of the eye's greater sensitivity to luminance detail than 
  15071.    color detail. 
  15072.  
  15073.  zoom in An optical camera change where the camera appears to approach the 
  15074.    subject it is shooting. 
  15075.  
  15076.  zoom out An optical camera change where the camera appears to back up from the 
  15077.    subject it is shooting. 
  15078.  
  15079.  zooming The progressive scaling of an image in order to give the visual 
  15080.    impression of movement of all or part of a display group toward or away from 
  15081.    an observer. 
  15082.  
  15083.  3-D modeling Presenting material in a three-dimensional format. 
  15084.