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

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Notices ΓòÉΓòÉΓòÉ
  3.  
  4. Third Edition (September 1994) 
  5.  
  6. The following paragraph does not apply to the United Kingdom or any country 
  7. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  8. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  9. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  10. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  11. do not allow disclaimer of express or implied warranties in certain 
  12. transactions, therefore, this statement may not apply to you. 
  13.  
  14. This publication could include technical inaccuracies or typographical errors. 
  15. Changes are periodically made to the information herein; these changes will be 
  16. incorporated in new editions of the publication. IBM may make improvements 
  17. and/or changes in the product(s) and/or the program(s) described in this 
  18. publication at any time. 
  19.  
  20. It is possible that this publication may contain reference to, or information 
  21. about, IBM products (machines and programs), programming, or services that are 
  22. not announced in your country.  Such references or information must not be 
  23. construed to mean that IBM intends to announce such IBM products, programming, 
  24. or services in your country. 
  25.  
  26. Requests for technical information about IBM products should be made to your 
  27. IBM authorized reseller or IBM marketing representative. 
  28.  
  29.  
  30. ΓòÉΓòÉΓòÉ 1.1. Copyright Notices ΓòÉΓòÉΓòÉ
  31.  
  32. COPYRIGHT LICENSE: This publication contains printed sample application 
  33. programs in source language, which illustrate OS/2 programming techniques. You 
  34. may copy, modify, and distribute these sample programs in any form without 
  35. payment to IBM, for the purposes of developing, using, marketing or 
  36. distributing application programs conforming to the OS/2 application 
  37. programming interface. 
  38.  
  39. Each copy of any portion of these sample programs or any derivative work, which 
  40. is distributed to others, must include a copyright notice as follows: "(C) 
  41. (your company name) (year).  All rights reserved." 
  42.  
  43. (C) Copyright International Business Machines Corporation 1994. All rights 
  44. reserved. 
  45. Note to U.S. Government Users - Documentation related to restricted rights - 
  46. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  47. Schedule Contract with IBM Corp. 
  48.  
  49.  
  50. ΓòÉΓòÉΓòÉ 1.2. Disclaimers ΓòÉΓòÉΓòÉ
  51.  
  52. References in this publication to IBM products, programs, or services do not 
  53. imply that IBM intends to make these available in all countries in which IBM 
  54. operates. Any reference to an IBM product, program or service is not intended 
  55. to state or imply that only IBMs product, program, or service may be used. Any 
  56. functionally equivalent product, program, or service that does not infringe any 
  57. of IBMs intellectual property rights or other legally protectable rights may be 
  58. used instead of the IBM product, program, or service. Evaluation and 
  59. verification of operation in conjunction with other products, programs, or 
  60. services, except those expressly designated by IBM, are the users 
  61. responsibility. 
  62.  
  63. IBM may have patents or pending patent applications covering subject matter in 
  64. this document. The furnishing of this document does not give you any license to 
  65. these patents. You can send license inquiries, in writing, to the IBM Director 
  66. of Licensing, IBM Corporation, 500 Columbus Avenue, Thornwood NY 10594, U.S.A. 
  67.  
  68.  
  69. ΓòÉΓòÉΓòÉ 1.3. Trademarks ΓòÉΓòÉΓòÉ
  70.  
  71. The following terms, denoted by an asterisk (*) in this publication, are 
  72. trademarks of the IBM Corporation in the United States or other countries: 
  73.  
  74. IBM
  75. OS/2
  76. Presentation Manager
  77. Workplace Shell
  78.  
  79.  
  80. ΓòÉΓòÉΓòÉ 2. About This Book ΓòÉΓòÉΓòÉ
  81.  
  82. The Pen for OS/2 Device Driver Reference is a reference to be used with the IBM 
  83. Developer Connection Device Driver Kit for OS/2. This book provides information 
  84. on how to develop the device drivers that act as an interface between the Pen 
  85. for OS/2 system extension and pen hardware products. 
  86.  
  87. The examples in this book are written in assembly language to show detail.  The 
  88. definitions and data structures are given in C language for clarity. 
  89.  
  90.  
  91. ΓòÉΓòÉΓòÉ 2.1. Who Should Read This Book ΓòÉΓòÉΓòÉ
  92.  
  93. This book is intended for professional programmers who are interested in 
  94. developing pen device drivers on their hardware product with a Pen for OS/2 
  95. system extension.  Prior experience developing device drivers would be helpful. 
  96.  
  97.  
  98. ΓòÉΓòÉΓòÉ 2.2. Summary of Changes ΓòÉΓòÉΓòÉ
  99.  
  100. The following list summarizes the changes in this release. 
  101.  
  102.    o  Function 62h - Query Default Locator Extents was added to category 91h. 
  103.    o  The common capabilities packet added defines for word boundary flags. 
  104.  
  105.  
  106. ΓòÉΓòÉΓòÉ 2.3. How This Book Is Organized ΓòÉΓòÉΓòÉ
  107.  
  108. This book is organized as follows: 
  109.  
  110.    o  Architecture contains a description of the pen device driver component 
  111.       structure, logical device types, and driver data. 
  112.  
  113.    o  Initialization contains a description of device driver initialization and 
  114.       logical device registration. 
  115.  
  116.    o  Operations contains a description of the operations that handle the 
  117.       processing of logical devices. 
  118.  
  119.    o  Pen Device Objects contains a description of the new device objects 
  120.       created by Pen for OS/2, instance methods, and class methods. 
  121.  
  122.    o  Installation Control Files contains a description of the pen device 
  123.       driver installation process. 
  124.  
  125.    o  Programming Interface contains the format for programming interfaces, 
  126.       including request packet interface, generic IOCtl interface, and extended 
  127.       Pen for OS/2 interface. 
  128.  
  129.    o  Pen for OS/2 Component of IBM Developer Connection Device Driver Kit for 
  130.       OS/2 contains a description of the sample code in the IBM Developer 
  131.       Connection Device Driver Kit for OS/2. 
  132.  
  133.    o  Operational Considerations contains additional information pertaining to 
  134.       device driver development, including configuration limitations and video 
  135.       mode changes. 
  136.  
  137.  
  138. ΓòÉΓòÉΓòÉ 2.4. Related Publications ΓòÉΓòÉΓòÉ
  139.  
  140. The following publications are available: 
  141.  
  142.    o  Pen for OS/2 Developers Toolkit: Getting Started, 71G2123 
  143.  
  144.    o  Pen for OS/2 Programming Guide and Reference, 71G2124 
  145.  
  146.    o  Pen for OS/2 Users Guide, 71G2122 
  147.  
  148.  
  149. ΓòÉΓòÉΓòÉ 2.5. Assistance ΓòÉΓòÉΓòÉ
  150.  
  151. Technical support for device driver development is provided by the IBM Driver 
  152. Development Support Center (DDSC) through a bulletin board system (BBS) known 
  153. as the "DUDE." You are encouraged to use the DUDE to obtain support by sending 
  154. in your questions and reviewing the question and answer database which can be 
  155. downloaded for off-line review. 
  156.  
  157. To access the DUDE, dial 407-982-3217 (using a modem) to register and access 
  158. the support system. For voice support in the United States, call 407-982-4239. 
  159.  
  160. Additional assistance is available through the IBM Developer Assistance 
  161. Program. For membership information: 
  162.  
  163.  Telephone:     407-982-6408 
  164.  
  165.  Fax:           407-988-7610 (U.S.A.) or 
  166.  
  167.  Fax:           407-982-4259 (worldwide) 
  168.  
  169.  
  170. ΓòÉΓòÉΓòÉ 2.6. Ordering Information ΓòÉΓòÉΓòÉ
  171.  
  172. For an illustration of OS/2 Technical Publications and other related product 
  173. documents, see the following figure. The IBM Developer Connection Device Driver 
  174. Kit for OS/2 on CD-ROM contains actual source code for sample device drivers, 
  175. as well as the complete text of the books in online form. 
  176.  
  177. To order any of the publications shown in the illustration, call: 
  178.  
  179. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  180. ΓöéU.S.A.:             Γöé1-800-633-8266       Γöé                     Γöé
  181. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  182. ΓöéCanada:             Γöé1-800-561-5293       Γöé                     Γöé
  183. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  184. ΓöéEurope, Middle East,Γöé English language   Γöé(+45) 48101500       Γöé
  185. ΓöéAfrica, and         Γöé French language    Γöé(+45) 48101200       Γöé
  186. ΓöéLatin America:      Γöé Italian language   Γöé(+45) 48101600       Γöé
  187. Γöé                    Γöé German language    Γöé(+45) 48101000       Γöé
  188. Γöé                    Γöé Spanish language   Γöé(+45) 48101100       Γöé
  189. Γöé                    Γöé Dutch language     Γöé(+45) 48101400       Γöé
  190. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  191. ΓöéAsia/Pacific:       Γöé All except Japan   Γöé(61) 2-354-7684      Γöé
  192. Γöé                    Γöé Japan              Γöé(81) 3-3495-2045(Fax)Γöé
  193. Γöé                    Γöé                     ΓöéFax request to:      Γöé
  194. Γöé                    Γöé                     ΓöéDAP-J, IBM Japan     Γöé
  195. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  196. ΓöéSE Brazil:          Γöé(021) 800-6120(Voice)Γöé                     Γöé
  197. Γöé                    Γöé(021) 800-6936(Fax)  Γöé                     Γöé
  198. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  199. ΓöéMexico:             Γöé Mexico City        Γöé627-2444             Γöé
  200. Γöé                    Γöé Country            Γöé91-800-00639         Γöé
  201. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  202.  
  203.  
  204. ΓòÉΓòÉΓòÉ 3. Architecture ΓòÉΓòÉΓòÉ
  205.  
  206. The IBM* OS/2* operating system is an advanced multitasking, single-user 
  207. operating system for personal computers.  The OS/2 operating system provides an 
  208. application programming interface (API) that supports multitasking, multiple 
  209. threads, dynamic linking, interprocess communication, a graphical user 
  210. interface, and a graphics programming interface. 
  211.  
  212. Pen for OS/2 is a series of software extensions to the OS/2 operating system 
  213. and the Presentation Manager* (PM) graphical user interface that enable 
  214. pen-based input and recognition.  The Pen for OS/2 extensions support a variety 
  215. of computers and peripherals designed for use with a pen as their primary input 
  216. device. 
  217.  
  218. Because many of the functions of an OS/2 physical device driver are related to 
  219. system operations in addition to hardware operations, OS/2 services are 
  220. available through the Device Helper (DevHlp) interface.  Refer to the Physical 
  221. Device Driver Reference for a complete description of OS/2 Device Helper 
  222. services and responsibilities.  The Pen for OS/2 system has extended the OS/2 
  223. device driver services providing Pen for OS/2 Device Driver Services unique to 
  224. pen hardware devices.  The Pen for OS/2 Device Driver Service internal 
  225. structure provides the logical device types and device driver data. The 
  226. following figure shows the major components of the pen device driver model and 
  227. how they fit into the Pen for OS/2 design. The developer supplies the items 
  228. shown in the boxes marked with ΓûêΓûê. 
  229.  
  230.                                      Pen Device-Driver-
  231.     OS/2 Applications                Specific Applications
  232. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  233. Γöé                      Γöé          Γöé        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  234. Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γö£ΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓö╝ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñDevice     ΓûêΓûê Γöé Γöé
  235. Γöé     Γöé           ΓûêΓûê Γöé Γöé  Γöé    Γöé  Γöé  Γöé  ΓöîΓöÇΓöÇΓöñObjects       Γöé Γöé
  236. Γöé ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  237. Γöé Γöé           ΓûêΓûê Γöé   Γöé Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  238. Γöé Γöé              Γö£ΓöÇΓöÇΓöÇΓöÿ Γöé  Γöé    Γöé  Γöé  Γö£ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöñCalibrationΓûêΓûê Γöé Γöé
  239. Γöé Γöé              Γöé     Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöéProgram       Γöé Γöé
  240. Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé  Γöé    Γöé  Γöé  Γöé  Γö£ΓöÇΓöÇΓöñ(Optional)    Γöé Γöé
  241. Γöé                      Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  242. Γöé                      Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  243. Γöé                      Γöé  Γöé    Γöé  Γöé  Γö£ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöñDelayed-   ΓûêΓûê Γöé Γöé
  244. Γöé                      Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöéInitializationΓöé Γöé
  245. Γöé                      Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöéProgram       Γöé Γöé
  246. Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé  Γöé    Γöé  Γöé  Γöé  Γö£ΓöÇΓöÇΓöñ(Optional)    Γöé Γöé
  247. Γöé     Γöé           ΓûêΓûê Γöé Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  248. Γöé ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  249. Γöé Γöé           ΓûêΓûê Γöé   Γöé Γöé  Γöé    Γöé  Γöé  Γö£ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöñAuxilliary ΓûêΓûê Γöé Γöé
  250. Γöé Γöé              Γö£ΓöÇΓöÇΓöÇΓöÿ Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöéProgram       Γöé Γöé
  251. Γöé Γöé              Γöé     Γöé  Γöé    Γöé  Γöé  Γöé  Γö£ΓöÇΓöÇΓöñ(Optional)    Γöé Γöé
  252. Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  253. Γöé                      Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  254. Γöé                      Γöé  Γöé    Γöé  Γöé  Γöé  Γöé  ΓöéPen Device-   Γöé Γöé
  255. Γöé                      Γöé  Γöé    Γöé  Γöé  Γöé  ΓööΓöÇΓöÇΓöñDriver Tool   Γöé Γöé
  256. Γöé                      Γöé  Γöéfor Γöé  Γöé  Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  257. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓöéOS/2Γöé  ΓööΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  258.   OS/2                    ΓöéAPI Γöé     Γöé
  259.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  260.   Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÉ  Γöé                    Γöé
  261.   Γöé Γöé Pen for OS/2 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓö£ΓöÇΓöé                    Γöé
  262.   Γöé Γöé              ΓöéPen for OS/2 ΓöéΓöé                      Γöé
  263.   Γöé Γöé              ΓöéDevice-DriverΓöéΓöé  ΓöéIoctl Interface     Γöé
  264.   Γöé Γöé              ΓöéServices     ΓöéΓöé  Γöé                    Γöé
  265.   Γöé Γöé              ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿΓöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  266.   Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÿ  Γöé  ΓöéOS/2 Device-   Γöé Γöé
  267.   Γöé                  IDC    Services Γöé  ΓöéHelper ServicesΓöé Γöé
  268.   Γöé               Interface  Calls   Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  269.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  270.                       Γöé       Γöé      Γöé    DevhlpΓöéInterface
  271. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  272. Γöé                  Pen Device Driver                    ΓûêΓûê  Γöé
  273. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  274.                             Γöé
  275.                             
  276.                       Pen Hardware
  277.  
  278. To develop pen hardware support for the Pen for OS/2 system extension, you 
  279. provide the following components: 
  280.  
  281.    o  Pen device driver 
  282.  
  283.       The pen device driver is an OS/2 physical device driver that controls the 
  284.       pen hardware.  It has access to all the OS/2 Device Helper services and 
  285.       must adhere to all the OS/2 device driver rules. 
  286.  
  287.       The pen device driver calls the Pen for OS/2 Device Driver Services to 
  288.       register Pen for OS/2 device-specific capabilities, deliver Pen for OS/2 
  289.       events, and make queries.  Pen for OS/2 Extended Interface provides a 
  290.       complete specification of this direct call interface. 
  291.  
  292.       The pen device driver must provide an IOCtl interface to the Pen for OS/2 
  293.       system to control the pen device driver.  Refer to the Control Program 
  294.       Programming Reference for more information on the Generic IOCtl Interface 
  295.       for applications (DosDevIOCtl) and to the OS/2 2.0 Physical Device Driver 
  296.       Reference for information on the existing IOCtl functions.  Generic IOCtl 
  297.       Interface provides a complete specification of the IOCtl interface. 
  298.  
  299.       The pen device driver can provide private IOCtls to permit 
  300.       device-specific control operations that do not involve Pen for OS/2. 
  301.  
  302.    o  Device objects 
  303.  
  304.       Pen for OS/2 device objects appear as icons in the Devices folder. 
  305.       Device objects provide a means of communication between a computer and 
  306.       another piece of equipment, such as a pen or display.  The icons look 
  307.       like the pen hardware they represent.  The device objects contain a 
  308.       Settings notebook with Pen for OS/2 variables and device-specific data. 
  309.       The Pen for OS/2 folder contains the Devices folder.  These folders are 
  310.       added to the desktop when the Pen for OS/2 system is installed.  Device 
  311.       Driver Data describes the types of device driver data.  Pen Device 
  312.       Objects describes device objects in more detail. 
  313.  
  314.    o  Optional calibration program 
  315.  
  316.       You can provide a calibration program.  The calibration program, provided 
  317.       with the Pen for OS/2 Developers Toolkit, can be invoked from a device 
  318.       object which can communicate with the pen device driver through IOCtls. 
  319.  
  320.    o  Optional initialization program 
  321.  
  322.       You can provide an initialization program to communicate with the pen 
  323.       device driver during OS/2 system initialization, which is described in 
  324.       the section titled Initialization. 
  325.  
  326.    o  Optional auxiliary programs 
  327.  
  328.       You can add other OS/2 application programs, device drivers, and 
  329.       subsystems to enhance or control the operation of the pen device driver 
  330.       beyond the scope specified in the Pen for OS/2 system.  For example, you 
  331.       can subclass the basic video system to provide enhanced display support. 
  332.  
  333.  
  334. ΓòÉΓòÉΓòÉ 3.1. Logical Device Types ΓòÉΓòÉΓòÉ
  335.  
  336. The following figure illustrates the relationship between a pen device driver 
  337. and Pen for OS/2 logical devices. 
  338.  
  339. PENDD.SYS
  340.  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  341.  Γöé                                                          Γöé
  342.  Γöé   Device Driver Header                                   Γöé
  343.  Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                                             Γöé
  344.  Γöé   Γöé        Γöé                                             Γöé
  345.  Γöé   Γöé PENDD$ Γöé                                             Γöé
  346.  Γöé   Γöé        Γöé                                             Γöé
  347.  Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                                             Γöé
  348.  Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                 Γöé
  349.  Γöé ΓöéDevice MY_HARDWARE, Device Type DRIVERΓöé                 Γöé
  350.  Γöé Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ             Γöé
  351.  Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöñDevice LCD Device Type DISPLAY       Γöé             Γöé
  352.  Γöé      Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ         Γöé
  353.  Γöé      ΓööΓöÇΓöÇΓöÇΓöÇΓöñDevice BEZEL, Device Type BUTTON    Γöé         Γöé
  354.  Γöé           Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ     Γöé
  355.  Γöé           ΓööΓöÇΓöÇΓöÇΓöÇΓöñDevice FINGER, Device Type LOCATOR Γöé     Γöé
  356.  Γöé                Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ Γöé
  357.  Γöé                ΓööΓöÇΓöÇΓöÇΓöÇΓöñDevice PEN, Device Type LOCATOR   Γöé Γöé
  358.  Γöé                     Γöé                                  Γöé Γöé
  359.  Γöé                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  360.  Γöé                                                          Γöé
  361.  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  362.  
  363. The load module contains the physical device driver. PENDD.SYS is the load 
  364. module for the sample device driver provided in the Toolkit. The OS/2 operating 
  365. system recognizes the driver name defined in the device driver header and 
  366. treats it and its collection of Pen for OS/2 logical devices as one OS/2 
  367. character device driver. The driver name in the device driver header must be a 
  368. unique eight-character name to enable multiple drivers to coexist on a single 
  369. system.  (PENDD$ is the device driver name used for the sample device driver 
  370. provided in the Toolkit.)  Select a name that uniquely identifies your 
  371. hardware. 
  372.  
  373. The Pen for OS/2 system and Pen for OS/2 Device Driver Services support the 
  374. following logical device types: 
  375.  
  376.    o  Locator 
  377.  
  378.       Locator devices supply a stream of locator position points and emulated 
  379.       mouse button events. The Pen for OS/2 system has extended the standard 
  380.       OS/2 mouse locator point stream to include: 
  381.  
  382.         -  Z-axis information 
  383.         -  Sequence number 
  384.         -  High-resolution device time stamp 
  385.         -  State of all physical buttons 
  386.         -  Optional locator data (angle theta, angle phi) 
  387.         -  Optional OEM data area 
  388.  
  389.          There are three types of locator devices: 
  390.  
  391.         -  Pen 
  392.  
  393.            Pen devices supply high-resolution position points at a high sample 
  394.            rate.  Pens can have buttons and can report orientation data.  Pens 
  395.            usually report proximity in terms of height.  Ink should flow 
  396.            directly from the tip of the pen. 
  397.  
  398.         -  Touch 
  399.  
  400.            Touch devices provide lower resolution and a lower sample rate. A 
  401.            touch device, such as a finger, does not have buttons.  Selection 
  402.            ability of a touch device improves by offsetting the OS/2 pointer 
  403.            from the actual hardware coordinate of contact.  Touch devices 
  404.            usually do not report proximity but can report pressure. 
  405.  
  406.         -  Other 
  407.  
  408.            Pen for OS/2 provides an other type for locators that have some or 
  409.            none of the characteristics of the previous types; for example, a 
  410.            relative reporting track ball or a joy stick with a trigger button 
  411.            does not have the characteristics of a pen or touch device. 
  412.  
  413.          Locator Device Processing describes locator devices in further detail. 
  414.  
  415.    o  Button 
  416.  
  417.       The button device manages all barrel buttons and bezel buttons.  Barrel 
  418.       buttons are found on the side of a pen device.  Bezel buttons (or 
  419.       nonbarrel buttons) are built into the case of a pen-based computer or 
  420.       peripheral. A device object assigns actions to buttons.  The state of all 
  421.       buttons managed by the driver is reported on all locator event streams. 
  422.  
  423.       Button devices can change the way emulated mouse button events are 
  424.       reported.  For example, activating a barrel button on a pen can cause the 
  425.       default button 1 down to be reported as button 2 down instead. 
  426.  
  427.       Button devices also can produce events independently from the locator 
  428.       position point stream.  For example, activating a bezel button can 
  429.       immediately cause the OS/2 Window List to become active. Button Device 
  430.       Processing describes button devices in further detail. 
  431.  
  432.    o  Display 
  433.  
  434.       The display device manages the backlight on a liquid crystal display 
  435.       (LCD). The display device automatically turns off the backlight after the 
  436.       system has not been used for a default time period of 20 minutes.  The 
  437.       display device turns the backlight back on when the user accesses the 
  438.       system. Display Device Processing describes display devices in further 
  439.       detail. 
  440.  
  441.  The common capabilities packet contains the driver name and logical device 
  442.  name for the logical devices in the pen device driver. See Common Capabilities 
  443.  Packet. Logical device names for the locator, button, and display need not be 
  444.  unique across the system.  The names PEN, FINGER, BEZEL, BARREL, MONO, and 
  445.  COLOR are suggested.  The logical device name for the driver logical device 
  446.  should identify your hardware device as uniquely as possible.  See 
  447.  Configuration Limitations for a complete configuration description. 
  448.  
  449.  Each logical device in the driver is assigned a unit number.  A unit number is 
  450.  used to select a logical device within the driver and is unique only within 
  451.  the scope of the driver.  The logical devices are numbered sequentially 
  452.  starting at 0. Your optional application programs and the test program use 
  453.  unit numbers with the IOCtl interface to select a particular device for an 
  454.  operation.  Unit 0 is the device type "DRIVER" that defines the 
  455.  characteristics of the entire driver. 
  456.  
  457.  Query Unit Capabilities of unit 0 returns the total number of logical devices 
  458.  in the driver, including itself.  Query Unit Capabilities can be used to query 
  459.  each units capabilities data to retrieve its device type and description. 
  460.  
  461.  Each device also has a device ID.  A device ID is an ID number assigned to a 
  462.  logical device by the the Pen for OS/2 Device Driver Services.  A device ID is 
  463.  unique across the entire system. Pen for OS/2 uses the device ID to 
  464.  distinguish devices uniquely in the system. 
  465.  
  466.  Pen for OS/2 provides API functions to query the device configuration so that 
  467.  an application will not need to use the IOCtl interface. 
  468.  
  469.  
  470. ΓòÉΓòÉΓòÉ 3.2. Device Driver Data ΓòÉΓòÉΓòÉ
  471.  
  472. A pen device driver can have data values hard coded when the driver is compiled 
  473. and linked.  Pen for OS/2, or application programs you supply, can generate and 
  474. store data values that cannot be hard coded and that override the hard-coded 
  475. values.  The pen device driver obtains these values through the IOCtl 
  476. interface.  The pen device driver can also obtain these values directly during 
  477. initialization using ring 3 OS/2 API functions. 
  478.  
  479. The following figure shows the types of data defined by the Pen for OS/2 system 
  480. extension. 
  481.  
  482.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  483.   ΓöéDelayed       Γöé Γöé           Γöé Γöé                        Γöé
  484.   ΓöéInitializationΓöé ΓöéPen Device Γöé ΓöéPen for OS/2            Γöé
  485.   ΓöéProgram       Γöé ΓöéDriver ToolΓöé Γöé                        Γöé
  486.   Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  487.   Γöé Γöé Device   Γöé Γöé ΓöéΓöéDevice   ΓöéΓöé ΓöéΓöéDevice  Γöé ΓöéPen for   Γöé Γöé
  488.   Γöé Γöé Private  Γöé Γöé ΓöéΓöéPrivate  ΓöéΓöé ΓöéΓöéSpecificΓöé ΓöéOS/2      Γöé Γöé
  489.   Γöé Γöé Data     Γöé Γöé ΓöéΓöéVariablesΓöéΓöé ΓöéΓöéData    Γöé ΓöéVariables Γöé Γöé
  490.   Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé ΓöéΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  491.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  492.          Γöé              Γöé              Γöé           Γöé
  493.       Private        Set Unit       Set Unit   Device Type
  494.       IOCtls         Variable       Specific    Specific
  495.          Γöé            IOCtl        Data IOCtl    IOCtls
  496.          Γöé              Γöé              Γöé           Γöé
  497. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  498. Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  499. Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé
  500. Γöé Γöé Γöé Device  Γöé ΓöéDevice    Γöé Γöé Γöé ΓöéDevice   Γöé ΓöéPen for   Γöé Γöé Γöé
  501. Γöé Γöé Γöé Private Γöé ΓöéPrivate   Γöé Γöé Γöé ΓöéSpecific Γöé ΓöéOS/2      Γöé Γöé Γöé
  502. Γöé Γöé Γöé Data    Γöé ΓöéVariables Γöé Γöé Γöé ΓöéData     Γöé ΓöéVariables Γöé Γöé Γöé
  503. Γöé Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé Γöé
  504. Γöé Γöé Private Data             Γöé ΓöéPen for OS/2              Γöé Γöé
  505. Γöé Γöé                          Γöé ΓöéManaged Data              Γöé Γöé
  506. Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  507. Γöé  PEN DEVICE DRIVER                                        Γöé
  508. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  509.  
  510. The Pen for OS/2 system defines the following types of data, accessible using 
  511. IOCtls: 
  512.  
  513.    o  Private data 
  514.  
  515.       The Pen for OS/2 system does not maintain persistent values for this data 
  516.       across system restarts and does not provide Pen for OS/2 API access to 
  517.       this data.  There are two types of private data: 
  518.  
  519.         -  Device-private data 
  520.  
  521.            You manage device-private data by storing the data and communicating 
  522.            it to the pen device driver through private IOCtls.  There can be 
  523.            any number of private data blocks of any size.  An example of 
  524.            device-private data is a microcode load for a pen hardware product. 
  525.  
  526.            A delayed initialization program or an auxiliary program can save 
  527.            the data between restarts and pass device-private data to the 
  528.            driver. 
  529.  
  530.         -  Device-private variables 
  531.  
  532.            Device-private variables can be viewed as an array of ULONGs 
  533.            accessed by an index.  The pen device driver defines the number of 
  534.            variables available per logical device. They are provided as a 
  535.            convenience and are intended for temporary use, such as debugging; 
  536.            they are not required to be set for the driver to operate.  Set Unit 
  537.            Variable and Query Unit Variable IOCtls communicate private 
  538.            variables to and from the pen device driver. The pen device driver 
  539.            tool, described in Pen Device Driver Tool, can set and query 
  540.            device-private variables. 
  541.  
  542.    o  Pen for OS/2 managed data 
  543.  
  544.       The Pen for OS/2 system maintains persistent values for this data and 
  545.       provides API functions to access the following two types of data: 
  546.  
  547.         -  Device-specific data 
  548.  
  549.            Pen for OS/2 will manage up to 512 bytes per pen logical device. 
  550.            You set up this data in a single block through the Pen for OS/2 API 
  551.            WrtSetInputDeviceVariable. The Pen for OS/2 system will pass the 
  552.            data to the pen device driver with the Set Unit Specific Data IOCtl. 
  553.            Pen for OS/2 saves device-specific data across system restarts and 
  554.            passes the data to the pen device driver when Pen for OS/2 starts 
  555.            up.  Pen for OS/2 does not examine the contents of the data. 
  556.  
  557.         -  Pen for OS/2 variables 
  558.  
  559.            The Pen for OS/2 system extension provides API functions to 
  560.            individually manage each Pen for OS/2 variable, and there is an 
  561.            IOCtl to pass the value of the variable to the pen device driver. 
  562.            The Pen for OS/2 system maintains the values of these variables 
  563.            across system restarts and initializes the pen device driver with 
  564.            these values through the IOCtl interface during Pen for OS/2 
  565.            startup. 
  566.  
  567.            The following list contains the Pen for OS/2 variables related to 
  568.            the pen device driver: 
  569.  
  570.              o  Locator Offset 
  571.              o  Locator Pass Rate 
  572.              o  Locator Sample Rate 
  573.              o  Button Assignments 
  574.              o  Backlight Inactivity Period 
  575.  
  576.  The IOCtl method used to control data designates the data types.  The 
  577.  designation is independent from the way the pen device driver chooses to 
  578.  organize and store the data within the driver. 
  579.  
  580.  For example, calibration data can be managed as Pen for OS/2 device-specific 
  581.  data.  Pen for OS/2 maintains the device-specific data block across system 
  582.  restarts and passes the data during Pen for OS/2 initialization.  If the 
  583.  calibration data is large, it can be managed as private data and communicated 
  584.  to the pen device driver with private IOCtls from a delayed initialization or 
  585.  auxiliary program you supply. 
  586.  
  587.  As a second example, a device-specific variable could be used during 
  588.  development to dynamically set a tuning value that later will be fixed as a 
  589.  hard-coded constant.  A device-specific variable could also be used to collect 
  590.  error or diagnostic data for service support. 
  591.  
  592.  
  593. ΓòÉΓòÉΓòÉ 4. Initialization ΓòÉΓòÉΓòÉ
  594.  
  595. For optimum performance, set the device driver to perform all the 
  596. initialization required for the device driver to be operational.  This has the 
  597. following advantages: 
  598.  
  599.    o  It is not necessary to invoke an initialization program from CONFIG.SYS 
  600.       as a RUN= statement or a program reference in the Startup folder.  This 
  601.       simplifies the installation process. 
  602.    o  The device driver is fully operational with default settings before the 
  603.       startup of the Pen for OS/2 system extension. 
  604.    o  The device driver is more independent to ensure that mouse emulation 
  605.       always works despite error conditions that prevent other areas of the 
  606.       system from working. 
  607.  
  608.  Device driver initialization can be performed in one of two ways: 
  609.  
  610.    o  Initialization at startup 
  611.    o  Delayed initialization 
  612.  
  613.  Delayed initialization is designed by the developer depending on the hardware 
  614.  supported.  For more information, see Delayed Initialization. 
  615.  
  616.  The following figure illustrates the initialization process. 
  617.  
  618.                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  619.   INIT Command       Γöé Initialization Γöé
  620.       Γöé    ΓöîΓöÇ ΓöÇ ΓöÇ ΓöÇ ΓöÇΓöñ Request Packet Γö£ΓöÇ ΓöÇ ΓöÇ ΓöÇ CONFIG.SYS
  621.       Γöé    |         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  622.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  623.   Γöé            Γöé                            Γöé               Γöé
  624.   Γöé Pen Device Γöé                            Γöé Pen for OS/2  Γöé
  625.   Γöé Driver     Γöé                            Γöé Device Driver Γöé
  626.   Γöé            Γöé                            Γöé Services      Γöé
  627.   Γöé            Γöé                            Γöé               Γöé
  628.   ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  629.      Γöé                                              Γöé
  630.      Γöé                            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  631.      Γöé DevHlp_RegisterDeviceClass Γöé OS/2 Device Γöé   Γöé
  632.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Helper      Γö£ΓöÇΓöÇΓöÇΓöÿ
  633.                                   Γöé Services    Γöé
  634.                                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  635.  
  636.  The initialization request packet has a pointer to a string containing the pen 
  637.  device drivers CONFIG.SYS statement, for example: 
  638.  
  639.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  640.  
  641.  
  642.      device=c:\penpm\pendd.sys load=c:\penpm\pendd.dat type=3
  643.  
  644.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  645.  This string includes any optional device-specific parameters.  These 
  646.  device-specific parameters can be used to identify data files containing the 
  647.  information needed during initialization and static parameters required for 
  648.  the operation of the device. For example, type=3 can inform the device driver 
  649.  of a device characteristic the device driver cannot determine. 
  650.  
  651.  The Pen for OS/2 system will pass device-specific data to the driver when the 
  652.  system starts up.  This data can be used to override default values, such as 
  653.  locator coordinate adjustments.  Therefore, do not place variables updated by 
  654.  a device object in the DEVICE= statement.  Optimum results will be achieved if 
  655.  the driver can function without device-specific data.  See Delayed 
  656.  Initialization if additional initialization is required. 
  657.  
  658.  If for some reason, the device driver can not take device-specific data from 
  659.  the Pen for OS/2 system, then the common capabilites packet flag entry must be 
  660.  set to CCAP_DEFAULTDATA for each device ( locator, button, display, and so 
  661.  forth) that cannot be customized.  A default entry of CCAP_OS2INI must be made 
  662.  to ensure the flag is initialized. 
  663.  
  664.  If the sample rate for the locator can not be changed, set the 
  665.  locator-specific capabilities packet entry max_sample_rate to 0, and set the 
  666.  sample_rate entry to the fixed sample rate.  For example, if sample_rate is 
  667.  100, and max_sample_rate is 0, then the sample_rate will be fixed at 100 
  668.  points per second. 
  669.  
  670.  
  671. ΓòÉΓòÉΓòÉ 4.1. DevHlp_RegisterDeviceClass ΓòÉΓòÉΓòÉ
  672.  
  673. A pen device driver is required to identify that it has Pen for OS/2 logical 
  674. devices during initialization using DevHlp_RegisterDeviceClass. 
  675. RegisterDeviceClass eliminates the need to modify the CONFIG.SYS statement for 
  676. other device drivers, such as MOUSE.SYS with TYPE= statements to establish 
  677. bindings. 
  678.  
  679. The pen device driver registers as DevClass=DEVCLASS_INPUT with DCFlags 
  680. declaring that extended information will be generated (allowing for the 
  681. possibility of future uses of DEVCLASS_INPUT) and identifying the method of 
  682. attaching the pen hardware product.  MOUSE.SYS uses the latter to avoid loading 
  683. built-in mouse support for devices supported by the pen device driver.  The 
  684. OS/2 mouse driver loads mouse support based on a query of likely mouse hardware 
  685. connected.  This support is called built-in mouse support. 
  686.  
  687. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  688.  
  689. ddname db 'PENDD$',0
  690.         .
  691.         .
  692.         .
  693.   mov  cx, DEVCLASS_INPUT            ; Device class
  694.   mov  di, REG_EXT_IF                ; Device class flags
  695.   lea  si, ddname                    ; Device driver name (ASCIIZ)
  696.   mov  ax, cs                        ; Ax:bx ->driver entry point
  697.   lea  bx, Idc_DriverEntryPoint
  698.   mov  dl, DevHlp_RegisterDeviceClass
  699.   call DeviceHelp                    ; Register my driver with Pen for OS/2
  700.  
  701. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  702.  
  703. The Pen for OS/2 Device Driver Services use the device driver name to perform a 
  704. DevHlp_AttachDD. The pen device drivers device header must enable AttachDD and 
  705. declare an AttachDD entry point. Logical Device Registration describes the use 
  706. of the driver entry point.  The Pen for OS/2 Device Driver Services do not use 
  707. the AttachDD entry point and it is available for other private uses.  See Pen 
  708. for OS/2 Extended Interface for complete details of the 
  709. DevHlp_RegisterDeviceClass interface. 
  710.  
  711.  
  712. ΓòÉΓòÉΓòÉ 4.2. Logical Device Registration ΓòÉΓòÉΓòÉ
  713.  
  714.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  715.   Γöé               Γöé QUERY_CAPABILITIES   Γöé               Γöé
  716.   Γöé Pen Device    ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Pen for OS/2  Γöé
  717.   Γöé Driver        Γöé                      Γöé Device Driver Γöé
  718.   Γöé               Γöé START_LOGICAL_DEVICE Γöé Services      Γöé
  719.   Γöé               ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ               Γöé
  720.   Γöé               Γöé                      Γöé               Γöé
  721.   Γöé               Γöé REGISTER_DEVICE      Γöé               Γöé
  722.   Γöé               Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ               Γöé
  723.   Γöé               Γöé                      Γöé               Γöé
  724.   Γöé               Γöé READ_ENABLE          Γöé               Γöé
  725.   Γöé               ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ               Γöé
  726.   Γöé               Γöé                      Γöé               Γöé
  727.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  728.  
  729. After the initialization command has completed, the Pen for OS/2 Device Driver 
  730. Services, using the driver entry point declared with 
  731. DevHlp_RegisterDeviceClass, will contact the pen device driver in ring 0 kernel 
  732. mode. The Pen for OS/2 Device Driver Services will query the driver for the 
  733. number of defined logical devices (see Logical Device Types).  A driver with 
  734. one logical device would return 2; 1 for unit 0, and 1 for the logical device 
  735. at unit 1. 
  736.  
  737. Then, Pen for OS/2 Device Driver Services will request the level of the drivers 
  738. interface (see Support Level Control), along with the rest of the capabilities 
  739. information for each logical device.  The capabilities information can be 
  740. requested more than once. 
  741.  
  742. Next, each Pen for OS/2 Device Driver Service identifies itself by passing its 
  743. direct call service entry point to the driver with a START_LOGICAL_DEVICE IDC 
  744. request for each logical device supported by the Pen for OS/2 system.  The 
  745. service entry point is passed in the SINFO data structure as shown in the 
  746. following figure. Before returning from START_LOGICAL_DEVICE, the logical 
  747. device registers with the Pen for OS/2 Device Driver Services with a 
  748. REGISTER_DEVICE call to the service entry point of the Pen for OS/2 Device 
  749. Driver Services. 
  750.  
  751. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  752.  
  753. Idc_StartDevice Proc                            ; Start logical device
  754.     .
  755.     .
  756.     .
  757.   mov  ax, es:[di].sinfo_service_ds              ; The architecture allows for
  758.   mov  [bx].dcb_service_ds, ax                   ; more than one service entry
  759.   mov  ax, word ptr es:[di].sinfo_service_rtn    ; point.  Currently, there is
  760.   mov  word ptr [bx].dcb_service_rtn, ax         ; only one defined.
  761.   mov  ax, word ptr es:[di].sinfo_service_rtn+2
  762.   mov  word ptr [bx.].dcb_service_rtn+2, ax
  763.     .
  764.     .
  765.     .
  766.   mov  ax, REGISTER_DEVICE
  767.   mov  di, [bx].dcb_@RegCaps
  768.   push ds
  769.   push bx                                        ; bx = device control block
  770.   push ds
  771.   pop  es
  772.   mov  ds,[bx].dcb_service_ds
  773.   call es:[bx].dcb_service_rtn               ; es:di = device capabilities packet
  774.   pop  bx
  775.   pop  ds
  776.  
  777. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  778.  
  779. Unlike the standard MOUSE.SYS protocol, there is no interrupt packet address to 
  780. remember and an AttachDD to MOUSE.SYS is not needed to pass the event data. 
  781. See Pen for OS/2 Extended Interface for complete details. 
  782.  
  783. Calling READ_ENABLE is the final step and is issued once by the Pen for OS/2 
  784. Device Driver Services to enable event reporting and capability updates for all 
  785. successfully registered logical devices.  Special capabilities and operation 
  786. styles are identified by the Pen for OS/2 Device Driver Services.  You can 
  787. change the defaults by resetting the bits and returning the value to Pen for 
  788. OS/2 Device Driver Services. 
  789.  
  790.  
  791. ΓòÉΓòÉΓòÉ 4.3. Delayed Initialization ΓòÉΓòÉΓòÉ
  792.  
  793. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  794. Γöé Initialization Γöé                 Γöé Pen for OS/2  Γöé
  795. Γöé Program        Γöé                 Γöé               Γöé
  796. ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  797.     Γöé        Γöé Access to                   Γöé
  798.     Γöé        Γöé Device-Specific             Γöé
  799.     Γöé        Γöé Data ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé
  800.     Γöé        Γöé      Γöé Configuration Γöé      Γöé Updated
  801.     Γöé        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Data          Γöé      Γöé Capabilities
  802.     Γöé               Γöé               Γöé      Γöé
  803.     Γöé IOCtl         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé
  804.     Γöé Interface                            Γöé
  805. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  806. Γöé Initialization Γöé   UPDATE_CAPS   Γöé Pen for OS/2  Γöé
  807. Γöé Program        Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Device Driver Γöé
  808. Γöé                Γöé                 Γöé Services      Γöé
  809. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  810.  
  811. Setting the driver to perform all its required initialization during device 
  812. driver initialization results in optimum performance; but if necessary, you can 
  813. use a program that completes driver initialization depending on your hardware. 
  814.  
  815. One possible purpose for a developer to write a delayed initialization program 
  816. is to set Pen for OS/2 device variables not exposed on device objects.  These 
  817. variables are: 
  818.  
  819.    o  PPMID_STABILITY 
  820.    o  PPMID_DIVIDE_RATE 
  821.  
  822.  A pen device driver can have a delayed initialization program invoked either 
  823.  as a RUN= statement in CONFIG.SYS or from a program reference in the OS/2 
  824.  Startup folder.  You can pass device-private data to the pen device driver 
  825.  with private IOCtls and do whatever is necessary to initialize the device. 
  826.  
  827.  If the registered capabilities are changed, the pen device driver must update 
  828.  the capabilities with the appropriate device-type service. 
  829.  
  830.  It is not necessary to pass device-specific data or Pen for OS/2 variables 
  831.  during initialization.  As described in Device Driver Data, the Pen for OS/2 
  832.  system will pass this data when it starts up. 
  833.  
  834.  
  835. ΓòÉΓòÉΓòÉ 5. Operations ΓòÉΓòÉΓòÉ
  836.  
  837. Pen for OS/2 system extension provides the pen device driver with operations 
  838. including the processing of locator, button, and display devices.  The flow of 
  839. events is controlled and the device driver configuration can be updated at any 
  840. time. 
  841.  
  842.  
  843. ΓòÉΓòÉΓòÉ 5.1. Locator Device Processing ΓòÉΓòÉΓòÉ
  844.  
  845. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  846. Γöé Pen Device     Γöé                    Γöé Pen for OS/2    Γöé
  847. Γöé Driver         Γöé                    Γöé Device-Driver   Γöé
  848. Γöé                Γöé  QUERY_DEV_CONFIG  Γöé Services        Γöé
  849. Γöé                ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                 Γöé
  850. Γöé                Γöé                    Γöé Locator Service Γöé
  851. Γöé                Γöé                    Γöé                 Γöé
  852. Γöé                Γöé                    Γöé                 Γöé
  853. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  854.  
  855. In addition to device registration, each locator device receives a call from 
  856. the QUERY_DEV_CONFIG IDC request.  The driver responds by copying its device 
  857. data back to the Pen for OS/2 Device Driver Services.  Unlike the standard 
  858. MOUSE.SYS protocol, there is no interrupt packet address to remember and an 
  859. AttachDD to MOUSE.SYS is not needed. 
  860.  
  861. The QUERY_DEV_CONFIG request is defined for all device types, but only the 
  862. locator device has a data packet defined for return to the Pen for OS/2 Device 
  863. Driver Services. The other device types do not copy data back to the Pen for 
  864. OS/2 Device Driver Services. 
  865.  
  866. This process repeats for all registered locator devices. 
  867.  
  868.  
  869. ΓòÉΓòÉΓòÉ 5.1.1. Interrupt Packet IDC Interface ΓòÉΓòÉΓòÉ
  870.  
  871. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  872. Γöé Pen Device     Γöé                    Γöé Pen for OS/2    Γöé
  873. Γöé Driver         Γöé                    Γöé Device Driver   Γöé
  874. Γöé                Γöé    REPORT_EVENT    Γöé Services        Γöé
  875. Γöé Locator Device Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ                 Γöé
  876. Γöé                Γöé                    Γöé                 Γöé
  877. Γöé                Γöé                    Γöé                 Γöé
  878. Γöé                Γöé                    Γöé                 Γöé
  879. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  880.  
  881. The inter-device driver communication (IDC) interface for the locator Pen for 
  882. OS/2 Device Driver Services is similar to the standard OS/2 mouse 
  883. device-dependent design. The pen device driver calls the Pen for OS/2 Device 
  884. Driver Services at the service entry point address passed during service 
  885. identification instead of the MOUSE.SYS IDC entry point. Locator devices pass 
  886. an address to an extended information packet instead of filling in the 
  887. MOUSE.SYS interrupt packet.  The REPORT_EVENT service call supports both 
  888. absolute and relative locator streams. 
  889.  
  890. Along with the locator position, locator devices identify three types of events 
  891. in the extended information packet:  (1) standard mouse button events of button 
  892. 1, 2, and 3 with and without movement; (2) changes in mouse button position; 
  893. and (3) devices that support proximity report an event when the proximity zone 
  894. is entered and when the proximity zone is exited.  The proximity zone is an 
  895. area where locator action is sensed by a touch-sensitive device without the 
  896. locator device contacting the touch-sensitive surface. 
  897.  
  898.  
  899. ΓòÉΓòÉΓòÉ 5.1.2. Event Rate Controls ΓòÉΓòÉΓòÉ
  900.  
  901. The Pen for OS/2 system extension controls the rate of events with IOCtls in 
  902. two ways.  First, the sample rate IOCtl requests that the driver control the 
  903. total number of sample events.  Most pen hardware products support this, but if 
  904. your hardware product does not, the pen device driver would discard locator 
  905. events to reduce the sample rate as seen by the Pen for OS/2 system.  The 
  906. sample rate is set with the category 91 Set Locator Sample Rate IOCtl. 
  907.  
  908. Second, a pass rate filter is used to control the rate of OS/2 events.  Every 
  909. locator event is passed to the Pen for OS/2 system, but only some of those are 
  910. passed to the OS/2 operating system as standard mouse events. The pass rate is 
  911. set with the category 91 Set Locator Pass Rate IOCtl. 
  912.  
  913. The Pen for OS/2 Device Driver Services attempt to set the pass rate 
  914. automatically based on the devices sample rate as reported during registration. 
  915. Automatic pass rate is requested by setting the pass rate to 0 in the locator 
  916. capabilities packet.  The pen device drivers pass rate variable is set with the 
  917. category 91 Set Locator Pass Rate IOCtl. 
  918.  
  919. The automatic pass rate can be overridden by setting the pass rate field in the 
  920. capabilities packet to a positive value. This value determines how many locator 
  921. events are passed to the Pen for OS/2 system for every one mouse event passed 
  922. to the OS/2 operating system.  For example, if the pass rate is set to 2, then 
  923. for every 2 locator events only one is passed as a standard OS/2 mouse event. 
  924.  
  925. Events which contain changes in button events will not be discarded. 
  926.  
  927.  
  928. ΓòÉΓòÉΓòÉ 5.1.3. Coordinate Adjustments ΓòÉΓòÉΓòÉ
  929.  
  930. This figure shows a typical digitizer system.  The inner rectangle represents 
  931. the liquid crystal display (LCD) surrounded by its display bezel.  The 
  932. digitizer extends beyond the LCD on all sides and is shown by the outer 
  933. rectangle.  The finger in the center of the screen and the dotted slide region 
  934. are discussed in Finger Offset. 
  935.  
  936. This model assumes that the LCD has fixed dimensions and that the digitizer has 
  937. a fixed resolution that is constant and uniform.  Therefore, the device extents 
  938. can be calculated. For example, if an LCD dimension is 10 inches and the 
  939. digitizer has a resolution of 100 units per inch, then the device extents are 
  940. 1000.  Points are reported with values ranging from 0 to 999.  The device 
  941. extents, as reported in locator capabilities, must not be updated from their 
  942. initial values set during registration other than to adjust for video mode 
  943. changes as discussed in Video Mode Changes. 
  944.  
  945. The diagram shows the raw device coordinate system and the normalized device 
  946. coordinate system. The raw device coordinate system can have its origin at any 
  947. corner and report sample points relative to that point over the entire active 
  948. region of the digitizer.  Typically, the origin is at the upper-left corner. 
  949. The normalized coordinate system must have its origin at the upper-left corner 
  950. of the LCD and range from 0 to the reported extents less one. 
  951.  
  952. The locator event packet reports the normalized coordinates to the Pen for OS/2 
  953. Device Driver Services.  The Pen for OS/2 Device Driver Services convert the 
  954. normalized coordinates to PM screen coordinates.  PM screen coordinates for 
  955. video graphics array (VGA) are 640 x 480 pixels. Pen-aware applications have 
  956. access to the PM screen coordinates, the more granular normalized coordinates, 
  957. and standard coordinates based on a standard digitizer resolution of 1000 
  958. points per inch. 
  959.  
  960. The calibration process determines the location of the LCD relative to the 
  961. digitizer by collecting the raw device coordinates of the LCD corners.  In the 
  962. sample calibration program provided in the Pen for OS/2 Developers Toolkit, the 
  963. measured extents are found by calculating the corners of the LCD, as shown by 
  964. the large arrows in the previous figure.  (See Calibration Program for a 
  965. description of the sample calibration program provided in the Pen for OS/2 
  966. Developers Toolkit.) 
  967.  
  968. Raw device coordinates must be transformed to the normalized coordinate system. 
  969. First, raw device points must be translated from the raw origin to the 
  970. normalized origin by adding an origin adjustment offset.  Next, the value must 
  971. be scaled in case the measured extent, as determined by the calibration points, 
  972. does not exactly match the expected fixed device extent.  This is done by 
  973. multiplying the value by the fixed extent, dividing by the measured extent, and 
  974. rounding up.  Round off this value to ensure that it does not exceed the fixed 
  975. device extent less one.  Finally, the value might need to be inverted if the 
  976. origin of the raw device coordinates is at a corner other than the upper left. 
  977.  
  978. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  979.  
  980. Xnorm = (Xraw+Xxadj) (Xextent / Xmeasured)
  981.  
  982. Ynorm = (Yraw+Yyadj) (Yextent / Ymeasured)
  983.  
  984. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  985.  
  986. Pen for OS/2 Device Driver Services normalize z-coordinates to range from 0 to 
  987. -4KB (KB equals approximately 1000 bytes) for pressure and 0 to 4KB for height. 
  988.  
  989. Digitizers located below the LCD exhibit parallax as illustrated in this 
  990. figure.  Parallax is a condition that occurs when a gap exists between the 
  991. locator position and the displayed ink.  When the pen is at position A, the 
  992. locator position and displayed ink at AL match.  When the locator is at 
  993. position B, the ink appears at BL.  A gap exists between the locator position 
  994. and the ink.  The ink would appear at position BL*. 
  995.  
  996. The distance between the display surface and the LCD cell is often about 3.0 
  997. millimeters.  In this case, where the eye angle is at 45 degrees, the gap is 
  998. 3.0 millimeters. 
  999.  
  1000. The parallax differs in both the horizontal and vertical views by how a user 
  1001. looks at the display.  This makes software correction for parallax unreliable. 
  1002. Parallax can result in a difference between the expected device extents and the 
  1003. measured device extents. 
  1004.  
  1005.  
  1006. ΓòÉΓòÉΓòÉ 5.1.4. Finger Offset ΓòÉΓòÉΓòÉ
  1007.  
  1008. You can improve the finger selection ability by offsetting the OS/2 pointer so 
  1009. it remains visible and appears to be pointing at the tip of the finger, instead 
  1010. of underneath the finger. 
  1011.  
  1012. The figure, "Digitizer Coordinate Systems", shows a finger with a y-coordinate 
  1013. offset.  If the offset were just added to the locator position, there would be 
  1014. a region on the bottom of the screen that could not be selected.  To compensate 
  1015. for this, a slide region is used for this part of the screen.  Gradually 
  1016. removing the offset in this region makes the entire region selectable. 
  1017.  
  1018. Offsets are set through a device object and managed through the Pen for OS/2 
  1019. system extension.  The category 91 Set Locator Offset IOCtl informs the pen 
  1020. device driver of the change when the variable changes through the Pen for OS/2 
  1021. system. 
  1022.  
  1023.  
  1024. ΓòÉΓòÉΓòÉ 5.1.5. High-Resolution Device Time Stamp ΓòÉΓòÉΓòÉ
  1025.  
  1026. The pen device driver can supply a high-resolution, double word (DWORD) device 
  1027. time stamp.  The resolution of the high-resolution timer is specified in the 
  1028. capabilities packet in microseconds.  For example, if the timer resolution of a 
  1029. device is 256 microseconds, then dev_timestampRes in the locator capabilities 
  1030. packet would be set to 256 and the pen capabilities PENCAP_TIMESTAMP bit would 
  1031. be set. 
  1032.  
  1033. If the pen hardware product does not supply a high-resolution timer, then the 
  1034. locator capabilities packets dev_timestampRes field would be set to 0, and the 
  1035. locator event packets dev_timestamp field would be set to 0. 
  1036.  
  1037. The pen device driver need not fill in the event time stamp, cev_timestamp. 
  1038. The Pen for OS/2 Device Driver Services handle this operation. 
  1039.  
  1040.  
  1041. ΓòÉΓòÉΓòÉ 5.1.6. Fake Points and Proximity Events ΓòÉΓòÉΓòÉ
  1042.  
  1043. The pen device driver must set the LOC_FAKE bit in cntrl field of the locator 
  1044. event packet if the coordinates specified are not valid.  The last valid 
  1045. coordinates must be used.  The first part of a stroke would generate an enter 
  1046. proximity zone event by setting EV_ENTER_PROX in the devicebits field. 
  1047.  
  1048. If the device supports proximity but the device does not generate an exit 
  1049. proximity zone event, the pen device driver must time out the stroke and 
  1050. generate an event with LOC_FAKE set using the last valid coordinates.  Neither 
  1051. LOC_CONTACT nor LOC_PROX must be set in lev_cntrl, and EV_EXIT_PROX must be set 
  1052. in the cev_devicebits field. 
  1053.  
  1054.  
  1055. ΓòÉΓòÉΓòÉ 5.1.7. Suppressed Duplicate Proximity Points ΓòÉΓòÉΓòÉ
  1056.  
  1057. By default, the device driver ignores duplicate proximity points if the pen has 
  1058. been left on the surface of the display.  The mouse is not frozen in place and 
  1059. automatic backlight timeout processing is possible. 
  1060.  
  1061.  
  1062. ΓòÉΓòÉΓòÉ 5.1.8. Performance Considerations ΓòÉΓòÉΓòÉ
  1063.  
  1064. The following list describes items that affect the performance of a Pen for 
  1065. OS/2 system extension. 
  1066.  
  1067.    o  Locator device performance is critical to the Pen for OS/2 system.  Code 
  1068.       path lengths would be optimized due to the frequency of execution. 
  1069.  
  1070.    o  Locator devices that can control their interrupt rate would attempt a 
  1071.       default rate of about 100 samples per second.  Too many interrupts 
  1072.       overload the system and too few result in poor stroke processing. 
  1073.  
  1074.    o  If possible, the locator device would self-detect exiting of the 
  1075.       proximity zone.  Relying on the locator engine to time out the stroke 
  1076.       will delay stroke completion processing in the Pen for OS/2 system. 
  1077.  
  1078.  
  1079. ΓòÉΓòÉΓòÉ 5.2. Button Device Processing ΓòÉΓòÉΓòÉ
  1080.  
  1081.                                         
  1082.                                         Γöé Events Reported
  1083.                                         Γöé to Pen for OS/2
  1084. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    ΓöîΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1085. Γöé Pen Device     Γöé                    Γöé Pen for OS/2    Γöé
  1086. Γöé Driver         Γöé                    Γöé Device Driver   Γöé
  1087. Γöé                Γöé    REPORT_EVENT    Γöé Services        Γöé
  1088. Γöé Button Device  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ                 Γöé
  1089. Γöé                Γöé                    Γöé                 Γöé
  1090. Γöé                Γöé                    Γöé                 Γöé
  1091. Γöé                Γöé                    Γöé                 Γöé
  1092. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1093.   Γöé
  1094.   Γöé External Hardware Events
  1095.  
  1096. A device object assigns actions to the pen hardware products buttons through 
  1097. the Pen for OS/2 system extension API and informs the pen device driver using 
  1098. the category 92 Set Button Assignment IOCtl.  The Query Button Assignment IOCtl 
  1099. can query the current assignment. The number of buttons and a summary of their 
  1100. assignment is obtainable by reading the unit capabilities packet with the Query 
  1101. Unit Capabilities IOCtl. 
  1102.  
  1103. The driver reports all button events to the Pen for OS/2 Device Driver 
  1104. Services.  The Pen for OS/2 Device Driver Services filter some of these events 
  1105. and do not pass them to the Pen for OS/2 system.  The pen device driver reports 
  1106. all activations and releases, regardless of the state of the other logical 
  1107. devices. 
  1108.  
  1109. The following assignments are possible: 
  1110.  
  1111.  Null 
  1112.  
  1113.            Buttons assigned to null action generate no action on activation or 
  1114.            release. The button states are reported by the locator point stream. 
  1115.  
  1116.  Mouse-emulation buttons 
  1117.  
  1118.            Mouse-emulation buttons modify the normal mouse-button event 
  1119.            emulation.  Instead of the mouse button 1 emulating the stroke, 
  1120.            mouse button 1 can be emulated as mouse button 2, mouse button 3, or 
  1121.            a combination of mouse button 1, mouse button 2, and mouse button 3. 
  1122.            The modification occurs while holding down a button, or during the 
  1123.            next stroke after activating and releasing a button.  A second 
  1124.            activation and release cancels the modification so that the next 
  1125.            stroke is not a modified mouse event. 
  1126.  
  1127.            Note:  Pressing pen buttons is not like pressing mouse buttons. 
  1128.                   Mouse buttons generate a mouse event when activated and 
  1129.                   released.  Pen buttons change the emulated mouse stream 
  1130.                   during the pen stroke but do not generate locator events 
  1131.                   directly as a result of activation or release. 
  1132.  
  1133.  Gesture mode 
  1134.  
  1135.            A stroke in gesture mode will force gesture recognition, even though 
  1136.            the stroke might be in a drawing mode. 
  1137.  
  1138.  Hot-key buttons 
  1139.  
  1140.            The Pen for OS/2 device driver reports hot-key buttons to the Pen 
  1141.            for OS/2 Device Driver Services.  The pen device driver takes no 
  1142.            action.  The Pen for OS/2 Device Driver Services conditionally 
  1143.            generate an event to the OS/2 operating system, and then report the 
  1144.            event to the Pen for OS/2 system.  The Pen for OS/2 Device Driver 
  1145.            Services might not generate the event if the system is currently 
  1146.            locked up or if the display has been turned off.  The pen device 
  1147.            driver always reports all activations and releases. 
  1148.  
  1149.  Other 
  1150.  
  1151.            All other assignments result in the buttons being reported to the 
  1152.            Pen for OS/2 system by the device driver.  The device driver uses 
  1153.            the REPORT_EVENT Pen for OS/2 Device Driver Service to report the 
  1154.            buttons. Generic IOCtl Interface provides a complete list of these 
  1155.            assignments. 
  1156.  
  1157.  The state of all buttons is reported on each locator event in the locator 
  1158.  event stream. 
  1159.  
  1160.  
  1161. ΓòÉΓòÉΓòÉ 5.3. Display Device Processing ΓòÉΓòÉΓòÉ
  1162.  
  1163.   Γöé Backlight Control                       Events Reported 
  1164.   Γöé IOCtls                                  to Pen for OS/2 Γöé
  1165. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÉ
  1166. Γöé Pen Device Driver Γöé                    Γöé Pen for OS/2     Γöé  Γöé
  1167. Γöé                   Γöé                    Γöé Device Driver    Γöé  Γöé
  1168. Γöé                   Γöé  QUERY_ACTIVITY    Γöé Services         Γöé  Γöé
  1169. Γöé Poll for Activity Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ                  Γöé  Γöé
  1170. Γöé                   Γöé                    Γöé                  Γöé  Γöé
  1171. Γöé Turn Off          Γöé  REPORT_EVENT      Γöé                  Γöé  Γöé
  1172. Γöé Backlight +       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  1173. Γöé                   Γöé                    Γöé                  Γöé  Γöé
  1174. Γöé                   Γöé  REQUEST_CALLBACK  Γöé                  Γöé  Γöé
  1175. Γöé                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ                  Γöé  Γöé
  1176. Γöé                   Γöé                    Γöé Activity Trigger Γöé  Γöé
  1177. Γöé Turn On           Γöé  Call Back         Γöé                  Γöé  Γöé
  1178. Γöé Backlight +       ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                  Γöé  Γöé
  1179. Γöé                   Γöé                    Γöé                  Γöé  Γöé
  1180. Γöé                   Γöé  REPORT_EVENT      Γöé                  Γöé  Γöé
  1181. Γöé                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  1182. Γöé                   Γöé                    Γöé                     Γöé
  1183. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1184.  
  1185. The Pen for OS/2 system extension provides APIs to turn on the displays 
  1186. backlight, turn off the displays backlight, and enable automatic backlight 
  1187. control. The Pen for OS/2 system informs the pen device driver of these 
  1188. activities with the category 93 Set Display State and Set Display Inactivity 
  1189. Period IOCtls.  Query Display State queries the state of the backlight. 
  1190.  
  1191. If the pen device driver chooses to support the automatic inactivity period, a 
  1192. timer routine queries the systems input activity with the QUERY_ACTIVITY Pen 
  1193. for OS/2 Device Driver Service. This call returns a summary activity count from 
  1194. the OS/2 mouse devices, all pen device drivers, and the keyboard device.  The 
  1195. pen device driver must turn off the display if the returned count has not 
  1196. changed during the assigned inactivity period.  The REPORT_EVENT service call 
  1197. reports an event to the Pen for OS/2 system. 
  1198.  
  1199. The pen device driver can request notification of input activity with the 
  1200. REQUEST_CALLBACK service call.  The Pen for OS/2 Device Driver Services will 
  1201. call the device entry point the next time locator, button, mouse, or keyboard 
  1202. activity occurs.  The pen device driver must turn the display back on and 
  1203. report the event with REPORT_EVENT. 
  1204.  
  1205. By default, the Pen for OS/2 Device Driver Services ignore locator mouse-button 
  1206. emulation and button device hot-key generation while the backlight is off. 
  1207. Points are processed if requested through the Set Display Inactivity Period 
  1208. IOCtl by enabling OPAQUE support.  See Function 51h. 
  1209.  
  1210. QUERY_ACTIVITY and REQUEST_CALLBACK are available to all device types. 
  1211.  
  1212. A pen device driver can choose to override mouse-button events for a short 
  1213. period of time with the SUPPRESS_STROKE service call and enabling suppress 
  1214. support through the Set Display Inactivity Period IOCtl. For example, the 
  1215. stroke causing an ACTIVITY_CALLBACK which in turn resulted in the display 
  1216. backlight turning on can report to the OS/2 operating system as mouse movement 
  1217. with no mouse-button events to avoid possible unwanted action.  The stroke 
  1218. could have originated from any pen device driver.  The Pen for OS/2 Device 
  1219. Driver Services control the length of the interval. 
  1220.  
  1221.  
  1222. ΓòÉΓòÉΓòÉ 5.4. Event Flow Control ΓòÉΓòÉΓòÉ
  1223.  
  1224.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1225.   Γöé               Γöé                      Γöé Pen for OS/2  Γöé
  1226.   Γöé Pen Device    Γöé    ENABLE_DEVICE     Γöé Device Driver Γöé
  1227.   Γöé Driver        ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Services      Γöé
  1228.   Γöé               Γöé                      Γöé               Γöé
  1229.   Γöé               Γöé    DISABLE_DEVICE    Γöé               Γöé
  1230.   Γöé               ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ               Γöé
  1231.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1232.  
  1233. The Pen for OS/2 Device Driver Services control the flow of events from the pen 
  1234. device driver with ENABLE_DEVICE and DISABLE_DEVICE. There are brief periods of 
  1235. time, during session switching, for example, when the Pen for OS/2 Device 
  1236. Driver Services will not process events.  To stop the flow of events, the Pen 
  1237. for OS/2 Device Driver Services make a call to the pen device driver  with the 
  1238. DISABLE_DEVICE IDC request.  The pen device driver must mask interrupts from 
  1239. its device when it receives the call from DISABLE_DEVICE to stop the flow of 
  1240. events to the Pen for OS/2 Device Driver Services. 
  1241.  
  1242. The pen device driver would reenable interrupts, and then resume sending events 
  1243. when it receives the call from the ENABLE_DEVICE IDC request. 
  1244.  
  1245. The device would start in a disabled state and wait for a call from 
  1246. ENABLE_DEVICE before sending any events or capability updates.  ENABLE_DEVICE 
  1247. and DISABLE_DEVICE are issued once globally to the pen device driver.  The 
  1248. driver must enable and disable all logical devices. 
  1249.  
  1250.  
  1251. ΓòÉΓòÉΓòÉ 5.5. Configuration Update ΓòÉΓòÉΓòÉ
  1252.  
  1253. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1254. Γöé Workplace ShellΓöé        APIs         Γöé Pen for OS/2  Γöé
  1255. Γöé Configuration  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ               Γöé
  1256. Γöé Object         Γöé Update Pen for OS/2 Γöé               Γöé
  1257. ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ    Variables and    ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1258.     Γöé        Γöé     Device-Specific Data   Γöé  Γöé  Γöé
  1259.     Γöé        Γöé                            Γöé  Γöé  Γöé
  1260.     Γöé        Γöé      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé  Γöé  Γöé
  1261.     Γöé        Γöé      Γöé Device-       Γöé     Γöé  Γöé  Γöé
  1262.     Γöé        Γöé      Γöé Specific      Γöé     Γöé  Γöé  ΓöéUpdated
  1263.     Γöé        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Configuration Γöé     Γöé  Γöé  ΓöéCapabilities
  1264.     Γöé               Γöé Data          Γöé     Γöé  Γöé  Γöé
  1265.     Γöé               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé  Γöé  Γöé
  1266.     Γöé               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé  Γöé  Γöé
  1267.     Γöé               Γöé Pen for OS/2  Γöé     Γöé  Γöé  Γöé
  1268.     Γöé               Γöé Configuration ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé  Γöé
  1269.     Γöé Private       Γöé Data          Γöé        Γöé  Γöé
  1270.     Γöé IOCtls        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ        Γöé  Γöé
  1271.     Γöé           IOCtls                       Γöé  Γöé
  1272.     Γöé        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  1273.     Γöé        Γöé                                  Γöé
  1274. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1275. Γöé Pen Device     Γöé     UPDATE_CAPS     Γöé Pen for OS/2  Γöé
  1276. Γöé Driver         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Device Driver Γöé
  1277. Γöé                Γöé                     Γöé Services      Γöé
  1278. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1279.  
  1280. The device objects generate device-private data, device-specific data, and Pen 
  1281. for OS/2 system extension variables.  The values of this data can be updated at 
  1282. any time. 
  1283.  
  1284. The previous figure shows the actions taking place during an update.  Pen for 
  1285. OS/2 variables change through Pen for OS/2 API functions that inform the pen 
  1286. device driver using the Generic IOCtl Interface. 
  1287.  
  1288. The Pen for OS/2 system also manages a small amount of device-specific data. 
  1289. This data is changed through WrtSetInputDeviceVariable and the pen device 
  1290. driver is updated with the Set Unit Specific Data IOCtl. 
  1291.  
  1292. Private IOCtls communicate changes in device-private data to the pen device 
  1293. driver and Pen for OS/2 is not involved.  You can define private IOCtls as 
  1294. necessary and save the data as appropriate. 
  1295.  
  1296. If any field in the registered capabilities changes, the pen device driver must 
  1297. update the capabilities with the appropriate device-type service. 
  1298.  
  1299.  
  1300. ΓòÉΓòÉΓòÉ 6. Pen Device Objects ΓòÉΓòÉΓòÉ
  1301.  
  1302. Pen for OS/2 system extension device objects are Workplace objects that provide 
  1303. a means of communication between a computer and another piece of equipment. The 
  1304. Locator object enables the configuration of barrel button settings and hardware 
  1305. that is of the absolute locator device type (LOCTYPE_PEN and LOCTYPE_FINGER). 
  1306. The Display object enables the configuration of LCD display devices and bezel 
  1307. buttons and provides a means for the user to set the timeout for the backlight. 
  1308.  
  1309. If you supply hardware devices that will interface to the Pen for OS/2 system, 
  1310. you must create a similar object or subclass one of the objects included with 
  1311. Pen for OS/2. 
  1312.  
  1313.  
  1314. ΓòÉΓòÉΓòÉ 6.1. Workplace Object Classes Hierarchy ΓòÉΓòÉΓòÉ
  1315.  
  1316. The following figure lists the new Pen object classes as they fit into the 
  1317. predefined Workplace object class hierarchy.  Each branch in the tree 
  1318. represents an immediate descendant (subclass) of a Workplace object class. 
  1319.  
  1320.  
  1321.      CLASS NAME                                   CLASS FILE NAME
  1322.  
  1323.      SOMObject                                      SOMOBJ.SC
  1324.         Γöé
  1325.         ΓööΓöÇWPObject (replaced by PenObject)          PENOBJ.SC
  1326.              Γöé
  1327.              ΓööΓöÇWPAbstract                           WPABS.SC
  1328.                   Γöé
  1329.                   ΓööΓöÇPenButtonDevice                 PENBTNDV.SC
  1330.                        Γöé
  1331.                        Γö£ΓöÇPenDisplay                 WPDISPLY.SC
  1332.                        Γöé
  1333.                        ΓööΓöÇPenLocator                 WPLOCATR.SC
  1334.                             Γöé
  1335.                             Γö£ΓöÇPenLocatorFinger      WPLOCFGR.SC
  1336.                             Γöé
  1337.                             ΓööΓöÇPenLocatorPen         WPLOCPEN.SC
  1338.  
  1339. Subclassing an object class creates a child class that modifies the behavior of 
  1340. the parent class based on the childs new methods, instance data, and overriding 
  1341. parent methods.  An object class is subclassed by deriving the new child class 
  1342. from the parent class.  The parents methods can be altered or supplemented by 
  1343. the new class and new instance data can be added and manipulated by the new 
  1344. child class. 
  1345.  
  1346. The predefined System Object Model (SOM) object class, SOMObject, is the root 
  1347. class for all SOM object classes, including all Workplace object classes. No 
  1348. external programming interfaces exist permitting another OS/2 process to invoke 
  1349. methods.  However, some API functions exist, such as WinSetObjectData, enabling 
  1350. other processes limited communication with an object.  The interface to the 
  1351. device objects is through Workplace published classes.  Information on SOM and 
  1352. Workplace objects can be found in Workplace Shell Programming Reference and in 
  1353. Workplace Shell Programming Guide. 
  1354.  
  1355. Invocation of the new device objects will work in a manner similar to the 
  1356. current Mouse object.  You can alter the system parameters for these devices 
  1357. using the Settings notebook.  While in the Settings notebook of a device 
  1358. object, you can set parameters used by a device driver and the Pen for OS/2 
  1359. system. These parameters control the operational characteristics of a device. 
  1360. Parameters represent items such as tap rates, delay times, function switches, 
  1361. and the functions performed when device buttons are pressed. 
  1362.  
  1363.  
  1364. ΓòÉΓòÉΓòÉ 6.2. Workplace Object Classes ΓòÉΓòÉΓòÉ
  1365.  
  1366. The following sections describe the object classes listed below: 
  1367.  
  1368.    o  PenButtonDevice 
  1369.    o  PenDisplay 
  1370.    o  PenLocator 
  1371.    o  PenLocatorFinger 
  1372.    o  PenLocatorPen 
  1373.  
  1374.  
  1375. ΓòÉΓòÉΓòÉ 6.2.1. PenButtonDevice ΓòÉΓòÉΓòÉ
  1376.  
  1377. Class definition file: PENBTNDV.SC 
  1378.  
  1379. Class hierarchy: 
  1380.  
  1381.   SOMObject
  1382.    PenObject
  1383.     WPAbstract
  1384.      PenButtonDevice
  1385.  
  1386. The following are the PenButtonDevice methods: 
  1387.  
  1388.    o  penAddButtonMappingsPage 
  1389.    o  penQueryButtonData 
  1390.    o  penSetButtonData 
  1391.  
  1392.  The following is the class method for the PenButtonDevice class: 
  1393.  
  1394.    o  penclsQueryButtonData 
  1395.  
  1396.  The following are the methods overridden by the PenButtonDevice class: 
  1397.  
  1398.    o  wpAddSettingsPages 
  1399.    o  wpInitData 
  1400.    o  wpRestoreState method. 
  1401.    o  wpSaveState method. 
  1402.    o  wpSetup 
  1403.    o  wpUnInitData 
  1404.  
  1405.  The following is the class method overridden by the PenButtonDevice class: 
  1406.  
  1407.    o  wpclsInitData 
  1408.  
  1409.  When an instance of the Display object is created, it will parse the setup 
  1410.  string and scan for two "keyword=value" combinations.  The following table 
  1411.  shows the keyword-value pairs supported by the PenDisplay class. 
  1412.  
  1413.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1414.   ΓöéKeyword        ΓöéExample Value  ΓöéDescription                   Γöé
  1415.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1416.   ΓöéPEN_DRIVER     ΓöéYour Device    ΓöéThe device name of the driver Γöé
  1417.   Γöé               ΓöéName           Γöélogical device that this      Γöé
  1418.   Γöé               Γöé               Γöéinstance is representing.     Γöé
  1419.   Γöé               Γöé               ΓöéThis determines which set of  Γöé
  1420.   Γöé               Γöé               ΓöéPen for OS/2 variables will beΓöé
  1421.   Γöé               Γöé               Γöéaffected by the controls in   Γöé
  1422.   Γöé               Γöé               Γöéthe notebook.                 Γöé
  1423.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1424.   ΓöéPEN_DEVICE     ΓöéDisplay        ΓöéThe device name of the driver Γöé
  1425.   Γöé               Γöé               Γöélogical device that this      Γöé
  1426.   Γöé               Γöé               Γöéinstance is representing.     Γöé
  1427.   Γöé               Γöé               ΓöéThis determines which set of  Γöé
  1428.   Γöé               Γöé               ΓöéPen for OS/2 variables will beΓöé
  1429.   Γöé               Γöé               Γöéaffected by the controls in   Γöé
  1430.   Γöé               Γöé               Γöéthe notebook.                 Γöé
  1431.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1432.  
  1433.  Note:  PenButtonDevice determines if the instance has button capabilities and 
  1434.         if so, a Buttons page is inserted into the Settings notebook of the 
  1435.         instance.  Because PenLocatorPen is a subclass of PenButtonDevice, any 
  1436.         pen that is installed which has button capabilities will automatically 
  1437.         have a Buttons page inserted into its Settings notebook. 
  1438.  
  1439.  
  1440. ΓòÉΓòÉΓòÉ 6.2.2. PenDisplay ΓòÉΓòÉΓòÉ
  1441.  
  1442. Class definition file:  WPDISPLY.SC 
  1443.  
  1444. Class hierarchy: 
  1445.  
  1446.   SOMObject
  1447.    PenObject
  1448.     WPAbstract
  1449.      PenButtonDevice
  1450.       PenDisplay
  1451.  
  1452. The following is the PenDisplay method: 
  1453.  
  1454.    o  penAddDisplayBacklightPage 
  1455.  
  1456.  The following are the methods overridden by the PenDisplay class: 
  1457.  
  1458.    o  wpAddObjectWindowPage 
  1459.    o  wpAddSettingsPages 
  1460.    o  wpFilterPopupMenu 
  1461.    o  wpOpen 
  1462.  
  1463.  The following are the class methods overridden by the PenDisplay class: 
  1464.  
  1465.    o  wpclsQueryDefaultHelp 
  1466.    o  wpclsQueryDefaultView 
  1467.    o  wpclsQueryIconData 
  1468.    o  wpclsQueryStyle 
  1469.    o  wpclsQueryTitle 
  1470.  
  1471.  Note:  If you are developing a device driver for a liquid crystal display 
  1472.         (LCD), you must either create an instance of this class in the Devices 
  1473.         folder with the appropriate setup string or subclass this object class 
  1474.         and add it to the Devices folder.  Pages can be added and replaced to 
  1475.         fully support the required interface to the device settings.  For 
  1476.         example, you might want to provide a Settings page which enables the 
  1477.         user to adjust the grey scaling for a monochrome LCD. 
  1478.  
  1479.  
  1480. ΓòÉΓòÉΓòÉ 6.2.3. PenLocator ΓòÉΓòÉΓòÉ
  1481.  
  1482. Class definition file: WPLOCATR.SC 
  1483.  
  1484. Class hierarchy: 
  1485.  
  1486.   SOMObject
  1487.    PenObject
  1488.     WPAbstract
  1489.      PenButtonDevice
  1490.       PenLocator
  1491.  
  1492. The following is the PenLocator method: 
  1493.  
  1494.    o  penAddLocatorTimingPage 
  1495.  
  1496.  The following is the PenLocator class method: 
  1497.  
  1498.    o  penclsQueryDefaultPause 
  1499.    o  penclsQueryPauseEnableDefault 
  1500.  
  1501.  The following are the methods overridden by the PenLocator class: 
  1502.  
  1503.    o  wpAddSettingsPages 
  1504.    o  wpAddObjectWindowPage 
  1505.    o  wpFilterPopupMenu 
  1506.    o  wpInitData 
  1507.    o  wpMenuItemSelected 
  1508.    o  wpMenuItemHelpSelected 
  1509.    o  wpModifyPopupMenu 
  1510.    o  wpRestoreState 
  1511.    o  wpSaveState 
  1512.    o  wpSetup 
  1513.    o  wpUnInitData 
  1514.    o  wpOpen 
  1515.  
  1516.  The following are the class methods overridden by the PenLocator class: 
  1517.  
  1518.    o  wpclsQueryDefaultHelp 
  1519.    o  wpclsQueryDefaultView 
  1520.    o  wpclsQueryIconData 
  1521.    o  wpclsQueryStyle 
  1522.    o  wpclsQueryTitle 
  1523.  
  1524.  When an instance of the locator object is created, it will parse the setup 
  1525.  string and scan for two "keyword=value" combinations.  The following table 
  1526.  shows the keyword-value pairs supported by the PenLocator class. 
  1527.  
  1528.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1529.   ΓöéKeyword        ΓöéExample Value  ΓöéDescription                   Γöé
  1530.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1531.   ΓöéCALPROG        Γöé.EXE filename  ΓöéThe executable file name of   Γöé
  1532.   Γöé               Γöé               Γöéthe OS/2 application program  Γöé
  1533.   Γöé               Γöé               Γöéthat will be started when     Γöé
  1534.   Γöé               Γöé               ΓöéCalibrate is selected from theΓöé
  1535.   Γöé               Γöé               Γöémenu.                         Γöé
  1536.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1537.   ΓöéCALPARMS       ΓöéTRUE           ΓöéThe presence of this keyword  Γöé
  1538.   Γöé               Γöé               Γöéindicates that the Driver and Γöé
  1539.   Γöé               Γöé               ΓöéDevice names are to be passed Γöé
  1540.   Γöé               Γöé               Γöéto the Calibration program as Γöé
  1541.   Γöé               Γöé               Γöéarguments.  If the CalibrationΓöé
  1542.   Γöé               Γöé               Γöéprogram has no arguments then Γöé
  1543.   Γöé               Γöé               Γöéomit this keyname from the    Γöé
  1544.   Γöé               Γöé               Γöésetup string.                 Γöé
  1545.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1546.  
  1547.  
  1548. ΓòÉΓòÉΓòÉ 6.2.4. PenLocatorFinger ΓòÉΓòÉΓòÉ
  1549.  
  1550. Class definition file: WPLOCFGR.SC 
  1551.  
  1552. Class hierarchy: 
  1553.  
  1554.   SOMObject
  1555.    PenObject
  1556.     WPAbstract
  1557.      PenButtonDevice
  1558.       PenLocator
  1559.        PenLocatorFinger
  1560.  
  1561. The following is the PenLocatorFinger method: 
  1562.  
  1563.    o  penAddFingerOffsetPage 
  1564.  
  1565.  The following are the methods overridden by the PenLocatorFinger class: 
  1566.  
  1567.    o  wpInitData 
  1568.    o  wpRestoreState 
  1569.    o  wpSaveState 
  1570.    o  wpAddSettingPages 
  1571.  
  1572.  The following are the class methods overridden by the PenLocatorFinger class: 
  1573.  
  1574.    o  penclsQueryDefaultPause 
  1575.    o  penclsQueryPauseEnableDefault 
  1576.    o  wpclsQueryIconData 
  1577.    o  wpclsQueryTitle 
  1578.    o  wpclsQueryDefaultHelp 
  1579.  
  1580.  PenLocatorFinger is a new class and is a subclass of the PenLocator class. 
  1581.  This class adds an additional page, Offset, to the Settings notebook which 
  1582.  enables you to set finger offset to the screen pointer.  This is accomplished 
  1583.  through the penAddLocatorFingerOffsetPage method and a corresponding dialog 
  1584.  procedure. 
  1585.  
  1586.  Note:  The Offset page supports only display devices with the origin in the 
  1587.         upper-left corner of the device. 
  1588.  
  1589.  
  1590. ΓòÉΓòÉΓòÉ 6.2.5. PenLocatorPen ΓòÉΓòÉΓòÉ
  1591.  
  1592. Class definition file: WPLOCPEN.SC 
  1593.  
  1594. Class hierarchy: 
  1595.  
  1596.   SOMObject
  1597.    PenObject
  1598.     WPAbstract
  1599.      PenButtonDevice
  1600.       PenLocator
  1601.        PenLocatorPen
  1602.  
  1603. The following are the class methods overridden by the PenLocatorPen class: 
  1604.  
  1605.    o  penclsQueryDefaultPause 
  1606.    o  penclsQueryPauseEnableDefault 
  1607.    o  wpclsQueryIconData 
  1608.    o  wpclsQueryTitle 
  1609.    o  wpclsQueryDefaultHelp 
  1610.  
  1611.  
  1612. ΓòÉΓòÉΓòÉ 6.3. Workplace Instance Methods ΓòÉΓòÉΓòÉ
  1613.  
  1614. The following sections describe the Workplace instance methods listed below: 
  1615.  
  1616.    o  penAddButtonMappingsPage 
  1617.    o  penQueryButtonData 
  1618.    o  penSetButtonData 
  1619.    o  penAddLocatorTimingPage 
  1620.    o  penAddDisplayBacklightPage 
  1621.    o  penAddFingerOffsetPage 
  1622.  
  1623.  
  1624. ΓòÉΓòÉΓòÉ 6.4. penAddButtonMappingsPage ΓòÉΓòÉΓòÉ
  1625.  
  1626.  
  1627. ΓòÉΓòÉΓòÉ <hidden> - penAddButtonMappingsPage ΓòÉΓòÉΓòÉ
  1628.  
  1629. /*******************************************/
  1630. /* This method enables the object to add   */
  1631. /* the Buttons page to its Settings        */
  1632. /* notebook.                               */
  1633. /*******************************************/
  1634.  
  1635. PenButtonDevice     *self;
  1636. HWND                 hwndNotebook;
  1637. ULONG                rc;
  1638.  
  1639. rc = penAddButtonMappingsPage(self, hwndNotebook);
  1640.  
  1641.  
  1642. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  1643.  
  1644.  self (PenButtonDevice *) - input 
  1645.     The pointer to this object. 
  1646.  
  1647.  
  1648. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndNotebook ΓòÉΓòÉΓòÉ
  1649.  
  1650.  hwndNotebook (HWND) - input 
  1651.     The handle of the notebook in which to insert the page. 
  1652.  
  1653.  
  1654. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  1655.  
  1656.  rc (ULONG) - returns 
  1657.     Page indentifier: 
  1658.  
  1659.       0 
  1660.          Error occurred. 
  1661.       PageId 
  1662.          Identifier for the inserted page. 
  1663.  
  1664.  
  1665. ΓòÉΓòÉΓòÉ <hidden> Usage - penAddButtonMappingsPage ΓòÉΓòÉΓòÉ
  1666.  
  1667. This method must be called from within an override of the wpAddSettings Pages 
  1668. method. 
  1669.  
  1670.  
  1671. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penAddButtonMappingsPage ΓòÉΓòÉΓòÉ
  1672.  
  1673. It is overridden in order to replace or remove the Buttons page.  To remove the 
  1674. page, return SETTINGS_PAGE_REMOVED without calling the parent. 
  1675.  
  1676.  
  1677. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penAddButtonMappingsPage ΓòÉΓòÉΓòÉ
  1678.  
  1679. None. 
  1680.  
  1681.  
  1682. ΓòÉΓòÉΓòÉ <hidden> Topics - penAddButtonMappingsPage ΓòÉΓòÉΓòÉ
  1683.  
  1684. Select an item: 
  1685.  
  1686. Returns
  1687. Override Methods
  1688. Usage
  1689. Related Methods
  1690.  
  1691.  
  1692. ΓòÉΓòÉΓòÉ 6.5. penQueryButtonData ΓòÉΓòÉΓòÉ
  1693.  
  1694.  
  1695. ΓòÉΓòÉΓòÉ <hidden> - penQueryButtonData ΓòÉΓòÉΓòÉ
  1696.  
  1697. /*******************************************/
  1698. /* This method enables the object to query */
  1699. /* the button bit maps and names to be     */
  1700. /* used for this object instance.          */
  1701. /*******************************************/
  1702.  
  1703. PenButtonDevice     *self;
  1704. PPENEVENTDATA        pPenEventData;
  1705. ULONG                rc;
  1706.  
  1707. rc = penQueryButtonData(self, pPenEventData);
  1708.  
  1709.  
  1710. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  1711.  
  1712.  self (PenButtonDevice *) - input 
  1713.     The pointer to this object. 
  1714.  
  1715.  
  1716. ΓòÉΓòÉΓòÉ <hidden> Parameter - pPenEventData ΓòÉΓòÉΓòÉ
  1717.  
  1718.  pPenEventData (PPENEVENTDATA) - input 
  1719.     A pointer to a buffer that will receive an array of PENEVENTDATA 
  1720.     structures.  The structures contain the data to be used for the button list 
  1721.     box in the Settings notebook of this object instance.  The caller is 
  1722.     responsible for ensuring that the buffer is large enough to receive the 
  1723.     data.  If this parameter is NULL, the size of the buffer needed to hold the 
  1724.     data will be returned. 
  1725.  
  1726.  
  1727. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  1728.  
  1729.  rc (ULONG) - returns 
  1730.     The size of the buffer needed to accommodate the array of PENEVENTDATA 
  1731.     structures that is returned by this object. 
  1732.  
  1733.  
  1734. ΓòÉΓòÉΓòÉ <hidden> Usage - penQueryButtonData ΓòÉΓòÉΓòÉ
  1735.  
  1736. This method can be called at any time to query the current button bit map and 
  1737. name data for this object. 
  1738.  
  1739.  
  1740. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penQueryButtonData ΓòÉΓòÉΓòÉ
  1741.  
  1742. This method is generally not overridden. 
  1743.  
  1744.  
  1745. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penQueryButtonData ΓòÉΓòÉΓòÉ
  1746.  
  1747.    o  penclsQueryButtonData 
  1748.    o  penSetButtonData 
  1749.  
  1750.  
  1751. ΓòÉΓòÉΓòÉ <hidden> Topics - penQueryButtonData ΓòÉΓòÉΓòÉ
  1752.  
  1753. Select an item: 
  1754.  
  1755. Returns
  1756. Override Methods
  1757. Usage
  1758. Related Methods
  1759.  
  1760.  
  1761. ΓòÉΓòÉΓòÉ 6.6. penSetButtonData ΓòÉΓòÉΓòÉ
  1762.  
  1763.  
  1764. ΓòÉΓòÉΓòÉ <hidden> - penSetButtonData ΓòÉΓòÉΓòÉ
  1765.  
  1766. /*******************************************/
  1767. /* This method enables the object to set   */
  1768. /* the button bit maps and names to be     */
  1769. /* used for this object instance.          */
  1770. /*******************************************/
  1771.  
  1772. PenButtonDevice     *self;
  1773. PPENEVENTDATA        pPenEventData;
  1774. BOOL                 rc;
  1775.  
  1776. rc = penSetButtonData(self, pPenEventData);
  1777.  
  1778.  
  1779. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  1780.  
  1781.  self (PenButtonDevice *) - input 
  1782.     The pointer to this object. 
  1783.  
  1784.  
  1785. ΓòÉΓòÉΓòÉ <hidden> Parameter - pPenEventData ΓòÉΓòÉΓòÉ
  1786.  
  1787.  pPenEventData (PPENEVENTDATA) - input 
  1788.     A pointer to an array of PENEVENTDATA structures. These structures contain 
  1789.     data to be used for the button list box in the Settings notebook of this 
  1790.     object instance. 
  1791.  
  1792.     The pPenEventData buffer must contain one PENEVENTDATA structure for each 
  1793.     button that is registered by the device driver.  Also, the order in which 
  1794.     these structures are placed within the buffer must match the order in which 
  1795.     the buttons are registered by the device driver with the Pen for OS/2 
  1796.     system. 
  1797.  
  1798.  
  1799. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  1800.  
  1801.  rc (BOOL) - returns 
  1802.     Success indicator: 
  1803.  
  1804.       TRUE 
  1805.          Successful completion. 
  1806.       FALSE 
  1807.          Error occurred. 
  1808.  
  1809.  
  1810. ΓòÉΓòÉΓòÉ <hidden> Usage - penSetButtonData ΓòÉΓòÉΓòÉ
  1811.  
  1812. This method can be called at any time to change the current button bit map and 
  1813. name data for this object. 
  1814.  
  1815.  
  1816. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penSetButtonData ΓòÉΓòÉΓòÉ
  1817.  
  1818. This method is generally not overridden. 
  1819.  
  1820.  
  1821. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penSetButtonData ΓòÉΓòÉΓòÉ
  1822.  
  1823.    o  penclsQueryButtonData 
  1824.    o  penQueryButtonData 
  1825.  
  1826.  
  1827. ΓòÉΓòÉΓòÉ <hidden> Topics - penSetButtonData ΓòÉΓòÉΓòÉ
  1828.  
  1829. Select an item: 
  1830.  
  1831. Returns
  1832. Override Methods
  1833. Usage
  1834. Related Methods
  1835.  
  1836.  
  1837. ΓòÉΓòÉΓòÉ 6.7. penAddLocatorTimingPage ΓòÉΓòÉΓòÉ
  1838.  
  1839.  
  1840. ΓòÉΓòÉΓòÉ <hidden> - penAddLocatorTimingPage ΓòÉΓòÉΓòÉ
  1841.  
  1842. /*******************************************/
  1843. /* This method enables the object to add   */
  1844. /* the Timings page to its Settings        */
  1845. /* notebook.                               */
  1846. /*******************************************/
  1847.  
  1848. PenLocator     *self;
  1849. HWND            hwndNotebook;
  1850. ULONG           rc;
  1851.  
  1852. rc = penAddLocatorTimingPage(self, hwndNotebook);
  1853.  
  1854.  
  1855. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  1856.  
  1857.  self (PenLocator *) - input 
  1858.     The pointer to this object. 
  1859.  
  1860.  
  1861. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndNotebook ΓòÉΓòÉΓòÉ
  1862.  
  1863.  hwndNotebook (HWND) - input 
  1864.     The handle of the notebook in which to insert the page. 
  1865.  
  1866.  
  1867. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  1868.  
  1869.  rc (ULONG) - returns 
  1870.     Page identifier: 
  1871.  
  1872.       0 
  1873.          Error occurred. 
  1874.       PageId 
  1875.          Identifier for the inserted page. 
  1876.  
  1877.  
  1878. ΓòÉΓòÉΓòÉ <hidden> Usage - penAddLocatorTimingPage ΓòÉΓòÉΓòÉ
  1879.  
  1880. This method must be called from within an override of the wpAddSettingsPages 
  1881. method. 
  1882.  
  1883.  
  1884. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penAddLocatorTimingPage ΓòÉΓòÉΓòÉ
  1885.  
  1886. This method is overridden in order to replace or remove the Timing page.  To 
  1887. remove the page, return SETTINGS_PAGE_REMOVED without calling the parent. 
  1888.  
  1889.  
  1890. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penAddLocatorTimingPage ΓòÉΓòÉΓòÉ
  1891.  
  1892. None. 
  1893.  
  1894.  
  1895. ΓòÉΓòÉΓòÉ <hidden> Topics - penAddLocatorTimingPage ΓòÉΓòÉΓòÉ
  1896.  
  1897. Select an item: 
  1898.  
  1899. Returns
  1900. Override Methods
  1901. Usage
  1902. Related Methods
  1903.  
  1904.  
  1905. ΓòÉΓòÉΓòÉ 6.8. penAddDisplayBacklightPage ΓòÉΓòÉΓòÉ
  1906.  
  1907.  
  1908. ΓòÉΓòÉΓòÉ <hidden> - penAddDisplayBacklightPage ΓòÉΓòÉΓòÉ
  1909.  
  1910. /*******************************************/
  1911. /* This method enables the object to add   */
  1912. /* the Backlight page to its Settings      */
  1913. /* notebook.                               */
  1914. /*******************************************/
  1915.  
  1916. PenDisplay     *self;
  1917. HWND            hwndNotebook;
  1918. ULONG           rc;
  1919.  
  1920. rc = penAddDisplayBacklightPage(self, hwndNotebook);
  1921.  
  1922.  
  1923. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  1924.  
  1925.  self (PenDisplay *) - input 
  1926.     The pointer to this object. 
  1927.  
  1928.  
  1929. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndNotebook ΓòÉΓòÉΓòÉ
  1930.  
  1931.  hwndNotebook (HWND) - input 
  1932.     The handle of the notebook in which to insert the page. 
  1933.  
  1934.  
  1935. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  1936.  
  1937.  rc (ULONG) - returns 
  1938.     Page identifier: 
  1939.  
  1940.       0 
  1941.          Error occurred. 
  1942.       PageId 
  1943.          Identifier for the inserted page. 
  1944.  
  1945.  
  1946. ΓòÉΓòÉΓòÉ <hidden> Usage - penAddDisplayBacklightPage ΓòÉΓòÉΓòÉ
  1947.  
  1948. This method must be called from within an override of the wpAddSettingsPages 
  1949. method. 
  1950.  
  1951.  
  1952. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penAddDisplayBacklightPage ΓòÉΓòÉΓòÉ
  1953.  
  1954. This method is overridden in order to replace or remove the Timing page.  To 
  1955. remove the page, return SETTINGS_PAGE_REMOVED without calling the parent. 
  1956.  
  1957.  
  1958. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penAddDisplayBacklightPage ΓòÉΓòÉΓòÉ
  1959.  
  1960. None. 
  1961.  
  1962.  
  1963. ΓòÉΓòÉΓòÉ <hidden> Topics - penAddDisplayBacklightPage ΓòÉΓòÉΓòÉ
  1964.  
  1965. Select an item: 
  1966.  
  1967. Returns
  1968. Override Methods
  1969. Usage
  1970. Related Methods
  1971.  
  1972.  
  1973. ΓòÉΓòÉΓòÉ 6.9. penAddFingerOffsetPage ΓòÉΓòÉΓòÉ
  1974.  
  1975.  
  1976. ΓòÉΓòÉΓòÉ <hidden> - penAddFingerOffsetPage ΓòÉΓòÉΓòÉ
  1977.  
  1978. /*******************************************/
  1979. /* This method enables the object to add   */
  1980. /* the Offset page to its Settings         */
  1981. /* notebook.                               */
  1982. /*******************************************/
  1983.  
  1984. PenLocatorFinger     *self;
  1985. HWND                  hwndNotebook;
  1986. ULONG                 rc;
  1987.  
  1988. rc = penAddFingerOffsetPage(self, hwndNotebook);
  1989.  
  1990.  
  1991. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  1992.  
  1993.  self (PenLocatorFinger *) - input 
  1994.     The pointer to this object. 
  1995.  
  1996.  
  1997. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndNotebook ΓòÉΓòÉΓòÉ
  1998.  
  1999.  hwndNotebook (HWND) - input 
  2000.     The handle of the notebook in which to insert the page. 
  2001.  
  2002.  
  2003. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  2004.  
  2005.  rc (ULONG) - returns 
  2006.     Page identifier: 
  2007.  
  2008.       0 
  2009.          Error occurred. 
  2010.       PageId 
  2011.          Identifier for the inserted page. 
  2012.  
  2013.  
  2014. ΓòÉΓòÉΓòÉ <hidden> Usage - penAddFingerOffsetPage ΓòÉΓòÉΓòÉ
  2015.  
  2016. This method must be called from within an override of the wpAddSettingsPages 
  2017. method. 
  2018.  
  2019.  
  2020. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penAddFingerOffsetPage ΓòÉΓòÉΓòÉ
  2021.  
  2022. This method is overridden in order to replace or remove the Offset page.  To 
  2023. remove the page, return SETTINGS_PAGE_REMOVED without calling the parent. 
  2024.  
  2025.  
  2026. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penAddFingerOffsetPage ΓòÉΓòÉΓòÉ
  2027.  
  2028. None. 
  2029.  
  2030.  
  2031. ΓòÉΓòÉΓòÉ <hidden> Topics - penAddFingerOffsetPage ΓòÉΓòÉΓòÉ
  2032.  
  2033. Select an item: 
  2034.  
  2035. Returns
  2036. Override Methods
  2037. Usage
  2038. Related Methods
  2039.  
  2040.  
  2041. ΓòÉΓòÉΓòÉ 6.10. Workplace Class Methods ΓòÉΓòÉΓòÉ
  2042.  
  2043. The following sections describe the Workplace Class methods listed below: 
  2044.  
  2045.    o  penclsQueryButtonData 
  2046.    o  penclsQueryDefaultPause 
  2047.    o  penclsQueryPauseEnableDefault 
  2048.  
  2049.  
  2050. ΓòÉΓòÉΓòÉ 6.11. penclsQueryButtonData ΓòÉΓòÉΓòÉ
  2051.  
  2052.  
  2053. ΓòÉΓòÉΓòÉ <hidden> - penclsQueryButtonData ΓòÉΓòÉΓòÉ
  2054.  
  2055. /*******************************************/
  2056. /* This method enables the class object to */
  2057. /* specify default button bit maps and     */
  2058. /* names used by its instances.            */
  2059. /*******************************************/
  2060.  
  2061. M_PenButtonDevice     *self;           /*  The pointer to the class object. */
  2062. PPENEVENTDATA          pPenEventData;
  2063. ULONG                  rc;
  2064.  
  2065. rc = penclsQueryButtonData(self, pPenEventData);
  2066.  
  2067.  
  2068. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  2069.  
  2070.  self (M_PenButtonDevice *) - input 
  2071.     The pointer to the class object. 
  2072.  
  2073.  
  2074. ΓòÉΓòÉΓòÉ <hidden> Parameter - pPenEventData ΓòÉΓòÉΓòÉ
  2075.  
  2076.  pPenEventData (PPENEVENTDATA) - input 
  2077.     A pointer to a buffer that will receive the array of PENEVENTDATA 
  2078.     structures.  These structures contain the data to be used for the button 
  2079.     list box in the Settings notebooks of instances of this class.  The caller 
  2080.     is responsible for ensuring that the buffer is large enough to receive the 
  2081.     data.  If this parameter is NULL, the size of the buffer needed to hold the 
  2082.     data will still be returned correctly.  This buffer must always contain one 
  2083.     valid PENEVENTDATA structure for each button registered with the writing 
  2084.     input subsystem by the device driver. 
  2085.  
  2086.  
  2087. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  2088.  
  2089.  rc (ULONG) - returns 
  2090.     The size of the buffer needed to accommodate the array of PENEVENTDATA 
  2091.     structures that is returned by this particular class object. 
  2092.  
  2093.  
  2094. ΓòÉΓòÉΓòÉ <hidden> Remarks - penclsQueryButtonData ΓòÉΓòÉΓòÉ
  2095.  
  2096. If NULL is passed for the pPenEventData parameter, the size of the PENEVENTDATA 
  2097. array buffer needed for this class will be returned. This can be used for 
  2098. memory allocation purposes.  Otherwise, the pPenEventData parameter will always 
  2099. be assumed to be large enough to accommodate the array of PENEVENTDATA 
  2100. structures for this class. 
  2101.  
  2102.  
  2103. ΓòÉΓòÉΓòÉ <hidden> Usage - penclsQueryButtonData ΓòÉΓòÉΓòÉ
  2104.  
  2105. This method can be called at any time.  Typically, it would not be useful for 
  2106. another object class to call this method. 
  2107.  
  2108.  
  2109. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penclsQueryButtonData ΓòÉΓòÉΓòÉ
  2110.  
  2111. Workplace classes that wish to have unique button bit maps and name text must 
  2112. override this method and fill out the appropriate fields within the array of 
  2113. PENEVENTDATA structures.  In addition, the correct size of PENEVENTDATA 
  2114. structures must always be returned. 
  2115.  
  2116. The pPenEventData buffer must contain one PENEVENTDATA structure for each 
  2117. button that is registered by the device driver.  Also, the order in which these 
  2118. structures are placed in the buffer must match the order in which the buttons 
  2119. are registered by the device driver with the Pen for OS/2 system. 
  2120.  
  2121.  
  2122. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penclsQueryButtonData ΓòÉΓòÉΓòÉ
  2123.  
  2124.    o  penQueryButtonData 
  2125.    o  penSetButtonData 
  2126.  
  2127.  
  2128. ΓòÉΓòÉΓòÉ <hidden> Topics - penclsQueryButtonData ΓòÉΓòÉΓòÉ
  2129.  
  2130. Select an item: 
  2131.  
  2132. Returns
  2133. Remarks
  2134. Override Methods
  2135. Usage
  2136. Related Methods
  2137.  
  2138.  
  2139. ΓòÉΓòÉΓòÉ 6.12. penclsQueryDefaultPause ΓòÉΓòÉΓòÉ
  2140.  
  2141.  
  2142. ΓòÉΓòÉΓòÉ <hidden> - penclsQueryDefaultPause ΓòÉΓòÉΓòÉ
  2143.  
  2144. /*******************************************/
  2145. /* This method enables the object to query */
  2146. /* the default Pen for OS/2 pause system   */
  2147. /* setting.                                */
  2148. /*******************************************/
  2149.  
  2150. M_PenLocator     *self;
  2151. ULONG             rv;
  2152.  
  2153. rv = penclsQueryDefaultPause(self);
  2154.  
  2155.  
  2156. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  2157.  
  2158.  self (M_PenLocator *) - input 
  2159.     The pointer to the class object. 
  2160.  
  2161.  
  2162. ΓòÉΓòÉΓòÉ <hidden> Return Value - rv ΓòÉΓòÉΓòÉ
  2163.  
  2164.  rv (ULONG) - returns 
  2165.     The default Pen for OS/2 system setting for pause is returned. 
  2166.  
  2167.  
  2168. ΓòÉΓòÉΓòÉ <hidden> Usage - penclsQueryDefaultPause ΓòÉΓòÉΓòÉ
  2169.  
  2170. This method can be called at any time. 
  2171.  
  2172.  
  2173. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penclsQueryDefaultPause ΓòÉΓòÉΓòÉ
  2174.  
  2175. This method can be overridden to specify a different default pause value. 
  2176.  
  2177.  
  2178. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penclsQueryDefaultPause ΓòÉΓòÉΓòÉ
  2179.  
  2180. None. 
  2181.  
  2182.  
  2183. ΓòÉΓòÉΓòÉ <hidden> Topics - penclsQueryDefaultPause ΓòÉΓòÉΓòÉ
  2184.  
  2185. Select an item: 
  2186.  
  2187. Returns
  2188. Override Methods
  2189. Usage
  2190. Related Methods
  2191.  
  2192.  
  2193. ΓòÉΓòÉΓòÉ 6.13. penclsQueryPauseEnableDefault ΓòÉΓòÉΓòÉ
  2194.  
  2195.  
  2196. ΓòÉΓòÉΓòÉ <hidden> - penclsQueryPauseEnableDefault ΓòÉΓòÉΓòÉ
  2197.  
  2198. /*******************************************/
  2199. /* This method is called to allow the      */
  2200. /* object to query the default Pen for     */
  2201. /* OS/2 pause-enable system setting.       */
  2202. /*******************************************/
  2203.  
  2204. M_PenLocator     *self;
  2205. ULONG             rc;
  2206.  
  2207. rc = penclsQueryPauseEnableDefault(self);
  2208.  
  2209.  
  2210. ΓòÉΓòÉΓòÉ <hidden> Parameter - self ΓòÉΓòÉΓòÉ
  2211.  
  2212.  self (M_PenLocator *) - input 
  2213.     The pointer to the class object. 
  2214.  
  2215.  
  2216. ΓòÉΓòÉΓòÉ <hidden> Return Value - rc ΓòÉΓòÉΓòÉ
  2217.  
  2218.  rc (ULONG) - returns 
  2219.     The default Pen for OS/2 system setting for pause is returned. 
  2220.  
  2221.  
  2222. ΓòÉΓòÉΓòÉ <hidden> Usage - penclsQueryPauseEnableDefault ΓòÉΓòÉΓòÉ
  2223.  
  2224. This method can be called at any time. 
  2225.  
  2226.  
  2227. ΓòÉΓòÉΓòÉ <hidden> Override Methods - penclsQueryPauseEnableDefault ΓòÉΓòÉΓòÉ
  2228.  
  2229. This method can be overridden to specify a different default pause enable 
  2230. value. 
  2231.  
  2232.  
  2233. ΓòÉΓòÉΓòÉ <hidden> Related Methods - penclsQueryPauseEnableDefault ΓòÉΓòÉΓòÉ
  2234.  
  2235. None. 
  2236.  
  2237.  
  2238. ΓòÉΓòÉΓòÉ <hidden> Topics - penclsQueryPauseEnableDefault ΓòÉΓòÉΓòÉ
  2239.  
  2240. Select an item: 
  2241.  
  2242. Returns
  2243. Override Methods
  2244. Usage
  2245. Related Methods
  2246.  
  2247.  
  2248. ΓòÉΓòÉΓòÉ 6.14. Modifying the Pen for OS/2 Device Objects ΓòÉΓòÉΓòÉ
  2249.  
  2250. The Pen for OS/2 system extension device objects provide a generic set of 
  2251. functions for customizing device settings, such as, pen and finger pause rate, 
  2252. double-tap rate, button mappings, and backlight timeout.  You can use the 
  2253. provided classes and create object instances of these classes in your install 
  2254. procedure, or you can modify the classes to further refine their behavior. 
  2255.  
  2256. Subclassing is the process of modifying the behavior of an existing object 
  2257. class.  This section provides information on how to subclass Pen for OS/2 
  2258. device object classes to modify their behavior.  For general information on SOM 
  2259. and Workplace Shell* programming, refer to Workplace Shell Programming Guide, 
  2260. System Object Model Programming Guide, and Workplace Shell Programming 
  2261. Reference. 
  2262.  
  2263.  
  2264. ΓòÉΓòÉΓòÉ 6.14.1. Creating Default Instances of Pen for OS/2 Object Classes ΓòÉΓòÉΓòÉ
  2265.  
  2266. Creating default instances of the Pen for OS/2 object classes is done by 
  2267. setting up an XXXX.WPO file.  See Installation Control Files, for a description 
  2268. of how the XXXX.WPO file is set up to create the default Pen for OS/2 device 
  2269. objects. 
  2270.  
  2271.  
  2272. ΓòÉΓòÉΓòÉ 6.14.2. Slight Modification of a Pen for OS/2 Object Class ΓòÉΓòÉΓòÉ
  2273.  
  2274. If the behavior of the Pen for OS/2 object class meets your requirements with 
  2275. the exception of the icon and icon title, then you can subclass, and with 
  2276. slight modification, customize the object to your liking. 
  2277.  
  2278. For example, to subclass PenLocatorPen, you will need to create a class 
  2279. definition file (.CSC) to define your class.  You will also need files 
  2280. WPLOCPEN.H and WPLOCPEN.SC from the Pen for OS/2 Developers Toolkit.  In the 
  2281. .CSC file, you will need to define method overrides for the following methods: 
  2282.  
  2283.    o  wpclsQueryTitle 
  2284.    o  wpclsQueryIconData 
  2285.  
  2286.  An example .CSC file is detailed in the following figure. 
  2287.  
  2288.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2289.  
  2290.  
  2291.      include <wplocpen.sc>
  2292.  
  2293.      class: MyPenClassName,
  2294.              external stem = Mypen,
  2295.              local,
  2296.              external prefix = mypen_,
  2297.              classprefix     = mypenM_,
  2298.              major version = 1,
  2299.              minor version = 1;
  2300.  
  2301.      parent: PenLocatorPen;
  2302.  
  2303.      methods:
  2304.      override wpclsQueryTitle, class;
  2305.      override wpclsQueryIconData, class;
  2306.  
  2307.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2308.  
  2309.  After creating the .C source file (and other SOM emitted files) by running the 
  2310.  SOM compiler (the SOM compiler will create stubs for the methods in the .C 
  2311.  source), modify the .C source as follows: 
  2312.  
  2313.    o  wpclsQueryTitle would return a pointer to the name of the icon.  Do not 
  2314.       call the parent.  An example follows: 
  2315.  
  2316.             ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2317.  
  2318.  
  2319.              SOM_Scope PSZ   SOMLINK mypenM_wpclsQueryTitle(M_MyPenClassName *sonSelf)
  2320.              {
  2321.                  return ("MyIconName");
  2322.              }
  2323.  
  2324.             ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2325.  
  2326.    o  wpclsQueryIconData would fill out the appropriate information in the 
  2327.       ICONINFO structure and return the size of the structure.  Do not call the 
  2328.       parent.  An example follows: 
  2329.  
  2330.             ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2331.  
  2332.  
  2333.               SOM_Scope ULONG SOMLINK mypenM_wpclsQueryIconData(
  2334.                             M_MyPenClassName *somSelf, PICONINFO pIconInfo)
  2335.               {
  2336.                  if (pIconInfo
  2337.                  {
  2338.                     pIconInfo->fFormat = ICON_RESOURCE;
  2339.                     pIconInfo->hmod    = myHmod;
  2340.                     pIconInfo->resid   = IDP_MYICON;
  2341.                  }
  2342.                  return (sizeof(ICONINFO));
  2343.               }
  2344.  
  2345.             ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2346.  
  2347.  Finally, modify your installation procedure to register your new class and 
  2348.  create an instance of your class.  You will now have an object that has all 
  2349.  the behavior of the Pen for OS/2  PenLocatorPen class, except the object will 
  2350.  have the icon and title you specified through the method overrides above. 
  2351.  
  2352.  
  2353. ΓòÉΓòÉΓòÉ 6.14.3. Increased Modification of a Pen for OS/2 Object Class ΓòÉΓòÉΓòÉ
  2354.  
  2355. If your device requires additional settings, then you can accomplish this 
  2356. through subclassing and making more sizable modifications to the behavior.  Or, 
  2357. if you do not want a Pen for OS/2  system extension page to be present in a 
  2358. Settings notebook then you might remove it through subclassing.  For this 
  2359. example, the PenLocatorFinger class will be used.  The Touch Offset Page will 
  2360. be removed from the Settings notebook of the Touch class. 
  2361.  
  2362. To subclass PenLocatorFinger, you will need to create a class definition file 
  2363. (.CSC) to define your class.  You will also need files WPLOCFGR.H and 
  2364. WPLOCFGR.SC from the Pen for OS/2 Developers Toolkit.  In the .CSC file, you 
  2365. will need to define method for the following methods: 
  2366.  
  2367.    o  penAddFingerOffsetPage 
  2368.  An example .CSC file follows: 
  2369.  
  2370.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2371.  
  2372.     include <wplocfgr.sc>
  2373.  
  2374.     class: MyTouchClassName,
  2375.             external stem = Mytch,
  2376.             local,
  2377.             external prefix = mytch_,
  2378.             classprefix     = mytchM_,
  2379.             major version = 1,
  2380.             minor version = 1;
  2381.  
  2382.     parent: PenLocatorFinger;
  2383.  
  2384.     methods:
  2385.     override penAddFingerOffsetPage;
  2386.  
  2387.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2388.  
  2389.  After creating the .C source file (and other SOM emitted files) by running the 
  2390.  SOM compiler, modify the .C source as follows: 
  2391.  
  2392.    o  penAddFingerOffsetPage would return SETTINGS_PAGE_REMOVED.  Do not call 
  2393.       the parent.  An example follows: 
  2394.  
  2395.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2396.  
  2397.  
  2398.      SOM_Scope ULONG   SOMLINK mytch_penAddFingerOffsetPage(
  2399.                    MyTouchClassName *somSelf, HWND hwndNotebook)
  2400.      {
  2401.         return (SETTINGS_PAGE_REMOVED);
  2402.      }
  2403.  
  2404.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2405.  Finally, modify your installation procedure to register your new class and 
  2406.  create an instance of your class.  You will now have an object that has all 
  2407.  the behavior of the Pen for OS/2 PenLocatorFinger class, except the object 
  2408.  will not have the Touch Offset page in its Settings notebook, as you specified 
  2409.  through the method override above. 
  2410.  
  2411.  To perform more advanced modifications of a Pen for OS/2 object class, for 
  2412.  example, adding your own Settings page, refer to Workplace Shell Programming 
  2413.  Guide, System Object Model Programming Guide, and Workplace Shell Programming 
  2414.  Reference. 
  2415.  
  2416.  The class definition files PENBTNDV.SC, WPDISPLY.SC, WPLOCATR.SC, WPLOCPEN.SC, 
  2417.  and WPLOCFGR.SC are included in the Pen for OS/2 Developers Toolkit. 
  2418.  
  2419.  
  2420. ΓòÉΓòÉΓòÉ 7. Installation Control Files ΓòÉΓòÉΓòÉ
  2421.  
  2422. There are four control files used by the device driver installation program. 
  2423. The files must be created and placed on a device driver installation diskette 
  2424. along with the pen device driver and any optional programs you choose to 
  2425. provide such as calibration programs, auxiliary programs, or other utilities. 
  2426. The files might be in their original format or may be compressed into bundles 
  2427. using the IBM PACK.EXE utility program.  The device driver installation program 
  2428. is invoked during Pen for OS/2 system extension installation.  The user 
  2429. receives the option to install a pen device driver and specify where the pen 
  2430. device driver files are located.  The pen device driver, ring 3 support 
  2431. programs, and dynamic link libraries are installed using the Pen for OS/2 
  2432. installation program. 
  2433.  
  2434. A description of each of the control files follows. 
  2435.  
  2436.  
  2437. ΓòÉΓòÉΓòÉ 7.1. xxxxx.MCF Control File ΓòÉΓòÉΓòÉ
  2438.  
  2439. xxxxx.MCF is the initial control file processed by the Pen for OS/2 
  2440. installation program.  In the Pen for OS/2 Developers Toolkit, this file is 
  2441. PENDD.MCF for installation of the device driver named PENDD.  The installation 
  2442. program searches for this file in the directory defined in the source path. 
  2443. The installation terminates if the file is not found.  The contents of this 
  2444. file are detailed in the following figure. 
  2445.  
  2446. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2447.  
  2448. package="Your Device"
  2449. filelist="PENDD.LST"
  2450. groupcount=1
  2451. munitcount=1
  2452. medianame="Device Driver Installation Diskette"
  2453. sourcedir = "\\"                  = 0
  2454. sourcedir = "\\HDCONTRL\\"        = 1
  2455. sourcedir = "\\INSTALL\\MMLCKDIR" = 2 /* Location of the unpacked files */
  2456. destindir = "\\"                  = 0
  2457. destindir = "\\INSTALL\\"         = 1
  2458. destindir = "\\DLL\\"             = 2
  2459. destindir = "\\INSTALL\\MMLCKDIR" = 3 /* For unpacking files            */
  2460. ssgroup=0
  2461. sssize=3500
  2462. ssname="PENDD device drivers"
  2463. ssversion="0.00"
  2464. ssinich="PENDD.WPO"
  2465. ssconfigch="PENDD.CCH"
  2466. ssdll="PENDD.DLL"
  2467. ssdllentry="installentry"
  2468.  
  2469. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2470.  
  2471. These first five statements provide information about the installation process. 
  2472. The package keyword represents the name of the device driver installation 
  2473. package in the form of a quoted string.  The string is displayed in the Specify 
  2474. the Pen device you want to install list box on the Pen for OS/2 device driver 
  2475. target installation screen. 
  2476.  
  2477. The filelist keyword is used during the installation process to identify the 
  2478. file that contains the list of files to be processed; for the Pen for OS/2 
  2479. device driver named PENDD provided in the Pen for OS/2 Developers Toolkit, the 
  2480. list is in PENDD.LST.  The groupcount keyword defines the number of groups that 
  2481. make up the pen device driver installation.  A group is a collection of 
  2482. information that pertains to the installation of this device.  In a Pen for 
  2483. OS/2 device driver installation, only one group is needed and groupcount must 
  2484. be 1.  The munitcount and medianame keywords list the number of device driver 
  2485. installation diskettes and the names of the diskettes. 
  2486.  
  2487. The next seven statements define the source and target subdirectories used for 
  2488. the PENDD installation.  The directories are defined by the entries numbered 0 
  2489. and greater. Special mention must be made of the temporary subdirectory 
  2490. represented as both a source subdirectory, 2, and target subdirectory, 3.  This 
  2491. is a temporary subdirectory that is used only at installation time.  It is the 
  2492. destination for the unpacking of the compressed files.  When the files are 
  2493. unpacked into this subdirectory, it becomes the source subdirectory because the 
  2494. files are moved from this temporary location to the permanent subdirectory. 
  2495. The IBM program, PACK.EXE, is the only supported compression program.  The Pen 
  2496. for OS/2 device driver installation program uses UNPACK.EXE to decompress the 
  2497. packed files.  PACK.EXE can be obtained from the Pen for OS/2 Developers 
  2498. Toolkit. 
  2499.  
  2500. The final eight statements define the installation group.  The installation of 
  2501. PENDD utilizes only one group, named PENDD device drivers.  If additional 
  2502. groups are added to the PENDD installation, they would require their own group 
  2503. definition statements.  The sssize field shows how much space is required to 
  2504. install this group; the value is displayed on the User Prompts screen under the 
  2505. heading "Code to Install".  The target drive must have at least the required 
  2506. amount of space or an error can occur when the user attempts to install to this 
  2507. location.  The ssinich and ssconfigch fields define the other control files to 
  2508. be used during Pen for OS/2 installation.  The final two fields, ssdll and 
  2509. ssdllentry, identify a group-specific dynamic link library (DLL) to be loaded 
  2510. and run during installation which permits some type of specialized processing 
  2511. to occur that is not covered during general installation of PENDD. If you are 
  2512. subclassing the device objects, you must include a DLL with an entry point to 
  2513. register and create an object of your new class. These last two fields are 
  2514. optional. 
  2515.  
  2516.  
  2517. ΓòÉΓòÉΓòÉ 7.2. xxxxx.LST Control File ΓòÉΓòÉΓòÉ
  2518.  
  2519. This file contains a listing of the files to be processed by the device driver 
  2520. installation software and the location of the files. The first entry in this 
  2521. file is a number identifying the number of files to process during the 
  2522. installation.  Next is a listing of those files, as shown in the following 
  2523. figure. 
  2524.  
  2525. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2526.  
  2527.  /* File count                                                        */
  2528.     10
  2529.  /* Disk    installation   target  source   file                 file */
  2530.  /* Number  group          subdirectories   name                 type */
  2531.     0       0              0       0       "PENDD.MCF"           2
  2532.     0       0              0       0       "PENDD.LST"           2
  2533.     0       0              1       0       "PENDD.CCH"           2
  2534.     0       0              1       0       "PENDD.WPO"           2
  2535.     0       0              0       0       "PENDD.SYS"           2
  2536.     0       0              3       0       "PENDD.LS@"           3
  2537.     0       0              2       2       "PROGR.EXE"           1
  2538.     0       0              2       0       "PENDD.DLL"           2
  2539.     0       0              0       0       "CAL.EXE"             2
  2540.     0       0              0       0       "HELLO.EXE"           4
  2541.  
  2542. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2543.  
  2544. The first nonblank, noncomment record is a file count of the files that follow. 
  2545. All other entries have six fields.  The first field is Disk Number.  Disk 
  2546. numbering begins at 0.  The largest number in this field must be less than the 
  2547. munitcount field in the xxxxx.MCF file. 
  2548.  
  2549. The second field identifies the installation group that this file belongs to. 
  2550. PENDD contains only one installation group, so all entries will have 0 in this 
  2551. field.  The third and fourth fields identify the target and source 
  2552. subdirectories to be used when processing this file.  The fifth entry is the 
  2553. file name and the sixth entry is the file type.  A description of the file 
  2554. types follows: 
  2555.  
  2556.  1       The file was compressed in a packed file. 
  2557.  2       The file is in original format. 
  2558.  3       A packed file. 
  2559.  4       The file is to be deleted. 
  2560.  
  2561.  From the preceding figure, the sixth, seventh, and tenth lines are as follows: 
  2562.  
  2563.    o  PENDD.LS@ is an packed file residing in directory 0 (that is, the root 
  2564.       directory) on the diskette.  This packed file is unpacked into its 
  2565.       component file(s) into target destination directory 3 (for example, 
  2566.       INSTAL\MMLCKDIR) on the target. 
  2567.  
  2568.    o  PROGR.EXE is a file that was compressed into PENDD.LS@.  This file is 
  2569.       moved from source subdirectory 2 (for example, INSTAL\MMLCKDIR) into 
  2570.       target destination subdirectory 2 (for example, \DLL). 
  2571.  
  2572.    o  The file HELLO.EXE might exist from a previous installation of PENDD; it 
  2573.       is no longer supported or needed and will be deleted at installation time 
  2574.       if it still exists in the destination location. 
  2575.  
  2576.  
  2577. ΓòÉΓòÉΓòÉ 7.3. xxxxx.WPO Control File ΓòÉΓòÉΓòÉ
  2578.  
  2579. This control file defines the objects in the new Pen for OS/2 folder. The 
  2580. following figure is a sample entry used to create a Pen for OS/2 device object. 
  2581. The first entry in this file represents the number of WPObject entries to 
  2582. follow.  The second entry is used to show the percent completed on the Updating 
  2583. system files progress indicator.  The percent complete value from this file 
  2584. plus the percent values from .WPO and .CCH must equal 100 percent. 
  2585.  
  2586. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2587.  
  2588. 1
  2589. 80
  2590. WPObject =
  2591. (
  2592.  WPClassName   = "WPFolder"
  2593.  WPTitle       = "Devices"
  2594.  WPSetupString = "OBJECTID=<DEVICES_FOLDER>"
  2595.  WPLocation    = "<PPM_FOLDER>"
  2596.  WPFlags       = OL
  2597. )
  2598. WPObject =
  2599. (
  2600.  WPClassName   = "PenLocatorPen"
  2601.  WPTitle       = "Pen"
  2602.  WPSetupString = "OBJECTID=<PENDD_STYLUS>;CALPROG=$(DEST)CAL.EXE;
  2603.                   CALPARMS=TRUE;
  2604.                   PEN_DRIVER=Digitizer Mod 3;
  2605.                   PEN_DEVICE=Pen"
  2606.  WPLocation    = "<DEVICES_FOLDER>"
  2607.  WPFlags       = 1L
  2608. )
  2609.  
  2610. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2611.  
  2612. Where: 
  2613.  
  2614.  $(DEST)        A macro that is replaced by the full path that was specified as 
  2615.                 the destination path during device driver installation. 
  2616.  
  2617.  Pen            The sample entry identifies a new object as a device object 
  2618.                 titled "Pen".  It will be known by the OS/2 operating system as 
  2619.                 PENDD_STYLUS and reside in the Devices folder. 
  2620.  
  2621.  WPFLags        Specifies an action on PENDD_STYLUS as follows: 
  2622.  
  2623.       0    Indicates the creation should fail if PENDD_STYLUS already exists. 
  2624.       1    Indicates the folder should replace PENDD_STYLUS if it already 
  2625.            exists. 
  2626.       2    Specifies that this folder should update the PENDD_STYLUS if it 
  2627.            already exists. 
  2628.  
  2629.  CALPROG        Specifies the name of the calibration program.  If your 
  2630.                 calibration program does not need the PEN_DRIVER and PEN_DEVICE 
  2631.                 parameters passed to it as input parameters, do not use this 
  2632.                 keyword.  CALPARMS=TRUE is used to tell the object to pass the 
  2633.                 PEN_DRIVER and PEN_DEVICE names as input parameters when 
  2634.                 starting CAL.EXE.  The sample program, CAL.EXE, needs these two 
  2635.                 parameters to be passed in when starting.  For more 
  2636.                 information, see Calibration Program. 
  2637.  
  2638.  PEN_DRIVER     Refers to the string specified by the device driver in the 
  2639.                 Common Capabilities Packet defined as ccap_device_name for 
  2640.                 logical device unit 0. 
  2641.  
  2642.  PEN_DEVICE     Refers to the string specified by the device driver in the 
  2643.                 Common Capabilities Packet defined as ccap_device_name for 
  2644.                 logical device units other than zero. 
  2645.  
  2646.  
  2647. ΓòÉΓòÉΓòÉ 7.4. xxxxx.CCH Control File ΓòÉΓòÉΓòÉ
  2648.  
  2649. This control file defines the changes to be made to CONFIG.SYS as shown in the 
  2650. following figure. 
  2651.  
  2652. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2653.  
  2654. 20
  2655. MERGE "LIBPATH"    = 2
  2656. MERGE "SET PATH"   = 0
  2657. MERGE "SET DPATH"  = 0
  2658. DELETE "DEVICE=MOUSE.SYS"
  2659. REPLACE "SET PENDD" = 0
  2660. DEVICE = "$(DEST)PENDD.SYS TYPE=3"
  2661. DEVICE = "$(BOOT):\\OS2\\MOUSE.SYS"
  2662.  
  2663. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2664.  
  2665. Where: 
  2666.  
  2667.  20             The first entry in this file represents the percentage to paint 
  2668.                 the Updating system files progress indicator. 
  2669.  
  2670.  MERGE          The MERGE statements add information to existing CONFIG.SYS 
  2671.                 statements.  For example, the first statement adds an 
  2672.                 additional directory to the LIBPATH statement in CONFIG.SYS. 
  2673.                 The directory being added is represented by the number 2.  This 
  2674.                 number corresponds with the destindir statement in the 
  2675.                 xxxxx.MCF control file described earlier.  The PENDD.MCF file 
  2676.                 has the following statement: 
  2677.  
  2678.                                 ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2679.  
  2680.                                 destindir = "\\DLL\\"          = 2
  2681.  
  2682.                                 ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2683.  
  2684.                 If the user accepts the default PENDD directory name, the 
  2685.                 LIBPATH statement is changed to reflect the addition of the 
  2686.                 x:\PENDD\DDL subdirectory (where x is the drive letter 
  2687.                 specified by the user). 
  2688.  
  2689.  DELETE         The DELETE statement is used to remark out lines in CONFIG.SYS. 
  2690.                 In the DELETE statement above, the DEVICE=MOUSE.SYS statement 
  2691.                 is remarked out. 
  2692.  
  2693.  REPLACE        The REPLACE statement is used to change the value of a 
  2694.                 CONFIG.SYS environment setting.  The directory being pointed to 
  2695.                 in the existing SET PENDD statement will be replaced by the 
  2696.                 base directory the user specifies in the target path field on 
  2697.                 the User Prompts screen. 
  2698.  
  2699.  DEVICE         The DEVICE statement permits additional device drivers to be 
  2700.                 loaded by the CONFIG.SYS file.  The DEVICE statement is written 
  2701.                 to CONFIG.SYS with the fully qualified file name. 
  2702.  
  2703.  $(DEST)        A macro that is resolved to the fully qualified destination 
  2704.                 path to which the device is being installed. 
  2705.  
  2706.  $(BOOT)        A macro that is replaced by the start drive letter of the 
  2707.                 operating system. 
  2708.  
  2709.  The installation script files also support two additional macros.  A 
  2710.  description of these macros follows: 
  2711.  
  2712.  $(DIR)#        Where # is a number of the destination directory as stated in 
  2713.                 the file XXX.MCF.  The full macro is replaced by the complete 
  2714.                 path of the destination directory. 
  2715.  
  2716.  $(DRIVE)       This macro is replaced by the installation target drive letter. 
  2717.                 No colon is appended. 
  2718.  
  2719.  
  2720. ΓòÉΓòÉΓòÉ 8. Programming Interface ΓòÉΓòÉΓòÉ
  2721.  
  2722. The device-driver-socket programming interface of the pen device driver is made 
  2723. up of the following: 
  2724.  
  2725.    o  Request packet interface 
  2726.    o  Generic IOCtl interface 
  2727.    o  Pen for OS/2 extended interface 
  2728.  
  2729.  The examples in this book are written in assembly language to show detail. 
  2730.  The definitions and data structures in this chapter are given in C language 
  2731.  for clarity.  The following table shows C data types and the equivalent 
  2732.  assembly language data lengths. 
  2733.  
  2734.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2735.   ΓöéC             ΓöéASM                   Γöé
  2736.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2737.   ΓöéLONG          ΓöéDD                    Γöé
  2738.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2739.   ΓöéSHORT         ΓöéDW                    Γöé
  2740.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2741.   ΓöéUCHAR         ΓöéDB                    Γöé
  2742.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2743.   ΓöéULONG         ΓöéDD                    Γöé
  2744.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2745.   ΓöéUSHORT        ΓöéDW                    Γöé
  2746.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2747.  
  2748.  Variables are usually referred to using the name that is used in the sample 
  2749.  pen device driver.  For example, pqusd.capabilities is referred to in Function 
  2750.  60h.  This is the name of the variable used in the sample. 
  2751.  
  2752.  
  2753. ΓòÉΓòÉΓòÉ 8.1. Request Packet Interface ΓòÉΓòÉΓòÉ
  2754.  
  2755. The pen device driver is a character device driver and implements the following 
  2756. OS/2 device driver strategy commands: 
  2757.  
  2758. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2759. ΓöéCode          ΓöéCommand               Γöé
  2760. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2761. Γöé0H            ΓöéINIT                  Γöé
  2762. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2763. ΓöéDH            ΓöéOPEN DEVICE           Γöé
  2764. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2765. ΓöéEH            ΓöéCLOSE DEVICE          Γöé
  2766. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2767. Γöé10H           ΓöéGENERIC IOCtl         Γöé
  2768. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2769.  
  2770. Note:  BAD_COMMAND (8103H) is returned for all other commands that are not 
  2771.        supported.  DosDevIOCtl2 is not supported. 
  2772.  
  2773.  INIT is described in Initialization. There is minimal support for OPEN and 
  2774.  CLOSE commands, only a count for the number of OPENs is maintained.  Generic 
  2775.  IOCtl processing by the device driver is described in Driver Subcomponents. 
  2776.  Generic IOCtl Interface describes the IOCtl functions the device driver must 
  2777.  support. 
  2778.  
  2779.  
  2780. ΓòÉΓòÉΓòÉ 8.2. Generic IOCtl Interface ΓòÉΓòÉΓòÉ
  2781.  
  2782. The IOCtl functions provide a method for an application to send device-specific 
  2783. control commands to a pen device driver.  These IOCtls are subfunctions that 
  2784. are issued through the DosDevIOCtl API function request.  The following table 
  2785. lists the categories and functions for the generic IOCtl functions. 
  2786.  
  2787. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2788. ΓöéCategory       ΓöéFunction       ΓöéDescription                   Γöé
  2789. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2790. Γöé90H            Γöé               ΓöéDriver                        Γöé
  2791. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2792. Γöé               Γöé50H            ΓöéSet Unit Specific Data        Γöé
  2793. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2794. Γöé               Γöé51H            ΓöéSet Unit Variable             Γöé
  2795. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2796. Γöé               Γöé52H            ΓöéReset Trace Table             Γöé
  2797. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2798. Γöé               Γöé53H            ΓöéSet Trace Table Size          Γöé
  2799. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2800. Γöé               Γöé60H            ΓöéQuery Unit Specific Data      Γöé
  2801. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2802. Γöé               Γöé61H            ΓöéQuery Unit Variable           Γöé
  2803. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2804. Γöé               Γöé62H            ΓöéQuery Unit Capabilities       Γöé
  2805. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2806. Γöé               Γöé63H            ΓöéQuery Trace Table             Γöé
  2807. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2808. Γöé               Γöé64H            ΓöéQuery Trace Table Size        Γöé
  2809. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2810. Γöé91H            Γöé               ΓöéLocator                       Γöé
  2811. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2812. Γöé               Γöé50H            ΓöéSet Locator Offset            Γöé
  2813. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2814. Γöé               Γöé51H            ΓöéSet Locator Pass Rate         Γöé
  2815. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2816. Γöé               Γöé52H            ΓöéSet Locator Sample Rate       Γöé
  2817. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2818. Γöé               Γöé60H            ΓöéQuery Locator Variables       Γöé
  2819. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2820. Γöé               Γöé61H            ΓöéQuery Locator Raw Coordinates Γöé
  2821. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2822. Γöé               Γöé62H            ΓöéQuery Default Locator Extents Γöé
  2823. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2824. Γöé92H            Γöé               ΓöéButton                        Γöé
  2825. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2826. Γöé               Γöé50H            ΓöéSet Button Assignment         Γöé
  2827. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2828. Γöé               Γöé60H            ΓöéQuery Button Assignment       Γöé
  2829. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2830. Γöé93H            Γöé               ΓöéDisplay                       Γöé
  2831. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2832. Γöé               Γöé50H            ΓöéSet Display State             Γöé
  2833. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2834. Γöé               Γöé51H            ΓöéSet Display Inactivity Period Γöé
  2835. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2836. Γöé               Γöé60H            ΓöéQuery Display State           Γöé
  2837. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2838.  
  2839. ERROR_INVALID_PARAMETER (8113H) is returned for invalid unit or for parameters 
  2840. out of the specified range. 
  2841.  
  2842. General defines: 
  2843.  
  2844. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2845.  
  2846. #define PEN_CAT_DRIVER  0x090        /* Driver category       */
  2847. #define PEN_CAT_LOCATOR 0x091        /* Locator category      */
  2848. #define PEN_CAT_BUTTON  0x092        /* Button category       */
  2849. #define PEN_CAT_DISPLAY 0x093        /* Display category      */
  2850.  
  2851. #define PEN_IOCTL_LEV_MAJOR 0        /* IOCtl interface level */
  2852. #define PEN_IOCTL_LEV_MINOR 3        /* IOCtl interface level */
  2853.  
  2854. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2855.  
  2856. The rest of this section describes the IOCtl functions defined in PENIOCTL.H. 
  2857.  
  2858.  
  2859. ΓòÉΓòÉΓòÉ 8.2.1. Category 90h - Driver IOCtls ΓòÉΓòÉΓòÉ
  2860.  
  2861. The following are Category 90h - Driver IOCtls: 
  2862.  
  2863.    o  Function 50h - Set Unit Specific Data 
  2864.    o  Function 51h - Set Unit Variable 
  2865.    o  Function 52h - Reset Trace Table 
  2866.    o  Function 53h - Set Trace Table Size 
  2867.    o  Function 60h - Query Unit Specific Data 
  2868.    o  Function 61h - Query Unit Variables 
  2869.    o  Function 62h - Query Unit Capabilities 
  2870.    o  Function 63h - Query Trace Table 
  2871.    o  Function 64h - Query Trace Table Size 
  2872.  
  2873.  
  2874. ΓòÉΓòÉΓòÉ 8.3. Set Unit Specific Data - Function 50h ΓòÉΓòÉΓòÉ
  2875.  
  2876.  
  2877. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 50h ΓòÉΓòÉΓòÉ
  2878.  
  2879. #define PEN_FUNC_SUSD 0x050
  2880.  
  2881. This function sets the device-specific data for the requested unit. 
  2882.  
  2883.  
  2884. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  2885.  
  2886. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2887. ΓöéField                          Length    Γöé
  2888. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2889. ΓöéRequested unit                 ULONG     Γöé
  2890. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2891. ΓöéByte count of the              ULONG     Γöé
  2892. Γöédevice-specific data area                Γöé
  2893. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2894.  
  2895.  
  2896. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  2897.  
  2898. Device specific structure, first LONG has byte count. 
  2899.  
  2900. Note:  If the device supports standard locator unit-specific data, this 
  2901.        structure is used by the sample driver to maintain calibration alignment 
  2902.        data.  Other driver information can be appended after this standard 
  2903.        structure. 
  2904.  
  2905.  
  2906. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 50h ΓòÉΓòÉΓòÉ
  2907.  
  2908. Category 90h, Driver IOCtls - Set Unit Specific Data 
  2909.  
  2910. Select an item: 
  2911.  
  2912. Description
  2913. Parameter Packet Format
  2914. Data Packet Format
  2915.  
  2916.  
  2917. ΓòÉΓòÉΓòÉ 8.4. Set Unit Variable - Function 51h ΓòÉΓòÉΓòÉ
  2918.  
  2919.  
  2920. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 51h ΓòÉΓòÉΓòÉ
  2921.  
  2922. #define PEN_FUNC_SUV 0x051
  2923.  
  2924. This function sets the device-specific variable for the requested unit. 
  2925.  
  2926.  
  2927. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  2928.  
  2929. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2930. ΓöéField                        Length    Γöé
  2931. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2932. ΓöéRequested unit               ULONG     Γöé
  2933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2934. ΓöéIndex of variable to set     ULONG     Γöé
  2935. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2936. ΓöéValue to set                 LONG      Γöé
  2937. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2938.  
  2939.  
  2940. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  2941.  
  2942. None. 
  2943.  
  2944.  
  2945. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 51h ΓòÉΓòÉΓòÉ
  2946.  
  2947. Category 90h, Driver IOCtls - Set Unit Variable 
  2948.  
  2949. Select an item: 
  2950.  
  2951. Description
  2952. Parameter Packet Format
  2953. Data Packet Format
  2954.  
  2955.  
  2956. ΓòÉΓòÉΓòÉ 8.5. Reset Trace Table - Function 52h ΓòÉΓòÉΓòÉ
  2957.  
  2958.  
  2959. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 52h ΓòÉΓòÉΓòÉ
  2960.  
  2961. #define PEN_FUNC_RTT 0x052
  2962.  
  2963. This function resets the transaction trace buffer.  Resetting the trace buffer 
  2964. is a convenient way to view only current stroke data. 
  2965.  
  2966.  
  2967. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  2968.  
  2969. None. 
  2970.  
  2971.  
  2972. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  2973.  
  2974. None. 
  2975.  
  2976.  
  2977. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 52h ΓòÉΓòÉΓòÉ
  2978.  
  2979. Category 90h, Driver IOCtls - Reset Trace Table 
  2980.  
  2981. Select an item: 
  2982.  
  2983. Description
  2984. Parameter Packet Format
  2985. Data Packet Format
  2986.  
  2987.  
  2988. ΓòÉΓòÉΓòÉ 8.6. Set Trace Table Size - Function 53h ΓòÉΓòÉΓòÉ
  2989.  
  2990.  
  2991. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 53h ΓòÉΓòÉΓòÉ
  2992.  
  2993. #define PEN_FUNC_STTS 0x053
  2994.  
  2995. This function allocates a trace table for tracing. 
  2996.  
  2997.  
  2998. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  2999.  
  3000. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3001. ΓöéField                          Length    Γöé
  3002. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3003. ΓöéNumber of LONG values in table ULONG     Γöé
  3004. Γöé(Number of bytes/4)                      Γöé
  3005. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3006.  
  3007.  
  3008. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3009.  
  3010. None. 
  3011.  
  3012.  
  3013. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 53h ΓòÉΓòÉΓòÉ
  3014.  
  3015. Category 90h, Driver IOCtls - Set Trace Table Size 
  3016.  
  3017. Select an item: 
  3018.  
  3019. Description
  3020. Parameter Packet Format
  3021. Data Packet Format
  3022.  
  3023.  
  3024. ΓòÉΓòÉΓòÉ 8.7. Query Unit Specific Data - Function 60h ΓòÉΓòÉΓòÉ
  3025.  
  3026.  
  3027. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 60h ΓòÉΓòÉΓòÉ
  3028.  
  3029. #define PEN_FUNC_QUSD 0x060
  3030.  
  3031. This function reads the device-specific data for the requested unit. The 
  3032. device-specific data area is truncated when the pqusd.byteCount is less than 
  3033. the length of the device-specific data.  The first ULONG in the unit-specific 
  3034. data is the entire length of the area.  This is not reduced to reflect a 
  3035. truncated query. 
  3036.  
  3037.  
  3038. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3039.  
  3040. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3041. ΓöéField                          Length    Γöé
  3042. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3043. ΓöéRequested unit                 ULONG     Γöé
  3044. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3045. ΓöéByte count of the device       ULONG     Γöé
  3046. Γöéspecific data area                       Γöé
  3047. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3048. ΓöéBytes returned (output         ULONG     Γöé
  3049. Γöéparameter)                               Γöé
  3050. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3051. ΓöéReturn code (output parameter) ULONG     Γöé
  3052. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3053. ΓöéCapabilities (output           ULONG     Γöé
  3054. Γöéparameter)                               Γöé
  3055. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3056.  
  3057.  
  3058. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3059.  
  3060. Device specific structure. 
  3061.  
  3062.  
  3063. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 90h, Function 60h ΓòÉΓòÉΓòÉ
  3064.  
  3065. Values for pqusd.capabilities: 
  3066.  
  3067. #define QUSD_RESERVD 0x0000FFFF       /* Reserved for architected use        */
  3068. #define QUSD_OEM     0xFFFF0000       /* Reserved for OEM use                */
  3069.  
  3070. The following are defined for all device types: 
  3071.  
  3072. #define QUSD_LENGTH   0x00000001      /* First word of unit data is length.  */
  3073. #define QUSD_STANDARD 0x00000002      /* Starts with standard
  3074.                                          device-specific layout.             */
  3075.  
  3076. The following are locator specific: 
  3077.  
  3078. #define QUSD_X_INVERT 0x00000004      /* X raw coordinate is inverted.       */
  3079. #define QUSD_Y_INVERT 0x00000008      /* Y raw coordinate is inverted.       */
  3080.  
  3081. Values for pqusd.rc: 
  3082.  
  3083. #define QUSD_OK     0       /* All data was copied.                */
  3084. #define QUSD_TRUNC  1       /* Data was truncated.                 */
  3085. #define QUSD_NA     2       /* Data is not available; none copied. */
  3086.  
  3087. typedef struct _SLUSD {
  3088.    ULONG   length;           /* Length of entire data area             */
  3089.    ULONG   XoriginDefault;   /* Default x origin coordinate adjustment */
  3090.    ULONG   Xorigin;          /* x-coordinate origin adjustment         */
  3091.    ULONG   XmeasuredExtent;  /* Measured x extent                      */
  3092.    ULONG   YoriginDefault;   /* Default y origin coordinate adjustment */
  3093.    ULONG   Yorigin;          /* y-coordinate origin adjustment         */
  3094.    ULONG   YmeasuredExtent;  /* Measured y extent                      */
  3095. } SLUSD;
  3096.  
  3097.  
  3098. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 60h ΓòÉΓòÉΓòÉ
  3099.  
  3100. Category 90h, Driver IOCtls - Query Unit Specific Data 
  3101.  
  3102. Select an item: 
  3103.  
  3104. Description
  3105. Parameter Packet Format
  3106. Data Packet Format
  3107. Remarks
  3108.  
  3109.  
  3110. ΓòÉΓòÉΓòÉ 8.8. Query Unit Variables - Function 61h ΓòÉΓòÉΓòÉ
  3111.  
  3112.  
  3113. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 61h ΓòÉΓòÉΓòÉ
  3114.  
  3115. #define PEN_FUNC_QUV 0x061
  3116.  
  3117. This function gets the device-specific variable from the requested unit. Unit 
  3118. 0, variable 0, returns an error counter.  Unit 0, variable 1, returns a panic 
  3119. flag word. 
  3120.  
  3121.  
  3122. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3123.  
  3124. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3125. ΓöéField                        Length    Γöé
  3126. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3127. ΓöéRequested unit               ULONG     Γöé
  3128. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3129. ΓöéIndex of variable to set     ULONG     Γöé
  3130. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3131.  
  3132.  
  3133. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3134.  
  3135. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3136. ΓöéField              Length    Γöé
  3137. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3138. ΓöéValue returned     ULONG     Γöé
  3139. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3140.  
  3141.  
  3142. ΓòÉΓòÉΓòÉ <hidden> Data Structure - Category 90h, Function 61h ΓòÉΓòÉΓòÉ
  3143.  
  3144. typedef struct _D_QUV {
  3145.    ULONG   value;           /* Value returned */
  3146. } DQUV;
  3147.  
  3148. Note:  The sample program provided in the Pen for OS/2 Developers Toolkit uses 
  3149.        unit 0 and variable 0 to report the error count.  To report the panic 
  3150.        values (internal errors), the Pen for OS/2 Developers Toolkit sample 
  3151.        program uses unit 0 and variable 1.  The numerical panic values are 
  3152.        mapped to their meanings in the PEN.INC file. 
  3153.  
  3154.  
  3155. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 61h ΓòÉΓòÉΓòÉ
  3156.  
  3157. Category 90h, Driver IOCtls - Query Unit Variables 
  3158.  
  3159. Select an item: 
  3160.  
  3161. Description
  3162. Parameter Packet Format
  3163. Data Packet Format
  3164. Data Structure
  3165.  
  3166.  
  3167. ΓòÉΓòÉΓòÉ 8.9. Query Unit Capabilities - Function 62h ΓòÉΓòÉΓòÉ
  3168.  
  3169.  
  3170. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 62h ΓòÉΓòÉΓòÉ
  3171.  
  3172. #define PEN_FUNC_QUC 0x062
  3173.  
  3174. This function returns the capabilities for the unit. 
  3175.  
  3176.  
  3177. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3178.  
  3179. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3180. ΓöéField                          Length    Γöé
  3181. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3182. ΓöéRequested unit                 ULONG     Γöé
  3183. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3184. ΓöéSize in bytes of area to       ULONG     Γöé
  3185. Γöéreceive data                             Γöé
  3186. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3187. ΓöéBytes returned (output         ULONG     Γöé
  3188. Γöéparameter)                               Γöé
  3189. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3190. ΓöéReturn code (output parameter) ULONG     Γöé
  3191. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3192.  
  3193.  
  3194. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3195.  
  3196. Area to receive extended information registration packet (defined in PENEI.H). 
  3197.  
  3198.  
  3199. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 90h, Function 62h ΓòÉΓòÉΓòÉ
  3200.  
  3201. Values for pquc.rc are the same as for spqusd.rc. 
  3202.  
  3203.  
  3204. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 62h ΓòÉΓòÉΓòÉ
  3205.  
  3206. Category 90h, Driver IOCtls - Query Unit Capabilities 
  3207.  
  3208. Select an item: 
  3209.  
  3210. Description
  3211. Parameter Packet Format
  3212. Data Packet Format
  3213. Remarks
  3214.  
  3215.  
  3216. ΓòÉΓòÉΓòÉ 8.10. Query Trace Table - Function 63h ΓòÉΓòÉΓòÉ
  3217.  
  3218.  
  3219. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 63h ΓòÉΓòÉΓòÉ
  3220.  
  3221. #define PEN_FUNC_QTT 0x063
  3222.  
  3223. This function returns the valid entries in the trace table.  Each entry is a 
  3224. DWORD (4 bytes) and can be considered an array of ULONGs. The first entry has 
  3225. the number of valid entries to follow. 
  3226.  
  3227.  
  3228. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3229.  
  3230. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3231. ΓöéField                          Length    Γöé
  3232. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3233. ΓöéNumber of LONGs in allocated   ULONG     Γöé
  3234. Γöétable                                    Γöé
  3235. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3236.  
  3237.  
  3238. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3239.  
  3240. PLONG to trace table array. 
  3241.  
  3242.  
  3243. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 90h, Function 63h ΓòÉΓòÉΓòÉ
  3244.  
  3245. Each entry has a trace code describing the contents of the entry: 
  3246.  
  3247. #define TRACE_MASK      0x0FF000000   /* Isolate trace code from entry.          */
  3248. #define TRACE_MASK_SUB  0x0F0000000   /* Isolate sub code value.                 */
  3249.  
  3250. #define TRACE_INT       0x0F0000000   /* Interrupt event                         */
  3251. #define TRACE_INT_H     0x0F000
  3252.  
  3253. #define TRACE_TICK      0x0C0000000   /* Timer tick; low word is tick count.     */
  3254. #define TRACE_TICK_H    0x0C000
  3255. #define TRACE_ABS       0x010000000   /* Absolute packet sub trace code          */
  3256. #define TRACE_ABS_E     0x01E000000   /* -- Mouse button event is low word.      */
  3257. #define TRACE_ABS_EH    0x01E00
  3258. #define TRACE_ABS_X     0x011000000   /* -- x-coordinate is low word.            */
  3259. #define TRACE_ABS_XH    0x01100
  3260. #define TRACE_ABS_Y     0x012000000   /* -- y-coordinate is low word.            */
  3261. #define TRACE_ABS_YH    0x01200
  3262. #define TRACE_ABS_Z     0x014000000   /* -- z-coordinate is low word.            */
  3263. #define TRACE_ABS_ZH    0x01400
  3264. #define TRACE_ABS_D     0x015000000   /* -- EI device bits                       */
  3265. #define TRACE_ABS_DH    0x01500
  3266. #define TRACE_ABS_C     0x016000000   /* -- EI control word
  3267. #define TRACE_ABS_CH    0x01600
  3268.  
  3269. #define TRACE_ERROR     0x0E0000000   /* Error trace; word is error count.       */
  3270. #define TRACE_ERROR_H   0x0E000
  3271.  
  3272. #define TRACE_DATA      0x000000000   /* Raw data trace; byte is in low byte.    */
  3273. #define TRACE_DATA_1    0x001000000   /* -- First byte of a packet (optional)    */
  3274. #define TRACE_DATA_1H   0x00100
  3275. #define TRACE_DATA_H    0x00000       /* -- Not first byte                       */
  3276.  
  3277. #define TRACE_SYS       0x020000000   /*  System device event (EMI only)         */
  3278. #define TRACE_SYS_H     0x02000       /*                                         */
  3279. #define TRACE_BUTTON    0x0B0000000   /* Button event sub trace code             */
  3280. #define TRACE_BREL      0x0B0000000   /* Button release mask is low word.        */
  3281. #define TRACE_BREL_H    0x0B000
  3282. #define TRACE_BACT      0x0B1000000   /* Button activation mask is low word.     */
  3283. #define TRACE_BACT_H    0x0B100
  3284.  
  3285. #define TRACE_DISPLAY   0x0D0000000   /* Display event sub trace code            */
  3286. #define TRACE_DOFF      0x0D0000000   /* Display is turned off.                  */
  3287. #define TRACE_DOFF_H    0x0D000
  3288. #define TRACE_DON       0x0D1000000   /* Display is turned on.                   */
  3289. #define TRACE_DON_H     0x0D100
  3290. #define TRACE_DD        0x090000000   /* Trace is device dependent.              */
  3291.                                       /* Low word is data; second byte is index. */
  3292. #define TRACE_DD_H      0x09000
  3293.  
  3294.  
  3295. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 63h ΓòÉΓòÉΓòÉ
  3296.  
  3297. Category 90h, Driver IOCtls - Query Trace Table 
  3298.  
  3299. Select an item: 
  3300.  
  3301. Description
  3302. Parameter Packet Format
  3303. Data Packet Format
  3304. Remarks
  3305.  
  3306.  
  3307. ΓòÉΓòÉΓòÉ 8.11. Query Trace Table Size - Function 64h ΓòÉΓòÉΓòÉ
  3308.  
  3309.  
  3310. ΓòÉΓòÉΓòÉ <hidden> Description - Category 90h, Function 64h ΓòÉΓòÉΓòÉ
  3311.  
  3312. #define PEN_FUNC_QTTS 0x064
  3313.  
  3314. This function returns the size of the entire trace table. This function can be 
  3315. used to obtain the memory allocation size to be used for the Query Trace Table 
  3316. function. 
  3317.  
  3318.  
  3319. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3320.  
  3321. None. 
  3322.  
  3323.  
  3324. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 90h, Driver IOCtls ΓòÉΓòÉΓòÉ
  3325.  
  3326. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3327. ΓöéField                          Length    Γöé
  3328. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3329. ΓöéNumber of LONG values in table ULONG     Γöé
  3330. Γöé(Number of bytes/4)                      Γöé
  3331. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3332.  
  3333.  
  3334. ΓòÉΓòÉΓòÉ <hidden> Data Structure - Category 90h, Function 64h ΓòÉΓòÉΓòÉ
  3335.  
  3336. typedef struct _D_QTTS {
  3337.   ULONG   size;         /* Number of LONG values in table
  3338.                            (number of bytes/4)            */
  3339. } DQTTS;
  3340.  
  3341.  
  3342. ΓòÉΓòÉΓòÉ <hidden> Category 90h, Function 64h ΓòÉΓòÉΓòÉ
  3343.  
  3344. Category 90h, Driver IOCtls - Query Trace Table Size 
  3345.  
  3346. Select an item: 
  3347.  
  3348. Description
  3349. Parameter Packet Format
  3350. Data Packet Format
  3351. Data Structure
  3352.  
  3353.  
  3354. ΓòÉΓòÉΓòÉ 8.12. Category 91h - Locator IOCtls ΓòÉΓòÉΓòÉ
  3355.  
  3356. The following are Category 91h - Locator IOCtls: 
  3357.  
  3358.    o  Function 50h - Set Locator Offset 
  3359.    o  Function 51h - Set Locator Pass Rate 
  3360.    o  Function 52h - Set Locator Sample Rate 
  3361.    o  Function 60h - Query Locator Variables 
  3362.    o  Function 61h - Query Locator Raw Coordinates 
  3363.  
  3364.  
  3365. ΓòÉΓòÉΓòÉ 8.13. Set Locator Offset - Function 50h ΓòÉΓòÉΓòÉ
  3366.  
  3367.  
  3368. ΓòÉΓòÉΓòÉ <hidden> Description - Category 91h, Function 50h ΓòÉΓòÉΓòÉ
  3369.  
  3370. #define PEN_FUNC_SLO 0x050
  3371.  
  3372. This function is used to change the finger offset of the digitizer.  An offset 
  3373. can be negative.  Both or either offsets can be changed according to the 
  3374. functions ORed in the command field. 
  3375.  
  3376.  
  3377. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 91, Locator IOCtls ΓòÉΓòÉΓòÉ
  3378.  
  3379. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3380. ΓöéField                          Length    Γöé
  3381. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3382. ΓöéRequested unit                 ULONG     Γöé
  3383. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3384. ΓöéCommand                        ULONG     Γöé
  3385. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3386. ΓöéX offset in digitizer units    ULONG     Γöé
  3387. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3388. ΓöéY offset in digitizer units    ULONG     Γöé
  3389. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3390.  
  3391.  
  3392. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 91, Locator IOCtls ΓòÉΓòÉΓòÉ
  3393.  
  3394. None. 
  3395.  
  3396.  
  3397. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 91h, Function 50h ΓòÉΓòÉΓòÉ
  3398.  
  3399. Values for pslo.command: 
  3400.  
  3401. #define PSLO_SET_X   0x01      /* Set x offset        */
  3402. #define PSLO_SET_Y   0x02      /* Set y offset        */
  3403.  
  3404.  
  3405. ΓòÉΓòÉΓòÉ <hidden> Category 91h, Function 50h ΓòÉΓòÉΓòÉ
  3406.  
  3407. Category 91, Locator IOCtls - Set Locator Offset 
  3408.  
  3409. Select an item: 
  3410.  
  3411. Description
  3412. Parameter Packet Format
  3413. Data Packet Format
  3414. Remarks
  3415.  
  3416.  
  3417. ΓòÉΓòÉΓòÉ 8.14. Set Locator Pass Rate - Function 51h ΓòÉΓòÉΓòÉ
  3418.  
  3419.  
  3420. ΓòÉΓòÉΓòÉ <hidden> Description - Category 91h, Function 51h ΓòÉΓòÉΓòÉ
  3421.  
  3422. #define PEN_FUNC_SLPR 0x051
  3423.  
  3424. This function is used to change the OS/2 event rate.  If the rate=2, then for 
  3425. every 2 digitizer samples only 1 is reported to Pen for OS/2 as a mouse event. 
  3426. All samples are reported to Pen for OS/2. 
  3427.  
  3428. If left at 0, Pen for OS/2 device driver services will calculate the pass rate 
  3429. automatically.  This variable should be used only if the automatic value 
  3430. requires manual tuning. 
  3431.  
  3432.  
  3433. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3434.  
  3435. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3436. ΓöéField                          Length    Γöé
  3437. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3438. ΓöéRequested unit                 ULONG     Γöé
  3439. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3440. ΓöéNumber of ext events for each  ULONG     Γöé
  3441. ΓöéOS/2 event                               Γöé
  3442. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3443.  
  3444.  
  3445. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3446.  
  3447. None. 
  3448.  
  3449.  
  3450. ΓòÉΓòÉΓòÉ <hidden> Category 91h, Function 51h ΓòÉΓòÉΓòÉ
  3451.  
  3452. Category 91h, Locator IOCtls - Set Locator Pass Rate 
  3453.  
  3454. Select an item: 
  3455.  
  3456. Description
  3457. Parameter Packet Format
  3458. Data Packet Format
  3459.  
  3460.  
  3461. ΓòÉΓòÉΓòÉ 8.15. Set Locator Sample Rate - Function 52h ΓòÉΓòÉΓòÉ
  3462.  
  3463.  
  3464. ΓòÉΓòÉΓòÉ <hidden> Description - Category 91h, Function 52h ΓòÉΓòÉΓòÉ
  3465.  
  3466. #define PEN_FUNC_SLSR 0x052
  3467.  
  3468. This function is used to change the sample rate.  The device must round the 
  3469. rate to the closest value. 
  3470.  
  3471.  
  3472. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3473.  
  3474. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3475. ΓöéField                          Length    Γöé
  3476. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3477. ΓöéRequested unit                 ULONG     Γöé
  3478. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3479. ΓöéSample rate in samples per     ULONG     Γöé
  3480. Γöésecond                                   Γöé
  3481. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3482.  
  3483.  
  3484. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3485.  
  3486. None. 
  3487.  
  3488.  
  3489. ΓòÉΓòÉΓòÉ <hidden> Category 91h, Function 52h ΓòÉΓòÉΓòÉ
  3490.  
  3491. Category 91h, Locator IOCtls - Set Locator Sample Rate 
  3492.  
  3493. Select an item: 
  3494.  
  3495. Description
  3496. Parameter Packet Format
  3497. Data Packet Format
  3498.  
  3499.  
  3500. ΓòÉΓòÉΓòÉ 8.16. Query Locator Variables - Function 60h ΓòÉΓòÉΓòÉ
  3501.  
  3502.  
  3503. ΓòÉΓòÉΓòÉ <hidden> Description - Category 91h, Function 60h ΓòÉΓòÉΓòÉ
  3504.  
  3505. #define PEN_FUNC_QLV 0x060
  3506.  
  3507. This function returns the Pen for OS/2 locator variables. 
  3508.  
  3509.  
  3510. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 91, Locator IOCtls ΓòÉΓòÉΓòÉ
  3511.  
  3512. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3513. ΓöéField              Length    Γöé
  3514. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3515. ΓöéRequested unit     ULONG     Γöé
  3516. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3517.  
  3518.  
  3519. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 91, Locator IOCtls ΓòÉΓòÉΓòÉ
  3520.  
  3521. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3522. ΓöéField                          Length    Γöé
  3523. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3524. ΓöéX offset in digitizer units    LONG      Γöé
  3525. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3526. ΓöéY offset in digitizer units    LONG      Γöé
  3527. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3528. ΓöéPass rate                      ULONG     Γöé
  3529. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3530. ΓöéSample rate in samples per     ULONG     Γöé
  3531. Γöésecond                                   Γöé
  3532. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3533.  
  3534.  
  3535. ΓòÉΓòÉΓòÉ <hidden> Data Structure - Category 91h, Function 60h ΓòÉΓòÉΓòÉ
  3536.  
  3537. typedef struct _D_QLV {
  3538.    LONG   xOffset;      /* x offset in digitizer units       */
  3539.    LONG   yOffset;      /* y offset in digitizer units       */
  3540.    ULONG  passRate;     /* Pass rate                         */
  3541.    ULONG  sampelRate;   /* Sample rate in samples per second */
  3542. } DQLV;
  3543.  
  3544.  
  3545. ΓòÉΓòÉΓòÉ <hidden> Category 91h, Function 60h ΓòÉΓòÉΓòÉ
  3546.  
  3547. Category 91, Locator IOCtls - Query Locator Variables 
  3548.  
  3549. Select an item: 
  3550.  
  3551. Description
  3552. Parameter Packet Format
  3553. Data Packet Format
  3554. Data Structure
  3555.  
  3556.  
  3557. ΓòÉΓòÉΓòÉ 8.17. Query Locator Raw Coordinates - Function 61h ΓòÉΓòÉΓòÉ
  3558.  
  3559.  
  3560. ΓòÉΓòÉΓòÉ <hidden> Description - Category 91h, Function 61h ΓòÉΓòÉΓòÉ
  3561.  
  3562. #define PEN_FUNC_QLRC 0x061
  3563.  
  3564. This function returns the next valid raw locator coordinate.  The dqlrc.rc 
  3565. value reflects whether a coordinate value was available within the specified 
  3566. timeout period. 
  3567.  
  3568.  
  3569. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3570.  
  3571. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3572. ΓöéField                          Length    Γöé
  3573. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3574. ΓöéRequested unit                 ULONG     Γöé
  3575. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3576. ΓöéTimeout value in milliseconds  ULONG     Γöé
  3577. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3578.  
  3579.  
  3580. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3581.  
  3582. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3583. ΓöéField                          Length    Γöé
  3584. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3585. ΓöéReturn code                    LONG      Γöé
  3586. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3587. ΓöéX offset in raw digitizer      LONG      Γöé
  3588. Γöéunits                                    Γöé
  3589. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3590. ΓöéY offset in raw digitizer      LONG      Γöé
  3591. Γöéunits                                    Γöé
  3592. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3593.  
  3594.  
  3595. ΓòÉΓòÉΓòÉ <hidden> Data Structure - Category 91h, Function 61h ΓòÉΓòÉΓòÉ
  3596.  
  3597. typedef struct _D_QLRC {
  3598.   LONG   rc;            /* Return code              */
  3599.   LONG   xRaw;          /* x in raw digitizer units */
  3600.   LONG   yRaw;          /* y in raw digitizer units */
  3601.  
  3602. } DQLRC;
  3603.  
  3604.  
  3605. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 91h, Function 61h ΓòÉΓòÉΓòÉ
  3606.  
  3607. Values for dqlrc.rc: 
  3608.  
  3609. #define  QLRC_VALID      0     /* Valid coordinates returned.           */
  3610. #define  QLRC_TIMEOUT    1     /* Timed out, coordinates are not valid. */
  3611. #define  QLRC_BUSY       2     /* Only one thread at a time allowed.    */
  3612.  
  3613.  
  3614. ΓòÉΓòÉΓòÉ <hidden> Category 91h, Function 61h ΓòÉΓòÉΓòÉ
  3615.  
  3616. Category 91h, Locator IOCtls - Query Locator Raw Coordinates 
  3617.  
  3618. Select an item: 
  3619.  
  3620. Description
  3621. Parameter Packet Format
  3622. Data Packet Format
  3623. Data Structure
  3624. Remarks
  3625.  
  3626.  
  3627. ΓòÉΓòÉΓòÉ 8.18. Query Default Locator Extents - Function 62h ΓòÉΓòÉΓòÉ
  3628.  
  3629.  
  3630. ΓòÉΓòÉΓòÉ <hidden> Description - Category 91h, Function 62h ΓòÉΓòÉΓòÉ
  3631.  
  3632. #define PEN_FUNC_QDLE 0x062
  3633.  
  3634. This function returns the default locator extents.  The dqdle.rc value reflects 
  3635. whether the default extents were retrieved. 
  3636.  
  3637.  
  3638. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3639.  
  3640. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3641. ΓöéField              Length    Γöé
  3642. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3643. ΓöéRequested unit     ULONG     Γöé
  3644. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3645.  
  3646.  
  3647. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 91h, Locator IOCtls ΓòÉΓòÉΓòÉ
  3648.  
  3649. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3650. ΓöéField           Length    Γöé
  3651. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3652. ΓöéReturn code     LONG      Γöé
  3653. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3654. ΓöéX extent        ULONG     Γöé
  3655. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3656. ΓöéY extent        ULONG     Γöé
  3657. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3658.  
  3659.  
  3660. ΓòÉΓòÉΓòÉ <hidden> Data Structure - Category 91h, Function 62h ΓòÉΓòÉΓòÉ
  3661.  
  3662. typedef struct _D_QDLE {
  3663.   ULONG   rc;            /* Return code              */
  3664.   ULONG   Xdefault;      /* x default extent         */
  3665.   ULONG   Ydefault;      /* y default dextent        */
  3666.  
  3667. } DQDLE;
  3668.  
  3669.  
  3670. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 91h, Function 62h ΓòÉΓòÉΓòÉ
  3671.  
  3672. Values for dqdle.rc: 
  3673.  
  3674. #define  QDLE_OK         0     /* The default extents were valid.       */
  3675. #define  QDLE_FAIL       1     /* The default extents were not valid.   */
  3676.  
  3677.  
  3678. ΓòÉΓòÉΓòÉ <hidden> Category 91h, Function 62h ΓòÉΓòÉΓòÉ
  3679.  
  3680. Category 91h, Locator IOCtls - Query Default Locator Extents 
  3681.  
  3682. Select an item: 
  3683.  
  3684. Description
  3685. Parameter Packet Format
  3686. Data Packet Format
  3687. Data Structure
  3688. Remarks
  3689.  
  3690.  
  3691. ΓòÉΓòÉΓòÉ 8.19. Category 92h - Button IOCtls ΓòÉΓòÉΓòÉ
  3692.  
  3693. The following are Category 92h - Button IOCtls: 
  3694.  
  3695.    o  Function 50h - Set Button Assignment 
  3696.    o  Function 60h - Query Button Assignment 
  3697.  
  3698.  
  3699. ΓòÉΓòÉΓòÉ 8.20. Set Button Assignment - Function 50h ΓòÉΓòÉΓòÉ
  3700.  
  3701.  
  3702. ΓòÉΓòÉΓòÉ <hidden> Description - Category 92h, Function 50h ΓòÉΓòÉΓòÉ
  3703.  
  3704. #define PEN_FUNC_SBA 0x050
  3705.  
  3706. This function sets the assignment for a button. 
  3707.  
  3708.  
  3709. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 92h, Button IOCtls ΓòÉΓòÉΓòÉ
  3710.  
  3711. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3712. ΓöéField                          Length    Γöé
  3713. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3714. ΓöéRequested unit                 ULONG     Γöé
  3715. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3716. ΓöéIndex of button (0 to 15)      ULONG     Γöé
  3717. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3718. ΓöéAction to perform              ULONG     Γöé
  3719. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3720. ΓöéHot-key value for hot-key      ULONG     Γöé
  3721. Γöéassignment                               Γöé
  3722. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3723. ΓöéMouse button selection mask    ULONG     Γöé
  3724. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3725.  
  3726.  
  3727. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 92h, Button IOCtls ΓòÉΓòÉΓòÉ
  3728.  
  3729. None. 
  3730.  
  3731.  
  3732. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 92h, Function 50h ΓòÉΓòÉΓòÉ
  3733.  
  3734. Values for psba.action: 
  3735.  
  3736. Note:  Values must match order of capability fields in DCAP struct. 
  3737.  
  3738.   #define  NOBUTTONACTION     0     /* Null - do nothing (the default).            */
  3739.   #define  SENDHOTKEY         1     /* Send hot key; value in PSBA.hotkey.         */
  3740.   #define  SHIFTBUTTON        2     /* Set shift for button using mouseButtonMask. */
  3741.   #define  APPLBUTTON         3     /* Assign button for application use.          */
  3742.   #define  AUGMENTATIONBUTTON 4     /* Assign button for key augmentation.         */
  3743.   #define  GESTUREMODE        5     /* Assign button for gesture mode.             */
  3744.  
  3745.  Values for psba.value for action = SHIFTBUTTON: 
  3746.  
  3747.   #define  MOUSEBUTTON1     0x04    /* Mouse button 1                              */
  3748.   #define  MOUSEBUTTON2     0x10    /* Mouse button 2                              */
  3749.   #define  MOUSEBUTTON3     0x40    /* Mouse button 3                              */
  3750.  
  3751.  Values for psba.value for action = SENDHOTKEY: 
  3752.  
  3753.   #define HOTKEY_CNTRL_ESC    1     /* Do a Ctrl+Esc.                              */
  3754.   #define HOTKEY_ALT_ESC      2     /* Do an Alt+Esc.                              */
  3755.  
  3756.  
  3757. ΓòÉΓòÉΓòÉ <hidden> Category 92h, Function 50h ΓòÉΓòÉΓòÉ
  3758.  
  3759. Category 92h, Button IOCtls - Set Button Assignment 
  3760.  
  3761. Select an item: 
  3762.  
  3763. Description
  3764. Parameter Packet Format
  3765. Data Packet Format
  3766. Remarks
  3767.  
  3768.  
  3769. ΓòÉΓòÉΓòÉ 8.21. Query Button Assignment - Function 60h ΓòÉΓòÉΓòÉ
  3770.  
  3771.  
  3772. ΓòÉΓòÉΓòÉ <hidden> Description - Category 92h, Function 60h ΓòÉΓòÉΓòÉ
  3773.  
  3774. #define PEN_FUNC_QBA 0x060
  3775.  
  3776. This function returns the assignment of a button. 
  3777.  
  3778.  
  3779. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 92h, Button IOCtls ΓòÉΓòÉΓòÉ
  3780.  
  3781. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3782. ΓöéField                         Length    Γöé
  3783. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3784. ΓöéRequested unit                ULONG     Γöé
  3785. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3786. ΓöéIndex of button (0 to 15)     ULONG     Γöé
  3787. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3788.  
  3789.  
  3790. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 92h, Button IOCtls ΓòÉΓòÉΓòÉ
  3791.  
  3792. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3793. ΓöéField                          Length    Γöé
  3794. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3795. ΓöéAction to perform              ULONG     Γöé
  3796. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3797. ΓöéHot-key value for hot-key      ULONG     Γöé
  3798. Γöéassignment or mouse button               Γöé
  3799. Γöéselection mask                           Γöé
  3800. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3801.  
  3802.  
  3803. ΓòÉΓòÉΓòÉ <hidden> Data Structure - Category 92h, Function 60h ΓòÉΓòÉΓòÉ
  3804.  
  3805. typedef struct _D_QBA {
  3806.   ULONG   action;           /* Action to perform                    */
  3807.   ULONG   value;            /* Hot-key value for hot-key assignment
  3808.                                or mouse button selection mask       */
  3809. } DQBA;
  3810.  
  3811.  
  3812. ΓòÉΓòÉΓòÉ <hidden> Category 92h, Function 60h ΓòÉΓòÉΓòÉ
  3813.  
  3814. Category 92h, Button IOCtls - Query Button Assignment 
  3815.  
  3816. Select an item: 
  3817.  
  3818. Description
  3819. Parameter Packet Format
  3820. Data Packet Format
  3821. Data Structure
  3822.  
  3823.  
  3824. ΓòÉΓòÉΓòÉ 8.22. Category 93h - Display IOCtls ΓòÉΓòÉΓòÉ
  3825.  
  3826. The following are Category 93h - Display IOCtls: 
  3827.  
  3828.    o  Function 50h - Set Display State 
  3829.    o  Function 51h - Set Display Inactivity Period 
  3830.    o  Function 60h - Query Display State 
  3831.  
  3832.  
  3833. ΓòÉΓòÉΓòÉ 8.23. Set Display State - Function 50h ΓòÉΓòÉΓòÉ
  3834.  
  3835.  
  3836. ΓòÉΓòÉΓòÉ <hidden> Description - Category 93h, Function 50h ΓòÉΓòÉΓòÉ
  3837.  
  3838. #define PEN_FUNC_SDS 0x050        /* Set display state.          */
  3839.  
  3840. #define TURNBACKLIGHTON     1     /* Value to turn backlight on  */
  3841. #define TURNBACKLIGHTOFF    0     /* Value to turn backlight off */
  3842.  
  3843. This function is used to turn the backlight either on or off.  Turning on the 
  3844. backlight restarts the inactivity timer.  The inactivity timer is used only if 
  3845. automatic control is enabled. 
  3846.  
  3847.  
  3848. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 93h, Display IOCtls ΓòÉΓòÉΓòÉ
  3849.  
  3850. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3851. ΓöéField                         Length    Γöé
  3852. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3853. ΓöéRequested unit                ULONG     Γöé
  3854. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3855. ΓöéCommand to turn on or off     ULONG     Γöé
  3856. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3857.  
  3858.  
  3859. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 93h, Display IOCtls ΓòÉΓòÉΓòÉ
  3860.  
  3861. None. 
  3862.  
  3863.  
  3864. ΓòÉΓòÉΓòÉ <hidden> Category 93h, Function 50h ΓòÉΓòÉΓòÉ
  3865.  
  3866. Category 93h, Display IOCtls - Set Display State 
  3867.  
  3868. Select an item: 
  3869.  
  3870. Description
  3871. Parameter Packet Format
  3872. Data Packet Format
  3873.  
  3874.  
  3875. ΓòÉΓòÉΓòÉ 8.24. Set Display Inactivity Period - Function 51h ΓòÉΓòÉΓòÉ
  3876.  
  3877.  
  3878. ΓòÉΓòÉΓòÉ <hidden> Description - Category 93h, Function 51h ΓòÉΓòÉΓòÉ
  3879.  
  3880. #define PEN_FUNC_SDIP 0x051
  3881.  
  3882. This function controls how the driver handles turning the display backlight on 
  3883. and off automatically.  The following options can be set: 
  3884.  
  3885.  AutoEnable = (enable Γöé disable) 
  3886.       When enabled, the backlight is turned off after a period of no user 
  3887.       activity.  User activity turns the backlight back on.  User activity 
  3888.       consists of input from any locator device, buttons, the OS/2 mouse, or 
  3889.       the keyboard. 
  3890.  
  3891.  Opaque = (enable Γöé disable) 
  3892.       When enabled, button actions and locator points from this driver are 
  3893.       processed even though the backlight is off.  When disabled, button 
  3894.       actions are not processed, and locator points are sent to the device 
  3895.       driver services but are not processed by the OS/2 operating system. 
  3896.  
  3897.  Suppress = (enable Γöé disable) 
  3898.       When enabled, button down action from the locator or a mouse action that 
  3899.       turned the backlight on will be ignored and reported as a movement only. 
  3900.       Button actions will be ignored. 
  3901.  
  3902.  Period = <seconds> 
  3903.       The length of the inactivity period in seconds. 
  3904.  
  3905.  All of these options are independent.  All combinations can be specified on a 
  3906.  single IOCtl call.  AutoEnable, Suppress, and Period are processed only if the 
  3907.  display device capabilities allow automatic backlight control. 
  3908.  
  3909.  
  3910. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 93h, Display IOCtls ΓòÉΓòÉΓòÉ
  3911.  
  3912. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3913. ΓöéField                          Length    Γöé
  3914. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3915. ΓöéRequested unit                 ULONG     Γöé
  3916. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3917. ΓöéCommand to turn enable and     ULONG     Γöé
  3918. Γöédisable                                  Γöé
  3919. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3920. ΓöéInactivity period in seconds   ULONG     Γöé
  3921. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3922.  
  3923.  
  3924. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 93h, Display IOCtls ΓòÉΓòÉΓòÉ
  3925.  
  3926. None. 
  3927.  
  3928.  
  3929. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 93h, Function 51h ΓòÉΓòÉΓòÉ
  3930.  
  3931. PSDIP.command values: 
  3932.  
  3933. #define SDIP_PERIOD      0x01    /* Change period value                   */
  3934. #define SDIP_EN_AUTO     0x02    /* Enable automatic inactivity period    */
  3935. #define SDIP_DI_AUTO     0x04    /* Disable automatic inactivity period   */
  3936. #define SDIP_EN_OPAQUE   0x08    /* Process events while backlight is off */
  3937. #define SDIP_DI_OPAQUE   0x10    /* Ignore events while backlight is off  */
  3938. #define SDIP_EN_SUPPRESS 0x20    /* Suppress after auto turn on           */
  3939. #define SDIP_DI_SUPPRESS 0x40    /* Do not suppress after auto turn on    */
  3940.  
  3941.  
  3942. ΓòÉΓòÉΓòÉ <hidden> Category 93h, Function 51h ΓòÉΓòÉΓòÉ
  3943.  
  3944. Category 93h, Display IOCtls - Set Display Inactivity Period 
  3945.  
  3946. Select an item: 
  3947.  
  3948. Description
  3949. Parameter Packet Format
  3950. Data Packet Format
  3951. Remarks
  3952.  
  3953.  
  3954. ΓòÉΓòÉΓòÉ 8.25. Query Display State - Function 60h ΓòÉΓòÉΓòÉ
  3955.  
  3956.  
  3957. ΓòÉΓòÉΓòÉ <hidden> Description - Category 93h, Function 60h ΓòÉΓòÉΓòÉ
  3958.  
  3959. #define PEN_FUNC_QDS 0x060
  3960.  
  3961. This function returns whether the automatic inactivity period monitor is 
  3962. enabled or disabled, and if enabled, the time remaining in the inactivity 
  3963. period. 
  3964.  
  3965.  
  3966. ΓòÉΓòÉΓòÉ <hidden> Parameter Packet Format - Category 93h, Display IOCtls ΓòÉΓòÉΓòÉ
  3967.  
  3968. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3969. ΓöéField              Length    Γöé
  3970. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3971. ΓöéRequested unit     ULONG     Γöé
  3972. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3973.  
  3974.  
  3975. ΓòÉΓòÉΓòÉ <hidden> Data Packet Format - Category 93h, Display IOCtls ΓòÉΓòÉΓòÉ
  3976.  
  3977. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3978. ΓöéField                          Length    Γöé
  3979. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3980. ΓöéState of backlight             ULONG     Γöé
  3981. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3982. ΓöéAutomatic options              ULONG     Γöé
  3983. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3984. ΓöéInactivity period in seconds   ULONG     Γöé
  3985. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3986.  
  3987.  
  3988. ΓòÉΓòÉΓòÉ <hidden> Data Structure - Category 93h, Function 60h ΓòÉΓòÉΓòÉ
  3989.  
  3990. typedef struct _D_QDS {
  3991.   ULONG  state;        /* State of backlight                          */
  3992.   ULONG  automatic;    /* Automatic options                           */
  3993.   ULONG  period;       /* Inactivity period in seconds                */
  3994. } DQDS;
  3995.  
  3996.  
  3997. ΓòÉΓòÉΓòÉ <hidden> Remarks - Category 93h, Function 60h ΓòÉΓòÉΓòÉ
  3998.  
  3999. DQDS.state uses same values as PSDIP.state. 
  4000.  
  4001. DQDS.automatic uses same values as PSDIP.command. 
  4002.  
  4003.  
  4004. ΓòÉΓòÉΓòÉ <hidden> Category 93h, Function 60h ΓòÉΓòÉΓòÉ
  4005.  
  4006. Category 93h, Display IOCtls - Query Display State 
  4007.  
  4008. Select an item: 
  4009.  
  4010. Description
  4011. Parameter Packet Format
  4012. Data Packet Format
  4013. Data Structure
  4014. Remarks
  4015.  
  4016.  
  4017. ΓòÉΓòÉΓòÉ 8.26. Pen for OS/2 Extended Interface ΓòÉΓòÉΓòÉ
  4018.  
  4019. This section describes the extended Pen for OS/2 system extension interface, 
  4020. including the direct call interface to the device driver services. 
  4021.  
  4022. General defines: 
  4023.  
  4024. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4025.  
  4026. #define PEN_DDS_LEV_MAJOR 0             /* Level of this specification           */
  4027. #define PEN_DDS_LEV_MINOR 3             /* Level of this specification           */
  4028.  
  4029. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4030.  
  4031. DevHlp_RegisterDeviceClass values: 
  4032.  
  4033. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4034.  
  4035. #define DEVCLASS_INPUT 2                /* Device class for RegisterDeviceClass  */
  4036.  
  4037. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4038.  
  4039. Defines for DCFlags: 
  4040.  
  4041. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4042.  
  4043. #define REG_EXT_IF  0x0001              /* Supports extended interface           */
  4044. #define REG_AUX     0x8000              /* Keyboard AUX port used                */
  4045.  
  4046. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4047.  
  4048.  
  4049. ΓòÉΓòÉΓòÉ 8.27. Pen Device Driver IDC Interface ΓòÉΓòÉΓòÉ
  4050.  
  4051. These IDC requests are provided by the pen device driver at the IDC entry point 
  4052. declared with DevHlp_RegisterDeviceClass and are defined in PENIDC.H: 
  4053.  
  4054. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4055.  
  4056. #define QUERY_CAPABILITIES     1    /* Request unit capabilities
  4057.                                        bl = unit
  4058.                                        es:di = Area to copy capabilities packet;
  4059.                                                 first word has size of copy buffer
  4060.                                        Successful return
  4061.                                         nc (no carry), ax = 0, Packet copied
  4062.                                        Error return
  4063.                                         cy (carry), ax == Error code              */
  4064.  
  4065. #define QUERY_DEV_CONFIG       2    /* Query optional device configuration
  4066.                                        bl = unit
  4067.                                        es:di = target DevData packet address      */
  4068. #define START_LOGICAL_DEVICE   3    /* Start logical device
  4069.                                        bl = unit
  4070.                                        es:di = SINFO packet
  4071.                                        Successful return
  4072.                                         nc, ax = 0, Registration accepted
  4073.                                        Error return
  4074.                                         cy, ax = = Error code
  4075.                                         4 and 5 are reserved for future
  4076.                                         "by unit" calls                           */
  4077.  
  4078. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4079.  
  4080. These functions invoke global calls to the driver: 
  4081.  
  4082. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4083.  
  4084. #define  READ_ENABLE           6    /* Enable reporting of events
  4085.                                        pass   cx:dx style capabilities to driver
  4086.                                        return cx:dx style request to services     */
  4087. #define  READ_DISABLE          7    /* Disable reporting of events                */
  4088. #define  ENABLE_DEVICE         8    /* Enable the device to interrupt             */
  4089. #define  DISABLE_DEVICE        9    /* Disable the device from interrupting       */
  4090. #define  ACTIVITY_CALLBACK    10    /* System activity callback (called
  4091.                                        as result of REQUEST_CALLBACK)             */
  4092. #define  VIDEO_MODE_CHANGE    11    /* Video mode change
  4093.                                        cl == -1 Start of change
  4094.                                               0 End of change
  4095.                                        ch == -1 Packet is valid
  4096.                                               0 Packet is invalid
  4097.                                        es:di = VINFO packet                       */
  4098.  
  4099. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4100.  
  4101. Style capabilities for READ_ENABLE (See 6 above):  CX register is reserved, 
  4102. must be 0. 
  4103.  
  4104. Style capabilities for READ_ENABLE:  DX register: 
  4105.  
  4106. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4107.  
  4108. #define STYLE_NOTIFY_VMCHANGE 0x0001  /* Report VM_CHANGE
  4109.                                                on = DON'T report, reset
  4110.                                                to receive events           */
  4111.  
  4112. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4113.  
  4114. Error Codes: 
  4115.  
  4116. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4117.  
  4118. #define DRV_ERR_GEN_ERROR   1         /* General error                     */
  4119. #define DRV_ERR_NOT_FOUND   2         /* Unit number not found             */
  4120. #define DRV_ERR_BUFF_TRUNC  3         /* Registration packet truncated,
  4121.                                          buffer small                      */
  4122. #define DRV_ERR_LEVEL       4         /* Level mismatch                    */
  4123. #define DRV_ERR_NOT_ALLOWED 5         /* Request not allowed at this time  */
  4124. #define DRV_ERR_NO_FUNC     6         /* Function not supported            */
  4125.  
  4126. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4127.  
  4128. The following packet is passed on READ_ENABLE.  The packet and service routine 
  4129. is valid only during the READ_ENABLE call. 
  4130.  
  4131. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4132.  
  4133. typedef struct _SINFO  {    /* sinfo                                    */
  4134.   USHORT length;            /* Total length of packet                   */
  4135.   UCHAR  eif_major;         /* Major level (PEN_EI_LEV_MAJOR)           */
  4136.   UCHAR  eif_minor;         /* Minor level (PEN_EI_LEV_MINOR)           */
  4137.   UCHAR  idc_major;         /* Major level (PEN_DDS_LEV_MAJOR)          */
  4138.   UCHAR  idc_minor;         /* Minor level (PEN_DDS_LEV_MINOR)          */
  4139.   USHORT service_ds;        /* Data segment to load for service routine */
  4140.   ULONG  service_rtn;       /* 16:16 address for service routine        */
  4141.  
  4142. } SINFO;
  4143.  
  4144. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4145.  
  4146. The following packet is passed on VIDEO_MODE_CHANGE. 
  4147.  
  4148. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4149.  
  4150. typedef struct _VINFO   {        /* vinfo                      */
  4151.   UCHAR  Mtype;                  /* Video mode type            */
  4152.   UCHAR  Color;                  /* Number of colors           */
  4153.   UCHAR  TCol_res;               /* Text column resolution     */
  4154.   USHORT TRow_res;               /* Text row resolution        */
  4155.   USHORT GCol_res;               /* Graphics column resolution */
  4156.   USHORT GRow_res;               /* Graphics row resolution    */
  4157.  
  4158. } VINFO;
  4159.  
  4160. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4161.  
  4162. Defines for vinfo.Mtype: 
  4163.  
  4164. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4165.  
  4166. #define MTYPE_GRAPHICS 0x0002   /* Graphics mode */
  4167.  
  4168. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4169.  
  4170. Device data structure is returned by locator devices on QUERY_DEV_CONFIG.  The 
  4171. other devices do not have device configuration data to return. 
  4172.  
  4173. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4174.  
  4175. typedef struct _DevData {         /* DevData             */
  4176.   USHORT CfgDataLen;              /* Length of data      */
  4177.   UCHAR  NumMics;                 /* Number mickeys/cm   */
  4178.   UCHAR  NumButt;                 /* Number of buttons   */
  4179.   UCHAR  IRQ;                     /* IRQ level           */
  4180.   UCHAR  MouseType;               /* Mouse type attached */
  4181.   UCHAR  ComPortNum;              /* Com port number     */
  4182.   USHORT ComPortAddr;             /* Com port address    */
  4183. } DevData;
  4184.  
  4185. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4186.  
  4187.  
  4188. ΓòÉΓòÉΓòÉ 8.28. Pen for OS/2 Device Driver Services ΓòÉΓòÉΓòÉ
  4189.  
  4190. These services are provided by the Pen for OS/2 system extension at the service 
  4191. entry point and are defined in PENIDC.H: 
  4192.  
  4193. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4194.  
  4195. #define REGISTER_DEVICE       1       /* Register device
  4196.                                          es:di = Capabilities packet         */
  4197. #define REPORT_EVENT          2       /* Report event
  4198.                                          es:di = Event packet                */
  4199. #define UPDATE_CAPS           3       /* Update registration packet
  4200.                                          es:di = Capabilities packet         */
  4201. #define QUERY_ACTIVITY        4       /* Query user input activity
  4202.                                          Returns dx = low word count
  4203.                                                  cx = high word count
  4204.                                                 edx = dword count            */
  4205. #define REQUEST_CALLBACK      5       /* Request callback for system activity
  4206.                                          cl = Driver device ID               */
  4207. #define CANCEL_CALLBACK       6       /* Cancel callback for system activity
  4208.                                          cl = Driver device ID               */
  4209. #define SUPPRESS_STROKE       7       /* Suppress stroke
  4210.                                          cl = Driver device ID               */
  4211. #define DISABLE_SUPPORT       8       /* Disable driver
  4212.                                          cl = Driver device ID               */
  4213.  
  4214. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4215.  
  4216.  
  4217. ΓòÉΓòÉΓòÉ 8.29. Extended Information Structures ΓòÉΓòÉΓòÉ
  4218.  
  4219. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4220.  
  4221. #define PEN_EI_LEV_MAJOR  0       /* Level of this specification             */
  4222. #define PEN_EI_LEV_MINOR  6       /* Level of this specification             */
  4223.  
  4224. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4225.  
  4226. Defines for all dev_type: 
  4227.  
  4228. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4229.  
  4230. #define DT_DRIVER     0x00        /* Index to access driver                  */
  4231. #define DT_CONTROL    0x01        /* Control (not used by pen device driver) */
  4232. #define DT_SYSTEM     0x02        /* System  (not used by pen device driver) */
  4233. #define DT_LOCATOR    0x03        /* Locator                                 */
  4234. #define DT_BUTTON     0x04        /* Button                                  */
  4235. #define DT_DISPLAY    0x05        /* Display                                 */
  4236.  
  4237. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4238.  
  4239.  
  4240. ΓòÉΓòÉΓòÉ 8.30. Common Capabilities Packet ΓòÉΓòÉΓòÉ
  4241.  
  4242. Each capability packet starts with these common fields: 
  4243.  
  4244. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4245.  
  4246. typedef struct _CCAP    {   /* ccap                                     */
  4247.   USHORT length;            /* Total length of capabilities packet      */
  4248.   USHORT device_type        /* Device type                              */
  4249.   UCHAR  device_id;         /* Device ID (is returned from registration)*/
  4250.   UCHAR  unit;              /* Unit number within the driver            */
  4251.   UCHAR  flags;             /* Round to word boundary                   */
  4252.   UCHAR  driver_name[8];    /* Device driver name                       */
  4253.   UCHAR  device_name[32];   /* Device name                              */
  4254.   USHORT event_caps;        /* Events that will be generated            */
  4255. }  CCAP;
  4256.  
  4257. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4258.  
  4259. Note:  CCAP.event_caps is defined by lev.cev.devicebits, bev.cev.devicebits, 
  4260.        and dev.cev.devicebits. 
  4261.  
  4262.  Defines for word boundry flags: 
  4263.  
  4264.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4265.  
  4266.   #define CCAP_DEFAULTDATA  0x00        /* Use the data from the device driver    */
  4267.   #define DT_CONTROL        0x01        /* Use the data stored in OS2.INI         */
  4268.  
  4269.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4270.  
  4271.  
  4272. ΓòÉΓòÉΓòÉ 8.31. Driver-Specific Capabilities Packet ΓòÉΓòÉΓòÉ
  4273.  
  4274. The unit 0 device capabilities describe the entire driver and are used to: 
  4275.  
  4276.    o  Verify the expected levels of the driver match 
  4277.  
  4278.    o  Determine the number of logical devices in the driver 
  4279.  
  4280.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4281.  
  4282.   typedef struct _DDCAP   {    /* ddcap                                 */
  4283.     CCAP   ccap;               /* Common capabilities packet            */
  4284.     ULONG  capabilities;       /* Reserved                              */
  4285.     UCHAR  unitCount;          /* Number of logical devices, including
  4286.                                   one for the driver device             */
  4287.     UCHAR  rev_major;          /* Driver major level                    */
  4288.     UCHAR  rev_minor;          /* Driver minor level                    */
  4289.     UCHAR  ioc_major;          /* IOCtl interface major level           */
  4290.     UCHAR  ioc_minor;          /* IOCtl interface minor level           */
  4291.     UCHAR  eif_major;          /* Extended interface major level        */
  4292.     UCHAR  eif_minor;          /* Extended interface minor level        */
  4293.     UCHAR  idc_major;          /* DDS IDC interface major level         */
  4294.     UCHAR  idc_minor;          /* DDS IDC interface minor level         */
  4295.  
  4296.   } DDCAP;
  4297.  
  4298.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4299.  
  4300.  
  4301. ΓòÉΓòÉΓòÉ 8.32. Locator-Specific Capabilities Packet ΓòÉΓòÉΓòÉ
  4302.  
  4303. Defines for LCAP.type: 
  4304.  
  4305. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4306.  
  4307. #define LOCTYPE_MOUSE       0x0001   /* Stock device                    */
  4308. #define LOCTYPE_PEN         0x0002   /* Pen                             */
  4309. #define LOCTYPE_FINGER      0x0004   /* Finger                          */
  4310. #define LOCTYPE_OTHER       0x0008   /* Other                           */
  4311. #define LOCTYPE_ABSOLUTE    0x0010   /* Absolute                        */
  4312. #define LOCTYPE_RELATIVE    0x0020   /* Relative                        */
  4313.  
  4314. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4315.  
  4316. Defines for LCAP.pen_type: 
  4317.  
  4318. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4319.  
  4320. #define PENCAP_TETHERED   0x0001    /* 1 - Tethered, 0 - Untethered     */
  4321. #define PENCAP_PROXIMITY  0x0002    /* Generates enter and exit events  */
  4322. #define PENCAP_TILT       0x0004    /* Stylus tilt angle reported       */
  4323. #define PENCAP_ROTATE     0x0008    /* Stylus rotation reported         */
  4324. #define PENCAP_OEMDATA    0x0010    /* OEM data reported                */
  4325. #define PENCAP_TIMESTAMP  0x0020    /* dev_timestamp reported           */
  4326. #define PENCAP_ZPRESSURE  0x0040    /* z-axis represents pressure       */
  4327. #define PENCAP_ZHEIGHT    0x0080    /* z-axis represents height         */
  4328. #define PENCAP_PIN        0x0100    /* 1=Personal Identification Number */
  4329. #define PENCAP_ERASER     0x0200    /* 1=device used as an eraser       */
  4330. #define PENCAP_DISPLAY    0x0400    /* 1=integrated display             */
  4331.  
  4332. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4333.  
  4334. Defines for LCAP.std_res: 
  4335.  
  4336. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4337.  
  4338. #define STD_RESOLUTION    1000      /* Standard resolution is 1000
  4339.                                         points per inch.                */
  4340.  
  4341. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4342.  
  4343. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4344.  
  4345. typedef struct _LCAP   {  /* lcap                                       */
  4346.   CCAP   ccap;            /* Common capabilities packet                 */
  4347.   USHORT type;            /* Locator type                               */
  4348.   USHORT caps;            /* Locator capabilities                       */
  4349.   USHORT sample_rate;     /* Device sample rate                         */
  4350.   USHORT max_sample_rate; /* Maximum device sample rate                 */
  4351.   UCHAR  barrel_num;      /* Number of barrel buttons                   */
  4352.   UCHAR  barrel_mask;     /* Bit position of barrel buttons             */
  4353.   ULONG  dev_x_extent;    /* Device x-axis extent                       */
  4354.   ULONG  dev_y_extent;    /* Device y-axis extent                       */
  4355.   ULONG  std_x_extent;    /* Standard x-axis extent                     */
  4356.   ULONG  std_y_extent;    /* Standard y-axis extent                     */
  4357.   SHORT  dev_z_p_extent;  /* Device z-axis pressure extent (negative)   */
  4358.   SHORT  dev_z_h_extent;  /* Device z-axis height extent (positive)     */
  4359.   UCHAR  pass_rate;       /* Device pass rate                           */
  4360.   UCHAR  num_mouse_but;   /* Number of mouse buttons emulated by device */
  4361.   USHORT std_res;         /* Points per inch for standard resolution    */
  4362.   USHORT dev_x_res;       /* Points per inch on x-axis                  */
  4363.   USHORT dev_y_res;       /* Points per inch on y-axis                  */
  4364.   ULONG  dev_timestampRes;/*Device time stamp resolution in microseconds*/
  4365. } LCAP;
  4366.  
  4367. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4368.  
  4369. Note:  This structure can be imbedded into an OEM Capabilities Structure if you 
  4370.        need to pass additional information such as whether the device time 
  4371.        stamp or the OEM_data field is being used, or how many bytes of the 
  4372.        OEM_data field are being used. 
  4373.  
  4374.  
  4375. ΓòÉΓòÉΓòÉ 8.33. Button-Specific Capabilities Packet ΓòÉΓòÉΓòÉ
  4376.  
  4377. Defines for BCAP.barrel and BCAP.nonBarrel capabilities (If these bits are set, 
  4378. the action is supported by the barrel or nonbarrel buttons): 
  4379.  
  4380. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4381.  
  4382. #define CAP_NOBUTTONACTION     0x0001  /* Null; do nothing (the default) */
  4383. #define CAP_SENDHOTKEY         0x0002  /* Hot-key support                */
  4384. #define CAP_SHIFTBUTTON        0x0004  /* Shift button support           */
  4385. #define CAP_APPLBUTTON         0x0008  /* Button for application use     */
  4386. #define CAP_AUGMENTATIONBUTTON 0x0010  /* Button for key augmentation    */
  4387. #define CAP_GESMODEBUTTON      0x0020  /* Button for gesture mode        */
  4388.  
  4389. #define CAP_DEFAULT_BARREL CAP_NOBUTTONACTION|CAP_SHIFTBUTTON|CAP_GESMODEBUTTON
  4390. #define CAP_DEFAULT_NBARREL CAP_DEFAULT_BARREL|
  4391.         CAP_SENDHOTKEY|CAP_APPLBUTTON|CAP_AUGMENTATIONBUTTON
  4392.  
  4393. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4394.  
  4395. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4396.  
  4397. typedef struct _BCAP  { /* bcap                                        */
  4398.   CCAP   ccap;          /* Common capabilities packet                  */
  4399.   USHORT num;           /* Number of buttons (0 to 16)                 */
  4400.   USHORT typeMask;      /* Bit mask for type (1=barrel, 0=not barrel)  */
  4401.   USHORT nullMask;      /* Bit mask to show null assignment            */
  4402.   USHORT hotKeyMask;    /* Bit mask to show assignment to hot key      */
  4403.   USHORT oneTimeMask;   /* Bit mask to show assignment to mouse mode   */
  4404.   USHORT shiftMask;     /* Bit mask to show assignment to mouse mode   */
  4405.   USHORT appKeyMask;    /* Bit mask to show assignment to appl key     */
  4406.   USHORT augKeyMask;    /* Bit mask to show assignment to augmentation */
  4407. } BCAP;
  4408.  
  4409. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4410.  
  4411. Note:  Button index 0 is represented with the least significant bit in the mask 
  4412.        (0x0001). 
  4413.  
  4414.  
  4415. ΓòÉΓòÉΓòÉ 8.34. Display-Specific Capabilities Packet ΓòÉΓòÉΓòÉ
  4416.  
  4417. Defines for DCAP.type: 
  4418.  
  4419. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4420.  
  4421. #define DISPTYPE_LCD       0x0001    /* 1 - LCD,      0 - not LCD         */
  4422. #define DISPTYPE_CRT       0x0002    /* 1 - CRT,      0 - not CRT         */
  4423. #define DISPTYPE_BLANKING  0x0004    /* Display performs screen blanking. */
  4424. #define DISPTYPE_COLOR     0x0008    /* 1 - Color,    0 - Monochrome      */
  4425. #define DISPTYPE_ATTACHED  0x0010    /* 1 - Attached, 0 - Portable        */
  4426. #define DISPTYPE_NO_KBD    0x0020    /* No Keyboard Attached              */
  4427. #define DISPTYPE_BATTERY   0x0040    /* 1 - Battery,  0 - AC power        */
  4428. #define DISPTYPE_SPEAKER   0x0080    /* 1 - Speaker is close to display.  */
  4429.  
  4430. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4431.  
  4432. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4433.  
  4434. typedef struct _DCAP   {  /* dcap                                       */
  4435.   CCAP   ccap;            /* Common capabilities packet                 */
  4436.   USHORT type;            /* Display type                               */
  4437.   USHORT auto_flag;       /* Capable of supporting automatic inactivity
  4438.                              period (1=yes, 0 = no)                     */
  4439.   ULONG  height;          /* Screen height in .01 of an inch            */
  4440.   ULONG  width;           /* Screen width in .01 of an inch             */
  4441. } DCAP;
  4442.  
  4443. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4444.  
  4445.  
  4446. ΓòÉΓòÉΓòÉ 8.35. Common Event Packet ΓòÉΓòÉΓòÉ
  4447.  
  4448. This is a common prefix to all events:  locator, button, and display. 
  4449.  
  4450. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4451.  
  4452. typedef struct _CEV { /* cev                                            */
  4453.   USHORT length;      /* Total length of eiq event packet               */
  4454.   UCHAR  device_type; /* Event category - system, locator,
  4455.                           display, control                              */
  4456.   UCHAR  device_id;   /* Identity of device that generated event        */
  4457.   ULONG  timestamp;   /* Millisecond time stamp (not for DD)            */
  4458.   UCHAR  session;     /* Foreground session number (not for DD)         */
  4459.   UCHAR  cntrl;       /* Control info (not for DD)                      */
  4460.   USHORT devicebits;  /* Event field (defined by device type)           */
  4461. } CEV;
  4462.  
  4463. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4464.  
  4465.  
  4466. ΓòÉΓòÉΓòÉ 8.36. Locator-Specific Event Packet ΓòÉΓòÉΓòÉ
  4467.  
  4468. Defines for LEV.cntrl: 
  4469.  
  4470. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4471.  
  4472. #define LOC_PASS_ON        0x0001     /* If set, event is to be passed to PM.
  4473.                                            (used by pass rate filter)                */
  4474. #define LOC_ARBITRATED_OUT 0x0002     /* For use by arbitration (treat as reserved)  */
  4475. #define LOC_SUPPRESSED     0x0004     /* Suppressed contact due to backlight auto on */
  4476. #define LOC_BKLT_OFF       0x0008     /* Suppressed contact due to backlight off     */
  4477. #define LOC_REL            0x0010     /* dev_x and dev_y are relative                */
  4478. #define LOC_ABS            0x0020     /* dev_x and dev_y are absolute                */
  4479. #define LOC_FAKE           0x0040     /* Device coordinates are valid, but fake.     */
  4480. #define LOC_INVALID        0x0080     /* Coordinates are not valid.                  */
  4481. #define LOC_CONTACT        0x0100     /* Indicates the locator is in contact.        */
  4482. #define LOC_PROX           0x0200     /* Indicates the locator is in proximity.      */
  4483. #define LOC_GSTMODE        0x0400     /* Force gesture mode                          */
  4484.  
  4485. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4486.  
  4487. Defines for LEV.cev.devicebits (low-order byte = mouse event): 
  4488.  
  4489. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4490.  
  4491. #define EV_NONE         0x00           /* No buttons, no movement                    */
  4492. #define EV_MOVE         0x01           /* Movement only, no buttons                  */
  4493. #define EV_BUTTON1_MOVE 0x02           /* Movement and button 1 down                 */
  4494. #define EV_BUTTON1      0x04           /* Button 1 down only, no movement            */
  4495. #define EV_BUTTON2_MOVE 0x08           /* Movement and button 2 down                 */
  4496. #define EV_BUTTON2      0x10           /* Button 2 down only, no movement            */
  4497. #define EV_BUTTON3_MOVE 0x20           /* Movement and button 3 down                 */
  4498. #define EV_BUTTON3      0x40           /* Button 3 down only, no movement            */
  4499.  
  4500. #define EV_ANY_STAT_BUTTON   EV_BUTTON1 | EV_BUTTON2 | EV_BUTTON3
  4501. #define EV_ANY_MOVE_BUTTON   EV_BUTTON1_MOVE | EV_BUTTON2_MOVE | EV_BUTTON3_MOVE
  4502. #define EV_ANY_MOVE          EV_MOVE | EV_ANY_MOVE_BUTTON
  4503. #define EV_ANY_BUTTON        EV_ANY_STAT_BUTTON | EV_ANY_MOVE_BUTTON
  4504. #define EV_STD_MOUSE         EV_ANY_STAT_BUTTON | EV_ANY_MOVE
  4505.  
  4506. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4507.  
  4508. (high-order byte = mouse events that changed): 
  4509.  
  4510. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4511.  
  4512. #define EV_BUTTON1_CHANGED    0x0400   /* Button 1 changed                           */
  4513. #define EV_BUTTON2_CHANGED    0x1000   /* Button 2 changed                           */
  4514. #define EV_BUTTON3_CHANGED    0x4000   /* Button 3 changed                           */
  4515.  
  4516. #define EV_BUTTON_CHG        EV_BUTTON1_CHANGED|EV_BUTTON2_CHANGED|EV_BUTTON3_CHANGED
  4517.  
  4518. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4519.  
  4520. Stroke events: 
  4521.  
  4522. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4523.  
  4524. #define EV_EXIT_PROX  0x0080           /* Exit proximity                             */
  4525. #define EV_ENTER_PROX 0x8000           /* Enter proximity                            */
  4526. #define EV_PROX              EV_EXIT_PROX | EV_ENTER_PROX
  4527.  
  4528. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4529.  
  4530. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4531.  
  4532. typedef struct _LEV    {      /* lev                                    */
  4533.   CEV  cev;                   /* Common event packet                    */
  4534.   USHORT cntrl;               /* Locator control info                   */
  4535.   USHORT scr_x;               /* Screen coordinates (NOT filled in by
  4536.   USHORT scr_y;                  pen device driver)                     */
  4537.   SHORT  scr_z;               /* Normalized z coord (-4k to 4k)         */
  4538.   USHORT buttons;             /* State of buttons 0 - 15;               */
  4539.   ULONG  dev_x;               /* Device coordinates                     */
  4540.   ULONG  dev_y;
  4541.   ULONG  std_x;               /* Standard coordinates                   */
  4542.   ULONG  std_y;
  4543.   SHORT  dev_z;               /* Negative = pressure, positive = height */
  4544.   ULONG  dev_timestamp;       /* High resolution device time stamp      */
  4545.   USHORT dev_sequence;        /* Increment for each event               */
  4546.                               /* Angles range from +180 to -180 degrees */
  4547.   SHORT dev_angle_theta;      /* Pen angle from vertical, increases     */
  4548.                               /*  in positive x direction.              */
  4549.   SHORT dev_angle_phi;        /* Pen angle from vertical, increases     */
  4550.                               /*  in positive y direction.              */
  4551.   UCHAR  OEM_data[8];         /* OEM-specific locator data (optional)   */
  4552. } LEV;
  4553.  
  4554. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4555.  
  4556.  
  4557. ΓòÉΓòÉΓòÉ 8.37. Button-Specific Event Packet ΓòÉΓòÉΓòÉ
  4558.  
  4559. Defines for BEV.cev.devicebits: 
  4560.  
  4561. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4562.  
  4563. #define BEV_BUTTON_CHANGE       0x01  /* Button change event                     */
  4564.  
  4565. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4566.  
  4567. Defines for BEV.cntrl: 
  4568.  
  4569. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4570.  
  4571. #define BEV_SUPPRESSED LOC_SUPPRESSED /* Suppressed contact due to bklt auto-on  */
  4572. #define BEV_BKLT_OFF LOC_BKLT_OFF     /* Suppressed contact due to backlight off */
  4573.  
  4574. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4575.  
  4576. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4577.  
  4578. typedef struct _BEV  {   /* bev                                         */
  4579.   CEV  cev;              /* Common event packet                         */
  4580.   USHORT cntrl;          /* Button control info                         */
  4581.   USHORT state;          /* Button state mask (1=activated, 0=released) */
  4582.   USHORT change;         /* Mask, 1= Changed since last event report    */
  4583.   UCHAR  action;         /* Action to perform                           */
  4584.   UCHAR  value;          /* Hot-key value for hot-key assignment or     */
  4585.                          /* Mouse button selection mask                 */
  4586.   UCHAR  OEM_data[8];    /* OEM-specific display data (optional)        */
  4587. } BEV;
  4588.  
  4589. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4590.  
  4591.  
  4592. ΓòÉΓòÉΓòÉ 8.38. Display-Specific Event Packet ΓòÉΓòÉΓòÉ
  4593.  
  4594. Defines for DEV.cev.devicebits: 
  4595.  
  4596. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4597.  
  4598. #define DEV_BACKLIGHT_CHANGE    0x01 /* State of backlight changed */
  4599.  
  4600. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4601.  
  4602. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4603.  
  4604. typedef struct _DEV     {     /* dev                                  */
  4605.   CEV  cev;                   /* Common event packet                  */
  4606.   USHORT state;               /* State of backlight (0=off, 1=on)     */
  4607.   USHORT OEM_data[8];         /* OEM-specific display data (optional) */
  4608. } DEV;
  4609.  
  4610. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4611.  
  4612.  
  4613. ΓòÉΓòÉΓòÉ 9. Pen for OS/2 Component of IBM Developer Connection Device Driver Kit for OS/2 ΓòÉΓòÉΓòÉ
  4614.  
  4615. This chapter describes the contents of the Pen for OS/2 component of IBM 
  4616. Developer Connection Device Driver Kit for OS/2 pertaining to the development 
  4617. of a pen device driver. 
  4618.  
  4619.  
  4620. ΓòÉΓòÉΓòÉ 9.1. Subdirectory Structure ΓòÉΓòÉΓòÉ
  4621.  
  4622. The subdirectory structure is created when you install the the Pen for OS/2 
  4623. component of IBM Developer Connection Device Driver Kit for OS/2 on a hard 
  4624. disk. The following portion of the subdirectory structure contains the 
  4625. information relating to the development of a device driver. 
  4626.  
  4627. ΓöÇΓöÇPENTKT
  4628.      Γö£ΓöÇΓöÇPENBASE
  4629.      Γöé    Γö£ΓöÇΓöÇINC
  4630.      Γöé    ΓööΓöÇΓöÇPENDD
  4631.      Γöé
  4632.      ΓööΓöÇΓöÇUTIL
  4633.           Γö£ΓöÇΓöÇDDINST
  4634.           Γö£ΓöÇΓöÇPENCAL
  4635.           ΓööΓöÇΓöÇPENTL
  4636.  
  4637. The subdirectories and their contents are: 
  4638.  
  4639.  PENTKT\PENBASE                  This subdirectory contains the device driver 
  4640.                                  subcomponent modules. 
  4641.  
  4642.  PENTKT\PENBASE\INC              This subdirectory contains the include and 
  4643.                                  header files.  These files must not be changed 
  4644.                                  because the files define the interface with 
  4645.                                  the system. 
  4646.  
  4647.  PENTKT\PENBASE\PENDD            This subdirectory contains the 
  4648.                                  device-dependent code and the PENDD.SYS load 
  4649.                                  module for the sample pen device driver. 
  4650.  
  4651.  PENTKT\UTIL\DDINST              This subdirectory contains the sample control 
  4652.                                  files used to install a device driver. 
  4653.                                  Installation Control Files provides a 
  4654.                                  description of these files. 
  4655.  
  4656.  PENTKT\UTIL\PENCAL              This subdirectory contains the sample code for 
  4657.                                  a pen calibration program. 
  4658.  
  4659.  PENTKT\UTIL\PENTL               This subdirectory contains the sample code for 
  4660.                                  a tool to test and call the pen device driver. 
  4661.  
  4662.  
  4663. ΓòÉΓòÉΓòÉ 9.2. Pen Device Driver Tool ΓòÉΓòÉΓòÉ
  4664.  
  4665. The Pen for OS/2 component of IBM Developer Connection Device Driver Kit for 
  4666. OS/2 provides a test tool.  This diagnostic program extracts the trace buffer 
  4667. and generates IOCtls.  The program runs interactively or accepts commands from 
  4668. a file.  The tool provides a means to control and query all aspects of the pen 
  4669. device driver, assisting in program development and in debugging of the pen 
  4670. device driver.  It can be extended for any device-specific functions but is not 
  4671. intended to be shipped as part of the finished product. 
  4672.  
  4673. There are commands for each of the IOCtls, including Category 90H Function 51H 
  4674. Set Unit Variable and Category 90H Function 61H Query Unit Variable, whose 
  4675. purposes are debugging.  These commands can direct operation in the pen device 
  4676. driver or extract collected debug data. 
  4677.  
  4678. There also are commands to control the format of the trace output.  You can 
  4679. dynamically set and change the size of the trace table.  Resetting the trace to 
  4680. empty separates future activity from past. 
  4681.  
  4682. The following example code shows how the device driver tool can extract a trace 
  4683. of locator events sent to the Pen for OS/2 Device Driver Services. 
  4684.  
  4685. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4686.  
  4687. c:>pentl
  4688.  
  4689. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4690.  
  4691. The tool can be started in either an OS/2 full-screen session or OS/2 window 
  4692. session.  In this case, the tool is in interactive mode, showing that it is 
  4693. ready for a command by displaying a . prompt. 
  4694.  
  4695. To display a trace, the first step is to allocate a trace buffer.  By default, 
  4696. no trace buffer is allocated. 
  4697.  
  4698. The command to allocate a trace buffer is stts, which stands for Set Trace 
  4699. Table Size, and corresponds to the Set Trace Table Size IOCtl.  As in all the 
  4700. commands, this command is composed of the first letter of the IOCtl name.  In 
  4701. the following example, we have allocated a trace table with 1000 DWORD entries. 
  4702.  
  4703. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4704.  
  4705. .stts 1000
  4706. .
  4707.  
  4708. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4709.  
  4710. If you query the trace table before making a stroke with the pen, you see only 
  4711. a tick count entry: 
  4712.  
  4713. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4714.  
  4715. .qtt
  4716. (tick 152)
  4717. .
  4718.  
  4719. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4720.  
  4721. This entry shows that 152 timer ticks occurred since the creation of the trace. 
  4722. If you query it again, you see: 
  4723.  
  4724. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4725.  
  4726. .qtt
  4727. (tick 4157)
  4728. .
  4729.  
  4730. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4731.  
  4732. This means that 4157 - 152 = 4005 ticks passed between queries of the trace 
  4733. buffer. 
  4734.  
  4735. After a stroke is made and you enter the commands: 
  4736.  
  4737. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4738.  
  4739. .hd
  4740. .hi
  4741. .pa
  4742. .qtt
  4743.  
  4744. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4745.  
  4746. and the buffer displays the following: 
  4747.  
  4748. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4749.  
  4750. (tick 7169)
  4751. (abs 8406 645 505 0)
  4752. (abs 0004 645 505 0)
  4753. (abs 0004 645 505 0)
  4754. (abs 0002 646 505 0)
  4755. (abs 0004 646 505 0)
  4756. (abs 0002 648 506 0)
  4757. (abs 0002 650 507 0)(tick 1)
  4758. (abs 0002 653 508 0)
  4759. (abs 0002 657 509 0)
  4760. (abs 0002 662 511 0)
  4761. (abs 0002 668 514 0)
  4762. (abs 0002 675 517 0)
  4763. (abs 0002 682 520 0)(tick 1)
  4764. (abs 0002 691 524 0)
  4765. (abs 0002 701 528 0)
  4766. (abs 0002 712 533 0)
  4767. (abs 0002 724 539 0)
  4768. (abs 0002 738 545 0)
  4769. (abs 0002 753 552 0)(tick 1)
  4770. (abs 0002 770 559 0)
  4771. (abs 0002 789 567 0)
  4772. (abs 0002 809 575 0)
  4773. (abs 0002 830 584 0)
  4774. (abs 0002 852 594 0)
  4775. (abs 0002 876 604 0)
  4776. (abs 0002 900 613 0)(tick 1)
  4777. (abs 0002 922 623 0)
  4778. (abs 0002 943 631 0)
  4779. (abs 0002 975 644 0)
  4780. (abs 0002 1007 656 0)
  4781. (abs 0002 1042 668 0)
  4782. (abs 0401 1077 680 0)
  4783. (abs 0001 1113 692 0)(tick 1)
  4784. (abs 0001 1148 703 0)
  4785. (abs 0001 1183 714 0)
  4786. (abs 0001 1215 723 0)
  4787. (abs 0001 1246 731 0)
  4788. (abs 0001 1275 738 0)
  4789. (abs 0001 1302 744 0)
  4790. (abs 0001 1326 750 0)(tick 1)
  4791. (abs 0001 1348 754 0)
  4792. (abs 0001 1370 759 0)
  4793. (abs 0001 1392 763 0)
  4794. (abs 0001 1414 768 0)(tick 5)
  4795. (abs 0081 1414 768 0)(tick 54353)
  4796.  
  4797. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4798.  
  4799. The PA command formats the trace with line feeds before each event packet.  The 
  4800. HD command hides the data events and the HI command hides the interrupt events. 
  4801. All events reside in the trace buffer; the H commands only affect the way the 
  4802. trace is displayed. 
  4803.  
  4804. The format of the trace is (abs devicebits xcoord ycoord zcoord).  The abs 
  4805. parameter identifies the event as an absolute locator event packet.  The 
  4806. devicebits parameter identifies mouse-emulation-button activity and proximity 
  4807. events.  The first entry is 8406.  The 8000 bit indicates enter proximity.  The 
  4808. 0400 indicates that the state of emulated mouse button 1 has changed.  This was 
  4809. a rapid touch-down point with no proximity points before contact.  The 0006 
  4810. bits indicate that emulated mouse button 1 is down and that movement occurred. 
  4811.  
  4812. The next devicebits entries in the example with 0002 and 0004 identify a point 
  4813. in the stroke. The 0002 bit indicates button 1 movement, and 0004 bit indicates 
  4814. button down with no movement.  Entry 0401 indicates the locator device was 
  4815. removed from the sensor.  The 0400 bit indicates that the state of mouse button 
  4816. 1 has changed.  The 0001 bit indicates mouse movement with no buttons down. 
  4817.  
  4818. The last entry is 0081.  Entry 0080 indicates an exit proximity event.  Entry 
  4819. 0001 indicates mouse movement with no buttons down. 
  4820.  
  4821. The xcoord and ycoord indicate the locator position in normalized device 
  4822. coordinates for each point in the stroke.  The zcoord is not valid for the 
  4823. device in the example and is always 0.  The tick entries show how many sample 
  4824. points are being collected in each timer tick. 
  4825.  
  4826. The tool processes five groups of commands.  The first group consists of unit 
  4827. commands corresponding to the category 90 IOCtls.  These commands are listed by 
  4828. typing: H U or ? U.  The next group consists of locator commands and correspond 
  4829. to the category 92 IOCtls.  These commands are listed by typing: H L or ? L. 
  4830. Likewise, there are a set of button commands and display commands that 
  4831. correspond to category 92 and 93 IOCtls listed by typing: H B or ? B and H D or 
  4832. ? D, respectively.  The final group consists of general commands; they are 
  4833. listed by typing H G or ? G.  All five groups of commands can be listed 
  4834. together by typing: H or ?. 
  4835.  
  4836. The general commands do not correspond to IOCtls but are used to control the 
  4837. tool.  The hide (H) and linefeed (P) commands have been discussed in the stroke 
  4838. events example.  Trace entries are hidden with H commands and shown with S 
  4839. commands. Linefeeds are placed before events with the P commands and removed 
  4840. with the C commands.  There are six types of events controlled by the H, S, P, 
  4841. and C commands: 
  4842.  
  4843.  I         Interrupts 
  4844.  
  4845.  T         Timer ticks 
  4846.  
  4847.  A         Event packets 
  4848.  
  4849.  D         Raw data bytes 
  4850.  
  4851.  E         Error events 
  4852.  
  4853.  X         Special device driver-specific events 
  4854.  
  4855.  There are also three assignment (A) commands.  For convenience, the locator, 
  4856.  button, and display commands assume a unit number for the IOCtls to the pen 
  4857.  driver.  By default, the locator is unit 1, button is unit 2, and display is 
  4858.  unit 3.  The assignment commands can change these implicit unit numbers. 
  4859.  
  4860.  
  4861. ΓòÉΓòÉΓòÉ 9.3. Calibration Program ΓòÉΓòÉΓòÉ
  4862.  
  4863. The Pen for OS/2 component of IBM Developer Connection Device Driver Kit for 
  4864. OS/2 provides a sample calibration program to supply alignment adjustments for 
  4865. the position of the digitizer in relation to the display panel.  The program 
  4866. aligns the location of the pointer seen on the display to be the same as where 
  4867. the actual pen device touches the display. 
  4868.  
  4869. The program provides the following functions: 
  4870.  
  4871.  OK        Accept new alignment. 
  4872.  
  4873.  Align     Collect alignment data and calculate adjustments used by the pen 
  4874.            driver. 
  4875.  
  4876.  Defaults  Reset the alignment adjustment to those shipped in the driver. 
  4877.  
  4878.  Test      Test alignment using a target for the mouse pointer. 
  4879.  
  4880.  Cancel    Restore alignment to the alignment when the program started. 
  4881.  
  4882.  Alignment data is collected by instructing the user to place the locator in 
  4883.  the center of a target at each corner of the screen as shown in the preceding 
  4884.  figure.  The target moves to the next corner of the screen after the program 
  4885.  has collected enough samples to get a valid position. 
  4886.  
  4887.  The program consists of two threads:  a PM thread and an alignment thread. 
  4888.  The PM thread executes in a standard PM window procedure and handles routine 
  4889.  PM messages and messages from the alignment thread.  The alignment thread 
  4890.  processes three commands from the PM thread:  (1) align; (2) cancel an 
  4891.  alignment; and (3) terminate.  The alignment thread controls the screen by 
  4892.  sending messages to the PM thread to paint a target in a rectangle.  Points in 
  4893.  the rectangle are ignored by the PM thread but are collected by the alignment 
  4894.  thread. Points outside the rectangle are ignored by the alignment thread but 
  4895.  used by the PM thread to control the selection of operations through the 
  4896.  button controls. 
  4897.  
  4898.  The calibration program can be invoked from the device object associated with 
  4899.  it or from the command line in the following form: 
  4900.  
  4901.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4902.  
  4903.   cal driver_name device_name
  4904.  
  4905.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4906.  where: 
  4907.  
  4908.  driver_name    is the name of the hardware; for example, "IBM Color Workpad". 
  4909.  
  4910.  device_name    is the name of the device; for example, pen. 
  4911.  
  4912.  Note:  The input parameters must be put in quotes if spaces occur in the 
  4913.         names. 
  4914.  
  4915.  When making changes to the calibration program, a debug mechanism is 
  4916.  available.  If a file named pencal.log exists, debug information is written to 
  4917.  it.  This is helpful for determining what data is being collected and used to 
  4918.  do the calibration. Libraries and headers from Pen for OS/2 Developers Toolkit 
  4919.  are required to build this program. 
  4920.  
  4921.  
  4922. ΓòÉΓòÉΓòÉ 9.4. Sample Pen Device Driver ΓòÉΓòÉΓòÉ
  4923.  
  4924. The Pen for OS/2 component of IBM Developer Connection Device Driver Kit for 
  4925. OS/2 contains a sample pen device driver that uses all the Pen for OS/2 system 
  4926. extension interfaces and implements the semantics of all the API functions. 
  4927. You need only modify the device-specific sections of the example code. 
  4928.  
  4929. You can implement the pen device driver and meet the architected interfaces in 
  4930. any fashion.  The sample pen device driver can help you get your pen hardware 
  4931. product working with Pen for OS/2.  It also minimizes the experience you must 
  4932. have in developing OS/2 device drivers and Workplace Shell objects. 
  4933.  
  4934. The following sections give an overview of the sample pen device driver.  Each 
  4935. subcomponent has additional information in its routine entry-point comments and 
  4936. module prologue comments. 
  4937.  
  4938.  
  4939. ΓòÉΓòÉΓòÉ 9.4.1. Driver Organization ΓòÉΓòÉΓòÉ
  4940.  
  4941. Pen Device Driver
  4942. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4943. Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  4944. Γöé    Γöé Device-Type-Independent Routines Γöé    Γöé
  4945. Γöé    Γöé                                  Γöé    Γöé
  4946. Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé
  4947. Γöé                                            Γöé
  4948. Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ           Γöé
  4949. Γöé Γöé Device-Type-DISPLAY Routines Γöé           Γöé
  4950. Γöé Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé
  4951. Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöñ Device-Type-BUTTON Routines  Γöé      Γöé
  4952. Γöé      Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  4953. Γöé      ΓööΓöÇΓöÇΓöÇΓöÇΓöñ Device-Type-LOCATOR Routines Γöé Γöé
  4954. Γöé           Γöé                              Γöé Γöé
  4955. Γöé           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  4956. Γöé                                            Γöé
  4957. Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  4958. Γöé    Γöé     Device-Dependent Routines    Γöé    Γöé
  4959. Γöé    Γöé                                  Γöé    Γöé
  4960. Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé
  4961. Γöé                                            Γöé
  4962. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4963.  
  4964. The sample pen device driver is organized into three types of code: 
  4965.  
  4966.    o  Device-Type-Independent Code 
  4967.  
  4968.       This code provides services common to all device types and is shared, or 
  4969.       called, by all devices in the pen device driver. 
  4970.  
  4971.    o  Device-Type-Dependent Code 
  4972.  
  4973.       There are three types of device-type-dependent code, one for each of the 
  4974.       three device types:  locator, button, and display.  The 
  4975.       device-type-dependent code provides the logic to produce the behavior of 
  4976.       the logical device type. 
  4977.  
  4978.       The device-type-independent code can call the device-type-dependent code 
  4979.       to perform generic operations, like initializing and starting the device. 
  4980.       The device-type-dependent code performs the operations appropriate for 
  4981.       its device type. 
  4982.  
  4983.    o  Device-Dependent Code 
  4984.  
  4985.       You must provide the device-dependent code and address the details of the 
  4986.       particular pen hardware product.  The pen hardware product 
  4987.       device-dependent code is linked with the supplied sample pen device 
  4988.       driver code to build the pen device driver.  The device-type-dependent 
  4989.       code calls the device-dependent code to perform operations specific to 
  4990.       the hardware. 
  4991.  
  4992.       The device-dependent code manages the device while the 
  4993.       device-type-dependent code produces the Pen for OS/2 device behavior. 
  4994.  
  4995.  
  4996. ΓòÉΓòÉΓòÉ 9.4.2. Driver Subcomponents ΓòÉΓòÉΓòÉ
  4997.  
  4998. The driver is further organized into multiple subcomponents, each with a 
  4999. specific duty as shown in the following figure. 
  5000.  
  5001.  
  5002.  Pen Device Driver
  5003. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5004. Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  5005. Γöé  Γöé Device-Type-Independent Subcomponents Γöé  Γöé
  5006. Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé  Γöé
  5007. Γöé  Γöé  Γöé STRAT Γöé    Γöé  GIO  Γöé    Γöé  IDC  Γöé  Γöé  Γöé
  5008. Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé  Γöé
  5009. Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé  Γöé
  5010. Γöé  Γöé  Γöé INIT  Γöé    Γöé TRACE Γöé    Γöé TIMER Γöé  Γöé  Γöé
  5011. Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé  Γöé
  5012. Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  5013. Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  5014. Γöé  Γöé   Locator-Device-Type Subcomponents   Γöé  Γöé
  5015. Γöé  Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ           Γöé  Γöé
  5016. Γöé  Γöé          Γöé LOCATOR ENGINE Γöé           Γöé  Γöé
  5017. Γöé  Γöé          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           Γöé  Γöé
  5018. Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  5019. Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  5020. Γöé  Γöé   Button-Device-Type Subcomponents    Γöé  Γöé
  5021. Γöé  Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ            Γöé  Γöé
  5022. Γöé  Γöé          Γöé BUTTON ENGINE Γöé            Γöé  Γöé
  5023. Γöé  Γöé          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ            Γöé  Γöé
  5024. Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  5025. Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  5026. Γöé  Γöé   Display-Device-Type Subcomponents   Γöé  Γöé
  5027. Γöé  Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ           Γöé  Γöé
  5028. Γöé  Γöé          Γöé DISPLAY ENGINE Γöé           Γöé  Γöé
  5029. Γöé  Γöé          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           Γöé  Γöé
  5030. Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  5031. Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  5032. Γöé  Γöé Device-Type Subcomponents             Γöé  Γöé
  5033. Γöé  Γöé                                       Γöé  Γöé
  5034. Γöé  ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ  Γöé
  5035. Γöé     Γöé DEVICE DEPENDENT Γöé     Γöé SERIAL Γöé     Γöé
  5036. Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé
  5037. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5038.  
  5039.    o  Device-Type-Independent Subcomponents 
  5040.  
  5041.         -  STRAT 
  5042.  
  5043.            OS/2 strategy entry point.  OS/2 device driver commands are handled 
  5044.            and routed to worker routines in device-type-dependent 
  5045.            subcomponents.  Most notable are the Generic IOCtl handler and the 
  5046.            INIT command handler. 
  5047.  
  5048.         -  INIT 
  5049.  
  5050.            The OS/2 operating system issues the INIT command after loading the 
  5051.            driver.  The STRAT subcomponent routes the command to the INIT 
  5052.            command handler routine.  The INIT routine takes care of OS/2 
  5053.            details and calls each subcomponents INIT entry routine.  After all 
  5054.            INIT routines are called, the declared logical device types are 
  5055.            identified to the Pen for OS/2 system extension with the 
  5056.            DevHlp_RegisterDeviceClass routine. 
  5057.  
  5058.            The initialization code and data segments are returned to the system 
  5059.            after the INIT command returns to the OS/2 operating system. 
  5060.  
  5061.         -  GIO 
  5062.  
  5063.            Generic IOCtl handler.  Architected IOCtls are routed to a 
  5064.            subcomponent for processing.  Device-specific IOCtls are routed to 
  5065.            the device-dependent routine. 
  5066.  
  5067.         -  IDC 
  5068.  
  5069.            Inter-device-driver communication (IDC) entry points. This 
  5070.            subcomponent processes IDC calls to the Pen for OS/2 Device Driver 
  5071.            Services. 
  5072.  
  5073.         -  TRACE 
  5074.  
  5075.            The trace subcomponent provides trace services useful for driver 
  5076.            debugging. 
  5077.  
  5078.         -  TIMER 
  5079.  
  5080.            The timer provides timer services in the form of per-tick callouts 
  5081.            to subcomponents and the device-dependent code.  Timers are used to 
  5082.            manage the backlight and ensure that exit proximity is reported. 
  5083.  
  5084.    o  Device-Type-Dependent Subcomponents 
  5085.  
  5086.         -  ENGINE 
  5087.  
  5088.            There is a device-type-dependent engine subcomponent for each of the 
  5089.            logical device types.  The engine is called from the 
  5090.            device-dependent code to process locator, button, or display 
  5091.            operations.  The engine shields the details of the Pen for OS/2 
  5092.            interface and calls back to the device-dependent code for 
  5093.            hardware-specific operations. 
  5094.  
  5095.    o  Device-Dependent Subcomponents 
  5096.  
  5097.         -  DEVICE DEPENDENT 
  5098.  
  5099.            The device-dependent subcomponent supplies the specific 
  5100.            hardware-handling operations. 
  5101.  
  5102.         -  SERIAL 
  5103.  
  5104.            A serial subcomponent for hardware devices attached by way of a 
  5105.            serial port. 
  5106.  
  5107.  The detailed design of each subcomponent can be found in the module prologue 
  5108.  of the assembly file (*ASM) for that subcomponent. 
  5109.  
  5110.  
  5111. ΓòÉΓòÉΓòÉ 9.4.3. Driver Data Structures ΓòÉΓòÉΓòÉ
  5112.  
  5113.  Pen Device Driver
  5114. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5115. Γöé                DEVICE CONTROL BLOCK (DCB)                Γöé
  5116. Γöé                  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                   Γöé
  5117. Γöé   DCB_anchor ΓöÇΓöÇΓöÇΓöÇ     dcb_link      Γö£ΓöÇΓöÇΓöÇΓöÇ Next DCB     Γöé
  5118. Γöé                  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                   Γöé
  5119. Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Device-Type       Γöé                   Γöé
  5120. Γöé       Γöé          Γöé Independent       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  5121. Γöé       Γöé          Γöé Section      ΓöîΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöñ Device-Type- Γöé Γöé
  5122. Γöé                 Γöé              Γöé    Γöé  Γöé Independent  Γöé Γöé
  5123. Γöé Pointers to Data Γöé              Γöé ΓöîΓöÇΓöÇΓö╝ΓöÇΓöÇΓöñ Code         Γöé Γöé
  5124. Γöé Common to        Γöé              Γöé Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  5125. Γöé All Types        Γöé              Γöé Γöé  Γöé                   Γöé
  5126. Γöé                  Γöé              Γöé Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  5127. Γöé                  Γöé              Γöé ΓööΓöÇΓöÇΓö╝ΓöÇΓöÇ Device-Type- Γöé Γöé
  5128. Γöé                  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé Dependent    Γöé Γöé
  5129. Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Device-Type- Γöé ΓöîΓöÇΓöÇΓö╝ΓöÇΓöÇΓöñ Code         Γöé Γöé
  5130. Γöé       Γöé          Γöé Dependent    Γöé Γöé  Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  5131. Γöé       Γöé          Γöé Section      Γöé Γöé  Γöé                   Γöé
  5132. Γöé                 Γöé              Γöé Γöé  Γöé                   Γöé
  5133. Γöé Pointers to Data Γöé              Γöé Γöé  Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  5134. Γöé Common to this   Γöé              Γöé ΓööΓöÇΓöÇΓö╝ΓöÇΓöÇ Device-      Γöé Γöé
  5135. Γöé Device Type      Γöé              Γöé    Γöé  Γöé Dependent    Γöé Γöé
  5136. Γöé                  Γöé              ΓööΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇ Code         Γöé Γöé
  5137. Γöé                  Γöé                   Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  5138. Γöé                  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                   Γöé
  5139. Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Device-           Γöé                   Γöé
  5140. Γöé       Γöé          Γöé Dependent         Γöé                   Γöé
  5141. Γöé       Γöé          Γöé Section           Γöé                   Γöé
  5142. Γöé                 Γöé                   Γöé                   Γöé
  5143. Γöé Pointers to Data Γöé                   Γöé                   Γöé
  5144. Γöé Private to the   Γöé                   Γöé                   Γöé
  5145. Γöé Device           Γöé                   Γöé                   Γöé
  5146. Γöé                  Γöé                   Γöé                   Γöé
  5147. Γöé                  Γöé                   Γöé                   Γöé
  5148. Γöé                  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                   Γöé
  5149. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5150.  
  5151. The sample pen device driver has very few global variables.  Each device has 
  5152. its own device-control block (DCB).  There are three sections in each DCB, one 
  5153. for each of the three code organizations:  device-type-independent, 
  5154. device-type-dependent, and device-dependent.  The first two are provided with 
  5155. the sample pen device driver, and you must define the device-dependent section. 
  5156.  
  5157. The DCB has data fields and pointers to data structures and routines needed by 
  5158. particular layers of the driver.  The indirect call pointers declare device 
  5159. type-dependent and device-dependent routines, enabling common code to support 
  5160. different device types and physical devices without conditional logic and 
  5161. naming conventions to select a routine. 
  5162.  
  5163. Upward calls from device-dependent code to device type-dependent code or device 
  5164. type-independent code, and from device type-dependent code to device 
  5165. type-independent code can be made by global reference. 
  5166.  
  5167. Device-dependent routines can access the entire DCB.  Device type-dependent 
  5168. code can access the device type-dependent and device type-independent sections, 
  5169. but cannot refer to the private device section because it not aware of the 
  5170. layout.  Similarly, the device type-independent code can access only the device 
  5171. type-independent section of the DCB. 
  5172.  
  5173. Data and routines provided by a lower layer in the device driver are located in 
  5174. the DCB section that requires the access.  These fields are generic to all 
  5175. lower-level code and must be supported by all lower-level code. 
  5176.  
  5177.  
  5178. ΓòÉΓòÉΓòÉ 10. Operational Considerations ΓòÉΓòÉΓòÉ
  5179.  
  5180. This appendix provides operational considerations pertaining to the performance 
  5181. of a pen device driver. 
  5182.  
  5183.  
  5184. ΓòÉΓòÉΓòÉ 10.1. Support Level Control ΓòÉΓòÉΓòÉ
  5185.  
  5186. The level of Pen for OS/2 system extension support is passed to the pen device 
  5187. driver with the START_LOGICAL_DEVICE IDC request.  The support level can be 
  5188. used to distinguish old versions of the Pen for OS/2 system extension with 
  5189. fewer capabilities and different structure layout from the expected level. The 
  5190. pen device driver can choose to support back levels by disabling functions and 
  5191. supplying the expected control block layouts, or the pen device driver can 
  5192. decline to register its devices. 
  5193.  
  5194. Likewise, the pen device driver identifies its level to Pen for OS/2 in the 
  5195. driver-specific capabilities packet (driver unit 0 capabilities packet), so Pen 
  5196. for OS/2 can interpret the pen device drivers communication or can choose not 
  5197. to identify its Pen for OS/2 Device Driver Services. 
  5198.  
  5199. The driver-specific capabilities packet identifies the level of the IOCtl 
  5200. interface, Pen for OS/2 Device Driver Service IDC interface, Pen for OS/2 
  5201. extended information packet interface, and version of the pen device driver. 
  5202.  
  5203.  
  5204. ΓòÉΓòÉΓòÉ 10.2. Configuration Limitations ΓòÉΓòÉΓòÉ
  5205.  
  5206. A pen device driver is limited to one button and one display device.  There can 
  5207. be four locator devices of any mix of locator types.  There can be only one 
  5208. display device per system.  Pen for OS/2 Device Driver Services will not issue 
  5209. START_LOGICAL_DEVICE to logical devices that would cause these limits to be 
  5210. exceeded. 
  5211.  
  5212. There can be one pen device driver in the system. 
  5213.  
  5214.  
  5215. ΓòÉΓòÉΓòÉ 10.3. Stand-Alone Operation ΓòÉΓòÉΓòÉ
  5216.  
  5217. Pen device drivers created with the Pen for OS/2 Developers Toolkit are not 
  5218. intended to be used in a system without the Pen for OS/2 system extension.  The 
  5219. OS/2 2.1 MOUSE.SYS, without the Pen for OS/2 Device Driver Services, supports 
  5220. only a single device-dependent driver with a single locator device and no 
  5221. extended information packet.  Other logical device types are not supported. 
  5222.  
  5223. It is possible for a pen device driver to run without the Pen for OS/2 system 
  5224. extension.  The locator Pen for OS/2 Device Driver Service interface is similar 
  5225. to the OS/2 2.1 MOUSE.SYS IDC interface.  The MOUSE.SYS statement in the 
  5226. CONFIG.SYS must include a TYPE= for the pen device driver.  The TYPE= in the 
  5227. MOUSE.SYS statement in the CONFIG.SYS must not be present on a Pen for OS/2 
  5228. system if the device driver has registered with DevHlp_RegisterDeviceClass. The 
  5229. pen device drivers AttachDD IDC entry point must be used for the standard 
  5230. MOUSE.SYS protocol.  Being called at the AttachDD entry point by MOUSE.SYS can 
  5231. be used to determine the device drivers mode of operation.  An AttachDD to 
  5232. MOUSE.SYS must be performed during READ_ENABLE to locate the MOUSE.SYS IDC 
  5233. entry point.  The MOUSE.SYS interrupt packet must be used instead of the 
  5234. extended information packet. 
  5235.  
  5236. DevHlp_RegisterDeviceClass can be called on an OS/2 2.1 system without the Pen 
  5237. for OS/2 system extension, but it will be ignored, and the driver entry point 
  5238. will not be called. The Pen for OS/2 device driver is not supported in previous 
  5239. versions of the OS/2 operating system. 
  5240.  
  5241. If the pen device driver has multiple locator devices, either they must share 
  5242. the MOUSE.SYS interrupt packet or only one device can be supported. The IDC 
  5243. entry point, as defined in the device driver header, must fan out the calls to 
  5244. all locator device entry points if the interrupt packet is shared. 
  5245.  
  5246. There is no requirement for interrupt packet sharing, and it will require 
  5247. additional programming in the device driver.  Supporting both interfaces might 
  5248. be useful if the device driver will be used on OS/2 systems without the Pen for 
  5249. OS/2 system extension. 
  5250.  
  5251.  
  5252. ΓòÉΓòÉΓòÉ 10.4. Multiple Device Drivers ΓòÉΓòÉΓòÉ
  5253.  
  5254. A pen device driver can be composed of a complex number of physical device 
  5255. drivers connected by private IDC calls.  One driver should register on behalf 
  5256. of the collection of drivers.  This driver will be called by the Pen for OS/2 
  5257. system extension for IOCtls.  The other physical device drivers are invisible 
  5258. to Pen for OS/2.  Pen for OS/2 Device Driver Services must be called from the 
  5259. device driver that registered with Pen for OS/2 Device Driver Services. 
  5260.  
  5261.  
  5262. ΓòÉΓòÉΓòÉ 10.5. Resource Utilization ΓòÉΓòÉΓòÉ
  5263.  
  5264. The sample pen device driver uses statically allocated memory in its device 
  5265. driver data segment.  You can allocate dynamic memory, but this is not required 
  5266. by the device driver model.  There will be no per-process data requirements. 
  5267.  
  5268. Resources required by the device objects are similar to all Workplace Shell 
  5269. objects. 
  5270.  
  5271.  
  5272. ΓòÉΓòÉΓòÉ 10.6. Video Mode Changes ΓòÉΓòÉΓòÉ
  5273.  
  5274. The pen device driver can request to be informed of video mode and session 
  5275. changes.  The ability to report these events is identified with the READ_ENABLE 
  5276. request.  See Pen Device Driver IDC Interface.  By default, events are not 
  5277. reported to the device driver.  If events are desired, the 
  5278. STYLE_NOTIFY_VMCHANGE style bit must be reset and returned by way of 
  5279. READ_ENABLE. 
  5280.  
  5281. Events are reported to the pen device driver with the VIDEO_MODE_CHANGE IDC 
  5282. request.  This is a global call to the device driver, not to a specific logical 
  5283. device.  If the visible portion of the LCD changes for different video modes, 
  5284. the device driver must modify the extents to reflect the new dimensions and 
  5285. inform Pen for OS/2 with the capabilities update Pen for OS/2 Device Driver 
  5286. Service (UPDATE_CAPS). 
  5287.  
  5288.  
  5289. ΓòÉΓòÉΓòÉ 11. Glossary ΓòÉΓòÉΓòÉ
  5290.  
  5291. This glossary contains terms and definitions that are, for the most part, used 
  5292. specifically with the Pen for OS/2 products.  This is not a complete dictionary 
  5293. of computer terms. 
  5294.  
  5295.  
  5296. ΓòÉΓòÉΓòÉ 11.1. Introduction ΓòÉΓòÉΓòÉ
  5297.  
  5298. This glossary includes terms and definitions from: 
  5299.  
  5300.    o  The American National Dictionary for Information Systems, ANSI 
  5301.       X3.172-1990, copyright 1990 by the American National Standards Institute 
  5302.       (ANSI).  Copies may be purchased from the American National Standards 
  5303.       Institute, 11 West 42 Street, New York, New York 10036.  Definitions are 
  5304.       identified by the symbol (A) after the definition. 
  5305.  
  5306.    o  The Information Technology Vocabulary, developed by Subcommittee 1, Joint 
  5307.       Technical Committee 1, of the International Organization for 
  5308.       Standardization and the International Electrotechnical Commission 
  5309.       (ISO/IEC JTC1/SC1).  Definitions of published parts of this vocabulary 
  5310.       are identified by the symbol (I) after the definition; definitions from 
  5311.       draft international standards, committee drafts, and working papers being 
  5312.       developed by ISO/IEC JTC1/SC1 are identified by the symbol (T) after the 
  5313.       definition, indicating that final agreement has not yet been reached 
  5314.       among the participating National Bodies of SC1. 
  5315.  
  5316.  
  5317. ΓòÉΓòÉΓòÉ 11.2. Glossary Listing ΓòÉΓòÉΓòÉ
  5318.  
  5319. Select a starting letter of glossary terms: 
  5320.  
  5321.  A    N 
  5322.  B    O 
  5323.  C    P 
  5324.  D    Q 
  5325.  E    R 
  5326.  F    S 
  5327.  G    T 
  5328.  H    U 
  5329.  I    V 
  5330.  J    W 
  5331.  K    X 
  5332.  L    Y 
  5333.  M    Z 
  5334.  
  5335.  
  5336. ΓòÉΓòÉΓòÉ <hidden> Glossary - A ΓòÉΓòÉΓòÉ
  5337.  
  5338.  A 
  5339.  
  5340.  American National Standard Code for Information Interchange (ASCII) - The 
  5341.     standard code, using a coded character set consisting of 7-bit coded 
  5342.     characters (8-bits including parity check), that is used for information 
  5343.     interchange among data processing systems, data communication systems, and 
  5344.     associated equipment.  The ASCII set consists of control characters and 
  5345.     graphic characters. (A) 
  5346.  
  5347.  API - Application programming interface. 
  5348.  
  5349.  application programming interface (API) - A functional interface supplied by 
  5350.     the operating system or by a separately orderable licensed program that 
  5351.     allows an application program written in a high-level language to use 
  5352.     specific data or functions of the operating system or the licensed program. 
  5353.  
  5354.  ASCII - American National Standard Code for Information Interchange 
  5355.  
  5356.  ASCIIZ format - A string of ASCII characters ending with a null character. 
  5357.  
  5358.  assignment - A unique setting that can be changed.  See also button assignment 
  5359.     and gesture assignment. 
  5360.  
  5361.  
  5362. ΓòÉΓòÉΓòÉ <hidden> Glossary - B ΓòÉΓòÉΓòÉ
  5363.  
  5364.  B 
  5365.  
  5366.  backlight - The fluorescent lighting on a device such as a liquid crystal 
  5367.     display (LCD). 
  5368.  
  5369.  barrel buttons - Buttons on the side of a pen device, used to request or 
  5370.     initiate an action. 
  5371.  
  5372.  bezel buttons - Buttons built into the case (bezel) of a pen-based computer or 
  5373.     peripheral device, used to request or initiate an action. 
  5374.  
  5375.  button - A mechanism used to request or initiate an action.  See also barrel 
  5376.     buttons and bezel buttons. 
  5377.  
  5378.  button assignment - An assignment that defines the action or actions performed 
  5379.     as a result of activating a button or combination of buttons. 
  5380.  
  5381.  
  5382. ΓòÉΓòÉΓòÉ <hidden> Glossary - C ΓòÉΓòÉΓòÉ
  5383.  
  5384.  C 
  5385.  
  5386.  calibration - The adjustment of a piece of equipment so that it meets normal 
  5387.     operational standards.  For example, calibration could refer to adjusting 
  5388.     the alignment of a pen. 
  5389.  
  5390.  call - (1) The action of bringing a computer program, a routine, or a 
  5391.     subroutine into effect, usually by specifying the entry conditions and 
  5392.     jumping to an entry point. (I) (A)  (2) To transfer control to a procedure, 
  5393.     program, routine, or subroutine. 
  5394.  
  5395.  cathode ray tube display (CRT display) - (1) A device that presents data in 
  5396.     visual form by means of controlled electron beams. (A)  (2) The data 
  5397.     display produced by the device in (1). (A) 
  5398.  
  5399.  child class - See subclass. 
  5400.  
  5401.  child process - A process, started by a parent process, that shares the 
  5402.     resources of the parent process. 
  5403.  
  5404.  class - The description of a set of objects and their behavior. New classes 
  5405.     can be defined in terms of existing classes through a technique known as 
  5406.     inheritance. 
  5407.  
  5408.  class method - An action that can be performed on a class object. Class 
  5409.     methods also are called factory methods. 
  5410.  
  5411.  configure - To describe to a system the devices, optional features, and 
  5412.     programs installed on the system. 
  5413.  
  5414.  control ball - In computer graphics, a ball, rotatable about its center, that 
  5415.     is used as an input device, normally as a locator. (I) (A)  Synonymous with 
  5416.     track ball. 
  5417.  
  5418.  CRT display - Cathode ray tube display. 
  5419.  
  5420.  
  5421. ΓòÉΓòÉΓòÉ <hidden> Glossary - D ΓòÉΓòÉΓòÉ
  5422.  
  5423.  D 
  5424.  
  5425.  DCB - Device control block. 
  5426.  
  5427.  debug - To detect, diagnose, and eliminate errors in programs. (T) 
  5428.  
  5429.  descendant - See subclass. 
  5430.  
  5431.  device control block (DCB) - A data structure that contains data and addresses 
  5432.     for indirect calls for a logical device. 
  5433.  
  5434.  device driver - A program that enables the computer to communicate with a 
  5435.     specific peripheral device such as a pen, videodisc player, or CD drive. 
  5436.  
  5437.  device helper (DevHlp) functions - Kernel services (memory, hardware 
  5438.     interrupts, software interrupts, queuing, semaphores, and so forth) 
  5439.     provided to physical device drivers. 
  5440.  
  5441.  device ID - A unique ID number assigned to a logical device. A device ID is 
  5442.     unique across an entire system. 
  5443.  
  5444.  device object - An object that provides a means of communication between a 
  5445.     computer and another piece of equipment, such as a pen or display. 
  5446.  
  5447.  digitizer - An electronic device that transmits coordinate data to software 
  5448.     running on a computer. 
  5449.  
  5450.  display bezel - The case surrounding the display of a pen-based computer. 
  5451.  
  5452.  DLL - Dynamic link library. 
  5453.  
  5454.  double-tap - To touch a sensor twice in rapid succession within a small area. 
  5455.  
  5456.  drag - To use a pen or another pointing device to move an object. 
  5457.  
  5458.  dynamic link library (DLL) - A file containing executable code and data bound 
  5459.     to a program at load time or run time, rather than during linking. The code 
  5460.     and data in a dynamic link library can be shared by several applications 
  5461.     simultaneously. 
  5462.  
  5463.  dynamic link module - A module that is linked at load time or run time. 
  5464.  
  5465.  
  5466. ΓòÉΓòÉΓòÉ <hidden> Glossary - E ΓòÉΓòÉΓòÉ
  5467.  
  5468.  E 
  5469.  
  5470.  emulation - The use of one system to imitate another system so that the 
  5471.     imitating system accepts the same data, runs the same programs, and 
  5472.     achieves the same results as the imitated system. 
  5473.  
  5474.  
  5475. ΓòÉΓòÉΓòÉ <hidden> Glossary - F ΓòÉΓòÉΓòÉ
  5476.  
  5477.  F 
  5478.  
  5479.  flag - (1) A variable indicating that a certain condition holds. (T)  (2) A 
  5480.     character that signals the occurrence of some condition, such as the end of 
  5481.     a word. (A) 
  5482.  
  5483.  function - (1) In a programming language, a block, with or without formal 
  5484.     parameters, whose execution is invoked by means of a call.  (2) A set of 
  5485.     related control statements that cause one or more programs to be performed. 
  5486.  
  5487.  
  5488. ΓòÉΓòÉΓòÉ <hidden> Glossary - G ΓòÉΓòÉΓòÉ
  5489.  
  5490.  G 
  5491.  
  5492.  gesture - A hand-drawn symbol or uppercase letter which, when recognized by 
  5493.     the system, invokes an action or a series of actions. Gestures denote an 
  5494.     action and a target for the action. 
  5495.  
  5496.  gesture assignment - An assignment that defines the action or actions 
  5497.     performed as a result of a gesture. 
  5498.  
  5499.  group - A collection of files that can be presented to the user as an 
  5500.     installation option. 
  5501.  
  5502.  
  5503. ΓòÉΓòÉΓòÉ <hidden> Glossary - H ΓòÉΓòÉΓòÉ
  5504.  
  5505.  H 
  5506.  
  5507.  header - (1) System-defined control information that precedes user data. (2) 
  5508.     The portion of a message that contains control information for the message, 
  5509.     such as one or more destination fields, name of originating station, input 
  5510.     sequence number, character string indicating the type of message, and 
  5511.     priority level for the message. 
  5512.  
  5513.  hot key - (1) The key combination used to change from one session to another 
  5514.     on the workstation.  (2) To jump, or hot key, from a host session to an 
  5515.     application on the workstation, or from the workstation to the host 
  5516.     session. 
  5517.  
  5518.  hot spot - The area of a display screen that is activated to accept user 
  5519.     input. Synonymous with touch area. 
  5520.  
  5521.  
  5522. ΓòÉΓòÉΓòÉ <hidden> Glossary - I ΓòÉΓòÉΓòÉ
  5523.  
  5524.  I 
  5525.  
  5526.  IDC - Inter-device-driver communication. 
  5527.  
  5528.  ink - The trail resulting from writing with the pen. 
  5529.  
  5530.  inheritance - (1) In the OS/2 Presentation Manager interface, the technique of 
  5531.     specifying the shape and behavior of one window (called a child window) as 
  5532.     incremental differences from another window (called a parent window).  (2) 
  5533.     In System Object Model, implications of derivation of new classes from 
  5534.     existing classes. Child classes inherit methods from parent and ancestor 
  5535.     classes. 
  5536.  
  5537.  input/output control (IOCtl) - A system service that provides a way for an 
  5538.     application to send device-specific control commands to a device driver. 
  5539.  
  5540.  instance - A specific object belonging to a class. 
  5541.  
  5542.  instance method - Actions that can be performed on instances of class objects. 
  5543.  
  5544.  inter-device-driver communication (IDC) - A mechanism that enables a physical 
  5545.     device driver to communicate with another physical device driver. 
  5546.  
  5547.  IOCtl - Input/output control. 
  5548.  
  5549.  
  5550. ΓòÉΓòÉΓòÉ <hidden> Glossary - J ΓòÉΓòÉΓòÉ
  5551.  
  5552.  J 
  5553.  
  5554.  joy stick - In computer graphics, a lever that can pivot in all directions and 
  5555.     that is used as a locator device. (T) 
  5556.  
  5557.  
  5558. ΓòÉΓòÉΓòÉ <hidden> Glossary - K ΓòÉΓòÉΓòÉ
  5559.  
  5560.  K 
  5561.  
  5562.  kernel - The part of an operating system that performs basic functions, such 
  5563.     as allocating hardware resources. 
  5564.  
  5565.  
  5566. ΓòÉΓòÉΓòÉ <hidden> Glossary - L ΓòÉΓòÉΓòÉ
  5567.  
  5568.  L 
  5569.  
  5570.  LCD - Liquid crystal display. 
  5571.  
  5572.  line feed - (1) The movement of the print or display position to the 
  5573.     corresponding position on the next line. (T)  (2) The incremental relative 
  5574.     movement between the paper carrier and the type carrier in a direction 
  5575.     perpendicular to the writing line. 
  5576.  
  5577.  liquid crystal display (LCD) - A display device that creates characters by 
  5578.     means of the action of reflected light on patterns formed by a liquid that 
  5579.     becomes opaque when it is energized. 
  5580.  
  5581.  logical device - (1) A file for conducting input or output with a physical 
  5582.     device.  (2) A file for mapping user I/O between virtual and real devices. 
  5583.     A logical device can be accessed using the file system API. 
  5584.  
  5585.  
  5586. ΓòÉΓòÉΓòÉ <hidden> Glossary - M ΓòÉΓòÉΓòÉ
  5587.  
  5588.  M 
  5589.  
  5590.  metaclass - A class of a class.  In System Object Model, a metaclass defines 
  5591.     class methods for a class object. 
  5592.  
  5593.  method - An action that can be performed on an object. 
  5594.  
  5595.  mouse-emulation mode - An input mode in which the system interprets pen input 
  5596.     as mouse input. 
  5597.  
  5598.  
  5599. ΓòÉΓòÉΓòÉ <hidden> Glossary - N ΓòÉΓòÉΓòÉ
  5600.  
  5601.  N 
  5602.  
  5603.     There are no glossary terms for this initial letter. 
  5604.  
  5605.  
  5606. ΓòÉΓòÉΓòÉ <hidden> Glossary - O ΓòÉΓòÉΓòÉ
  5607.  
  5608.  O 
  5609.  
  5610.  object - (1) A graphic symbol that a user works with to perform a task. (2) In 
  5611.     System Object Model, a set of data and the actions that can be performed on 
  5612.     that data. 
  5613.  
  5614.  object definition - See class. 
  5615.  
  5616.  object instance - See instance. 
  5617.  
  5618.  OEM - Original equipment manufacturer. 
  5619.  
  5620.  Original equipment manufacturer (OEM) - A manufacturer of equipment that may 
  5621.     be marketed by another manufacturer. 
  5622.  
  5623.  
  5624. ΓòÉΓòÉΓòÉ <hidden> Glossary - P ΓòÉΓòÉΓòÉ
  5625.  
  5626.  P 
  5627.  
  5628.  parallax - A condition that occurs when a gap exists between the locator 
  5629.     position and the displayed trail resulting from writing with the pen. 
  5630.     Parallax differs in both the horizontal and vertical views by how a user 
  5631.     looks at the display. 
  5632.  
  5633.  parent class - A class from which another class inherits.  See inheritance. 
  5634.  
  5635.  parent process - A process that creates other processes.  Contrast with child 
  5636.     process. 
  5637.  
  5638.  path - The part of a file specification that lists the drive name and a series 
  5639.     of directory names that give the location of the file. Each directory name 
  5640.     is separated by the backslash character. In the specification 
  5641.     C:\MYFILES\MISC\GLOSSARY.SCR, the path consists of C:\MYFILES\MISC\. 
  5642.  
  5643.  pause - An action where the pen remains motionless for an interval of time 
  5644.     while it is in the proximity zone or touching a touch-sensitive surface. 
  5645.     This interval of time starts a new action (for example, mouse-emulation 
  5646.     mode). 
  5647.  
  5648.  pel - Picture element. 
  5649.  
  5650.  pen - A pointing and input device used with a touch-sensitive device. 
  5651.  
  5652.  pen-aware programs - Programs that are written or modified to use a pen or a 
  5653.     finger as the standard input device rather than a keyboard or a mouse. 
  5654.  
  5655.  pen-unaware programs - Programs that are written to use a keyboard or a mouse 
  5656.     and are not written to use a pen. 
  5657.  
  5658.  picture element - In computer graphics, the smallest element of a display 
  5659.     surface that can be independently assigned color and intensity. (T) 
  5660.  
  5661.  pixel - Picture element. 
  5662.  
  5663.  privilege level - A protection method supported by the hardware architecture 
  5664.     of IBM personal computer systems. This method consists of four privilege 
  5665.     levels know as rings (numbered 0 through 3). Only certain types of programs 
  5666.     are allowed to execute at each privilege level. 
  5667.  
  5668.  program-file object - An object that starts a program.  Program files commonly 
  5669.     have extensions of .EXE, .COM, .CMD, or .BAT. 
  5670.  
  5671.  program object - An object representing the file that starts a program.  A 
  5672.     user can change the settings for a program object to specify the gesture 
  5673.     assignments for a particular program. 
  5674.  
  5675.  proximity zone - An area where action is sensed by a touch-sensitive device 
  5676.     without the input device touching the touch-sensitive surface. The zone 
  5677.     varies depending on the technology of the digitizer in the device, but it 
  5678.     is usually no more than 6.35 mm (0.25 in.) from the surface. 
  5679.  
  5680.  
  5681. ΓòÉΓòÉΓòÉ <hidden> Glossary - Q ΓòÉΓòÉΓòÉ
  5682.  
  5683.  Q 
  5684.  
  5685.     There are no glossary terms for this initial letter. 
  5686.  
  5687.  
  5688. ΓòÉΓòÉΓòÉ <hidden> Glossary - R ΓòÉΓòÉΓòÉ
  5689.  
  5690.  R 
  5691.  
  5692.  return code - (1) A code used to influence the execution of succeeding 
  5693.     instructions.  (2) A value returned to a program to indicate the results of 
  5694.     an operation requested by that program. 
  5695.  
  5696.  ring level - See privilege level. 
  5697.  
  5698.  
  5699. ΓòÉΓòÉΓòÉ <hidden> Glossary - S ΓòÉΓòÉΓòÉ
  5700.  
  5701.  S 
  5702.  
  5703.  screen - The physical surface of a display device upon which information is 
  5704.     shown to a user. 
  5705.  
  5706.  settings - Characteristics of objects that the user can view and sometimes 
  5707.     alter. 
  5708.  
  5709.  shift - An action during mouse-emulation mode in which the default mouse 
  5710.     button 1 down action emulates another button or combination of buttons for 
  5711.     the duration of the stroke. 
  5712.  
  5713.  shutdown - The procedure required before the computer is switched off to 
  5714.     ensure that data is not lost. 
  5715.  
  5716.  SOM - System Object Model. 
  5717.  
  5718.  source directory - The directory from which information is read.  Contrast 
  5719.     with target directory. 
  5720.  
  5721.  stroke - The collection of points between the point where the pen touches a 
  5722.     touch-sensitive surface and the point where the pen is removed from the 
  5723.     surface. 
  5724.  
  5725.  subclass - A class that is derived from another class. The subclass inherits 
  5726.     the data and methods from the parent class and can define new methods or 
  5727.     override existing methods to define new behavior not inherited from the 
  5728.     parent class. See inheritance. 
  5729.  
  5730.  System Object Model - A mechanism for language-neutral, object-oriented 
  5731.     programming for the OS/2 environment. 
  5732.  
  5733.  
  5734. ΓòÉΓòÉΓòÉ <hidden> Glossary - T ΓòÉΓòÉΓòÉ
  5735.  
  5736.  T 
  5737.  
  5738.  tap - To briefly touch a touch-sensitive surface with a pointing device and 
  5739.     then quickly remove it. 
  5740.  
  5741.  target - The location to which the information is destined. 
  5742.  
  5743.  target directory - The directory to which information is written.  Contrast 
  5744.     with source directory. 
  5745.  
  5746.  tick count - A value registered with the Pen for OS/2 extension that causes 
  5747.     the Pen for OS/2 timer handler to be called on every n timer ticks instead 
  5748.     of every timer tick. 
  5749.  
  5750.  toggle - To switch between two modes; for example, to switch between selected 
  5751.     and deselected mode. 
  5752.  
  5753.  touch area - Synonym for hot spot. 
  5754.  
  5755.  touch-down point - Location, plotted by a digitizer, on screen where contact 
  5756.     is made with touch-sensitive surface. 
  5757.  
  5758.  touch screen - A display device that allows the user to interact with a 
  5759.     computer system by touching an area on its screen. 
  5760.  
  5761.  touch-sensitive - Pertaining to a device such as a keypad or screen that 
  5762.     generates coordinate data when a pointing device approaches or contacts the 
  5763.     surface, thereby allowing a user to interact directly with a computer 
  5764.     without entering commands from a keyboard. 
  5765.  
  5766.  track ball - Synonym for control ball. 
  5767.  
  5768.  
  5769. ΓòÉΓòÉΓòÉ <hidden> Glossary - U ΓòÉΓòÉΓòÉ
  5770.  
  5771.  U 
  5772.  
  5773.  unit number - A number used by a device driver to select a specific logical 
  5774.     device. A unit number is unique only within the scope of the driver. 
  5775.  
  5776.  
  5777. ΓòÉΓòÉΓòÉ <hidden> Glossary - V ΓòÉΓòÉΓòÉ
  5778.  
  5779.  V 
  5780.  
  5781.  VGA - Video graphics array. 
  5782.  
  5783.  
  5784. ΓòÉΓòÉΓòÉ <hidden> Glossary - W ΓòÉΓòÉΓòÉ
  5785.  
  5786.  W 
  5787.  
  5788.  window - An area of the screen with visible boundaries within which 
  5789.     information is displayed.  A window can be smaller than or the same size as 
  5790.     the screen.  Windows can appear to overlap on the screen. 
  5791.  
  5792.  window class - The grouping of windows whose processing requirements conform 
  5793.     to the services provided by one window procedure. 
  5794.  
  5795.  
  5796. ΓòÉΓòÉΓòÉ <hidden> Glossary - X ΓòÉΓòÉΓòÉ
  5797.  
  5798.  X 
  5799.  
  5800.     There are no glossary terms for this initial letter. 
  5801.  
  5802.  
  5803. ΓòÉΓòÉΓòÉ <hidden> Glossary - Y ΓòÉΓòÉΓòÉ
  5804.  
  5805.  Y 
  5806.  
  5807.     There are no glossary terms for this initial letter. 
  5808.  
  5809.  
  5810. ΓòÉΓòÉΓòÉ <hidden> Glossary - Z ΓòÉΓòÉΓòÉ
  5811.  
  5812.  Z 
  5813.  
  5814.     There are no glossary terms for this initial letter. 
  5815.  
  5816.  
  5817. ΓòÉΓòÉΓòÉ <hidden> IBM Trademark ΓòÉΓòÉΓòÉ
  5818.  
  5819. Trademark of the IBM Corporation. 
  5820.  
  5821.  
  5822. ΓòÉΓòÉΓòÉ <hidden> Trademarks ΓòÉΓòÉΓòÉ
  5823.  
  5824. Trademark of the Microsoft Corporation.