home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 14 Text / 14-Text.zip / wpsprogr.zip / WPSGUIDE.INF (.txt) < prev   
OS/2 Help File  |  1999-05-12  |  883KB  |  19,298 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Introduction ΓòÉΓòÉΓòÉ
  3.  
  4. This book is a programmer's guide to the Workplace Shell*, an application 
  5. environment integrated with the Operating System/2* (OS/2*), with an 
  6. object-oriented user interface using IBM*'s System Object Model (SOM). 
  7.  
  8.  
  9. ΓòÉΓòÉΓòÉ 1.1. The Workplace Shell: Object-Oriented User/Programming Interface ΓòÉΓòÉΓòÉ
  10.  
  11. The Workplace Shell constitutes the interface with which users interact with 
  12. the operating system. It represents items that users most frequently manipulate 
  13. as familiar objects on a Desktop. As a user interface, the Workplace Shell 
  14. conforms to many of the guidelines described by the Common User Access* (CUA*). 
  15.  
  16. In addition to being an interface through which a user can organize and work 
  17. with the operating system, the Workplace Shell provides its programming 
  18. interface to you. This means that applications can blend into the operating 
  19. system's user interaction model, allowing users to work with new applications 
  20. in the same manner as the operating system itself. 
  21.  
  22. By exploiting the Workplace Shell's application programming interface, you can 
  23. also reuse and build on much of the functionality already implemented by the 
  24. Workplace Shell. By using the Workplace Shell methods, an application can 
  25. implement its interface so that it includes familiar Workplace Shell user 
  26. interaction tools such as: 
  27.  
  28.      Objects presented to the user on the Desktop 
  29.  
  30.      Common mouse/keyboard interaction techniques 
  31.  
  32.      Settings notebook to manipulate attributes of the application 
  33.  
  34.      Dynamic context menus to present operational choices to user 
  35.  
  36.      Object mobility via Drag and Drop operation 
  37.  
  38.      Application view management with the OS/2 Window list. 
  39.  
  40.  In addition to the portion of the functions devoted to managing the 
  41.  presentation of the application's user interface, the Workplace Shell also 
  42.  provides functions (methods) to help coordinate the implementation of the 
  43.  application. 
  44.  
  45.  
  46. ΓòÉΓòÉΓòÉ 1.2. Objectives of this Guide ΓòÉΓòÉΓòÉ
  47.  
  48. This guide provides information on topics relevant to writing application 
  49. programs for the Workplace Shell. These topics include: 
  50.  
  51.      Creating and Installing Workplace Shell Objects 
  52.  
  53.      Debugging Workplace Shell Applications 
  54.  
  55.      Object Aid: Help Methods 
  56.  
  57.      Object Containers: Container Methods 
  58.  
  59.      Object Criteria: Details Methods 
  60.  
  61.      Object Errors: Error Handling Methods 
  62.  
  63.      Object Information: Set/Query Methods 
  64.  
  65.      Object Initialization and Termination: Setup/Cleanup Methods 
  66.  
  67.      Object Memory: Memory Allocation Methods 
  68.  
  69.      Object Mobility: Direct Manipulation Methods 
  70.  
  71.      Object Persistence: Save/Restore Methods 
  72.  
  73.      Object Properties: Notebook Methods 
  74.  
  75.      Object Usage: Usage Methods 
  76.  
  77.      Object User Action: Pop-Up Menu Methods 
  78.  
  79.      REXX Utility Workplace Shell Functions 
  80.  
  81.      Workplace Shell and System Object Model 
  82.  
  83.      Workplace Shell Distributed SOM 
  84.  
  85.      Workplace Shell Processes and Threads 
  86.  
  87.      Workplace Shell Programming Interface 
  88.  
  89.      Workplace Shell Win Functions 
  90.  
  91.  The contents of each of these topics is briefly described in the following 
  92.  sections. 
  93.  
  94.  
  95. ΓòÉΓòÉΓòÉ 1.2.1. Creating and Installing Workplace Shell Objects ΓòÉΓòÉΓòÉ
  96.  
  97. This chapter walks you through the Car sample which is included in the Toolkit, 
  98. and through WPStyler, a complete sample program. The purpose is to provide 
  99. detail information on how to create an object. For each sample, the different 
  100. Workplace Shell instance and class methods used, along with the new methods 
  101. introduced by each of them, are explained. Once objects are created, they can 
  102. be installed on the Desktop in two ways: by running an installation program or 
  103. batch file, or by using the Workplace Shell Class List Object Utility. As 
  104. objects can also reside on the Toolbar, this chapter describes the different 
  105. setup strings and methods used with the Toolbar. Finally, this chapter explains 
  106. how to support printing the contents of an object from the Desktop. 
  107.  
  108.  
  109. ΓòÉΓòÉΓòÉ 1.2.2. Debugging Workplace Shell Applications ΓòÉΓòÉΓòÉ
  110.  
  111. Debugging a Workplace Shell application is somewhat like debugging a 
  112. Presentation Manager* (PM*) application. But because Workplace Shell objects 
  113. are implemented via DLLs instead of EXEs, they can be more of a challenge. This 
  114. chapter describes the SOM and Workplace Shell facilities and techniques to aid 
  115. debugging applications. 
  116.  
  117.  
  118. ΓòÉΓòÉΓòÉ 1.2.3. Object Aid: Help Methods ΓòÉΓòÉΓòÉ
  119.  
  120. While running an application or viewing a document, the user may require help 
  121. on the application or document. It is important to include the help information 
  122. for all applications as it is used often. This chapter describes different 
  123. methods that can be overridden in order to provide help from an application 
  124. window, when a user requests it. 
  125.  
  126.  
  127. ΓòÉΓòÉΓòÉ 1.2.4. Object Containers: Container Methods ΓòÉΓòÉΓòÉ
  128.  
  129. A container is a visual component that holds objects. CUA container control is 
  130. the primary way of interacting with Workplace Shell objects. All objects with 
  131. which the user interacts are simply records that have been inserted into a 
  132. container control. Any Workplace Shell object can be inserted into any 
  133. container control created on the Workplace process. This chapter describes the 
  134. different views available for containers, and the methods used to create and 
  135. manipulate containers in Workplace Shell applications. 
  136.  
  137.  
  138. ΓòÉΓòÉΓòÉ 1.2.5. Object Criteria: Details Methods ΓòÉΓòÉΓòÉ
  139.  
  140. The class defines the object's instance data and methods. Details data are part 
  141. of instance data and define more accurately the behavior of the object. This 
  142. chapter describes the general concepts of Details data and explains how to use 
  143. the Details methods in Workplace Shell applications. 
  144.  
  145.  
  146. ΓòÉΓòÉΓòÉ 1.2.6. Object Errors: Error Handling Methods ΓòÉΓòÉΓòÉ
  147.  
  148. The Workplace Shell provides methods that you can override to design your own 
  149. error handling system, using error objects. This chapter provides information 
  150. on error handling methods for Workplace Shell applications. 
  151.  
  152.  
  153. ΓòÉΓòÉΓòÉ 1.2.7. Object Information: Set/Query Methods ΓòÉΓòÉΓòÉ
  154.  
  155. The Workplace Shell provides several set and query methods that you can use to 
  156. set or to get object information, such as the default view of the object's 
  157. in-use list, the object's icon, and the object's title. This chapter provides 
  158. information for using object information methods. It describes how to define 
  159. the behavior of Workplace Shell objects, using applicable styles. 
  160.  
  161.  
  162. ΓòÉΓòÉΓòÉ 1.2.8. Object Initialization and Termination: Setup/Cleanup Methods ΓòÉΓòÉΓòÉ
  163.  
  164. The Workplace Shell provides methods that you can use to setup the 
  165. characteristics and behaviors of an object. Likewise, it also provides methods 
  166. that you can use to cleanup after an object is no longer in use. This chapter 
  167. provides information on setup and cleanup methods that are available in the 
  168. Workplace Shell. 
  169.  
  170.  
  171. ΓòÉΓòÉΓòÉ 1.2.9. Object Memory: Memory Allocation Methods ΓòÉΓòÉΓòÉ
  172.  
  173. The Workplace Shell provides methods which you can override to design your own 
  174. memory management system, or utilize to manage memory required for objects of 
  175. your application. This chapter provides information on memory management 
  176. methods for Workplace Shell applications. 
  177.  
  178.  
  179. ΓòÉΓòÉΓòÉ 1.2.10. Object Mobility: Direct Manipulation Methods ΓòÉΓòÉΓòÉ
  180.  
  181. Direct manipulation refers to the OS/2 object mobility. That is, it refers to 
  182. the OS/2 user capability of moving an object from one container to another by 
  183. dragging an object icon from a source container and dropping it on a target 
  184. container. Direct manipulation methods allow you to specify how objects that 
  185. are directly effected by such a move communicate with each other. This chapter 
  186. outlines the protocols of direct manipulation with respect to their 
  187. interactions with the Workplace Shell. 
  188.  
  189.  
  190. ΓòÉΓòÉΓòÉ 1.2.11. Object Persistence: Save/Restore Methods ΓòÉΓòÉΓòÉ
  191.  
  192. The WPObject class provides methods that support persistent objects, that is, 
  193. objects for which the system saves information. These methods include save and 
  194. corresponding restore methods. This chapter provides information using these 
  195. state methods in Workplace Shell applications. 
  196.  
  197.  
  198. ΓòÉΓòÉΓòÉ 1.2.12. Object Properties: Notebook Methods ΓòÉΓòÉΓòÉ
  199.  
  200. A notebook is a visual component used to display the setttings for an object 
  201. and to enable the user to change them. This chapter describes the General and 
  202. Window pages of the Settings notebook, and explains how to use the notebook 
  203. methods in Workplace Shell applications. 
  204.  
  205.  
  206. ΓòÉΓòÉΓòÉ 1.2.13. Object Usage: Usage Methods ΓòÉΓòÉΓòÉ
  207.  
  208. Every Workplace Shell object in the system has an in-use list. Object usage 
  209. methods allow an object to keep track of its resources and how it is being 
  210. used. This chapter provides information for using in-use lists that are 
  211. associated with objects. 
  212.  
  213.  
  214. ΓòÉΓòÉΓòÉ 1.2.14. Object User Action: Pop-Up Menu Methods ΓòÉΓòÉΓòÉ
  215.  
  216. This chapter describes the pop-up context menus that can be used to invoke 
  217. actions on Workplace Shell objects. It also provides an overview of how to 
  218. create and manipulate the pop-up context menu for your Workplace Shell objects. 
  219.  
  220.  
  221. ΓòÉΓòÉΓòÉ 1.2.15. REXX Utility Workplace Shell Functions ΓòÉΓòÉΓòÉ
  222.  
  223. REXX combines the simplicity of a programming language such as BASIC with 
  224. features that exist in more powerful languages such as C, PASCAL, or PL/1. Part 
  225. of the success of REXX has been due in part to having been selected as the 
  226. Systems Application Architecture* Programming Language (SAA/PL). The purpose is 
  227. to provide a common look and feel across all operating systems. This is 
  228. important because CUA is the standard that the Workplace Shell uses which is 
  229. also part of SAA* REXX provides the facility for the Workplace Shell to create, 
  230. modify, and delete objects. This chapter describes the REXX functions and how 
  231. to use them in Workplace Shell applications. 
  232.  
  233.  
  234. ΓòÉΓòÉΓòÉ 1.2.16. Workplace Shell and System Object Model ΓòÉΓòÉΓòÉ
  235.  
  236. SOM is the object technology used for the implementation of the Workplace 
  237. Shell. It provides a language neutral, object-oriented programming methodology 
  238. that you can use to create Workplace Shell objects and bind them to the 
  239. Workplace Shell. This chapter describes SOM's architecture, its features and 
  240. environment. It describes its methods, classes, and finally provides an example 
  241. of its workings. This chapter is not intended to be a SOM programming guide. It 
  242. is, however, intended to serve as an introduction to SOM at a level necessary 
  243. to write Workplace Shell applications. 
  244.  
  245.  
  246. ΓòÉΓòÉΓòÉ 1.2.17. Workplace Shell Distributed SOM ΓòÉΓòÉΓòÉ
  247.  
  248. Distributed SOM (DSOM) provides a framework that allows application programs to 
  249. access objects across address spaces. That is, application programs can access 
  250. objects in other processes, even on different machines. Both the location and 
  251. implementation of an object are hidden from the client which accesses the 
  252. object (using method calls) in the same manner regardless of its location. 
  253.  
  254.  
  255. ΓòÉΓòÉΓòÉ 1.2.18. Workplace Shell Processes and Threads ΓòÉΓòÉΓòÉ
  256.  
  257. The Workplace Shell's current implementation exploits the multi-threading 
  258. capabilities of the OS/2 operating system. This chapter describes how the 
  259. Workplace Shell is initialized, the relationship between its various threads, 
  260. and ramifications on Workplace Shell method invocation. 
  261.  
  262.  
  263. ΓòÉΓòÉΓòÉ 1.2.19. Workplace Shell Programming Interface ΓòÉΓòÉΓòÉ
  264.  
  265. The Desktop (which also is an object), the objects that appear on the Desktop, 
  266. and the underlying code supporting these objects constitute the OS/2 Workplace 
  267. Shell, the default OS/2 user interface. Likewise, methods in the Workplace 
  268. Shell are methods that were implemented for the creation of the Desktop object 
  269. and its objects. This chapter describes Workplace Shell classes and 
  270. characteristic behavior of Workplace Shell objects. 
  271.  
  272.  
  273. ΓòÉΓòÉΓòÉ 1.2.20. Workplace Shell Win Functions ΓòÉΓòÉΓòÉ
  274.  
  275. Applications cannot call Workplace Shell objects' methods directly. They are 
  276. not clients of Workplace Shell objects, in the same sense that applications can 
  277. be clients of SOM objects. Workplace Shell objects are derived from the 
  278. WPObject class, which, in turn, is derived from the SOMObject class. They share 
  279. all the features of SOM objects but only the Workplace Shell can directly 
  280. manipulate them. Because there are times when applications might need to effect 
  281. changes to the Desktop and objects on the Desktop, the Workplace Shell provides 
  282. functions that permit you to proceed these changes. This chapter describes the 
  283. Workplace Shell Win Functions. 
  284.  
  285.  
  286. ΓòÉΓòÉΓòÉ 2. Creating and Installing Workplace Shell Objects ΓòÉΓòÉΓòÉ
  287.  
  288. This chapter walks you through the CAR sample which is included in the Toolkit, 
  289. and through WPStyler, a complete sample program. The purpose is to provide 
  290. detail information on how to create an object. For each sample, the different 
  291. Workplace Shell instance and class methods used, along with the new methods 
  292. introduced by each of them, are explained. Once objects are created, they can 
  293. be installed on the Desktop in two ways: by running an installation program or 
  294. batch file, or by using the Workplace Shell Class List Object Utility. As 
  295. objects can also reside on the Toolbar, this chapter describes the different 
  296. setup strings and methods used with the Toolbar. Finally, this chapter explains 
  297. how to support printing the contents of an object from the Desktop. 
  298.  
  299.  
  300. ΓòÉΓòÉΓòÉ 2.1. About Workplace Shell Objects ΓòÉΓòÉΓòÉ
  301.  
  302. This section describes the: 
  303.  
  304.      CAR sample and its implementation, which consists of: 
  305.  
  306.         -  Providing for persistence of the object 
  307.         -  Changing Settings notebook pages 
  308.         -  Removing an Item from the pop-up menu 
  309.         -  Adding pop-up menu items 
  310.         -  Creating and registering a new open view 
  311.         -  Processing new pop-up menu items 
  312.         -  Processing help for new pop-up menu items 
  313.  
  314.      Creation of new instances of objects 
  315.  
  316.      Printing objects 
  317.  
  318.      Toolbar. 
  319.  
  320.  
  321. ΓòÉΓòÉΓòÉ 2.1.1. Creation of Objects ΓòÉΓòÉΓòÉ
  322.  
  323. The CAR sample Workplace Shell object included in the Toolkit provides an 
  324. example of how to create an object. CAR is a spin-off implementation of the CAR 
  325. object example used in the Systems Application Architecture:  Common User 
  326. Access Guide to User Interface Design. 
  327.  
  328. The CAR object has two views: 
  329.  
  330.      An Open car view, which is a representation of a CAR that moves randomly 
  331.       around a window. 
  332.  
  333.      A Settings notebook that permits the user to change the sound of the 
  334.       horn, on the Horn beep page, and the speed of the CAR, on the Dashboard 
  335.       page. 
  336.  
  337.  The Horn beep and Dashboard pages in the CAR's Settings notebook are dialog 
  338.  windows whose contents are defined in a dialog template in the CAR.RC resource 
  339.  file. The resources are appended to the binary CAR.DLL file. The help panels 
  340.  associated with the dialogs are defined in the CAR.HLP help library. The 
  341.  association between the help panels and the dialogs is established with the 
  342.  dialog template in the resource file. 
  343.  
  344.  CAR is a persistent object but not a part of the file system. Therefore, it is 
  345.  derived from the WPAbstract class, which is derived from the WPObject root 
  346.  Workplace Shell class. This means that CAR inherits the methods from 
  347.  WPAbstract, which, in turn, inherits all of the instance and class methods 
  348.  from WPObject. CAR defines new methods and overrides some instance and class 
  349.  methods inherited from both WPAbstract and WPObject. New methods defined for 
  350.  the CAR class are summarized in the following table: 
  351.  
  352.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  353.   ΓöéMethod Name           ΓöéDescription              Γöé
  354.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  355.   ΓöécarQueryInfo          ΓöéGets the CAR information.Γöé
  356.   Γöé                      ΓöéIt is called by the      Γöé
  357.   Γöé                      Γöédialog procedure to get  Γöé
  358.   Γöé                      Γöéthe latest CAR data when Γöé
  359.   Γöé                      Γöéthe dialog window opened.Γöé
  360.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  361.   ΓöécarSetInfo            ΓöéSets up the CAR          Γöé
  362.   Γöé                      Γöéinformation. It is calledΓöé
  363.   Γöé                      Γöéby the dialog procedure  Γöé
  364.   Γöé                      Γöéto update the CAR data asΓöé
  365.   Γöé                      Γöéthe user interacts with  Γöé
  366.   Γöé                      Γöéthe dialog window.       Γöé
  367.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  368.   ΓöéwpAddDashboardPage    ΓöéInserts the Dashboard    Γöé
  369.   Γöé                      Γöépage into the Settings   Γöé
  370.   Γöé                      Γöénotebook. It is called byΓöé
  371.   Γöé                      ΓöéwpAddSettingsPages.      Γöé
  372.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  373.   ΓöéwpAddHornBeepPage     ΓöéInserts the Horn beep    Γöé
  374.   Γöé                      Γöépage into the Settings   Γöé
  375.   Γöé                      Γöénotebook. It is called byΓöé
  376.   Γöé                      ΓöéwpAddSettingsPages.      Γöé
  377.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  378.  
  379.  
  380. ΓòÉΓòÉΓòÉ 2.1.1.1. Implementation of the CAR Object ΓòÉΓòÉΓòÉ
  381.  
  382. The implementation of the CAR object consists primarily of overrides to 
  383. instance and class methods inherited from the WPObject and WPAbstract classes. 
  384. The following sections describe the different instance and class methods that 
  385. are overridden. 
  386.  
  387.  
  388. ΓòÉΓòÉΓòÉ 2.1.1.1.1. Providing for Persistence of the CAR Object ΓòÉΓòÉΓòÉ
  389.  
  390.  
  391. Because the CAR class defines its own set of data, it overrides wpSaveState and 
  392. wpRestoreState. These method overrides, in turn, call wpSaveLong and 
  393. wpRestoreLong to save instance data defined for the CAR class. 
  394.  
  395.  
  396. ΓòÉΓòÉΓòÉ 2.1.1.1.2. Changing Settings Notebook Pages ΓòÉΓòÉΓòÉ
  397.  
  398.  
  399. CAR creates Settings notebook pages by overriding wpAddSettingsPages inherited 
  400. from WPObject. The wpAddSettingsPages method calls the new methods defined by 
  401. the CAR class, wpAddDashboardPage and wpAddHornBeepPage. In turn, each of these 
  402. methods calls wpInsertSettingsPage inherited from WPObject. 
  403.  
  404.  
  405. ΓòÉΓòÉΓòÉ 2.1.1.1.3. Removing an Item from the Pop-Up Menu ΓòÉΓòÉΓòÉ
  406.  
  407.  
  408. Because the user item Print a car does not make sense for this object, the CAR 
  409. class removes the Print item from the CAR object's pop-up menu by overriding 
  410. wpFilterPopupMenu inherited from WPOject. 
  411.  
  412.  
  413. ΓòÉΓòÉΓòÉ 2.1.1.1.4. Adding Pop-Up Menu Items ΓòÉΓòÉΓòÉ
  414.  
  415.  
  416. The CAR class adds the Beep horn item to its primary pop-up menu by overriding 
  417. wpModifyPopupMenu inherited from WPObject. The method override for 
  418. wpModifyPopupMenu calls wpInsertPopupMenuItems, also inherited from WPObject, 
  419. to insert the item into the CAR's pop-up menu. 
  420.  
  421. The CAR class also adds the Open car item (OPEN_CAR) to its Open submenu by 
  422. overriding wpModifyPopupMenu. The method override calls wpInsertPopupMenuItems 
  423. to insert Open car into the Open submenu. 
  424.  
  425.  
  426. ΓòÉΓòÉΓòÉ 2.1.1.1.5. Creating and Registering a New Open View ΓòÉΓòÉΓòÉ
  427.  
  428.  
  429. A window for the OPEN_CAR view is created and opened by calling 
  430. WinCreateStdWindow. The window procedure for the client of the OPEN_CAR window 
  431. registers the OPEN_CAR view and associates the OPEN_CAR view with that window 
  432. by calling wpRegisterView. 
  433.  
  434.  
  435. ΓòÉΓòÉΓòÉ 2.1.1.1.6. Processing New Pop-Up Menu Items ΓòÉΓòÉΓòÉ
  436.  
  437. When a class defines new items for its menus, it must provide for the 
  438. processing of these items when the user selects an item. This is done by 
  439. overriding wpMenuItemSelected inherited from WPObject. Depending on the item 
  440. the user selects, the method override for wpMenuItemSelected calls the object's 
  441. wpOpen to open the OPEN_CAR view or calls carBeepHorn to beep the CAR's horn. 
  442.  
  443.  
  444. ΓòÉΓòÉΓòÉ 2.1.1.1.7. Processing Help for New Pop-Up Menu Items ΓòÉΓòÉΓòÉ
  445.  
  446.  
  447. When a class defines new items for its pop-up menu, it also must provide for 
  448. the processing of the help for these items when the user requests it. This is 
  449. accomplished by overriding wpMenuItemHelpSelected inherited from WPObject. 
  450. Given the item selected by the user, the method override for 
  451. wpMenuItemHelpSelected calls wpDisplayHelp inherited from WPObject to display 
  452. the Help dialog window for that item. The wpDisplayHelp method requires the ID 
  453. for the help panel associated with the item, as well as the name of the help 
  454. library where it resides. 
  455.  
  456. The implementation of the CAR object also demonstrates the use of: 
  457.  
  458.      A release order list in CAR.IDL. 
  459.  
  460.      External stem and prefix attributes in the class section of CAR.IDL. This 
  461.       allows the debugging process to be easier, because method names are 
  462.       externalized. 
  463.  
  464.      A message queue for the Workplace Shell. Object code runs on the 
  465.       Workplace Shell's thread. Windows associated with objects receive 
  466.       messages through the Workplace Shell's message queue. Objects do not need 
  467.       their own message queues. 
  468.  
  469.  
  470. ΓòÉΓòÉΓòÉ 2.1.2. Creation of New Instances of Objects ΓòÉΓòÉΓòÉ
  471.  
  472. An object template is the primary user mechanism for creating new instances of 
  473. objects. Specifically, a template is a state of an object where the default 
  474. Drag operation is Create another, that is, dragging and dropping the template 
  475. results in the creation of an instance of the object. The visual representation 
  476. of a template is the object's icon on top of a "yellow sticky pad" with the top 
  477. sheet slightly peeled up, as shown in the following figure: 
  478.  
  479. Any object that supports the Create another item can be changed by the user to 
  480. and from a template state by selecting the template checkbox on the General 
  481. page in the object's Settings notebook. A template is created automatically 
  482. when a class is registered, unless the class wpclsQueryStyle returns 
  483. CLSSTYLE_NEVERTEMPLATE. 
  484.  
  485. When the operating system is first installed, template objects reside in the 
  486. templates folder on the desktop. The templates folder always contains a 
  487. template object for each class of object installed on the system that supports 
  488. the Create another item. Any new object registered by WinRegisterObjectClass 
  489. that supports the Create another item automatically appears in this folder. A 
  490. template for each object class registered using this function cannot be removed 
  491. from the templates folder. 
  492.  
  493.  
  494. ΓòÉΓòÉΓòÉ 2.1.3. Printing Objects ΓòÉΓòÉΓòÉ
  495.  
  496. To support printing the contents of an object from the Desktop-by using the 
  497. object's pop-up menus or dragging the object and dropping it on the printer 
  498. object-the object's class definition must override wpPrintObject inherited from 
  499. its parent class. 
  500.  
  501. The new class is created as a subclass of an existing class. For example, if 
  502. the object is to be a data file, the WPDataFile class would be used as the 
  503. parent class. In the class definition file, the new class overrides 
  504. wpPrintObject that it inherits from its parent class. The new class' version of 
  505. wpPrintObject contains the code that prints the contents of the object. 
  506.  
  507. Note:  It is recommended that the code in the object's version of wpPrintObject 
  508.        should start on a separate thread to execute the code that actually 
  509.        prints the contents of the object. By doing this, the control can be 
  510.        returned to the Workplace Shell and the user immediately. Supporting 
  511.        code, such as dialog windows, should be done on a separate thread as 
  512.        well. 
  513.  
  514.  Your new class should allow data files that do not belong to your class to be 
  515.  printed as well. To do this, you should also override wpclsQueryInstanceType 
  516.  and wpclsQueryInstanceFilter to verify if a file is yours (that is, if its 
  517.  .TYPE extended attribute denotes your new class), or if it is not yours. If 
  518.  the file is not yours, you will want to call parent_wpPrintObject to do the 
  519.  printing. 
  520.  
  521.  
  522. ΓòÉΓòÉΓòÉ 2.1.4. About Toolbars ΓòÉΓòÉΓòÉ
  523.  
  524. The Toolbar is a convenient area for users. It provides them with a place to 
  525. get fast access to their frequently used objects and Desktop actions. In 
  526. addition to placing objects on the Toolbar, users may place objects in drawers. 
  527. A drawer is represented by the little button above an object on the Toolbar, as 
  528. shown in the following figure: 
  529.  
  530. The button of an open drawer contains a downward pointing arrow. The button of 
  531. a closed drawer contains a upward pointing arrow. As shown in the above figure, 
  532. the drawer above the OS/2 Window object is open and contains the DOS Window 
  533. object. 
  534.  
  535. While there is no restriction on the content of the drawer, its most logical 
  536. function is to hold objects that are either related or similar to the object on 
  537. the Toolbar but are less frequently used. 
  538.  
  539. There is no limit to the number of Toolbars that may exist in the system. The 
  540. system Toolbar is defined as the one with an OBJECTID of <WP_LAUNCHPAD>. When 
  541. the user double clicks the select button on a folder (or Desktop background 
  542. space) the Workplace Shell looks for the system Toolbar. For example, you can 
  543. configure a different Toolbar for a work area, so that each time that work area 
  544. is opened, its Toolbar is opened. 
  545.  
  546.  
  547. ΓòÉΓòÉΓòÉ 2.1.4.1. Toolbar Setup Strings ΓòÉΓòÉΓòÉ
  548.  
  549. The Toolbar is highly customizable. You can use the following setup strings to 
  550. customize the Toolbar: 
  551.  
  552. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  553. ΓöéKeyname       ΓöéValue                ΓöéDescription              Γöé
  554. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  555. ΓöéDRAWEROBJECTS ΓöéA drawer number      ΓöéAdds the objects to the  Γöé
  556. Γöé              Γöéfollowed by a comma  Γöéend of the numbered      Γöé
  557. Γöé              Γöédelimited set of     ΓöéToolbar drawer:          Γöé
  558. Γöé              Γöéobject IDs or path   Γöé0=Toolbar, 1=left-most   Γöé
  559. Γöé              Γöéand file names.      Γöédrawer, etc.             Γöé
  560. Γöé              ΓöéSeparate the drawer  Γöé                         Γöé
  561. Γöé              Γöénumber and the first Γöé                         Γöé
  562. Γöé              Γöéobject with a comma. Γöé                         Γöé
  563. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  564. ΓöéFPOBJECTS     ΓöéA comma-delimited setΓöéAdds the objects to the  Γöé
  565. Γöé              Γöéof object IDs or pathΓöéend of the Toolbar.      Γöé
  566. Γöé              Γöéand file names.      Γöé                         Γöé
  567. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  568. ΓöéLPACTIONSTYLE ΓöéMINI                 ΓöéDisplays the action      Γöé
  569. Γöé              Γöé                     Γöébuttons as mini-icons.   Γöé
  570. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  571. Γöé              ΓöéNORMAL               ΓöéDisplays the action      Γöé
  572. Γöé              Γöé                     Γöébuttons as normal or     Γöé
  573. Γöé              Γöé                     Γöélarge icons.             Γöé
  574. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  575. Γöé              ΓöéOFF                  ΓöéTurns off the display of Γöé
  576. Γöé              Γöé                     Γöéaction buttons.          Γöé
  577. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  578. Γöé              ΓöéTEXT                 ΓöéDisplays the actions     Γöé
  579. Γöé              Γöé                     Γöébuttons as text. This is Γöé
  580. Γöé              Γöé                     Γöéthe default.             Γöé
  581. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  582. ΓöéLPCLOSEDRAWER ΓöéYES                  ΓöéCloses the Toolbar       Γöé
  583. Γöé              Γöé                     Γöédrawers after opening an Γöé
  584. Γöé              Γöé                     Γöéobject.                  Γöé
  585. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  586. Γöé              ΓöéNO                   ΓöéLeaves the Toolbar       Γöé
  587. Γöé              Γöé                     Γöédrawers open after       Γöé
  588. Γöé              Γöé                     Γöéopening an object.       Γöé
  589. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  590. ΓöéLPDRAWERTEXT  ΓöéYES                  ΓöéDisplays titles of       Γöé
  591. Γöé              Γöé                     Γöéobjects located in       Γöé
  592. Γöé              Γöé                     Γöédrawers. This has no     Γöé
  593. Γöé              Γöé                     Γöéeffect on objects locatedΓöé
  594. Γöé              Γöé                     Γöéon the Toolbar.          Γöé
  595. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  596. Γöé              ΓöéNO                   ΓöéHides titles of objects  Γöé
  597. Γöé              Γöé                     Γöélocated in drawers. This Γöé
  598. Γöé              Γöé                     Γöéhas no effect on objects Γöé
  599. Γöé              Γöé                     Γöélocated on the Toolbar.  Γöé
  600. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  601. ΓöéLPFLOAT       ΓöéYES                  ΓöéKeeps the Toolbar        Γöé
  602. Γöé              Γöé                     Γöéfloating on top of all   Γöé
  603. Γöé              Γöé                     Γöéother windows.           Γöé
  604. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  605. Γöé              ΓöéNO                   ΓöéDoes not keep the ToolbarΓöé
  606. Γöé              Γöé                     Γöéfloating on top of all   Γöé
  607. Γöé              Γöé                     Γöéother windows.           Γöé
  608. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  609. ΓöéLPHIDECTLS    ΓöéYES                  ΓöéHides the frame controls Γöé
  610. Γöé              Γöé                     Γöé(title bar and system    Γöé
  611. Γöé              Γöé                     Γöémenu). This is the       Γöé
  612. Γöé              Γöé                     Γöédefault.                 Γöé
  613. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  614. Γöé              ΓöéNO                   ΓöéDisplays the frame       Γöé
  615. Γöé              Γöé                     Γöécontrols (title bar and  Γöé
  616. Γöé              Γöé                     Γöésystem menu).            Γöé
  617. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  618. ΓöéLPSMALLICONS  ΓöéYES                  ΓöéDisplays objects using   Γöé
  619. Γöé              Γöé                     Γöésmall icons.             Γöé
  620. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  621. Γöé              ΓöéNO                   ΓöéDisplay objects using    Γöé
  622. Γöé              Γöé                     Γöélarge icons.             Γöé
  623. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  624. ΓöéLPTEXT        ΓöéYES                  ΓöéDisplays titles of       Γöé
  625. Γöé              Γöé                     Γöéobjects located on the   Γöé
  626. Γöé              Γöé                     ΓöéToolbar. This has no     Γöé
  627. Γöé              Γöé                     Γöéeffect on objects locatedΓöé
  628. Γöé              Γöé                     Γöéin drawers.              Γöé
  629. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  630. Γöé              ΓöéNO                   ΓöéHides titles of objects  Γöé
  631. Γöé              Γöé                     Γöélocated on the Toolbar.  Γöé
  632. Γöé              Γöé                     ΓöéThis has no effect on    Γöé
  633. Γöé              Γöé                     Γöéobjects located in       Γöé
  634. Γöé              Γöé                     Γöédrawers.                 Γöé
  635. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  636. ΓöéLPVERTICAL    ΓöéYES                  ΓöéDisplays the Toolbar     Γöé
  637. Γöé              Γöé                     Γöévertically.              Γöé
  638. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  639. Γöé              ΓöéNO                   ΓöéDisplays the Toolbar     Γöé
  640. Γöé              Γöé                     Γöéhorizontally. This is theΓöé
  641. Γöé              Γöé                     Γöédefault.                 Γöé
  642. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  643.  
  644. These keynames can be used with the following Win and REXX functions: 
  645.  
  646.      WinCreateObject 
  647.      WinSetObjectData 
  648.      SysCreateObject 
  649.      SysSetObjectData. 
  650.  
  651.  The following example adds two objects to the first drawer of the Toolbar: 
  652.  
  653.   SysSetObjectData("<WP_LAUNCHPAD>",
  654.                    "DRAWEROBJECTS=1,C:\README.TXT,<WP_MINDEX>")
  655.  
  656.  The following example causes the Toolbar to float on top: 
  657.  
  658.   SysSetObjectData("<WP_LAUNCHPAD>", "LPFLOAT=YES")
  659.  
  660.  
  661. ΓòÉΓòÉΓòÉ 2.1.4.2. Toolbar Set Methods ΓòÉΓòÉΓòÉ
  662.  
  663. In addition to setup strings, methods shown in the following table provide the 
  664. same functionality: 
  665.  
  666. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  667. ΓöéMethod Name                ΓöéValue                ΓöéDescription         Γöé
  668. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  669. ΓöéwpSetActionButtonStyle     ΓöéACTION_BUTTONS_MINI  ΓöéDisplays the actionsΓöé
  670. Γöé                           Γöé                     Γöébuttons as          Γöé
  671. Γöé                           Γöé                     Γöémini-icons.         Γöé
  672. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  673. Γöé                           ΓöéACTION_BUTTONS_NORMALΓöéDisplays the action Γöé
  674. Γöé                           Γöé                     Γöébuttons as normal orΓöé
  675. Γöé                           Γöé                     Γöélarge icons.        Γöé
  676. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  677. Γöé                           ΓöéACTION_BUTTONS_OFF   ΓöéTurns off the       Γöé
  678. Γöé                           Γöé                     Γöédisplay of action   Γöé
  679. Γöé                           Γöé                     Γöébuttons.            Γöé
  680. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  681. Γöé                           ΓöéACTION_BUTTONS_TEXT  ΓöéDisplays the action Γöé
  682. Γöé                           Γöé                     Γöébuttons as text.    Γöé
  683. Γöé                           Γöé                     ΓöéThis is the default.Γöé
  684. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  685. ΓöéwpSetCloseDrawer           ΓöéTRUE                 ΓöéCloses the Toolbar  Γöé
  686. Γöé                           Γöé                     Γöédrawer after openingΓöé
  687. Γöé                           Γöé                     Γöéan object.          Γöé
  688. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  689. Γöé                           ΓöéFALSE                ΓöéLeaves the Toolbar  Γöé
  690. Γöé                           Γöé                     Γöédrawer open after   Γöé
  691. Γöé                           Γöé                     Γöéopening an object.  Γöé
  692. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  693. ΓöéwpSetDisplaySmallIcons     ΓöéTRUE                 ΓöéDisplays objects    Γöé
  694. Γöé                           Γöé                     Γöéusing small icons.  Γöé
  695. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  696. Γöé                           ΓöéFALSE                ΓöéDisplays objects    Γöé
  697. Γöé                           Γöé                     Γöéusing large icons.  Γöé
  698. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  699. ΓöéwpSetDisplayText           ΓöéTRUE                 ΓöéDisplays titles of  Γöé
  700. Γöé                           Γöé                     Γöéobjects located on  Γöé
  701. Γöé                           Γöé                     Γöéthe Toolbar. This   Γöé
  702. Γöé                           Γöé                     Γöéhas no effect on    Γöé
  703. Γöé                           Γöé                     Γöéobjects located in  Γöé
  704. Γöé                           Γöé                     Γöédrawers.            Γöé
  705. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  706. Γöé                           ΓöéFALSE                ΓöéHides titles of     Γöé
  707. Γöé                           Γöé                     Γöéobjects located on  Γöé
  708. Γöé                           Γöé                     Γöéthe Toolbar. This   Γöé
  709. Γöé                           Γöé                     Γöéhas no effect on    Γöé
  710. Γöé                           Γöé                     Γöéobjects located in  Γöé
  711. Γöé                           Γöé                     Γöédrawers.            Γöé
  712. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  713. ΓöéwpSetDisplayTextInDrawers  ΓöéTRUE                 ΓöéDisplays titles of  Γöé
  714. Γöé                           Γöé                     Γöéobjects located in  Γöé
  715. Γöé                           Γöé                     Γöédrawers. This has noΓöé
  716. Γöé                           Γöé                     Γöéeffect on objects   Γöé
  717. Γöé                           Γöé                     Γöélocated on the      Γöé
  718. Γöé                           Γöé                     ΓöéToolbar.            Γöé
  719. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  720. Γöé                           ΓöéFALSE                ΓöéHides titles of     Γöé
  721. Γöé                           Γöé                     Γöéobjects located in  Γöé
  722. Γöé                           Γöé                     Γöédrawers. This has noΓöé
  723. Γöé                           Γöé                     Γöéeffect on objects   Γöé
  724. Γöé                           Γöé                     Γöélocated on the      Γöé
  725. Γöé                           Γöé                     ΓöéToolbar.            Γöé
  726. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  727. ΓöéwpSetDisplayVertical       ΓöéTRUE                 ΓöéDisplays the ToolbarΓöé
  728. Γöé                           Γöé                     Γöévertically.         Γöé
  729. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  730. Γöé                           ΓöéFALSE                ΓöéDisplays the ToolbarΓöé
  731. Γöé                           Γöé                     Γöéhorizontally. This  Γöé
  732. Γöé                           Γöé                     Γöéis the default.     Γöé
  733. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  734. ΓöéwpSetFloatOnTop            ΓöéTRUE                 ΓöéKeeps the Toolbar   Γöé
  735. Γöé                           Γöé                     Γöéfloating on top of  Γöé
  736. Γöé                           Γöé                     Γöéall other windows.  Γöé
  737. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  738. Γöé                           ΓöéFALSE                ΓöéDoes not keep the   Γöé
  739. Γöé                           Γöé                     ΓöéToolbar floating on Γöé
  740. Γöé                           Γöé                     Γöétop of all other    Γöé
  741. Γöé                           Γöé                     Γöéwindows.            Γöé
  742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  743. ΓöéwpSetHideLaunchPadFrameCtlsΓöéTRUE                 ΓöéHides the frame     Γöé
  744. Γöé                           Γöé                     Γöécontrols (title bar Γöé
  745. Γöé                           Γöé                     Γöéand system menu).   Γöé
  746. Γöé                           Γöé                     ΓöéThis is the default.Γöé
  747. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  748. Γöé                           ΓöéFALSE                ΓöéDisplays the frame  Γöé
  749. Γöé                           Γöé                     Γöécontrols (title bar Γöé
  750. Γöé                           Γöé                     Γöéand system menu).   Γöé
  751. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  752. ΓöéwpSetObjectListFromHObjectsΓöéA drawer number.     ΓöéAdds the objects to Γöé
  753. Γöé                           Γöé                     Γöéthe numbered drawer Γöé
  754. Γöé                           Γöé                     Γöéof the Toolbar.     Γöé
  755. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  756. Γöé                           ΓöéThe number of objectsΓöé                    Γöé
  757. Γöé                           Γöéto be added.         Γöé                    Γöé
  758. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  759. Γöé                           ΓöéAn array of HOBJECTS.Γöé                    Γöé
  760. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  761. Γöé                           ΓöéA position within theΓöé0=Toolbar,          Γöé
  762. Γöé                           Γöédrawer.              Γöé1=left-most drawer, Γöé
  763. Γöé                           Γöé                     Γöéand so on. Use      Γöé
  764. Γöé                           Γöé                     ΓöéADD_OBJECT_FIRST to Γöé
  765. Γöé                           Γöé                     Γöéadd the objects at  Γöé
  766. Γöé                           Γöé                     Γöéthe beginning of theΓöé
  767. Γöé                           Γöé                     Γöédrawer. Use         Γöé
  768. Γöé                           Γöé                     ΓöéADD_OBJECT_LAST to  Γöé
  769. Γöé                           Γöé                     Γöéadd the objects at  Γöé
  770. Γöé                           Γöé                     Γöéthe end of the      Γöé
  771. Γöé                           Γöé                     Γöédrawer. Use a       Γöé
  772. Γöé                           Γöé                     Γöéposition number to  Γöé
  773. Γöé                           Γöé                     Γöéstate which objects Γöé
  774. Γöé                           Γöé                     Γöéthe new objects     Γöé
  775. Γöé                           Γöé                     Γöéshould be inserted  Γöé
  776. Γöé                           Γöé                     Γöéafter (0=first      Γöé
  777. Γöé                           Γöé                     Γöéobject).            Γöé
  778. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  779. ΓöéwpSetObjectListFromObjects ΓöéA drawer number.     ΓöéAdds the objects to Γöé
  780. Γöé                           Γöé                     Γöéthe specified       Γöé
  781. Γöé                           Γöé                     ΓöéToolbar drawer.     Γöé
  782. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  783. Γöé                           ΓöéThe number of objectsΓöé                    Γöé
  784. Γöé                           Γöéto be added.         Γöé                    Γöé
  785. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  786. Γöé                           ΓöéAn array of          Γöé                    Γöé
  787. Γöé                           ΓöéWPObject*.           Γöé                    Γöé
  788. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  789. Γöé                           ΓöéA position with the  Γöé0=Toolbar,          Γöé
  790. Γöé                           Γöédrawer.              Γöé1=left-most drawer, Γöé
  791. Γöé                           Γöé                     Γöéand so on. Use      Γöé
  792. Γöé                           Γöé                     ΓöéADD_OBJECT_FIRST to Γöé
  793. Γöé                           Γöé                     Γöéadd the objects at  Γöé
  794. Γöé                           Γöé                     Γöéthe beginning of theΓöé
  795. Γöé                           Γöé                     Γöédrawer. Use         Γöé
  796. Γöé                           Γöé                     ΓöéADD_OBJECT_LAST to  Γöé
  797. Γöé                           Γöé                     Γöéadd the objects at  Γöé
  798. Γöé                           Γöé                     Γöéthe end of the      Γöé
  799. Γöé                           Γöé                     Γöédrawer. Use a       Γöé
  800. Γöé                           Γöé                     Γöéposition number to  Γöé
  801. Γöé                           Γöé                     Γöéstate which objects Γöé
  802. Γöé                           Γöé                     Γöéthe new objects     Γöé
  803. Γöé                           Γöé                     Γöéshould be inserted  Γöé
  804. Γöé                           Γöé                     Γöéafter (0=first      Γöé
  805. Γöé                           Γöé                     Γöéobject).            Γöé
  806. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  807. ΓöéwpSetObjectListFromStrings ΓöéA drawer number.     ΓöéAdds the objects to Γöé
  808. Γöé                           Γöé                     Γöéthe specified       Γöé
  809. Γöé                           Γöé                     ΓöéToolbar drawer.     Γöé
  810. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  811. Γöé                           ΓöéA NULL delimited set Γöé                    Γöé
  812. Γöé                           Γöéof object IDs or pathΓöé                    Γöé
  813. Γöé                           Γöéand file names       Γöé                    Γöé
  814. Γöé                           Γöéterminated by a      Γöé                    Γöé
  815. Γöé                           Γöédouble NULL.         Γöé                    Γöé
  816. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  817. Γöé                           ΓöéA position with the  Γöé0=Toolbar,          Γöé
  818. Γöé                           Γöédrawer.              Γöé1=left-most drawer, Γöé
  819. Γöé                           Γöé                     Γöéand so on. Use      Γöé
  820. Γöé                           Γöé                     ΓöéADD_OBJECT_FIRST to Γöé
  821. Γöé                           Γöé                     Γöéadd the objects at  Γöé
  822. Γöé                           Γöé                     Γöéthe beginning of theΓöé
  823. Γöé                           Γöé                     Γöédrawer. Use         Γöé
  824. Γöé                           Γöé                     ΓöéADD_OBJECT_LAST to  Γöé
  825. Γöé                           Γöé                     Γöéadd the objects at  Γöé
  826. Γöé                           Γöé                     Γöéthe end of the      Γöé
  827. Γöé                           Γöé                     Γöédrawer. Use a       Γöé
  828. Γöé                           Γöé                     Γöéposition number to  Γöé
  829. Γöé                           Γöé                     Γöéstate which objects Γöé
  830. Γöé                           Γöé                     Γöéthe new objects     Γöé
  831. Γöé                           Γöé                     Γöéshould be inserted  Γöé
  832. Γöé                           Γöé                     Γöéafter (0=first      Γöé
  833. Γöé                           Γöé                     Γöéobject).            Γöé
  834. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  835.  
  836. The following example adds two objects to the first drawer in the Toolbar: 
  837.  
  838. PSZ pszObjectList = "C:\\README.TXT\0<WP_MINDEX>\0";
  839. _wpSetObjectListFromStrings(somSelf,
  840.                             1,
  841.                             pszObjectList,
  842.                             ADD_OBJECT_LAST);
  843.  
  844. The following example causes the Toolbar to float on top: 
  845.  
  846. _wpSetFloatOnTop(somSelf,TRUE);
  847.  
  848.  
  849. ΓòÉΓòÉΓòÉ 2.1.4.3. Toolbar Query Methods ΓòÉΓòÉΓòÉ
  850.  
  851. The following table provides the methods for querying information about the 
  852. state of the Toolbar: 
  853.  
  854. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  855. ΓöéMethod Name                   ΓöéDescription                   Γöé
  856. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  857. ΓöéwpQueryActionButtons          ΓöéReturns a pointer of array of Γöé
  858. Γöé                              ΓöéACTION data structures. Each  Γöé
  859. Γöé                              ΓöéACTION structure has the      Γöé
  860. Γöé                              Γöéfollowing elements:           Γöé
  861. Γöé                              Γöé                              Γöé
  862. Γöé                              Γöéo Pointer to the text to be   Γöé
  863. Γöé                              Γöé  displayed                   Γöé
  864. Γöé                              Γöéo Handle to the icon to be    Γöé
  865. Γöé                              Γöé  displayed                   Γöé
  866. Γöé                              Γöéo Menu item number that is    Γöé
  867. Γöé                              Γöé  passed to the Desktop via   Γöé
  868. Γöé                              Γöé  wpMenuItemSelected, when    Γöé
  869. Γöé                              Γöé  the action button is        Γöé
  870. Γöé                              Γöé  pressed.                    Γöé
  871. Γöé                              Γöé                              Γöé
  872. Γöé                              ΓöéThe number of ACTION          Γöé
  873. Γöé                              Γöéstructures in the array is    Γöé
  874. Γöé                              Γöéreturned using parameters.    Γöé
  875. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  876. ΓöéwpQueryActionButtonStyle      ΓöéReturns the current setting   Γöé
  877. Γöé                              Γöéfor the action button style:  Γöé
  878. Γöé                              Γöé                              Γöé
  879. Γöé                              Γöéo ACTION_BUTTONS_MINI         Γöé
  880. Γöé                              Γöéo ACTION_BUTTONS_NORMAL       Γöé
  881. Γöé                              Γöéo ACTION_BUTTONS_OFF          Γöé
  882. Γöé                              Γöéo ACTION_BUTTONS_TEXT.        Γöé
  883. Γöé                              Γöé                              Γöé
  884. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  885. ΓöéwpQueryCloseDrawer            ΓöéReturns TRUE if the drawer is Γöé
  886. Γöé                              Γöéclosed after one of its       Γöé
  887. Γöé                              Γöéobjects is opened. Otherwise, Γöé
  888. Γöé                              Γöéit returns FALSE.             Γöé
  889. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  890. ΓöéwpQueryDisplaySmallIcons      ΓöéReturns TRUE if objects' iconsΓöé
  891. Γöé                              Γöéare displayed using small or  Γöé
  892. Γöé                              Γöémini-icons. Otherwise, it     Γöé
  893. Γöé                              Γöéreturns FALSE.                Γöé
  894. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  895. ΓöéwpQueryDisplayText            ΓöéReturns TRUE if titles of     Γöé
  896. Γöé                              Γöéobjects located on the ToolbarΓöé
  897. Γöé                              Γöéare displayed. Otherwise, it  Γöé
  898. Γöé                              Γöéreturns FALSE.                Γöé
  899. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  900. ΓöéwpQueryDisplayTextInDrawers   ΓöéReturns TRUE if text is       Γöé
  901. Γöé                              Γöédisplayed for objects that areΓöé
  902. Γöé                              Γöélocated in drawers. Otherwise,Γöé
  903. Γöé                              Γöéit returns FALSE.             Γöé
  904. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  905. ΓöéwpQueryDisplayVertical        ΓöéReturns TRUE if the Toolbar isΓöé
  906. Γöé                              Γöédisplayed vertically.         Γöé
  907. Γöé                              ΓöéOtherwise,  it returns FALSE. Γöé
  908. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  909. ΓöéwpQueryFloatOnTop             ΓöéReturns TRUE if the Toolbar isΓöé
  910. Γöé                              Γöéset to float on top of all    Γöé
  911. Γöé                              Γöéother windows. Otherwise, it  Γöé
  912. Γöé                              Γöéreturns FALSE.                Γöé
  913. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  914. ΓöéwpQueryHideLaunchPadFrameCtls ΓöéReturns TRUE if the frame     Γöé
  915. Γöé                              Γöécontrols (title bar and systemΓöé
  916. Γöé                              Γöémenu) are hidden. Otherwise,  Γöé
  917. Γöé                              Γöéit returns FALSE.             Γöé
  918. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  919. ΓöéwpQueryObjectList             ΓöéReturns a pointer to an array Γöé
  920. Γöé                              Γöéof HOBJECT that represents theΓöé
  921. Γöé                              Γöélist of objects in the drawer.Γöé
  922. Γöé                              ΓöéThe number of objects is      Γöé
  923. Γöé                              Γöéreturned using parameters.    Γöé
  924. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  925.  
  926.  
  927. ΓòÉΓòÉΓòÉ 2.2. Using Workplace Shell Objects ΓòÉΓòÉΓòÉ
  928.  
  929. This section describes how to: 
  930.  
  931.      Set objects on the Toolbar 
  932.  
  933.      Create objects 
  934.  
  935.      Install objects 
  936.  
  937.         -  By running an installation program 
  938.         -  By running a batch file 
  939.         -  By using the Workplace Shell Class List Object Utility. 
  940.  
  941.  
  942. ΓòÉΓòÉΓòÉ 2.2.1. Using Toolbars ΓòÉΓòÉΓòÉ
  943.  
  944. Action buttons are added to or removed from the Toolbar by overriding 
  945. wpQueryActionButtons. You must declare an instance data variable in your 
  946. subclass of type PACTIONS. When overriding wpQueryActionButtons, verify if 
  947. pMyActions is NULL. If it is, allocate memory to hold the parent's actions and 
  948. the ones you are adding. Copy the parent's actions to your array, add yours, 
  949. and then return, as shown in the following sample code: 
  950.  
  951. SOM_Scope PACTIONS SOMLINK mylnchpd_wpQueryActionButtons(
  952.                            WPLaunchPad *somSelf,
  953.                            PULONG pulNumActions)
  954. {
  955.   MyLaunchPadData *somThis = MyLaunchPadGetData(somSelf);
  956.   PACTIONS pParentActions;
  957.   ULONG ulParentActions;
  958.  
  959.   MyLaunchPadMethodDebug("MyLaunchPad","mylnchpd_wpQueryActionButtons");
  960.  
  961.   if (!_pMyActions)
  962.   {
  963.     pParentActions = parent_wpQueryActionButtons(somSelf,
  964.                                                  &ulParentActions);
  965.     _ulMyActions   = ulParentActions + 1;
  966.     _pMyActions    = _wpAllocMem(somSelf,_ulMyActions*sizeof(ACTIONS), NULL);
  967.  
  968.     if (!_pMyActions)
  969.     {
  970.       return parent_wpQueryActionButtons(somSelf, pulNumActions);
  971.     }
  972.     _pMyActions[ulParentActions].pszTitle = "My new action";
  973.     _pMyActions[ulParentActions].ulMenuId = MY_MENUID;
  974.     _pMyActions[ulParentActions].hIcon    = myActionIcon;
  975.  
  976.     if (ulParentActions)
  977.     {
  978.       memcpy(_pMyActions, pParentActions,ulParentActions*sizeof(ACTIONS));
  979.     }
  980.   }
  981.  
  982.   if (pulNumActions)
  983.   {
  984.     (*pulNumActions) = _ulMyActions;
  985.   }
  986.   return (PACTIONS) _pMyActions;
  987. }
  988.  
  989. Note:  When overriding wpQueryActionButtons you must also provide a subclass of 
  990.        WPDesktop, override wpMenuItemSelected, and handle the MY_MENUID action. 
  991.  
  992.  
  993. ΓòÉΓòÉΓòÉ 2.2.2. Creating Objects ΓòÉΓòÉΓòÉ
  994.  
  995. In order to illustrate what is required to create a complete Workplace Shell 
  996. object that you can use constructively, a complete Workplace Shell SOM program 
  997. is included in Sample Code for Creating Objects. The example program is a 
  998. usable Workplace Shell object that provides the facility to change the normally 
  999. unchangable style flags of any Desktop object dropped on it. When you drop an 
  1000. object onto the Workplace Shell Styler, WPSTYLER will open the Settings 
  1001. notebook and display a Style settings page. On this page, you will see the 
  1002. current styles of the object and be able to change them. Using the Workplace 
  1003. Shell Styler, you can change the title in addition to the following behaviors: 
  1004. Copy, Delete, Drag, Drop, Move, Print, Rename, Shadow and Template. 
  1005.  
  1006. The class name is called WPStyler and is derived from WPAbstract, which is 
  1007. derived from the WPObject root Workplace Shell Class. The implementation of the 
  1008. WPStyler object consists primarily of overrides to instance and class methods 
  1009. inherited from the WPObject and WPAbstract classes. 
  1010.  
  1011.  
  1012. ΓòÉΓòÉΓòÉ 2.2.2.1. WPStyler Instance Methods ΓòÉΓòÉΓòÉ
  1013.  
  1014. WPStyler uses ten instance methods: 
  1015.  
  1016.      wpInitData 
  1017.      wpDragOver 
  1018.      wpDrop 
  1019.      wpOpen 
  1020.      wpAddSettingsPages 
  1021.      wpAddObjectWindowPage 
  1022.      wpAddObjectGeneralPage 
  1023.      InsertObjectStylePage 
  1024.      QueryObjectStyle 
  1025.      SetObjectStyle. 
  1026.  
  1027.  The three last ones are new instance methods introduced by WPStyler. 
  1028.  
  1029.  The following subsections provide explanations on each of them, such as why 
  1030.  the instance method is used and whether or not it is overridden. 
  1031.  
  1032.  
  1033. ΓòÉΓòÉΓòÉ 2.2.2.1.1. Initializing Data and Allocating Memory ΓòÉΓòÉΓòÉ
  1034.  
  1035.  
  1036. The wpInitData method is called when an object is created or when it is 
  1037. awakened from the dormant state so that it can initialize all of its instance 
  1038. variables to a known state. Note that this method is called before the object's 
  1039. state is known. Initialize instance data and allocate extra memory that you 
  1040. might need in this method. Any memory allocated in wpInitData should always be 
  1041. d eallocated in wpUnInitData, which is always called when an object is 
  1042. destroyed. WPStyler does not override wpUnInitData. 
  1043.  
  1044.  
  1045. ΓòÉΓòÉΓòÉ 2.2.2.1.2. Dragging Over an Object ΓòÉΓòÉΓòÉ
  1046.  
  1047.  
  1048. The wpDragOver method is invoked on an object as other objects are dragged over 
  1049. it, to determine whether or not it can be dropped on. The wpDragOver method 
  1050. provides information of every object being dragged over the Styler object. The 
  1051. WPStyler will allow all objects to be dropped on and changed. 
  1052.  
  1053.  
  1054. ΓòÉΓòÉΓòÉ 2.2.2.1.3. Dropping an Object ΓòÉΓòÉΓòÉ
  1055.  
  1056.  
  1057. Once an object is dropped onto the Workplace Shell Styler, wpDrop is called. It 
  1058. is, at this point, where WPStyler queries from the drag information the self 
  1059. pointer of the object being dropped and save it in its instance data. Once the 
  1060. self pointer of the object is acquired, a call to the parent wpOpen is made 
  1061. open the Settings notebook. 
  1062.  
  1063.  
  1064. ΓòÉΓòÉΓòÉ 2.2.2.1.4. Opening a View of an Object ΓòÉΓòÉΓòÉ
  1065.  
  1066.  
  1067. The wpOpen method is called to open a view of this object. The ulView parameter 
  1068. tells the object whether to open the Settings view, Contents view, or Help view 
  1069. (and so on), and param is an optional parameter. Note that both parameters can 
  1070. be zero, in which case the default view of the object is opened. This instance 
  1071. method is invoked when a user either double clicks on the object or selects the 
  1072. Settings item from the pop-up menu. When wpOpen is called as a result of the 
  1073. user selecting the Open item or clicking on the object, WPStyler will display a 
  1074. usage message box. OPEN_STYLER is returned as the default view to the Open 
  1075. item, because wpQueryDefaultView is subclasses and the Styler's ID is returned 
  1076. as the default view. 
  1077.  
  1078.  
  1079. ΓòÉΓòÉΓòÉ 2.2.2.1.5. Adding the Styler Page to the Settings Notebook ΓòÉΓòÉΓòÉ
  1080.  
  1081.  
  1082. The wpAddSettingsPages method allows each object class to insert its own 
  1083. settings pages into the Settings notebook for an object. WPStyler introduces 
  1084. the InsertObjectStylePage instance method. InsertObjectStylePage is called from 
  1085. the wpAddSettingsPages override to insert the new dialog page into the existing 
  1086. Workplace Shell Settings notebook. InsertObjectStylePage simply fills the 
  1087. PAGEINFO data structure to point to the Styler dialog window and procedure, and 
  1088. it then inserts that page into the notebook by calling wpInsertSettingsPage. 
  1089. InsertObjectStylePage is called only if the notebook is opened for an object 
  1090. that was dropped on the Styler. This method is not called when displaying the 
  1091. Settings notebook for WPStyler. 
  1092.  
  1093.  
  1094. ΓòÉΓòÉΓòÉ 2.2.2.1.6. Removing the Window Page from the Settings Notebook ΓòÉΓòÉΓòÉ
  1095.  
  1096.  
  1097. The wpAddObjectWindowPage method adds the standard Window page to the Settings 
  1098. notebook. WPStyler overrides this method to remove the Window page from the 
  1099. Settings notebook. All WPAbstract objects have a Window page, but as it has no 
  1100. meaning for WPStyler, it will return SETTINGS_PAGE_REMOVED so that this page is 
  1101. not inserted when the notebook is created. 
  1102.  
  1103.  
  1104. ΓòÉΓòÉΓòÉ 2.2.2.1.7. Removing the General Page from the Settings Notebook ΓòÉΓòÉΓòÉ
  1105.  
  1106.  
  1107. The wpAddObjectGeneralPage method adds the standard Icon page to the Settings 
  1108. notebook. This method is overridden so that the Icon page is removed when 
  1109. displaying the styles of an object. This way, when displaying the Settings 
  1110. notebook for the Styler, only its parent needs to be called. 
  1111.  
  1112.  
  1113. ΓòÉΓòÉΓòÉ 2.2.2.1.8. Obtaining the Current Style ΓòÉΓòÉΓòÉ
  1114.  
  1115.  
  1116. QueryObjectStyle is a new instance method introduced by WPStyler. 
  1117. QueryObjectStyle calls wpQueryStyle to query the current style of the object 
  1118. that was dropped onto the Styler, and it then sets the Styler page checkbox and 
  1119. title text to reflect the current state of the object. 
  1120.  
  1121.  
  1122. ΓòÉΓòÉΓòÉ 2.2.2.1.9. Setting the Object's Style ΓòÉΓòÉΓòÉ
  1123.  
  1124.  
  1125. SetObjectStyle is a new instance method introduced by WPStyler. SetObjectStyle 
  1126. queries the current state of the dialog checkboxes and then sets the style of 
  1127. the dropped object accordingly, using wpSetStyle to set the style of the object 
  1128. and wpSaveDeferred to save that state permanently back to the system .INI file. 
  1129. SetObjectStyle also queries and sets the title text of the object. 
  1130.  
  1131.  
  1132. ΓòÉΓòÉΓòÉ 2.2.2.2. WPStyler Class Methods ΓòÉΓòÉΓòÉ
  1133.  
  1134. WPStyler uses six class methods: 
  1135.  
  1136.      wpclsInitData 
  1137.      wpclsQueryIcon 
  1138.      wpclsQueryStyle 
  1139.      wpclsQueryDefaultHelp 
  1140.      wpQueryDefaultView 
  1141.      clsQueryModuleHandle. 
  1142.  
  1143.  The last one is a new class method introduced by WPStyler. 
  1144.  
  1145.  The following subsections provide explanations on each of them, such as why 
  1146.  the class method is used and whether or not it is overridden. 
  1147.  
  1148.  
  1149. ΓòÉΓòÉΓòÉ 2.2.2.2.1. Initializing Data and Allocating Memory ΓòÉΓòÉΓòÉ
  1150.  
  1151.  
  1152. The wpclsInitData method is called when an object class is instantiated. 
  1153. WPStyler first calls its parent, and it then locates the class file by class 
  1154. name so that it can query the module handle and save it as class data. WPStyler 
  1155. also loads and saves a pointer to its Desktop icon. If any class data is 
  1156. allocated in wpclsInitData, then you should override wpclsUnInitData to free 
  1157. that data when the class is destroyed. 
  1158.  
  1159.  
  1160. ΓòÉΓòÉΓòÉ 2.2.2.2.2. Obtaining the Default Icon ΓòÉΓòÉΓòÉ
  1161.  
  1162.  
  1163. The wpclsQueryIcon method sets the default icon to the Styler icon and resource 
  1164. linked into the application. The pointer handle queried during the creation of 
  1165. the Styler object is returned. 
  1166.  
  1167.  
  1168. ΓòÉΓòÉΓòÉ 2.2.2.2.3. Obtaining the Class Style ΓòÉΓòÉΓòÉ
  1169.  
  1170.  
  1171. The wpclsQueryStyle method is called to return the class attributes for this 
  1172. object class: 
  1173.  
  1174.  Class Style Name                   Description 
  1175.  
  1176.  CLSSTYLE_NEVERCOPY                 The object cannot be copied. 
  1177.  
  1178.  CLSSTYLE_NEVERDELETE               The object cannot be deleted. 
  1179.  
  1180.  CLSSTYLE_NEVERMOVE                 The object cannot be moved. 
  1181.  
  1182.  CLSSTYLE_NEVERTEMPLATE             This class does not have a template. Also, 
  1183.                                     the Styler object will not have a Create 
  1184.                                     another item in its context menu. 
  1185.  
  1186.  Classes should override this method to get special behavior. 
  1187.  
  1188.  
  1189. ΓòÉΓòÉΓòÉ 2.2.2.2.4. Setting the Default Help ΓòÉΓòÉΓòÉ
  1190.  
  1191.  
  1192. Override wpclsQueryDefaultHelp to set the help library name and default help 
  1193. ID. 
  1194.  
  1195.  
  1196. ΓòÉΓòÉΓòÉ 2.2.2.2.5. Setting the Default View ΓòÉΓòÉΓòÉ
  1197.  
  1198.  
  1199. WPStyler overrides wpQueryDefaultView to set the default view for the Styler 
  1200. object. By returning OPEN_STYLER as the default view, a request to Open the 
  1201. object will cause wpOpen to be called with OPEN_STYLER. 
  1202.  
  1203.  
  1204. ΓòÉΓòÉΓòÉ 2.2.2.2.6. Obtaining the Module Handle ΓòÉΓòÉΓòÉ
  1205.  
  1206.  
  1207. The clsQueryModuleHandle method returns the module handle for the WPStyler 
  1208. class. To avoid using globals, the WPStyler class' module handle is saved as 
  1209. part of its class data. This means that a new class method needs to be 
  1210. implemented, so that the new instance methods can gain access to it. 
  1211.  
  1212.  
  1213. ΓòÉΓòÉΓòÉ 2.2.2.3. WPStyler Dialog Window Procedure ΓòÉΓòÉΓòÉ
  1214.  
  1215. DialogProc is registered with the dialog window when the Styler page is 
  1216. inserted into the Settings notebook. The dialog procedure gets control when the 
  1217. Styler page is given focus. 
  1218.  
  1219. The dialog procedure catches all WM_FOCUSCHANGE messages to provide an 
  1220. information message for each control on the Styler settings page. As the user 
  1221. tabs between each control on the Styler page, an information message describing 
  1222. the control is displayed just above the push buttons. 
  1223.  
  1224. An Apply push button is provided so that a user can apply the changes instantly 
  1225. without closing the Styler page. 
  1226.  
  1227.  
  1228. ΓòÉΓòÉΓòÉ 2.2.2.4. WPStyler Functions ΓòÉΓòÉΓòÉ
  1229.  
  1230. WPStyler uses two MLE functions: 
  1231.  
  1232.      MLEImportText: This function imports text into an MLE window. 
  1233.  
  1234.      MLEExportText: This function exports text from an MLE window. 
  1235.  
  1236.  
  1237. ΓòÉΓòÉΓòÉ 2.2.3. Installing Workplace Shell Objects ΓòÉΓòÉΓòÉ
  1238.  
  1239. Workplace Shell objects can be installed on the Desktop in two ways: 
  1240.  
  1241.      By running an installation program or batch file 
  1242.  
  1243.      By using the Workplace Shell Class Object List Utility. 
  1244.  
  1245.  
  1246. ΓòÉΓòÉΓòÉ 2.2.3.1. Running an Installation Program ΓòÉΓòÉΓòÉ
  1247.  
  1248. You can provide installation programs for your objects. An installation program 
  1249. is responsible for: 
  1250.  
  1251.      Copying the DLL that contains the object's class definition from a 
  1252.       diskette to the \OS2\DLL directory or to a directory in the LIBPATH. 
  1253.  
  1254.      Registering the class and its DLL name with the Workplace Shell by 
  1255.       calling WinRegisterObjectClass. 
  1256.  
  1257.      Creating an object instance of the class and placing it on the Desktop or 
  1258.       in a particular folder by calling WinCreateObject. 
  1259.  
  1260.  An example of an installation program for a Workplace Shell object is shown in 
  1261.  the following sample code: 
  1262.  
  1263.   /* Command-line program to install Workplace Shell objects  */
  1264.  
  1265.   #define INCL_WINWORKPLACE
  1266.   #include <os2.h>
  1267.   #include <stdio.h>
  1268.   #include <string.h>
  1269.  
  1270.   #if defined(DEBUG)
  1271.      #define LOCATION_DESKTOP ((PSZ)"<WP_DESKTOP>")
  1272.   #endif
  1273.  
  1274.   /*
  1275.    *  Main Function
  1276.    *
  1277.    *    argv[1] = Class Name
  1278.    *    argv[2] = Module (DLL) Name
  1279.    *    argv[3] = Object Title
  1280.    *    argv[4] = Location
  1281.    *    argv[5] = Setup String
  1282.    */
  1283.  
  1284.   INT main (argc, argv)
  1285.      INT argc;
  1286.      CHAR *argv[];
  1287.  
  1288.   {
  1289.     HAB vhab;
  1290.     HMQ vhmq;
  1291.     BOOL fSuccess;
  1292.  
  1293.     if (argc == 1)
  1294.     {
  1295.       #if defined(DEBUG)
  1296.       {
  1297.         printf("Usage:\n\n");
  1298.         printf("   WPCREATE ClassName ModuleName Title [[Location]
  1299.                [SetupString]]\n");
  1300.       }
  1301.       #endif
  1302.       return (0);
  1303.     } /* End if (argc == 1) */
  1304.  
  1305.     if (argc < 4) return (1);   /* First three parms are mandatory */
  1306.  
  1307.     /* Register the class  */
  1308.     #if defined(DEBUG)
  1309.       printf("WinRegisterObjectClass(%s, %s)...\n", argv[1], argv[2]);
  1310.     #endif
  1311.  
  1312.     fSuccess = WinRegisterObjectClass(
  1313.                   argv[1],    /* Class name (case sensitive) */
  1314.                   argv[2]);   /* Module name                 */
  1315.  
  1316.     if (!fSuccess) return (1);   /* Return non-zero for error */
  1317.  
  1318.     #if defined(DEBUG)
  1319.       printf("Success: rc = %u\n", fSuccess);
  1320.     #endif
  1321.  
  1322.     /*  Create an instance of the object  */
  1323.     #if defined(DEBUG)
  1324.       printf("WinCreateObject(%s, %s,...)...\n", argv[1], argv[3]);
  1325.     #endif
  1326.     fSuccess = WinCreateObject(
  1327.                   argv[1],                                 /* Class name   */
  1328.                   argv[3],                                 /* Object title */
  1329.                   argc > 5 ? argv[5] : " ",                /* Setup string */
  1330.                   argc > 4 ? argv[4] : LOCATION_DESKTOP,   /* Location     */
  1331.                   CO_FAILIFEXISTS);                        /* Flags        */
  1332.  
  1333.     if (!fSuccess) return (1);   /* Return non-zero for error */
  1334.  
  1335.     #if defined(DEBUG)
  1336.       printf("Success: rc = %u\n", fSuccess);
  1337.     #endif
  1338.  
  1339.     return(0);
  1340.  
  1341.   }   /* End main() */
  1342.  
  1343.  Instantiating an object is an optional responsibility of an installation 
  1344.  program. When a class is registered by calling WinRegisterObjectClass, an 
  1345.  object template is placed in the Templates folder on the Desktop, if the class 
  1346.  supports templating. Users can create instances of these objects by tearing 
  1347.  off a copy of the template. This can be useful for larger applications that 
  1348.  define data-file objects that are associated with program objects. 
  1349.  
  1350.  
  1351. ΓòÉΓòÉΓòÉ 2.2.3.2. Running an Installation Batch File ΓòÉΓòÉΓòÉ
  1352.  
  1353. An installation batch file written in the REXX language performs the same 
  1354. operations but uses the following REXX-language utility functions: 
  1355.  
  1356.  REXX Functions                     Workplace Shell Methods 
  1357.  
  1358.  SysCreateObject                    WinCreateObject 
  1359.  
  1360.  SysRegisterObjectClass             WinRegisterObjectClass 
  1361.  
  1362.  SysDeRegisterObjectClass           WinDeregisterObjectClass 
  1363.  
  1364.  An example of an installation batch file written using the REXX-language 
  1365.  utility methods is shown in the following sample code: 
  1366.  
  1367.   /* Register a Workplace Shell class and create an instance */
  1368.  
  1369.   /* Load the REXX utility functions */
  1370.   call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  1371.   call SysLoadFuncs
  1372.  
  1373.   /* Register the class with the Workplace Shell */
  1374.   if SysRegisterObjectClass("NewObjectClass", "NEWDLL") then
  1375.     say 'Class Registration successfully completed for the NewObject'
  1376.  
  1377.   /* Create an instance of the object */
  1378.   if SysCreateObject("NewObjectClass",
  1379.                      "A New Object",
  1380.                      "<WP_Desktop>",
  1381.                      "OBJECTID=<A New Object>") then
  1382.        say 'A New Object successfully created and placed on Desktop'
  1383.  
  1384.  
  1385. ΓòÉΓòÉΓòÉ 2.2.3.3. Using the Workplace Shell Class List Object Utility ΓòÉΓòÉΓòÉ
  1386.  
  1387. The Toolkit provides a Workplace Shell Class List Object that is automatically 
  1388. installed during the installation of the Toolkit. This object is a tool that 
  1389. provides a windowed user interface for general Workplace Shell class 
  1390. registration and object creation activities. It performs all the methods that a 
  1391. typical Workplace Shell object installation program must provide, with the 
  1392. exception of copying files from an installation diskette to a hard disk. It is 
  1393. a fast and easy way to build and test objects in an application development 
  1394. environment. 
  1395.  
  1396. The Workplace Shell Class List Object Utility displays a hierarchical list of 
  1397. all classes registered with the Workplace Shell. You can add a class to this 
  1398. list or perform a number of actions on a specific class in the list. You can 
  1399. also create an instance of the class, replace and unreplace the class, and 
  1400. delete the class. 
  1401.  
  1402. The Workplace Shell Class List Object Utility uses WinEnumObjectClasses to get 
  1403. the list of all classes registered with the Workplace Shell. 
  1404. WinEnumObjectClasses returns only the name of the class and the DLL module that 
  1405. contains the class definition. It does not return information on the class 
  1406. ancestry that can be used to construct a hierarchical list of classes. Because 
  1407. the Workplace Shell Class List Object Utility is a Workplace Shell object, it 
  1408. can call the somParent function to determine parentage of each class and use 
  1409. this information to construct the list. 
  1410.  
  1411. The Workplace Shell Class List Object Utility uses the following methods: 
  1412.  
  1413.  Method Name                   Description 
  1414.  
  1415.  WinCreateObject               To create objects. 
  1416.  
  1417.  WinRegisterObjectClass        To register object classes. 
  1418.  
  1419.  WinDeregisterObjectClass      To deregister object classes. 
  1420.  
  1421.  WinReplaceObjectClass         To replace object classes. 
  1422.  
  1423.  Note:  This tool can be used to delete any Workplace Shell class other than 
  1424.         the predefined Workplace Shell classes provided with the OS/2 operating 
  1425.         system Version 2.0. You should understand Workplace Shell classes and 
  1426.         how they are defined so that they can be recovered. Because the general 
  1427.         user may not have this level of understanding, you should not 
  1428.         distribute this tool with their objects to the users. The recommended 
  1429.         way of delivering objects to them is through installation programs or 
  1430.         batch files. 
  1431.  
  1432.  
  1433. ΓòÉΓòÉΓòÉ 2.3. Sample Code for Creating Objects ΓòÉΓòÉΓòÉ
  1434.  
  1435. In order to illustrate what is required to create a complete Workplace Shell 
  1436. object that you can use constructively, a complete Workplace Shell SOM program 
  1437. is included here. 
  1438.  
  1439. The example program is a usable Workplace Shell object that provides the 
  1440. facility to change the normally unchangable style flags of any Desktop object 
  1441. dropped on it. When you drop an object onto the Workplace Shell Styler, 
  1442. WPSTYLER will open the Settings notebook and display a Style settings page, as 
  1443. shown in the following figure: 
  1444.  
  1445. On this page, you will see the current styles of the object and be able to 
  1446. change them. Using the Workplace Shell Styler, you can change the title in 
  1447. addition to the following behaviors: 
  1448.  
  1449.      Copy 
  1450.      Delete 
  1451.      Drag 
  1452.      Drop 
  1453.      Move 
  1454.      Print 
  1455.      Rename 
  1456.      Shadow 
  1457.      Template. 
  1458.  
  1459.  The Workplace Shell Styler sample demonstrates the basic steps you need to do 
  1460.  to create a Workplace Shell object: 
  1461.  
  1462.      Create a simple Workplace Shell SOM program 
  1463.      Create a custom Settings notebook page 
  1464.      Add a custom page to the Settings notebook 
  1465.      Remove unwanted pages from the Settings notebook 
  1466.      Open the Settings notebook 
  1467.      Implement a custom help for the help push button 
  1468.      Implement the Pickup and Drop operation in your object 
  1469.      Manipulate object styles and change their title text. 
  1470.  
  1471.  The class name is called WPStyler and is derived from WPAbstract, which is 
  1472.  derived from the WPObject root Workplace Shell Class. This means that WPStyler 
  1473.  inherits the methods from WPAbstract, which, in turn, inherits all of the 
  1474.  instance and class methods from WPObject. The implementation of the WPStyler 
  1475.  object consists primarily of overrides to instance and class methods inherited 
  1476.  from the WPObject and WPAbstract classes. 
  1477.  
  1478.  
  1479. ΓòÉΓòÉΓòÉ 2.3.1. Creating Objects Application Sample Code ΓòÉΓòÉΓòÉ
  1480.  
  1481. Several parts of this program are explained in Creating Objects. 
  1482.  
  1483. The WPStyler application includes the following files: 
  1484.  
  1485.  File Name                Description 
  1486.  
  1487.  WPSTYLER.IDL             Class interface definition 
  1488.  
  1489.  WPSTYLER.C               Source code 
  1490.  
  1491.  WPSTYLER.RCH             Resource header 
  1492.  
  1493.  WPSTYLER.RC              Resource code 
  1494.  
  1495.  WPSTYLER.IPF             Styler help source 
  1496.  
  1497.  WPSTYLER.MAK             Styler makefile for building the application. 
  1498.  
  1499.  
  1500. ΓòÉΓòÉΓòÉ 2.3.1.1. Class Definition File for Styler ΓòÉΓòÉΓòÉ
  1501.  
  1502. The following sample illustrates the class interface definition file (IDL): 
  1503.  
  1504. #ifndef  wpstyler_idl
  1505. #define  wpstyler_idl
  1506. #include <wpabs.idl>
  1507. #include <somcls.idl>
  1508.  
  1509. interface M_Styler;
  1510.  
  1511. interface Styler : WPAbstract
  1512. {
  1513.    ULONG InsertObjectStylePage(in HWND hwndDlg);
  1514.    //  Override: InsertObjectStylePage
  1515.    //
  1516.    //  Description:
  1517.    //    Insert the Styler page into the Settings notebook.
  1518.  
  1519.    ULONG QueryObjectStyle(in HWND hwndDlg);
  1520.    //  Override: QueryObjectStyle
  1521.    //
  1522.    //  Description:
  1523.    //    Query the object's title and current style.
  1524.    //    Set the Styler Settings page checkboxes and MLE.
  1525.  
  1526.    VOID  SetObjectStyle(in HWND hwndDlg);
  1527.    //  Override: SetObjectStyle
  1528.    //
  1529.    //  Description:
  1530.    //    Query the current checkbox state and set
  1531.    //    the object's style accordingly.
  1532.  
  1533.    #ifdef __SOMIDL__
  1534.    implementation
  1535.    {
  1536.       releaseorder: InsertObjectStylePage,QueryObjectStyle,SetObjectStyle;
  1537.  
  1538.       /*
  1539.        * Class modifiers
  1540.        */
  1541.       functionprefix = Sty_;
  1542.       majorversion   = 1;
  1543.       minorversion   = 2;
  1544.       filestem       = wpstyler;
  1545.       metaclass      = M_Styler;
  1546.       callstyle      = oidl;
  1547.       dllname        = "wpstyler.dll";
  1548.  
  1549.       /*
  1550.        * Internal instance variables
  1551.        */
  1552.       BOOL     fGeneralPage;     // Display the General page if true
  1553.       ULONG    ulStyle;          // Save the style flags
  1554.       WPObject self;             // Save the self pointer of dropped object
  1555.  
  1556.       /*
  1557.        * Passthru to the .IH file the following:
  1558.        */
  1559.       passthru C_ih =
  1560.       "#define INCL_PM"
  1561.       "#define INCL_DOS"
  1562.       "#define INCL_DEV"
  1563.       "#define INCL_WPCLASS"
  1564.       "#define INCL_WINWORKPLACE"
  1565.  
  1566.       "#include <os2.h>"
  1567.       "#include <stdlib.h>"
  1568.       "#include <string.h>"
  1569.       "#include \"wpstyler.rch\""
  1570.       "#include <somobj.h>"
  1571.       ""
  1572.       "#define OPEN_STYLER            (OPEN_USER+1)"
  1573.       ""
  1574.  
  1575.       "#define MPNULL                 (MPFROMP(NULL))"
  1576.       "#define MPZERO                 (MPFROMSHORT(0))"
  1577.       "#define MRTRUE                 (MRFROMSHORT((SHORT) TRUE))"
  1578.       "#define MRFALSE                (MRFROMSHORT((SHORT) FALSE))"
  1579.       ""
  1580.       "#define BM_UNCHECKED           0   // Parms in BM_SETCHECK message"
  1581.       "#define BM_CHECKED             1   // to set or clear the radio buttons"
  1582.       ""
  1583.  
  1584.       "#define PMWinSetDlgItemChecked(hwnd, id, bCheck)\"
  1585.       "               (WinSendDlgItemMsg((hwnd), (id), BM_SETCHECK,\"
  1586.       "               ((bCheck) ? MPFROMSHORT(1) : MPZERO), MPNULL))"
  1587.       ""
  1588.       "#define PMWinIsDlgItemChecked(hwnd, id)\"
  1589.       "               (SHORT1FROMMR(WinSendDlgItemMsg((hwnd), (id),\"
  1590.       "               BM_QUERYCHECK, MPNULL, MPNULL)) != 0)"
  1591.       ""
  1592.       "#define WinSetDialogFont(hwnd, usId, szFont)\"
  1593.       "               (WinSetPresParam(WinWindowFromID(hwnd, usId),\"
  1594.       "               PP_FONTNAMESIZE, (ULONG) strlen(szFont)+1, szFont))"
  1595.       "";
  1596.  
  1597.       /*
  1598.        * Method modifiers
  1599.        */
  1600.       wpInitData:                      override;
  1601.       //  Override: wpInitData
  1602.       //
  1603.       //  Description:
  1604.       //    Initialize the state variables.  Allocate any extra
  1605.       //    memory that WPStyler might need.
  1606.  
  1607.       wpDragOver:                      override;
  1608.       //   Method: wpDragOver
  1609.       //
  1610.       //   Description:
  1611.       //     Allow any object to be dropped on the Styler.
  1612.  
  1613.       wpDrop:                          override;
  1614.       //   Method: wpDrop
  1615.       //
  1616.       //   Description:
  1617.       //     Query the self pointer of dropped object.
  1618.       //     Call wpOpen to open the Settings notebook
  1619.       //     and display the styles.
  1620.  
  1621.       wpOpen:                          override;
  1622.       //   Method: wpOpen
  1623.       //
  1624.       //   Description:
  1625.       //     Opens the Settings notebook to display the General page
  1626.       //     for the Styler object.
  1627.  
  1628.       wpAddSettingsPages:              override;
  1629.       //   Method: wpAddSettingsPages
  1630.       //
  1631.       //   Description:
  1632.       //     Add the Styler Settings page to let the user alter
  1633.       //     the styles of any object that is dropped onto us.
  1634.  
  1635.       wpAddObjectWindowPage:           override;
  1636.       //   Method: wpAddObjectWindowPage
  1637.       //
  1638.       //   Description:
  1639.       //     Remove the Window page.
  1640.  
  1641.       wpAddObjectGeneralPage:           override;
  1642.       //   Method: wpAddObjectGeneralPage
  1643.       //
  1644.       //   Description:
  1645.       //     Remove the General page when the Styler
  1646.       //     page is displayed.
  1647.  
  1648.    };
  1649.    #endif /* __SOMIDL__ */
  1650. };
  1651.  
  1652. interface M_Styler : M_WPAbstract
  1653. {
  1654.    HMODULE clsQueryModuleHandle();
  1655.    //   Method: clsQueryModuleHandle
  1656.    //
  1657.    //   Description:
  1658.    //     Return the module handle.
  1659.  
  1660.  
  1661.    #ifdef __SOMIDL__
  1662.    implementation
  1663.    {
  1664.       releaseorder: clsQueryModuleHandle;
  1665.  
  1666.       /*
  1667.        * Class modifiers
  1668.        */
  1669.       functionprefix = StyM_;
  1670.       majorversion   = 1;
  1671.       minorversion   = 2;
  1672.       filestem       = wpstyler;
  1673.       callstyle      = oidl;
  1674.       dllname        = "wpstyler.dll";
  1675.  
  1676.       /*
  1677.        * Internal instance variables
  1678.        */
  1679.       HMODULE  hmod;    /* Resource module handle */
  1680.       HPOINTER hicon;   /* Icon handle            */
  1681.  
  1682.       /*
  1683.        * Method modifiers
  1684.        */
  1685.  
  1686.       wpclsInitData:                   override;
  1687.       //   Method: wpclsInitData
  1688.       //
  1689.       //   Description:
  1690.       //     Initalize the class data, query and save the module handle.
  1691.       //     Load the icon handle.
  1692.  
  1693.       wpclsQueryIcon:                  override;
  1694.       //   Method: wpclsQueryIcon
  1695.       //
  1696.       //   Description:
  1697.       //     Set the Stylers icon handle.
  1698.  
  1699.       wpclsQueryStyle:                 override;
  1700.       //   Method: wpclsQueryStyle
  1701.       //
  1702.       //   Description:
  1703.       //     wpclsQueryStyle is called to allow the class object to
  1704.       //     specify the default object class style for its instances.
  1705.       //
  1706.       //   Remarks:
  1707.       //     This method can be called at any time in order to determine the
  1708.       //     default style for instances of this class.
  1709.       //     This method should be overridden in order to modify the default
  1710.       //     object style for instances of this class.
  1711.  
  1712.       wpclsQueryDefaultHelp:           override;
  1713.       //   Method: wpclsQueryDefaultHelp
  1714.       //
  1715.       //   Description:
  1716.       //     Set the help library name and default help ID.
  1717.  
  1718.       wpclsQueryDefaultView:           override;
  1719.       //   Method: wpclsQueryDefaultView
  1720.       //
  1721.       //   Description:
  1722.       //     Return the default view for a new instance of this object.
  1723.       //     Tell the system what the Styler's default view is.
  1724.    };
  1725.    #endif /* __SOMIDL__ */
  1726. };
  1727. #endif  /* wpstyler_idl */
  1728.  
  1729.  
  1730. ΓòÉΓòÉΓòÉ 2.3.1.2. Source Code for Styler ΓòÉΓòÉΓòÉ
  1731.  
  1732. The following sample illustrates the source code (C): 
  1733.  
  1734. /*
  1735.  * File.....: WPSTYLER.C
  1736.  *
  1737.  * Purpose..: Workplace Shell Object Styler.
  1738.  *
  1739.  * Instance Methods...:
  1740.  *            Sty_InsertObjectStylePage()
  1741.  *            Sty_QueryObjectStyle()
  1742.  *            Sty_SetObjectStyle()
  1743.  *            Sty_wpInitData()
  1744.  *            Sty_wpDragOver()
  1745.  *            Sty_wpDrop()
  1746.  *            Sty_wpOpen()
  1747.  *            Sty_wpAddSettingsPages()
  1748.  *            Sty_wpAddObjectWindowPage()
  1749.  *            Sty_wpAddObjectGeneralPage()
  1750.  *
  1751.  * Class Methods...:
  1752.  *            StyM_clsQueryModuleHandle()
  1753.  *            StyM_wpclsInitData()
  1754.  *            StyM_wpclsQueryIcon()
  1755.  *            StyM_wpclsQueryStyle()
  1756.  *            StyM_wpclsQueryDefaultHelp()
  1757.  *            StyM_wpclsQueryDefaultView()
  1758.  *
  1759.  * Dialog Procedures and Functions...:
  1760.  *            DialogProc()
  1761.  *            MLEImportText()
  1762.  *            MLEExportText()
  1763.  */
  1764.  
  1765. #pragma comment(compiler)
  1766. #pragma info(nogen)
  1767.  
  1768. #define Styler_Class_Source
  1769. #define M_Styler_Class_Source
  1770. #include "wpstyler.ih"
  1771.  
  1772. /*
  1773.  * Prototype local functions used
  1774.  */
  1775. MRESULT EXPENTRY DialogProc(HWND, ULONG, MPARAM, MPARAM);
  1776. ULONG   EXPENTRY MLEImportText(HWND, CHAR *, ULONG);
  1777. APIRET  EXPENTRY MLEExportText(HWND, PSZ *);
  1778.  
  1779. CHAR szHelpLibrary[] = "wpstyler.hlp";
  1780.  
  1781. /*
  1782.  *  Override: InsertObjectStylePage
  1783.  *
  1784.  *  Description:
  1785.  *    Insert the Style page into the Settings notebook
  1786.  */
  1787.  
  1788. SOM_Scope ULONG SOMLINK Sty_InsertObjectStylePage(Styler *somSelf,
  1789.                                                   HWND hwndDlg)
  1790. {
  1791.    PAGEINFO  pi;
  1792.  
  1793.    /* StylerData *somThis = StylerGetData(somSelf); */
  1794.    StylerMethodDebug("Styler", "Sty_InsertObjectStylePage");
  1795.  
  1796.    memset((PCH) &pi, 0, sizeof(PAGEINFO));
  1797.    pi.cb                  = sizeof(PAGEINFO);
  1798.    pi.hwndPage            = NULLHANDLE;
  1799.    pi.usPageStyleFlags    = BKA_MAJOR;
  1800.    pi.usPageInsertFlags   = BKA_FIRST;
  1801.    pi.pfnwp               = DialogProc;
  1802.    pi.resid               = _clsQueryModuleHandle(_Styler);
  1803.    pi.dlgid               = DLG_STYLE;
  1804.    pi.pszName             = "~Style";
  1805.    pi.pCreateParams       = somSelf;
  1806.    pi.pszHelpLibraryName  = szHelpLibrary;
  1807.  
  1808.    return _wpInsertSettingsPage(somSelf, hwndDlg, &pi);
  1809. }
  1810.  
  1811. /*
  1812.  *  Override: QueryObjectStyle
  1813.  *
  1814.  *  Description:
  1815.  *    Query the object's title and current style.
  1816.  *    Set the Styler Settings page checkboxes and MLE.
  1817.  */
  1818.  
  1819. SOM_Scope ULONG SOMLINK Sty_QueryObjectStyle(Styler *somSelf,
  1820.                                              HWND hwndDlg)
  1821. {
  1822.    StylerData *somThis = StylerGetData(somSelf);
  1823.    StylerMethodDebug("Styler", "Sty_QueryObjectStyle");
  1824.  
  1825.    /*
  1826.     * Query and set the object's name in the notebook page
  1827.     */
  1828.    MLEImportText(WinWindowFromID(hwndDlg, DLG_OBJECTNAME),
  1829.                  _wpQueryTitle(_self), 0);
  1830.  
  1831.    /*
  1832.     * Query the object's current state
  1833.     */
  1834.    _ulStyle = _wpQueryStyle(_self);
  1835.  
  1836.    PMWinSetDlgItemChecked(hwndDlg, DLG_COPY,
  1837.       _ulStyle & OBJSTYLE_NOCOPY ? BM_UNCHECKED : BM_CHECKED);
  1838.  
  1839.    PMWinSetDlgItemChecked(hwndDlg, DLG_SHADOW,
  1840.       _ulStyle & OBJSTYLE_NOLINK ? BM_UNCHECKED : BM_CHECKED);
  1841.  
  1842.    PMWinSetDlgItemChecked(hwndDlg, DLG_DELETE,
  1843.       _ulStyle & OBJSTYLE_NODELETE ? BM_UNCHECKED : BM_CHECKED);
  1844.  
  1845.    PMWinSetDlgItemChecked(hwndDlg, DLG_DRAG,
  1846.       _ulStyle & OBJSTYLE_NODRAG ? BM_UNCHECKED : BM_CHECKED);
  1847.  
  1848.    PMWinSetDlgItemChecked(hwndDlg, DLG_DROP,
  1849.       _ulStyle & OBJSTYLE_NODROP ? BM_UNCHECKED : BM_CHECKED);
  1850.  
  1851.    PMWinSetDlgItemChecked(hwndDlg, DLG_SETTINGS,
  1852.       _ulStyle & OBJSTYLE_NOSETTINGS ? BM_UNCHECKED : BM_CHECKED);
  1853.  
  1854.    PMWinSetDlgItemChecked(hwndDlg, DLG_MOVE,
  1855.       _ulStyle & OBJSTYLE_NOMOVE ? BM_UNCHECKED : BM_CHECKED);
  1856.  
  1857.    PMWinSetDlgItemChecked(hwndDlg, DLG_PRINT,
  1858.       _ulStyle & OBJSTYLE_NOPRINT ? BM_UNCHECKED : BM_CHECKED);
  1859.  
  1860.    PMWinSetDlgItemChecked(hwndDlg, DLG_RENAME,
  1861.       _ulStyle & OBJSTYLE_NORENAME ? BM_UNCHECKED : BM_CHECKED);
  1862.  
  1863.    PMWinSetDlgItemChecked(hwndDlg, DLG_TEMPLATE,
  1864.       _ulStyle & OBJSTYLE_TEMPLATE ? BM_CHECKED : BM_UNCHECKED);
  1865.  
  1866.    return _ulStyle;
  1867. }
  1868.  
  1869. /*
  1870.  *  Override: SetObjectStyle
  1871.  *
  1872.  *  Description:
  1873.  *    Query the current checkbox state and set the style of the
  1874.  *    object accordingly.
  1875.  */
  1876.  
  1877. SOM_Scope void SOMLINK Sty_SetObjectStyle(Styler *somSelf,
  1878.                                           HWND hwndDlg)
  1879. {
  1880.    PSZ pszName;
  1881.    StylerData *somThis = StylerGetData(somSelf);
  1882.    StylerMethodDebug("Styler", "Sty_SetObjectStyle");
  1883.  
  1884.    /*
  1885.     * NOCOPY: This object cannot be copied
  1886.     */
  1887.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_COPY))
  1888.      _ulStyle &= ~OBJSTYLE_NOCOPY;
  1889.    else
  1890.      _ulStyle |= OBJSTYLE_NOCOPY;
  1891.  
  1892.    /*
  1893.     * NOSHADOW: This object cannot have a shadow created
  1894.     */
  1895.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_SHADOW))
  1896.      _ulStyle &= ~OBJSTYLE_NOLINK;
  1897.    else
  1898.      _ulStyle |= OBJSTYLE_NOLINK;
  1899.  
  1900.    /*
  1901.     * NODELETE: This object cannot be deleted
  1902.     */
  1903.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_DELETE))
  1904.      _ulStyle &= ~OBJSTYLE_NODELETE;
  1905.    else
  1906.      _ulStyle |= OBJSTYLE_NODELETE;
  1907.  
  1908.    /*
  1909.     * NODRAG: This object cannot be dragged
  1910.     */
  1911.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_DRAG))
  1912.      _ulStyle &= ~OBJSTYLE_NODRAG;
  1913.    else
  1914.      _ulStyle |= OBJSTYLE_NODRAG;
  1915.  
  1916.    /*
  1917.     * NODROP: No other object can be dropped on this object.
  1918.     *         However, object can be dragged and dropped on other objects.
  1919.     */
  1920.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_DROP))
  1921.      _ulStyle &= ~OBJSTYLE_NODROP;
  1922.    else
  1923.      _ulStyle |= OBJSTYLE_NODROP;
  1924.  
  1925.    /*
  1926.     * NODRAG: This object cannot be moved
  1927.     */
  1928.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_MOVE))
  1929.      _ulStyle &= ~OBJSTYLE_NOMOVE;
  1930.    else
  1931.      _ulStyle |= OBJSTYLE_NOMOVE;
  1932.  
  1933.    /*
  1934.     * NOPRINT: This object cannot be printed
  1935.     */
  1936.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_PRINT))
  1937.      _ulStyle &= ~OBJSTYLE_NOPRINT;
  1938.    else
  1939.      _ulStyle |= OBJSTYLE_NOPRINT;
  1940.  
  1941.    /*
  1942.     * NORENAME: This object cannot be renamed
  1943.     */
  1944.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_RENAME))
  1945.      _ulStyle &= ~OBJSTYLE_NORENAME;
  1946.    else
  1947.      _ulStyle |= OBJSTYLE_NORENAME;
  1948.  
  1949.    /*
  1950.     * NOTEMPLATE: This object is a template
  1951.     */
  1952.    if (PMWinIsDlgItemChecked(hwndDlg, DLG_TEMPLATE))
  1953.      _ulStyle |= OBJSTYLE_TEMPLATE;
  1954.    else
  1955.      _ulStyle &= ~OBJSTYLE_TEMPLATE;
  1956.  
  1957.    /*
  1958.     * Extract and set the title text
  1959.     */
  1960.    MLEExportText(WinWindowFromID(hwndDlg, DLG_OBJECTNAME),
  1961.                  &pszName);
  1962.    _wpSetTitle(_self, pszName);
  1963.    free(pszName);
  1964.  
  1965.    /*
  1966.     * Set the object's new style and save the state to the .INI file
  1967.     */
  1968.    _wpSetStyle(_self, _ulStyle);
  1969.    _wpSaveDeferred(_self);
  1970. }
  1971.  
  1972. /*
  1973.  *  Override: wpInitData
  1974.  *
  1975.  *  Description:
  1976.  *    Initialize the state variables.  Allocate any extra
  1977.  *    memory that WPStyler might need.
  1978.  */
  1979.  
  1980. SOM_Scope void SOMLINK Sty_wpInitData(Styler *somSelf)
  1981. {
  1982.    StylerData *somThis = StylerGetData(somSelf);
  1983.    StylerMethodDebug("Styler", "Sty_wpInitData");
  1984.  
  1985.    _self = (WPObject *) 0;
  1986.    parent_wpInitData(somSelf);
  1987. }
  1988.  
  1989. /*
  1990.  *   Method: wpDragOver
  1991.  *
  1992.  *   Description:
  1993.  *     Allow any object to be dropped on the Styler
  1994.  */
  1995.  
  1996. SOM_Scope MRESULT SOMLINK Sty_wpDragOver(Styler *somSelf,
  1997.                                          HWND hwndCnr,
  1998.                                          PDRAGINFO pdrgInfo)
  1999.  
  2000. {
  2001.    BOOL            fSuccess;
  2002.    PDRAGITEM       pditem;    // Drag item pointer
  2003.  
  2004.    /* StylerData *somThis = StylerGetData(somSelf); */
  2005.    StylerMethodDebug("Styler", "Sty_wpDragOver");
  2006.  
  2007.    pditem = DrgQueryDragitemPtr(pdrgInfo, 0);
  2008.    if (pditem == NULL)
  2009.      DosBeep(500, 100);
  2010.  
  2011.    fSuccess = DrgVerifyRMF(pditem, "DRM_OBJECT", NULL);
  2012.    if (fSuccess)
  2013.      return MRFROM2SHORT(DOR_DROP, DO_COPY);
  2014.    else
  2015.      return MRFROM2SHORT(DOR_NEVERDROP, DO_COPY);
  2016. }
  2017.  
  2018. /*
  2019.  *   Method: wpDrop
  2020.  *
  2021.  *   Description:
  2022.  *     Query the self pointer of the dropped object.
  2023.  *     Call wpOpen to open the Settings notebook and display the styles.
  2024.  */
  2025.  
  2026. SOM_Scope MRESULT SOMLINK Sty_wpDrop(Styler *somSelf,
  2027.                                      HWND hwndCnr,
  2028.                                      PDRAGINFO pdrgInfo,
  2029.                                      PDRAGITEM pdrgItem)
  2030. {
  2031.    StylerData *somThis = StylerGetData(somSelf);
  2032.    StylerMethodDebug("Styler", "Sty_wpDrop");
  2033.  
  2034.    /*
  2035.     * Query for the dropped object's self pointer.
  2036.     */
  2037.    _self = OBJECT_FROM_PREC(pdrgItem->ulItemID);
  2038.  
  2039.    /*
  2040.     * Call the parents wpOpen to display the Settings notebook
  2041.     */
  2042.    _fGeneralPage = FALSE;
  2043.    parent_wpOpen(somSelf, NULLHANDLE, OPEN_SETTINGS, 0L);
  2044.  
  2045.    return parent_wpDrop(somSelf, hwndCnr, pdrgInfo, pdrgItem);
  2046. }
  2047.  
  2048. /*
  2049.  *   Method: wpOpen
  2050.  *
  2051.  *   Description:
  2052.  *     Opens the Settings notebook to display the General
  2053.  *     page for the Styler object.
  2054.  */
  2055.  
  2056. SOM_Scope HWND SOMLINK Sty_wpOpen(Styler *somSelf,
  2057.                                   HWND hwndCnr,
  2058.                                   ULONG ulView,
  2059.                                   ULONG param)
  2060. {
  2061.    StylerData *somThis = StylerGetData(somSelf);
  2062.    StylerMethodDebug("Styler", "Sty_wpOpen");
  2063.  
  2064.    switch(ulView)
  2065.    {
  2066.       case OPEN_SETTINGS:
  2067.          _fGeneralPage = TRUE;
  2068.          break;
  2069.  
  2070.       case OPEN_STYLER:
  2071.       {
  2072.          /*
  2073.           * If the user double clicks on the Styler object, present a
  2074.           * message box instead of openning the Settings page.
  2075.           */
  2076.          WinMessageBox(HWND_DESKTOP,
  2077.                        HWND_DESKTOP,
  2078.                        "Drop an object on the Workplace Shell Object "
  2079.                        "Styler to change the style state of that object.",
  2080.                        "Workplace Shell Object Styler",
  2081.                        0,
  2082.                        MB_OK |
  2083.                        MB_APPLMODAL |
  2084.                        MB_MOVEABLE);
  2085.          break;
  2086.       }
  2087.       default:
  2088.          break;
  2089.    }
  2090.    return parent_wpOpen(somSelf, hwndCnr, ulView, param);
  2091. }
  2092.  
  2093. /*
  2094.  *   Method: wpAddSettingsPages
  2095.  *
  2096.  *   Description:
  2097.  *     Add the Styler Settings page to let the user alter the styles
  2098.  *     of any object that is dropped onto us.
  2099.  */
  2100.  
  2101. SOM_Scope BOOL SOMLINK Sty_wpAddSettingsPages(Styler *somSelf,
  2102.                                               HWND hwndNotebook)
  2103. {
  2104.    StylerData *somThis = StylerGetData(somSelf);
  2105.    StylerMethodDebug("Styler", "Sty_wpAddSettingsPages");
  2106.  
  2107.    parent_wpAddSettingsPages(somSelf, hwndNotebook);
  2108.  
  2109.    /*
  2110.     * Insert the user page into the Settings notebook
  2111.     */
  2112.    if (!_fGeneralPage)
  2113.      _InsertObjectStylePage(somSelf, hwndNotebook);
  2114.    return TRUE;
  2115. }
  2116.  
  2117. /*
  2118.  *   Method: wpAddObjectWindowPage
  2119.  *
  2120.  *   Description:
  2121.  *     Remove the Window page
  2122.  */
  2123.  
  2124. SOM_Scope ULONG SOMLINK Sty_wpAddObjectWindowPage(Styler *somSelf,
  2125.                                                   HWND hwndNotebook)
  2126. {
  2127.    /* StylerData *somThis = StylerGetData(somSelf); */
  2128.    StylerMethodDebug("Styler", "Sty_wpAddObjectWindowPage");
  2129.  
  2130.    return SETTINGS_PAGE_REMOVED;
  2131. }
  2132.  
  2133. /*
  2134.  *   Method: wpAddObjectGeneralPage
  2135.  *
  2136.  *   Description:
  2137.  *     Remove the General page when displaying the Styler page
  2138.  */
  2139.  
  2140. SOM_Scope ULONG SOMLINK Sty_wpAddObjectGeneralPage(Styler *somSelf,
  2141.                                                    HWND hwndNotebook)
  2142. {
  2143.    StylerData *somThis = StylerGetData(somSelf);
  2144.    StylerMethodDebug("Styler","Sty_wpAddObjectGeneralPage");
  2145.  
  2146.    return _fGeneralPage ?
  2147.           parent_wpAddObjectGeneralPage(somSelf, hwndNotebook) :
  2148.           SETTINGS_PAGE_REMOVED;
  2149. }
  2150.  
  2151. /*
  2152.  *   Method: wpclsQueryDefaultHelp
  2153.  *
  2154.  *   Description:
  2155.  *     Set the help library name and default help ID
  2156.  */
  2157.  
  2158. SOM_Scope BOOL SOMLINK StyM_wpclsQueryDefaultHelp(M_Styler *somSelf,
  2159.                                                   PULONG pHelpPanelId,
  2160.                                                   PSZ pszHelpLibrary)
  2161. {
  2162.     /* M_StylerData *somThis = M_StylerGetData(somSelf); */
  2163.     M_StylerMethodDebug("M_Styler","StyM_wpclsQueryDefaultHelp");
  2164.  
  2165.     if (pHelpPanelId)
  2166.       *pHelpPanelId = ID_HELP_STYLER;
  2167.  
  2168.     if (pszHelpLibrary)
  2169.       strcpy(pszHelpLibrary, szHelpLibrary);
  2170.  
  2171.     return TRUE;
  2172. }
  2173.  
  2174. /*
  2175.  *   Method: clsQueryModuleHandle
  2176.  *
  2177.  *   Description:
  2178.  *     Return the module handle
  2179.  */
  2180.  
  2181. SOM_Scope HMODULE SOMLINK StyM_clsQueryModuleHandle(M_Styler *somSelf)
  2182. {
  2183.    M_StylerData *somThis = M_StylerGetData(somSelf);
  2184.    M_StylerMethodDebug("M_Styler", "StyM_clsQueryModuleHandle");
  2185.  
  2186.    return (HMODULE) _hmod;
  2187. }
  2188.  
  2189. /*
  2190.  *   Method: wpclsInitData
  2191.  *
  2192.  *   Description:
  2193.  *     Initalize the class data, query and save the module handle.
  2194.  *     Load the icon handle.
  2195.  */
  2196.  
  2197. SOM_Scope void SOMLINK StyM_wpclsInitData(M_Styler *somSelf)
  2198. {
  2199.    PSZ     psz;
  2200.    somId   stylerId;
  2201.  
  2202.    M_StylerData *somThis = M_StylerGetData(somSelf);
  2203.    M_StylerMethodDebug("M_Styler", "StyM_wpclsInitData");
  2204.  
  2205.    parent_wpclsInitData(somSelf);
  2206.  
  2207.    stylerId = somIdFromString("Styler");
  2208.    psz = _somLocateClassFile(SOMClassMgrObject,
  2209.                              stylerId,
  2210.                              Styler_MajorVersion,
  2211.                              Styler_MinorVersion);
  2212.    SOMFree(stylerId);
  2213.  
  2214.    if (psz != NULL)
  2215.      DosQueryModuleHandle(psz, &_hmod);
  2216.  
  2217.    /*
  2218.     * Load the icon and store it in the class data
  2219.     */
  2220.    _hicon = WinLoadPointer(HWND_DESKTOP, _hmod, ID_OBJECTICON);
  2221. }
  2222.  
  2223. /*
  2224.  *   Method: wpclsQueryIcon
  2225.  *
  2226.  *   Description:
  2227.  *     Set the Styler's icon handle
  2228.  */
  2229.  
  2230. SOM_Scope HPOINTER SOMLINK StyM_wpclsQueryIcon(M_Styler *somSelf)
  2231. {
  2232.    M_StylerData *somThis = M_StylerGetData(somSelf);
  2233.    M_StylerMethodDebug("M_Styler", "StyM_wpclsQueryIcon");
  2234.  
  2235.    return _hicon;
  2236. }
  2237.  
  2238. /*
  2239.  *   Method: wpclsQueryStyle
  2240.  *
  2241.  *   Description:
  2242.  *     wpclsQueryStyle is called to allow the class object to
  2243.  *     specify the default object class style for its instances.
  2244.  *
  2245.  *   Remarks:
  2246.  *     This method can be called at any time in order to determine the
  2247.  *     default style for instances of this class.
  2248.  *     This method should be overridden in order to modify the default
  2249.  *     object style for instances of this class.
  2250.  */
  2251.  
  2252. SOM_Scope ULONG SOMLINK StyM_wpclsQueryStyle(M_Styler *somSelf)
  2253. {
  2254.    /* M_StylerData *somThis = M_StylerGetData(somSelf); */
  2255.    M_StylerMethodDebug("M_Styler","StyM_wpclsQueryStyle");
  2256.  
  2257.    return parent_wpclsQueryStyle(somSelf) | CLSSTYLE_NEVERTEMPLATE;
  2258. }
  2259.  
  2260. /*
  2261.  *   Method: wpclsQueryDefaultView
  2262.  *
  2263.  *   Description:
  2264.  *     Return the default view for a new instance of this object.
  2265.  *     Tell the system what the Styler's default view is.
  2266.  */
  2267.  
  2268. SOM_Scope ULONG SOMLINK StyM_wpclsQueryDefaultView(M_Styler *somSelf)
  2269. {
  2270.    /* M_StylerData *somThis = M_StylerGetData(somSelf); */
  2271.    M_StylerMethodDebug("M_Styler", "StyM_wpclsQueryDefaultView");
  2272.  
  2273.    return OPEN_STYLER;
  2274. }
  2275.  
  2276. typedef struct _WINDATA
  2277. {
  2278.    SOMAny     *somSelf;
  2279.    StylerData *somThis;
  2280.    BOOL       fClose;
  2281. } WINDATA, *PWINDATA;
  2282.  
  2283. /*
  2284.  *   Dialog window Procedure
  2285.  */
  2286.  
  2287. MRESULT EXPENTRY DialogProc(HWND hwndDlg,
  2288.                             ULONG msg,
  2289.                             MPARAM mp1,
  2290.                             MPARAM mp2)
  2291. {
  2292.    MRESULT  mresultWpRtnCd = MRFALSE;
  2293.    PWINDATA pwin = (PWINDATA) WinQueryWindowPtr(hwndDlg, QWL_USER);
  2294.  
  2295.    switch(msg)
  2296.    {
  2297.       case WM_INITDLG:
  2298.       {
  2299.          pwin = (PWINDATA) _wpAllocMem((SOMAny *) mp2,
  2300.                                        sizeof(WINDATA), NULL);
  2301.          WinSetWindowPtr(hwndDlg, QWL_USER, pwin);
  2302.  
  2303.          /*
  2304.           * Initialize the WINDATA data structure
  2305.           */
  2306.          pwin->somSelf     = (SOMAny *) mp2;
  2307.          pwin->somThis     = StylerGetData(pwin->somSelf);
  2308.          pwin->fClose      = FALSE;
  2309.  
  2310.          /*
  2311.           * Query the style of the object and set the checkboxes
  2312.           */
  2313.          _QueryObjectStyle(pwin->somSelf, hwndDlg);
  2314.  
  2315.          /*
  2316.           * Set the status line font size
  2317.           */
  2318.          WinSetDialogFont(hwndDlg, DLG_STATUS, "8.Helv");
  2319.  
  2320.          /*
  2321.           * Return TRUE to tell PM that focus has changed
  2322.           */
  2323.          mresultWpRtnCd = (MRESULT) TRUE;
  2324.          break;
  2325.       }  /* End of case WM_INITDLG */
  2326.  
  2327.       case WM_FOCUSCHANGE:
  2328.       {
  2329.          HWND   hwndFocus  = HWNDFROMMP(mp1);
  2330.  
  2331.          mresultWpRtnCd = WinDefDlgProc(hwndDlg, msg, mp1, mp2);
  2332.  
  2333.          /*
  2334.           * When mp2 is FALSE, then hwndFocus is the
  2335.           * control window that is receiving focus
  2336.           */
  2337.          if (SHORT1FROMMP(mp2))
  2338.            break;
  2339.  
  2340.          /* Title text MLE */
  2341.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_OBJECTNAME))
  2342.          {
  2343.             WinSetDlgItemText(hwndDlg,
  2344.                               DLG_STATUS,
  2345.                               "Change the title of the object");
  2346.             break;
  2347.          }
  2348.          else
  2349.          /* Apply push button */
  2350.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_APPLY))
  2351.          {
  2352.             WinSetDlgItemText(hwndDlg,
  2353.                               DLG_STATUS,
  2354.                               "Save all changes to the system .INI file");
  2355.             break;
  2356.          }
  2357.          else
  2358.          /* Undo push button */
  2359.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_UNDO))
  2360.          {
  2361.             WinSetDlgItemText(hwndDlg,
  2362.                               DLG_STATUS,
  2363.                               "Undo all changes made since last apply");
  2364.             break;
  2365.          }
  2366.          else
  2367.          /* Cancel push button */
  2368.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_CANCEL))
  2369.          {
  2370.             WinSetDlgItemText(hwndDlg,
  2371.                               DLG_STATUS,
  2372.                               "Cancel processing the current object");
  2373.             break;
  2374.          }
  2375.          else
  2376.          /* Help push button */
  2377.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_HELP))
  2378.          {
  2379.             WinSetDlgItemText(hwndDlg,
  2380.                               DLG_STATUS,
  2381.                               "Display the user help for Styler");
  2382.             break;
  2383.          }
  2384.          else
  2385.          /* Copy checkbox */
  2386.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_COPY))
  2387.          {
  2388.             WinSetDlgItemText(hwndDlg,
  2389.                               DLG_STATUS,
  2390.                               "Allow the object to be copied");
  2391.             break;
  2392.          }
  2393.          else
  2394.          /* Delete checkbox */
  2395.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_DELETE))
  2396.          {
  2397.             WinSetDlgItemText(hwndDlg,
  2398.                               DLG_STATUS,
  2399.                               "Make object deletable");
  2400.             break;
  2401.          }
  2402.          else
  2403.          /* Drag checkbox */
  2404.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_DRAG))
  2405.          {
  2406.             WinSetDlgItemText(hwndDlg,
  2407.                               DLG_STATUS,
  2408.                               "Allow the object to be dragged");
  2409.             break;
  2410.          }
  2411.          else
  2412.          /* Drop checkbox */
  2413.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_DROP))
  2414.          {
  2415.             WinSetDlgItemText(hwndDlg,
  2416.                               DLG_STATUS,
  2417.                               "Allow objects to be drop on object");
  2418.             break;
  2419.          }
  2420.          else
  2421.          /* Settings checkbox */
  2422.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_SETTINGS))
  2423.          {
  2424.             WinSetDlgItemText(hwndDlg,
  2425.                               DLG_STATUS,
  2426.                               "Settings checkbox");
  2427.             break;
  2428.          }
  2429.          else
  2430.          /* Move checkbox */
  2431.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_MOVE))
  2432.          {
  2433.             WinSetDlgItemText(hwndDlg,
  2434.                               DLG_STATUS,
  2435.                               "Allow this object to be moved");
  2436.             break;
  2437.          }
  2438.          else
  2439.          /* Print checkbox */
  2440.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_PRINT))
  2441.          {
  2442.             WinSetDlgItemText(hwndDlg,
  2443.                               DLG_STATUS,
  2444.                               "Make object printable");
  2445.             break;
  2446.          }
  2447.          else
  2448.          /* Template checkbox */
  2449.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_TEMPLATE))
  2450.          {
  2451.             WinSetDlgItemText(hwndDlg,
  2452.                               DLG_STATUS,
  2453.                               "Make a template from the object");
  2454.             break;
  2455.          }
  2456.          else
  2457.          /* Rename checkbox */
  2458.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_RENAME))
  2459.          {
  2460.             WinSetDlgItemText(hwndDlg,
  2461.                               DLG_STATUS,
  2462.                               "Allow the object to be renamed");
  2463.             break;
  2464.          }
  2465.          else
  2466.          /* Shadow checkbox */
  2467.          if (hwndFocus == WinWindowFromID(hwndDlg, DLG_SHADOW))
  2468.          {
  2469.             WinSetDlgItemText(hwndDlg,
  2470.                               DLG_STATUS,
  2471.                               "Allow the object to be shadowed");
  2472.             break;
  2473.          }
  2474.          else
  2475.          {
  2476.             WinSetDlgItemText(hwndDlg, DLG_STATUS, "");
  2477.          }
  2478.  
  2479.          break;
  2480.       }  /* End of case WM_FOCUSCHANGE */
  2481.  
  2482.       case WM_COMMAND:
  2483.       {
  2484.          switch(SHORT1FROMMP(mp1))
  2485.          {
  2486.             case DLG_APPLY:   /* Apply push button */
  2487.             {
  2488.                _SetObjectStyle(pwin->somSelf, hwndDlg);
  2489.  
  2490.                // Save state to the .INI file now!
  2491.                _wpSaveImmediate(pwin->somSelf);
  2492.  
  2493.                WinSetDlgItemText(hwndDlg,
  2494.                                  DLG_STATUS,
  2495.                                  "Changes applied to object");
  2496.                break;
  2497.             }
  2498.  
  2499.             case DLG_UNDO:   /* Undo push button   */
  2500.             {
  2501.                _QueryObjectStyle(pwin->somSelf, hwndDlg);
  2502.                WinSetDlgItemText(hwndDlg,
  2503.                                  DLG_STATUS,
  2504.                                  "Changes undone");
  2505.                break;
  2506.             }
  2507.  
  2508.             case DLG_CANCEL:   /* Cancel push button */
  2509.             {
  2510.                pwin->fClose = TRUE;
  2511.                WinPostMsg(WinQueryWindow(hwndDlg, QW_OWNER),
  2512.                           WM_CLOSE, 0L, 0L);
  2513.                break;
  2514.             }
  2515.  
  2516.             case DLG_HELP:   /* Help push button */
  2517.             {
  2518.                _wpDisplayHelp(pwin->somSelf,
  2519.                               ID_HELP_STYLER,
  2520.                               szHelpLibrary);
  2521.                break;
  2522.             }
  2523.  
  2524.             default:
  2525.                break;
  2526.          }
  2527.          break;
  2528.       }  /* End of case WM_COMMAND */
  2529.  
  2530.       case WM_DESTROY:
  2531.       {
  2532.          /*
  2533.           * Set the style of the object from the checkbox settings
  2534.           */
  2535.          if (!pwin->fClose)
  2536.            _SetObjectStyle(pwin->somSelf, hwndDlg);
  2537.  
  2538.          _wpFreeMem(pwin->somSelf, (PBYTE) pwin);
  2539.          mresultWpRtnCd = WinDefDlgProc(hwndDlg, msg, mp1, mp2);
  2540.       }  /* End of case WM_DESTROY */
  2541.  
  2542.       default:
  2543.       {
  2544.          mresultWpRtnCd = WinDefDlgProc(hwndDlg, msg, mp1, mp2);
  2545.          break;
  2546.       } // End of default:
  2547.    }
  2548.    return mresultWpRtnCd;
  2549. }
  2550.  
  2551. /*
  2552.  *   Function: MLEImportText
  2553.  *
  2554.  *   Description:
  2555.  *     Import the text into an MLE window.
  2556.  */
  2557.  
  2558. ULONG EXPENTRY MLEImportText(HWND hwndMLE,
  2559.                              CHAR *pText,
  2560.                              ULONG ulSize)
  2561. {
  2562.    ULONG  ulLen = ulSize;
  2563.    ULONG  cch;
  2564.    LINE   lBegin = 0;
  2565.    IPT    lOffset = 0;
  2566.  
  2567.    WinSendMsg(hwndMLE, MLM_DISABLEREFRESH, 0L, 0L);
  2568.  
  2569.    /*
  2570.     * Get the current number of characters in the MLE box
  2571.     * then send a message to delete them
  2572.     */
  2573.    cch = (ULONG) WinSendMsg(hwndMLE,
  2574.                             MLM_QUERYTEXTLENGTH,
  2575.                             0L, 0L);
  2576.    WinSendMsg(hwndMLE,
  2577.               MLM_DELETE,
  2578.               MPFROMLONG(lBegin),
  2579.               MPFROMLONG(cch));
  2580.  
  2581.    if (pText)
  2582.    {
  2583.       if (ulLen <= 0L)
  2584.         ulLen = (ULONG) strlen(pText);
  2585.       WinSendMsg(hwndMLE,
  2586.                  MLM_SETIMPORTEXPORT,
  2587.                  MPFROMP(pText),
  2588.                  MPFROMSHORT((SHORT) ulLen));
  2589.  
  2590.       cch = (ULONG) WinSendMsg(hwndMLE, MLM_IMPORT,
  2591.                                MPFROMP(&lOffset),
  2592.                                MPFROMP(&ulLen));
  2593.    }
  2594.    WinSendMsg(hwndMLE, MLM_ENABLEREFRESH, 0L, 0L);
  2595.    return cch;
  2596. } /* End of Function: MLEImportText() */
  2597.  
  2598. /*
  2599.  *   Function: MLEImportText
  2600.  *
  2601.  *   Description:
  2602.  *     Export the text from an MLE window.
  2603.  */
  2604. APIRET EXPENTRY MLEExportText(HWND hwndMLE, PSZ *pBuf)
  2605. {
  2606.    APIRET apiRtnCd = 0;
  2607.    LONG   cch;
  2608.    LONG   cchnl;
  2609.    IPT    lOffset = 0;
  2610.    LONG   cbChar = -1;
  2611.    CHAR   *ptr;
  2612.  
  2613.    *pBuf = (CHAR *) NULL;
  2614.  
  2615.    /*
  2616.     * Get the length of the data field.
  2617.     * Query text length using the selected format.
  2618.     */
  2619.    cch = (ULONG) WinSendMsg(hwndMLE,
  2620.                             MLM_QUERYFORMATTEXTLENGTH,
  2621.                             MPFROMLONG(lOffset),
  2622.                             MPFROMLONG(cbChar));
  2623.    if (cch > 0L)
  2624.    {
  2625.       if ((ptr = (CHAR *) malloc((USHORT) (cch + 1L))) == (CHAR *) NULL)
  2626.          return PMERR_MEMORY_ALLOCATION_ERR;
  2627.  
  2628.       /*
  2629.        * Get the text from the MLE window.
  2630.        */
  2631.       *pBuf = ptr;
  2632.       WinSendMsg(hwndMLE,
  2633.                  MLM_SETIMPORTEXPORT,
  2634.                  MPFROMP(ptr),
  2635.                  MPFROMSHORT(cch));
  2636.       cchnl = (ULONG) WinSendMsg(hwndMLE,
  2637.                                  MLM_EXPORT,
  2638.                                  MPFROMP(&lOffset),
  2639.                                  MPFROMP((ULONG) &cch));
  2640.       *(*pBuf + cchnl) = (CHAR) NULL;
  2641.    }
  2642.    return apiRtnCd;
  2643. } /* End of Function: MLEExportText() */
  2644.  
  2645. #pragma info(nouse)
  2646.  
  2647.  
  2648. ΓòÉΓòÉΓòÉ 2.3.1.3. Resource Header File for Styler ΓòÉΓòÉΓòÉ
  2649.  
  2650. The following sample illustrates the resource header file (RCH): 
  2651.  
  2652. /*
  2653.  * Resouce header module: WPSTYLER.RCH
  2654.  */
  2655.  
  2656. #define ID_OBJECTICON               255
  2657. #define ID_HELP_STYLER              256
  2658.  
  2659. #define DLG_STYLE                   100
  2660. #define DLG_COPY                    101
  2661. #define DLG_DELETE                  102
  2662. #define DLG_DRAG                    103
  2663. #define DLG_DROP                    104
  2664. #define DLG_SETTINGS                105
  2665. #define DLG_MOVE                    106
  2666. #define DLG_PRINT                   107
  2667. #define DLG_TEMPLATE                108
  2668. #define DLG_RENAME                  109
  2669. #define DLG_SHADOW                  110
  2670. #define DLG_OBJECTNAME              111
  2671. #define DLG_STATUS                  112
  2672. #define DLG_APPLY                   113
  2673. #define DLG_UNDO                    114
  2674. #define DLG_CANCEL                  115
  2675. #define DLG_HELP                    116
  2676.  
  2677.  
  2678. ΓòÉΓòÉΓòÉ 2.3.1.4. Resource Code for Styler ΓòÉΓòÉΓòÉ
  2679.  
  2680. The following sample illustrates the resource definition file (RC): 
  2681.  
  2682. /*
  2683.  * Resouce module: WPSTYLER.RC
  2684.  */
  2685.  
  2686. #include <os2.h>
  2687. #include "wpstyler.rch"
  2688.  
  2689. ICON ID_OBJECTICON WPSTYLER.ICO
  2690.  
  2691. DLGTEMPLATE DLG_STYLE LOADONCALL MOVEABLE DISCARDABLE
  2692. BEGIN
  2693.     DIALOG  "", DLG_STYLE, 0, 0, 224, 200, NOT FS_DLGBORDER
  2694.     BEGIN
  2695.         /*
  2696.          * Create a read only MLE window on the page to hold the
  2697.          * object's title, similar to the General page title
  2698.          */
  2699.         LTEXT           "Title:",
  2700.                         -1, 10, 133,  24,  8
  2701.         MLE             "", DLG_OBJECTNAME,
  2702.                         30, 111, 110, 30,
  2703.                         MLS_WORDWRAP |
  2704.                         WS_GROUP |
  2705.                         MLS_IGNORETAB
  2706.  
  2707.         /*
  2708.          * Place all the Styler checkboxes nicely on the page
  2709.          */
  2710.         LTEXT           "Select or deselect the desired style flags",
  2711.                         -1, 10, 101, 169, 10
  2712.         AUTOCHECKBOX    "~Copy",     DLG_COPY,     10,  91,  80, 10
  2713.         AUTOCHECKBOX    "~Move",     DLG_MOVE,    106,  91,  80, 10
  2714.         AUTOCHECKBOX    "~Delete",   DLG_DELETE,   10,  77,  80, 10
  2715.         AUTOCHECKBOX    "~Rename",   DLG_RENAME,  106,  77,  80, 10
  2716.         AUTOCHECKBOX    "~Shadow",   DLG_SHADOW,   10,  63,  80, 10
  2717.         AUTOCHECKBOX    "~Print",    DLG_PRINT,   106,  63,  80, 10
  2718.         AUTOCHECKBOX    "~Template", DLG_TEMPLATE, 10,  49,  80, 10
  2719.         AUTOCHECKBOX    "Dr~op",     DLG_DROP,    106,  49,  80, 10
  2720.  
  2721.         /*
  2722.          * Frame the Drag checkbox and set the text color to red
  2723.          * to bring attention to it and to warn of its danger
  2724.          */
  2725.         CONTROL         "", -1, 8, 36, 146, 11,
  2726.                         WC_STATIC,
  2727.                         SS_HALFTONEFRAME |
  2728.                         WS_GROUP |
  2729.                         WS_VISIBLE
  2730.         AUTOCHECKBOX    "Drag (De-select with Caution)",
  2731.                         DLG_DRAG, 10, 37, 136, 9
  2732.                         PRESPARAMS PP_FOREGROUNDCOLOR, 0x00FF0000L
  2733.  
  2734.         /*
  2735.          * Add a status line just above the push buttons
  2736.          */
  2737.         LTEXT           "", DLG_STATUS,
  2738.                         7, 23, 191, 10, DT_VCENTER
  2739.  
  2740.         /*
  2741.          * Align the push buttons along the bottom
  2742.          */
  2743.         PUSHBUTTON      "~Apply",  DLG_APPLY,       7, 7, 38, 14
  2744.         PUSHBUTTON      "~Undo",   DLG_UNDO,       57, 7, 38, 14
  2745.         PUSHBUTTON      "Cancel",  DLG_CANCEL,    107, 7, 38, 14
  2746.         PUSHBUTTON      "~Help",   DLG_HELP,      157, 7, 38, 14
  2747.     END
  2748. END
  2749.  
  2750.  
  2751. ΓòÉΓòÉΓòÉ 2.3.1.5. Help Source for Styler ΓòÉΓòÉΓòÉ
  2752.  
  2753. The following sample illustrates the Styler help source file (IPF): 
  2754.  
  2755. .*******************************************************************
  2756. .*  File Name:    WPSTYLER.IPF
  2757. .*  Description:  Information Tag Language file for help on the
  2758. .*                Workplace Shell Object Styler
  2759. .*******************************************************************
  2760. .*
  2761. :userdoc.
  2762. :h1 res=256 name=ID_HELP_STYLER.Workplace Shell Object Styler
  2763. :i1 id=aboutStyle.Workplace Shell Object Styler
  2764. :p.
  2765. The Workplace Shell Object Styler is a sample Workplace Shell SOM
  2766. application which demonstrates the basic functionality of a Workplace
  2767. Shell SOM application.
  2768. The application allows a user to change and save the basic style
  2769. attributes of any object that is dropped on it.
  2770. .*
  2771. :note.
  2772. Use this application with care, deselecting all of the items
  2773. (especially the Drag) will prevent you from using WPSTYLER again
  2774. in order to reinstate the styles.
  2775. .*
  2776. :p.
  2777. :hp2.Title Bar Text:ehp2.
  2778. :p.
  2779. You can modify the title bar text of the object from the Workplace
  2780. Shell Styler in addition to changing the object style.
  2781. Changing the title text here has the same effect as changing it
  2782. from the General page of the object itself.
  2783. :p.
  2784. :hp2.Items:ehp2.
  2785. .*
  2786. :ul.
  2787. :li.
  2788. Copy
  2789. :p.
  2790. Deselect this item to prevent the object from being copied.
  2791. The :hp2.Copy...:ehp2. item will be removed from the
  2792. pop-up menu.
  2793. :li.
  2794. Move
  2795. :p.
  2796. Deselect this item to prevent the object from being moved.
  2797. The :hp2.Move...:ehp2. item will be removed from the
  2798. pop-up menu.
  2799. :li.
  2800. Delete
  2801. :p.
  2802. Deselect this item to prevent the object from being deleted.
  2803. The :hp2.Delete...:ehp2. item will be removed from the
  2804. pop-up menu.
  2805. :li.
  2806. Rename
  2807. :p.
  2808. Deselect this item to prevent the object from being renamed.
  2809. No visual change can be observed.
  2810. :li.
  2811. Shadow
  2812. :p.
  2813. Deselect this item to prevent the object from being shadowed.
  2814. The :hp2.Create shadow...:ehp2. item will be removed
  2815. from the pop-up menu.
  2816. :li.
  2817. Print
  2818. :p.
  2819. Deselect this item to prevent the object from being printed.
  2820. The :hp2.Print...:ehp2. item will be removed from the
  2821. pop-up menu.
  2822. :p.
  2823. The print item is normally only visible on objects that can be printed
  2824. such as a document file viewed through the Drives folder.
  2825. Therefore, this item will have no effect on objects such as folders.
  2826. :li.
  2827. Template
  2828. :p.
  2829. Selecting this item will change the object into a template, at which
  2830. point you can only tear off objects from it.
  2831. :li.
  2832. Drop
  2833. :p.
  2834. Deselect this item to prevent objects from being dropped onto it.
  2835. :li.
  2836. Drag
  2837. :p.
  2838. Deselect this item with care.
  2839. This will prevent the object from being dragged; therefore you will
  2840. not be able to drag the object over the Workplace Shell Styler again
  2841. to change the item back.
  2842. :p.
  2843. Use this item where you wish to have an object remain on the Desktop
  2844. in a certain location and not give users the ability to change that location.
  2845. :eul.
  2846. .*
  2847. :p.
  2848. :hp2.Push buttons:ehp2.
  2849. .*
  2850. :ul.
  2851. :li.
  2852. Apply
  2853. :p.
  2854. Press this button to apply the changes immediately to the object while
  2855. remaining in the Workplace Shell Styler dialog window.
  2856. :li.
  2857. Undo
  2858. :p.
  2859. Press this button to undo any of the checkboxes changed since the
  2860. last apply.
  2861. :li.
  2862. Cancel
  2863. :p.
  2864. Press this button to cancel your changes and remain at the state you
  2865. started at or at the state of the last apply.
  2866. :note.
  2867. This is different than closing the window through the :hp2.Close:ehp2.
  2868. item on the system menu.
  2869. The system :hp2.Close:eph2. item saves the current state of the
  2870. checkboxes.
  2871. :li.
  2872. Help
  2873. :p.
  2874. This push button present this help panel.
  2875. :eul.
  2876. .*
  2877. :euserdoc.
  2878.  
  2879.  
  2880. ΓòÉΓòÉΓòÉ 2.3.1.6. Make File for Styler ΓòÉΓòÉΓòÉ
  2881.  
  2882. The following sample illustrates the make file (MAK): 
  2883.  
  2884. #
  2885. # Makefile module: WPSTYLER.MAK
  2886. #
  2887.  
  2888. .SUFFIXES: .c .obj .dll .idl .h .ih .rc .res
  2889.  
  2890. SC        = sc
  2891. SCFLAGS   = -maddstar -S128000 -C128000 -mnoint -v
  2892. SCLIST    = -s "ih;h;c;def"
  2893.  
  2894. TOOLKIT   = c:\toolkit
  2895. IBMCPP    = c:\ibmcpp
  2896.  
  2897. INCLUDE   = $(TOOLKIT)\h;$(IBMCPP)\include;.;$(INCLUDE)
  2898. SMINCLUDE = S(TOOLKIT)\idl;$(INCLUDE);$(SMINCLUDE)
  2899. LIB       = $(TOOLKIT)\lib;$(IBMCPP)\lib;$(LIB)
  2900. CFLAGS    = -Ge- -Ss+ -C+ -Kb -Q+ -Ms
  2901. LFLAGS    = /MAP /NOL /NOI /EXEPACK:2 /PACKCODE /PACKDATA /FAR /ALIGN:4
  2902.  
  2903. b=wpstyler
  2904.  
  2905. all:        $(b).dll $(b).ih $(b).hlp
  2906.  
  2907. .c.obj:     icc $(CFLAGS) $*.c
  2908.  
  2909. $(b).dll:   $(b).ih $(b).obj $(b).def $(b).res
  2910.             link386 $(b) $(LFLAGS), $(b).dll, $(b).map, somtk, $(b)
  2911.             rc $(b).res $(b).dll
  2912.             mapsym $(b).map
  2913.  
  2914. $(b).obj:   $(b).c $(b).h
  2915.  
  2916. $(b).res:   $(b).rc $(b).ico
  2917.             rc -r $(b).rc
  2918.  
  2919. $(b).ih:    $(b).idl
  2920.             $(SC) $(SCFLAGS) $(SCLIST) $(@B).idl
  2921.  
  2922. $(b).hlp:   $(b).ipf
  2923.             ipfc $(b).ipf
  2924.  
  2925. clean:
  2926.             -del $(b).ih  $(b).h  $(b).obj  $(b).dll
  2927.             -del $(b).map   $(b).sym  $(b).res  $(b).def
  2928.  
  2929.  
  2930. ΓòÉΓòÉΓòÉ 2.3.2. Representing the Styler Object ΓòÉΓòÉΓòÉ
  2931.  
  2932. Use the icon editor to create an icon that is suitable for representing the 
  2933. Styler object on the Desktop and save it as WPSTYLER.ICO. The following figure 
  2934. shows a sample icon for the Styler object: 
  2935.  
  2936. Now you are set to build and register your object with the Workplace Shell. 
  2937.  
  2938.  
  2939. ΓòÉΓòÉΓòÉ 3. Debugging Workplace Shell Applications ΓòÉΓòÉΓòÉ
  2940.  
  2941. Debugging a Workplace Shell application is somewhat like debugging a 
  2942. Presentation Manager application. But because Workplace Shell objects are 
  2943. implemented via DLLs instead of EXEs, they can be more of a challenge. This 
  2944. chapter describes the SOM and Workplace Shell facilities and techniques to aid 
  2945. debugging applications. 
  2946.  
  2947.  
  2948. ΓòÉΓòÉΓòÉ 3.1. About SOM Debugging Techniques ΓòÉΓòÉΓòÉ
  2949.  
  2950. Normally when an application is not working correctly, adding temporary printf 
  2951. statements or WinMessageBox calls can provide additional debugging information. 
  2952. SOM provides somPrintf that writes debugging information to the current stdout 
  2953. device. This is usually not convenient for Workplace Shell applications, 
  2954. because they are implemented in DLLs. 
  2955.  
  2956. To redirect the debugging output to another location, SOM provides a 
  2957. replaceable procedure called SOMOutCharRoutine. In addition to handling calls 
  2958. from somPrintf, the SOMOutCharRoutine is also invoked by the 
  2959. <classname>MethodDebug calls in every method. By replacing this procedure, 
  2960. output can be redirected from stdout to a more suitable location. When 
  2961. debugging is complete, the user-defined procedure can be removed or 
  2962. commented-out. 
  2963.  
  2964. Debugging information can be written to any number of places: 
  2965.  
  2966.      To stderr 
  2967.  
  2968.      To a window 
  2969.  
  2970.      To the clipboard 
  2971.  
  2972.      To a log file 
  2973.  
  2974.      Or any combination of the above. 
  2975.  
  2976.  
  2977. ΓòÉΓòÉΓòÉ 3.2. About Workplace Shell Debugging Techniques ΓòÉΓòÉΓòÉ
  2978.  
  2979. The Workplace process is the one under which all the Workplace Shell classes 
  2980. are loaded and initialized. Therefore, objects representing Workplace Shell 
  2981. classes and their subclasses must run on this process. The Workplace process is 
  2982. actually launched from the Shell process, which is the process indicated in the 
  2983. SET PROTSHELL= statement in the CONFIG.SYS file. Once the Shell process is 
  2984. running, it starts the Workplace process. It is the Shell process that is 
  2985. responsible for restarting the Workplace process in the event that it is killed 
  2986. as a result of a trap. The PROTSHELL= statement in the CONFIG.SYS file 
  2987. indicates which process is to be launched as the Shell process. The SET 
  2988. RUNWORKPLACE= statement in the CONFIG.SYS file indicates which process is to be 
  2989. the Workplace process. In the default configuration, both the PROTSHELL and 
  2990. RUNWORKPLACE environment variables are set to PMSHELL.EXE. PMSHELL.EXE is 
  2991. designed to distinguish between being started as the Shell process versus being 
  2992. started as the Workplace process. 
  2993.  
  2994.  
  2995. ΓòÉΓòÉΓòÉ 3.3. Using SOM Debugging Techniques ΓòÉΓòÉΓòÉ
  2996.  
  2997. This section describes two SOM techniques to aid debugging Workplace Shell 
  2998. applications: 
  2999.  
  3000.      One writes the information to a file 
  3001.  
  3002.      The other writes the information out through a serial port to an attached 
  3003.       computer or dumb terminal. 
  3004.  
  3005.  
  3006. ΓòÉΓòÉΓòÉ 3.3.1. Redirecting SOMOutCharRoutine to a File ΓòÉΓòÉΓòÉ
  3007.  
  3008. The following sample code shows how to direct somPrintf output to a file called 
  3009. C:\ERROR.TXT. Before enabling the replacement of SOMOutCharRoutine, the file is 
  3010. opened and a header is written to it. 
  3011.  
  3012. #define INCL_DOS
  3013. #define INCL_WINWORKPLACE
  3014.  
  3015. #include <os2.h>
  3016. #include <io.h>
  3017. #include <stdio.h>
  3018. #include <fcntl.h>
  3019. #include <sys\stat.h>
  3020. #include <string.h>
  3021. #include <som.h>
  3022.  
  3023. /* File to contain debugging error information */
  3024. static FILE *ErrorFile;
  3025.  
  3026. /**********************************************************************/
  3027. /*   This is the replacement for the default SOMOutCharRoutine.       */
  3028. /*   It writes the debugging information to a file on the hard drive  */
  3029. /*   instead of to stdout.                                            */
  3030. /**********************************************************************/
  3031.  
  3032. #pragma linkage(myCharacterOutputRoutine, system)
  3033.  
  3034. int SOMLINK myCharacterOutputRoutine(char chOut)
  3035. {
  3036.     fputc((int) chOut, ErrorFile);
  3037.     fflush(ErrorFile);
  3038.  
  3039.     return 1;   /* Indicate success */
  3040. }
  3041.    .
  3042.    .
  3043.    .
  3044.  
  3045. /**********************************************************************/
  3046. /*   Enable myCharacterOutputRoutine by opening the output error      */
  3047. /*   file and then changing the output character routine.             */
  3048. /**********************************************************************/
  3049.  
  3050. ErrorFile = fopen ("c:\\error.txt", "a");
  3051.  
  3052. fprintf (ErrorFile, "\nDebug information from my WPS Object\n");
  3053. fprintf (ErrorFile,   "------------------------------------\n");
  3054. setbuf  (ErrorFile, NULL);
  3055.  
  3056. SOM_TraceLevel  = 2;   /* Request maximum debugging information */
  3057. SOM_WarnLevel   = 2;
  3058. SOM_AssertLevel = 2;
  3059.  
  3060. /* All output goes to my routine after the next statement */
  3061.  
  3062. SOMOutCharRoutine = myCharacterOutputRoutine;
  3063.  
  3064.  
  3065. ΓòÉΓòÉΓòÉ 3.3.2. Redirecting SOMOutCharRoutine to a Serial Port ΓòÉΓòÉΓòÉ
  3066.  
  3067. Instead of directing the output to a file, the SOMOutCharRoutine procedure can 
  3068. be used to direct the output to a serial port. By connecting another computer 
  3069. or a dumb terminal to the serial port with a NULL modem cable, debugging 
  3070. information can be received on the remote terminal. A NULL modem cable is a 
  3071. specialized serial cable that has the transmit and receive wires crossed so 
  3072. that transmissions from one serial port are received by another. 
  3073.  
  3074. First, initialize the serial port using the OS/2 Mode command. This command can 
  3075. be added to the STARTUP.CMD file or entered from an OS/2 command prompt. The 
  3076. following example shows how to use the Mode command: 
  3077.  
  3078. MODE COM1 9600,n,8,1
  3079.  
  3080. Replace SOMOutCharRoutine with your procedure which directs somPrintf output to 
  3081. the COM1 serial port as shown in the following sample code: 
  3082.  
  3083. #define INCL_DOS
  3084. #define INCL_WINWORKPLACE
  3085.  
  3086. #include <os2.h>
  3087. #include <io.h>
  3088. #include <stdio.h>
  3089. #include <fcntl.h>
  3090. #include <sys\stat.h>
  3091. #include <string.h>
  3092. #include <som.h>
  3093.  
  3094. /* COM1 port for debugging information */
  3095. static FILE *DebugPort;
  3096.  
  3097. /**********************************************************************/
  3098. /*   This is the replacement for the default SOMOutCharRoutine.       */
  3099. /*   It writes the debugging information to the COM1 serial port      */
  3100. /*   instead of to stdout.                                            */
  3101. /**********************************************************************/
  3102.  
  3103. #pragma linkage(myCharacterOutputRoutine, system)
  3104.  
  3105. int SOMLINK myCharacterOutputRoutine(char chOut)
  3106. {
  3107.     fputc((int) chOut, DebugPort);
  3108.     fflush(DebugPort);
  3109.  
  3110.     return 1;   /* Indicate success */
  3111. }
  3112.    .
  3113.    .
  3114.    .
  3115.  
  3116. /**********************************************************************/
  3117. /*   Enable myCharacterOutputRoutine by opening the serial port       */
  3118. /*   and then changing the output character routine.                  */
  3119. /**********************************************************************/
  3120.  
  3121. DebugPort = fopen("COM1", "w");
  3122.  
  3123. fprintf(DebugPort, "\nDebug information from my WPS Object\n");
  3124. fprintf(DebugPort,   "------------------------------------\n");
  3125. setbuf(DebugPort, NULL);
  3126.  
  3127. SOM_TraceLevel  = 2;   /* Request maximum debugging information */
  3128. SOM_WarnLevel   = 2;
  3129. SOM_AssertLevel = 2;
  3130.  
  3131. /* All output goes to my routine after the next statement */
  3132.  
  3133. SOMOutCharRoutine = myCharacterOutputRoutine;
  3134.  
  3135.  
  3136. ΓòÉΓòÉΓòÉ 3.4. Using Workplace Shell Debugging Techniques ΓòÉΓòÉΓòÉ
  3137.  
  3138. This section describes how to use the PROTSHELL and RUNWORKPLACE variables to 
  3139. setup a development environment. It also provides two techniques to aid 
  3140. debugging Workplace Shell applications: 
  3141.  
  3142.      Lower level debugger, the Kernel Debugger 
  3143.  
  3144.      Source level debugger, IPMD 
  3145.  
  3146.  
  3147. ΓòÉΓòÉΓòÉ 3.4.1. Debugging with Useful CONFIG.SYS Statements ΓòÉΓòÉΓòÉ
  3148.  
  3149. The PROTSHELL= statement specifies the name of the program for the Shell 
  3150. process of the Workplace Shell. The default is PMSHELL.EXE. This program loads 
  3151. the Workplace process and handles restarting it, should it fail. 
  3152.  
  3153. The SET RUNWORKPLACE= statement specifies the name of the program for the 
  3154. Workplace process of the Workplace Shell. The default is also PMSHELL.EXE. 
  3155. PMSHELL recognizes whether it should act as the Shell process or as the 
  3156. Workplace process. Setting this to be CMD.EXE will cause an OS/2 command prompt 
  3157. to be started instead of the Workplace Shell process. 
  3158.  
  3159. The SET SHELLEXCEPTIONHANDLER=OFF statement disables the Workplace Shell trap 
  3160. handler. The default is ON, which can mask problems with a Workplace Shell 
  3161. application. 
  3162.  
  3163. The SET RESTARTOBJECTS=NO statement prevents objects from being re-opened or 
  3164. re-started when the Workplace Shell is initialized. This is useful when there 
  3165. is an object that is causing a problem in the Workplace Shell. 
  3166.  
  3167.  
  3168. ΓòÉΓòÉΓòÉ 3.4.2. Starting and Restarting the Workplace Shell ΓòÉΓòÉΓòÉ
  3169.  
  3170. The Workplace Shell starts automatically when OS/2 is booted. Because all 
  3171. Workplace Shell applications run under the Workplace process, one application 
  3172. with an error can cause the Workplace Shell to trap or to hang. Should the 
  3173. Workplace Shell become inoperative, the system must be rebooted. To avoid 
  3174. frequent reboots, one method that can be used is to start the Workplace Shell 
  3175. from an OS/2 window. Then should a hang occur, the Workplace Shell can be 
  3176. terminated by going to the OS/2 window and entering a Ctrl+Break. 
  3177.  
  3178. The procedure for manually starting and restarting the Workplace Shell is as 
  3179. follows: 
  3180.  
  3181.    1. Create a backup copy of your CONFIG.SYS file, for example: 
  3182.  
  3183.                COPY CONFIG.SYS CONFIG.WPS
  3184.  
  3185.    2. Edit CONFIG.SYS.  Find the following line: 
  3186.  
  3187.                SET RUNWORKPLACE=C:\OS2\PMSHELL.EXE
  3188.  
  3189.       where C: is your boot drive. This line sets the name of the interface to 
  3190.       be started for OS/2. PMSHELL.EXE is the program for the Workplace Shell. 
  3191.       Replace the line with the following: 
  3192.  
  3193.                SET RUNWORKPLACE=C:\OS2\CMD.EXE
  3194.  
  3195.       This changes the OS/2 interface from the Workplace Shell to an OS/2 
  3196.       session. 
  3197.  
  3198.    3. By default, the Workplace Shell attempts to recover from any traps caused 
  3199.       by itself or other Workplace Shell applications. Should this recovery 
  3200.       occur, you might see all the objects on the Desktop disappear temporarily 
  3201.       and then re-appear after the Workplace Shell re-initializes. The 
  3202.       Workplace Shell exception handler can be disabled by adding the following 
  3203.       line to the CONFIG.SYS file: 
  3204.  
  3205.                SET SHELLEXCEPTIONHANDLER=OFF
  3206.  
  3207.       With the exception handler disabled, errors will result in the typical 
  3208.       OS/2 error pop-up windows. Thus, errors encountered will not be masked by 
  3209.       the Workplace Shell's exception handler. However, the ability for the 
  3210.       Workplace Shell to recover from errors has been impacted. 
  3211.  
  3212.    4. Save the changes to CONFIG.SYS. These changes will not take effect until 
  3213.       a shutdown and reboot are performed. 
  3214.  
  3215.    5. Shutdown the system and then reboot. 
  3216.  
  3217.    6. After the system reboots, instead of bringing up the Workplace Shell 
  3218.       (PMSHELL.EXE), the system will bring up an OS/2 prompt (CMD.EXE). 
  3219.  
  3220.    7. Start another OS/2 session by issuing START or START /FS for a 
  3221.       full-screen session. This session can be used for running other programs 
  3222.       if needed. 
  3223.  
  3224.    8. Return to the original OS/2 session, and then manually start the 
  3225.       Workplace Shell by typing: 
  3226.  
  3227.                PMSHELL
  3228.  
  3229.  It is important to invoke PMSHELL from the first OS/2 session. There are two 
  3230.  reasons for this: 
  3231.  
  3232.      First, the Workplace Shell assumes that it is the first process in the 
  3233.       system. 
  3234.  
  3235.      Secondly, OS/2 assumes that the first application to create a message 
  3236.       queue is the Workplace Shell and allocates additional resources for it. 
  3237.       If another application creates a message queue before the Workplace 
  3238.       Shell, unpredictable problems occur when the Workplace Shell is started. 
  3239.  
  3240.  Now that the Workplace Shell has been started from an OS/2 session, should the 
  3241.  Workplace Shell trap or hang, it can be stopped by simply going back to that 
  3242.  OS/2 session and terminating the session, for example, by selecting the 
  3243.  Ctrl+Break keys. The Workplace Shell can then be restarted from the same 
  3244.  window by invoking PMSHELL again. 
  3245.  
  3246.  After the Workplace Shell has terminated, the DLLs containing Workplace Shell 
  3247.  objects should be unlocked. This allows them to be deleted or replaced before 
  3248.  restarting the Workplace Shell. 
  3249.  
  3250.  
  3251. ΓòÉΓòÉΓòÉ 3.4.3. Debugging with the Kernel Debugger ΓòÉΓòÉΓòÉ
  3252.  
  3253. The Kernel debugger included with the OS/2 Toolkit is a low-level debugger 
  3254. oriented toward system and device-driver debugging. The kernel debugger can 
  3255. assist in debugging Workplace Shell applications until higher-level debuggers, 
  3256. such as IPMD, can provide adequate debugging functions in complex situations. 
  3257.  
  3258. When the Kernel debugger is installed, two files are copied to the root 
  3259. directory of the boot drive:  OS2KRNL and OS2KRNL.SYM. OS2KRNL is a hidden 
  3260. file, which will be renamed OS2KRNL.RTL when debugging is active. Because the 
  3261. Kernel debugger supports symbolic debugging, numerous symbol files (.SYM files) 
  3262. are copied to the \OS2\DEBUG\DLL directory. These symbol files contain 
  3263. information on symbols defined and used by OS/2. 
  3264.  
  3265. To make symbols defined in your Workplace Shell application available to the 
  3266. Kernel debugger, use the MAPSYM program. MAPSYM converts the .MAP file 
  3267. generated by the linker to a .SYM file. The .SYM file should reside in the same 
  3268. directory as the .EXE or .DLL executable file it represents and it should have 
  3269. the same name. 
  3270.  
  3271. When using the Kernel debugger, it is a good idea to use the functionprefix= 
  3272. modifier in the IDL file implementation statement. There are three reasons for 
  3273. this: 
  3274.  
  3275.      All the methods in the class start with the same prefix 
  3276.  
  3277.      The methods are not static 
  3278.  
  3279.      It is easier to locate the appropriate methods in the debugger and to set 
  3280.       breakpoints. 
  3281.  
  3282.  In the following sample code, the methods generated are called Dogdisplay and 
  3283.  Dogbark. 
  3284.  
  3285.   /****************************************************************/
  3286.   /* By adding the functionprefix= modifier to the class, all     */
  3287.   /* methods defined will be unique, for example, Dogbark.        */
  3288.   /* This is useful when debugging, because every method in the   */
  3289.   /* class will start with this prefix and will not be static.    */
  3290.   /****************************************************************/
  3291.  
  3292.   #ifndef dogdbug_idl
  3293.     #define dogdbug_idl
  3294.  
  3295.     #include <somobj.idl>
  3296.  
  3297.     interface Dog : SOMObject
  3298.     {
  3299.       attribute string breed;
  3300.  
  3301.       // The breed for the dog
  3302.       void display();
  3303.  
  3304.       // Display characteristics for this dog
  3305.       void bark();
  3306.  
  3307.       // Have the dog bark
  3308.       #ifdef __SOMIDL__
  3309.         implementation
  3310.       {
  3311.         releaseorder:  _get_breed, _set_breed, display, bark;
  3312.  
  3313.         //# Class modifiers
  3314.         functionprefix = Dog;   // This will help when debugging
  3315.         callstyle      = oidl;
  3316.         majorversion   = 1;
  3317.         minorversion   = 2;
  3318.  
  3319.       }; #endif /* __SOMIDL__ */
  3320.  
  3321.     }; #endif
  3322.  
  3323.  As soon as the Kernel debugger is active, use the .p command to display 
  3324.  process information. The Process ID (pid) of the Shell process and the 
  3325.  Workplace process can be located quickly using this command. The following 
  3326.  figure shows an example of the information you obtain when using the .p 
  3327.  command: 
  3328.  
  3329.  
  3330.       ## .p
  3331.          Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
  3332.          0001  0001 0000 0000 0001 blk 0100 ffe3a000 ffe3c7d4 ffe3c620 1e7c 00 *ager
  3333.          0002  0001 0000 0000 0002 blk 0200 7b92a000 ffe3c7d4 7bb28020 1f3c 00 *tsd
  3334.          0003  0001 0000 0000 0003 blk 0200 7b92c000 ffe3c7d4 7bb281d4 1f50 00 *ctxh
  3335.          0004  0001 0000 0000 0004 blk 081f 7b92e000 ffe3c7d4 7bb28388 1f48 00 *kdb
  3336.          0005  0001 0000 0000 0005 blk 0800 7b930000 ffe3c7d4 7bb2853c 1f20 00 *lazyw
  3337.          0006  0001 0000 0000 0006 blk 0800 7b932000 ffe3c7d4 7bb286f0 1f3c 00 *asyncr
  3338.          0008  0005 0001 0005 0001 blk 0200 7b936000 7bb458a4 7bb28a58      00 cmd
  3339.         *0009# 0006 0005 0006 0001ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ7bb28c0c 1eb8 01 pmshell
  3340.          000d  0006 0005 0006 0002Γöé                          Γöé7bb292dc      01 pmshell
  3341.          000e  0006 0005 0006 0003Γöé   In this example,       Γöé7bb29490      01 pmshell
  3342.          000f  0006 0005 0006 0004Γöé   Pid #6 is the first    Γöé7bb29644      01 pmshell
  3343.          0010  0006 0005 0006 0005Γöé   PMSHELL process, or    Γöé7bb297f8      01 pmshell
  3344.          0007  0006 0005 0006 0006Γöé   the "Shell process".   Γöé7bb288a4 1ecc 01 pmshell
  3345.          0013  0006 0005 0006 0007Γöé                          Γöé7bb29d14      01 pmshell
  3346.          0015  0006 0005 0006 0008ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ7bb2a07c      01 pmshell
  3347.          0016  0006 0005 0006 0009 blk 0200 7b952000 7bb44020 7bb2a230      01 pmshell
  3348.          0017  0006 0005 0006 000a blk 0800 7b954000 7bb44020 7bb2a3e4      01 pmshell
  3349.          0018  0006 0005 0006 000b blk 0800 7b956000 7bb44020 7bb2a598      01 pmshell
  3350.          0019  0006 0005 0006 000c blk 0800 7b958000 7bb44020 7bb2a74c      01 pmshell
  3351.          001a  0006 0005 0006 000d blk 0804 7b95a000 7bb44020 7bb2a900      01 pmshell
  3352.          001b  0006 0005 0006 000e blk 0804 7b95c000 7bb44020 7bb2aab4      01 pmshell
  3353.          001c  0006 0005 0006 000f blk 0500 7b95e000 7bb44020 7bb2ac68      01 pmshell
  3354.          001d  0006 0005 0006 0010 blk 0800 7b960000 7bb44020 7bb2ae1c 1bb0 01 pmshell
  3355.          Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
  3356.          001e  0006 0005 0006 0011 blk 0800 7b962000 7bb44020 7bb2afd0 1b8c 01 pmshell
  3357.          001f  0006 0005 0006 0012 blk 0200 7b964000 7bb44020 7bb2b184      01 pmshell
  3358.          000a  0003 0000 0003 0001 blk 0200 7b93a000 7bb4484c 7bb28dc0      00 lanmsgex
  3359.          000b  0004 0000 0004 0001 blk 0200 7b93c000 7bb45078 7bb28f74      00 lsdaemon
  3360.          000c  0007 0006 0007 0001 blk 0800 7b93e000 7bb460d0 7bb29128      00 harderr
  3361.          0011  0007 0006 0007 0002 blk 0800 7b948000 7bb460d0 7bb299ac      00 harderr
  3362.          0012  0007 0006 0007 0003 blk 0800 7b94a000 7bb460d0 7bb29b60      00 harderr
  3363.          0014  0008 0000 0008 0001 blk 0200 7b94e000 7bb468fc 7bb29ec8      01 stoplan
  3364.          0020  0009 0006 0009 0001 blk 0500 7b966000 7bb47128 7bb2b338 1eb8 10 pmshell
  3365.          0021  0009 0006 0009 0002 blk 0200 7b968000 7bb47128 7bb2b4ec      10 pmshell
  3366.          0022  0009 0006 0009 0003ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ7bb2b6a0 1eb8 10 pmshell
  3367.          0023  0009 0006 0009 0004Γöé                          Γöé7bb2b854 1ecc 10 pmshell
  3368.          0024  0009 0006 0009 0005Γöé   In this example,       Γöé7bb2ba08      10 pmshell
  3369.          0025  0009 0006 0009 0006Γöé   Pid #9 is the second   Γöé7bb2bbbc      10 pmshell
  3370.          0026  0009 0006 0009 0007Γöé   PMSHELL process, or    Γöé7bb2bd70      10 pmshell
  3371.          0027  0009 0006 0009 0008Γöé   the "Workplace         Γöé7bb2bf24      10 pmshell
  3372.          0028  0009 0006 0009 0009Γöé   process".              Γöé7bb2c0d8      10 pmshell
  3373.          002a  0009 0006 0009 000bΓöé                          Γöé7bb2c440 1eac 10 pmshell
  3374.          002b  0009 0006 0009 000cΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ7bb2c5f4 1eb8 10 pmshell
  3375.          0029  000a 0006 000a 0001 blk 0200 7b978000 7bb47954 7bb2c28c      11 cmd
  3376.          002c  000b 0006 000b 0001 blk 0200 7b97e000 7bb48180 7bb2c7a8      12 cmd
  3377.          002f  001f 0006 001f 0001 blk 0200 7b984000 7bb4a230 7bb2ccc4      15 cmd
  3378.          Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
  3379.          0030  001d 0006 001d 0001 blk 0200 7b986000 7bb49a04 7bb2ce78      13 cmd
  3380.       ##
  3381.  
  3382.  The Kernel debug command VSF * sets the trap vectors. This allows traps in the 
  3383.  Workplace Shell application to be located quickly. The Kernel debugger stops 
  3384.  on the instruction that is about to cause a trap when these vectors are set. 
  3385.  In this way, it is possible to examine the stack and registers to determine 
  3386.  the cause of the trap. 
  3387.  
  3388.  
  3389. ΓòÉΓòÉΓòÉ 3.4.4. Debugging with IPMD ΓòÉΓòÉΓòÉ
  3390.  
  3391. The Starting and Restarting the Workplace Shell technique can also be used when 
  3392. a source level debugger is needed. Follow the same steps as outlined in that 
  3393. section, but instead of simply invoking PMSHELL, invoke the debugger, as 
  3394. follows: 
  3395.  
  3396.    IPMD PMSHELL
  3397.  
  3398. The debugger initializes, but the Workplace Shell does not start running. The 
  3399. steps to be followed are: 
  3400.  
  3401.    1. Select the Startup option from the File pull-down menu, as shown in the 
  3402.       following figure: 
  3403.  
  3404.    2. Select the Debug program initialization option, as shown in the following 
  3405.       figure: 
  3406.  
  3407.    3. Select the Load Occurence option from the Breakpoints pull-down menu, as 
  3408.       shown in the following figure: 
  3409.  
  3410.    4. Enter a breakpoint by specifying the name (but not the path) of the DLL, 
  3411.       for example, DOG.DLL. Then, select the Set push button, as shown in the 
  3412.       following figure: 
  3413.  
  3414.    5. Set any other breakpoints you wish at this time. Select the OK push 
  3415.       button when finished. 
  3416.  
  3417.    6. Select the Run option from the Breakpoints pull-down menu, as shown in 
  3418.       the following figure: 
  3419.  
  3420.  
  3421.  The Workplace Shell will then initialize (very slowly) and the debugger will 
  3422.  stop when one of the specified breakpoints is reached. 
  3423.  
  3424.  Debugging a Workplace Shell application using IPMD will be much the same as 
  3425.  debugging a PM application. Remember that if you manually enter the name of a 
  3426.  class or instance variable into IPMD, you must prefix the name with somThis 
  3427.  instead of using the underscore ( _ ) macro. In the sample code fragment 
  3428.  illustrated in the following figure, to manipulate the _hIcon variable in 
  3429.  IPMD, use somThishIcon instead of _hIcon (selecting _hIcon with the mouse 
  3430.  works as expected). 
  3431.  
  3432.   /****************************************************/
  3433.   /*  Method: wpclsInitData                           */
  3434.   /*                                                  */
  3435.   /*  This sample shows how to initialize class data  */
  3436.   / *  associated with MyDataBase.                    */
  3437.   /****************************************************/
  3438.  
  3439.   SOM_Scope void SOMLINK MyDataBaseM_wpclsInitData(M_MyDataBase *somSelf)
  3440.   {
  3441.     /* M_MyDataBaseData *somThis = M_MyDataBaseGetData(somSelf); */
  3442.     M_MyDataBaseMethodDebug("M_MyDataBase","MyDataBaseM_wpclsInitData");
  3443.  
  3444.     hModule = _clsQueryModuleHandle(somSelf);
  3445.  
  3446.     _hIcon = WinLoadPointer(HWND_DESKTOP, hModule, ID_WINDOW);
  3447.  
  3448.     parent_wpclsInitData(somSelf);
  3449.   }
  3450.  
  3451.  
  3452. ΓòÉΓòÉΓòÉ 4. Object Aid: Help Methods ΓòÉΓòÉΓòÉ
  3453.  
  3454. This chapter describes how to write Workplace Shell applications that provide 
  3455. help information. 
  3456.  
  3457.  
  3458. ΓòÉΓòÉΓòÉ 4.1. About Help Methods ΓòÉΓòÉΓòÉ
  3459.  
  3460. While running an application or viewing a document, the user may require help 
  3461. on the application or document. For example, an application may be a descendant 
  3462. of WPFolder class, to which you added a new context menu. You then need to 
  3463. provide a help dialog for this new context menu. It is important to include the 
  3464. help information for all applications as it is used often. This chapter 
  3465. describes different methods that can be overridden in order to provide help 
  3466. from an application window when a user requests it either by: 
  3467.  
  3468.      Pressing the F1 key 
  3469.      Selecting a Help push button 
  3470.      Selecting an item from a Help submenu. 
  3471.  
  3472.  
  3473. ΓòÉΓòÉΓòÉ 4.1.1. Query and Set Object-Specific Help ΓòÉΓòÉΓòÉ
  3474.  
  3475. To query and set object-specific help for an instance of the object override 
  3476. wpQueryDefaultHelp and wpSetDefaultHelp. 
  3477.  
  3478. The wpQueryDefaultHelp method queries the default help panel ID and help 
  3479. library for this instance of the object class, as shown in the following 
  3480. figure: It automatically returns the class default help, if no object-specific 
  3481. help has been provided. 
  3482.  
  3483. wpQueryDefaultHelp (WPObject *somSelf,
  3484.                     PULONG pHelpPanelId,
  3485.                     PSZ HelpLibrary)
  3486.  
  3487. where
  3488.        pHelpPanelId  - Pointer to the help panel ID
  3489.        HelpLibrary   - Help library name returned in the buffer
  3490.  
  3491. The wpSetDefaultHelp method sets the default help panel ID and help library for 
  3492. this instance of the object class, as shown in the following figure: It allows 
  3493. different instances to have different helps displayed. Using the value zero for 
  3494. HelpPanelId and NULL for HelpLibrary, will reset the object to the default 
  3495. class help panel. 
  3496.  
  3497. wpSetDefaultHelp (WPObject *somSelf,
  3498.                   ULONG HelpPanelId,
  3499.                   PSZ HelpLibrary)
  3500.  
  3501. where
  3502.        HelpPanelId   - Help panel identity
  3503.        HelpLibrary   - Help library name returned in the buffer
  3504.  
  3505.  
  3506. ΓòÉΓòÉΓòÉ 4.1.2. Setup Strings ΓòÉΓòÉΓòÉ
  3507.  
  3508. An object's default help panel ID and help library can be set using setup 
  3509. strings. The pszSetupString contains a series of keynames in which each is 
  3510. separated by semicolons, and which changes the behavior of the object. The 
  3511. following table shows the keynames used to set the default help panel ID and 
  3512. help library: 
  3513.  
  3514. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3515. ΓöéKeyname                       ΓöéDescription                   Γöé
  3516. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3517. ΓöéHELPPANEL = id                ΓöéSets the object's default helpΓöé
  3518. Γöé                              Γöépanel. This is equivalent to  Γöé
  3519. Γöé                              Γöécalling wpSetDefaultHelp.     Γöé
  3520. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3521. ΓöéHELPLIBRARY = myobject.hlp    ΓöéSets the default help library Γöé
  3522. Γöé                              Γöéfor the object's instance.    Γöé
  3523. Γöé                              ΓöéThis is equivalent to calling Γöé
  3524. Γöé                              ΓöéwpSetDefaultHelp.             Γöé
  3525. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3526.  
  3527. The following methods can be called to set the object's default help panel ID 
  3528. and help library using setup strings: 
  3529.  
  3530.      wpSetup(WPObject *self, PSZ pszSetupString) 
  3531.  
  3532.      WinCreateObject(PSZ pszClassName, PSZ pszTitle, PSZ pszSetupString, PSZ 
  3533.       pszLocation, ULONG ulFlags) 
  3534.  
  3535.      WinSetObjectData(HOBJECT hObject, PSZ pszSetupString) 
  3536.  
  3537.  
  3538. ΓòÉΓòÉΓòÉ 4.1.3. REXX Functions ΓòÉΓòÉΓòÉ
  3539.  
  3540. The following REXX functions can be called to set the help panel ID and help 
  3541. library: 
  3542.  
  3543.      SysCreateObject(classname, title, location, setup, Flag) 
  3544.  
  3545.      SysSetObjectData(objectid, setup). 
  3546.  
  3547.  
  3548. ΓòÉΓòÉΓòÉ 4.2. Using Help Methods ΓòÉΓòÉΓòÉ
  3549.  
  3550. This section explains, through the use of sample code fragments, how to: 
  3551.  
  3552.      Display the Help dialog for a pop-up menu item 
  3553.      Modify the Help dialog for a pop-up menu item 
  3554.      Query when a user requests help from an application window. 
  3555.  
  3556.  
  3557. ΓòÉΓòÉΓòÉ 4.2.1. Displaying the Help Dialog for a Pop-Up Menu Item ΓòÉΓòÉΓòÉ
  3558.  
  3559. To display the Help dialog for a pop-up menu item, override 
  3560. wpMenuItemHelpSelected. Derived classes can override this method to: 
  3561.  
  3562.      Add the Help dialog for a new pop-up menu item 
  3563.      Modify the Help dialog for an existing menu item. 
  3564.  
  3565.  The three following sample codes show how to override wpMenuItemHelpSelected. 
  3566.  They present the class interface definition (IDL), source code (C), and 
  3567.  Information Presentation Facility (IPF) files, respectively. 
  3568.  
  3569.   passthru: C.ih;
  3570.      .
  3571.      .
  3572.      #define IDM_CLOSEVIEWS       (WPMENUID_USER+1)
  3573.      #define ID_HELP_CLOSEVIEWS   257
  3574.      .
  3575.      .
  3576.   endpassthru;
  3577.  
  3578.   //# Method modifiers
  3579.      .
  3580.      .
  3581.   wpMenuItemHelpSelected: override;
  3582.      .
  3583.      .
  3584.  
  3585.  The following sample code shows the source code for MYOBJECT when using 
  3586.  wpMenuItemHelpSelected: 
  3587.  
  3588.   /*
  3589.    *  METHOD: wpMenuItemHelpSelected
  3590.    *
  3591.    *  DESCRIPTION:
  3592.    *
  3593.    *    Process the help submenu item that was added.
  3594.    */
  3595.   SOM_Scope BOOL SOMLINK myobj_wpMenuItemHelpSelected(MYOBJECT *somSelf,
  3596.                                                       ULONG MenuId)
  3597.  
  3598.   {
  3599.     MYOBJECTData *somThis = MYOBJECTGetData(somSelf);
  3600.     MYOBJECTMethodDebug("MYOBJECT","myobj_wpMenuItemHelpSelected");
  3601.  
  3602.     switch(MenuId)
  3603.     {
  3604.       case IDM_CLOSEVIEWS:
  3605.  
  3606.       /* Append the new help library onto the system library, by calling
  3607.        * wpDisplayHelp(WPObject *self, ULONG HelpPanelId, PSZ HelpLibrary).
  3608.        * wpDisplayhelp sends a message to the help manager to display the help
  3609.        * panel.  ID_HELP_CLOSEVIEWS should have the same value as the resid in
  3610.        * the Information Presentation Facilty (MYOBJECT.IPF), that is, in this
  3611.        * particular case, ID_HELP_CLOSEVIEWS is defined as 257 and the resid
  3612.        * for the context menu help item in MYOBJECT.IPF is also 257.
  3613.        */
  3614.  
  3615.       return(_wpDisplayHelp(somSelf,ID_HELP_CLOSEVIEWS,szHelpLibrary));
  3616.       break;
  3617.  
  3618.       default:
  3619.       break;
  3620.     }
  3621.  
  3622.     /* Always return the parent's method in case of default */
  3623.     return (parent_wpMenuItemHelpSelected(somSelf,MenuId));
  3624.   }
  3625.  
  3626.  The following sample code illustrates the OS/2 Information Presentation 
  3627.  Facility (IPF) for the class MYOBJECT: 
  3628.  
  3629.   .*===============================================================*\
  3630.   .*                                                               *
  3631.   .* myobject.ipf - Information Tag Language file for the MYOBJECT *
  3632.   .*                Class sample application's help manager        *
  3633.   .*                                                               *
  3634.   .*===============================================================*/
  3635.   :userdoc.
  3636.  
  3637.   .*---------------------------------------------------------------*\
  3638.   .*  Default Help for MYOBJECT class                              *
  3639.   .*      res = ID_HELP_DEFAULT                                    *
  3640.   .*---------------------------------------------------------------*/
  3641.   :h1 res=256 name=ID_HELP_DEFAULT.MYOBJECT Class -- Help
  3642.   :i1 id=aboutMain.About MYOBJECT Class
  3643.   :p.This Class is a subclass of WPObject.
  3644.  
  3645.   .*---------------------------------------------------------------*\
  3646.   .*  Context Menu Item help                                       *
  3647.   .*      res = ID_HELP_CLOSEVIEWS                                 *
  3648.   .*---------------------------------------------------------------*/
  3649.   :h1 res=257 name=ID_HELP_CLOSEVIEWS.Close Views Menu Item
  3650.   :i1 id=IV.CloseViews
  3651.   :p.When this context menu item is chosen, all currently open views
  3652.   of this folder will be closed, except for the view that was
  3653.   initially opened.  If no views are currently open, then no action will
  3654.   be taken.
  3655.  
  3656.   :euserdoc.
  3657.  
  3658.  
  3659. ΓòÉΓòÉΓòÉ 4.2.2. Requesting Help from an Application Window ΓòÉΓòÉΓòÉ
  3660.  
  3661. When a user requests help from an application window by pressing the F1 key, 
  3662. the wpclsQueryDefaultHelp method should be overridden, as shown in the 
  3663. following figure: 
  3664.  
  3665. wpclsQueryDefaultHelp(M_MYOBJECT *somSelf,
  3666.                       PULONG pHelpPanelId,
  3667.                       PSZ HelpLibrary)
  3668.  
  3669. where
  3670.        pHelpPanelId  - Pointer to the help panel ID
  3671.        HelpLibrary   - Help library name returned in the buffer
  3672.  
  3673. This method is called to allow the class object to specify its default help 
  3674. panel for its instances. This class method is called during the default 
  3675. processing of wpQueryDefaultHelp. It can be called at any time in order to 
  3676. determine the default help panel for the object class. The WPObject class does 
  3677. not process this method other than returning FALSE. Derived classes can 
  3678. override this method to provide the default help panel ID and help module name 
  3679. for their object instances. All classes should override this method to tell the 
  3680. system what help they want displayed when the user selects the F1 key. In this 
  3681. case, also, the value of ID_HELP_DEFAULT should be the same as the resid for 
  3682. the default help for MYOBJECT class in the IPF file. The three following sample 
  3683. codes show how to override wpclsQueryDefaultHelp. They present the class 
  3684. interface definition (IDL), source code (C), and make (MAK) files, 
  3685. respectively. 
  3686.  
  3687. passthru: C.ih;
  3688.     .
  3689.     .
  3690.   #define ID_HELP_DEFAULT  256
  3691.     .
  3692.     .
  3693.  
  3694. endpassthru;
  3695.  
  3696. //# Class modifiers
  3697.     .
  3698.     .
  3699. wpclsQueryDefaultHelp: override;
  3700.     .
  3701.     .
  3702.  
  3703. The following sample code shows the source code of MYOBJECT when overriding 
  3704. wpclsQueryDefaultHelp: 
  3705.  
  3706. /*
  3707.  *  METHOD: wpclsQueryDefaultHelp
  3708.  *
  3709.  *  DESCRIPTION:
  3710.  *
  3711.  *    Process input from the help submenu item that was added.
  3712.  */
  3713. SOM_Scope BOOL SOMLINK myobjM_wpclsQueryDefaultHelp(M_MYOBJECT *somSelf,
  3714.                                                     PULONG pHelpPanelId,
  3715.                                                     PSZ pszHelpLibrary)
  3716.  
  3717. {
  3718.   /* M_MYOBJECTData *somThis = M_MYOBJECTGetData(somSelf); */
  3719.   M_MYOBJECTMethodDebug("M_MYOBJECT","myobjM_wpclsQueryDefaultHelp");
  3720.  
  3721.   if (pHelpPanelId)    /* Set the default help panel ID */
  3722.     *pHelpPanelId = ID_HELP_DEFAULT;
  3723.  
  3724.   if (pszHelpLibrary)  /* Copy the help file name */
  3725.     strcpy(pszHelpLibrary, szHelpLibrary);
  3726.  
  3727.   return (TRUE);
  3728. }
  3729.  
  3730. The help library can be created by using the IPFC compiler. The following 
  3731. figure shows the make file of MYOBJECT: 
  3732.  
  3733. myobject.hlp:  $$(@B).ipf
  3734.                ipfc $*.ipf
  3735.  
  3736.  
  3737. ΓòÉΓòÉΓòÉ 5. Object Containers: Container Methods ΓòÉΓòÉΓòÉ
  3738.  
  3739. A container is a visual component that holds objects. CUA container control is 
  3740. the primary way of interacting with Workplace Shell objects. All objects with 
  3741. which the user interacts are simply records that have been inserted into a 
  3742. container control. Any Workplace Shell object can be inserted into any 
  3743. container control created on the Workplace process. This chapter describes the 
  3744. different views available for containers, and the methods used to create and 
  3745. manipulate containers in Workplace Shell applications. 
  3746.  
  3747.  
  3748. ΓòÉΓòÉΓòÉ 5.1. About Container Methods ΓòÉΓòÉΓòÉ
  3749.  
  3750. A container can display objects in various formats and views. Generally 
  3751. speaking, each view displays different information about each object. If a 
  3752. container's data is too large for the window's work area, scrolling mechanisms 
  3753. are enabled. Containers are an integral component of the CUA user interface. 
  3754.  
  3755.  
  3756. ΓòÉΓòÉΓòÉ 5.1.1. Container Views ΓòÉΓòÉΓòÉ
  3757.  
  3758. A Container view lists the components of an object. The components can be 
  3759. ordered or unordered in the view; the order of the information displayed in a 
  3760. contents view does not affect the meaning of the object containing the 
  3761. information. CUA guidelines describe three kinds of Container views: 
  3762.  
  3763.      Icon view 
  3764.  
  3765.       An Icon view displays each object as an icon. Its purpose is to give the 
  3766.       user an easy way to change the position of objects or to otherwise 
  3767.       directly manipulate them. 
  3768.  
  3769.       An object usually is represented by only one icon. However, for some 
  3770.       tasks, the user might find it convenient to represent an object with more 
  3771.       than one icon. For example, the user might want a representation of a 
  3772.       printer object in more than one place so that the user can have easy 
  3773.       access to the printer from anywhere. The user can create an additional 
  3774.       icon, known as a shadow, to represent the same printer object. The 
  3775.       following figure shows an Icon view with objects: 
  3776.  
  3777.      Tree view 
  3778.  
  3779.       The Tree view displays container objects arranged hierarchically. 
  3780.  
  3781.       The leftmost objects displayed in the Tree view are at the root level and 
  3782.       are the same objects displayed in all the other Container views. Objects 
  3783.       that contain other objects are called parent objects. The objects that a 
  3784.       parent object contains are called child objects and can be displayed only 
  3785.       in the Tree view. Child objects that contain other objects serve a dual 
  3786.       role: they are the children of their parent object, but they are parent 
  3787.       objects as well, with children of their own. For example, a parent object 
  3788.       might be a book that contains individual child objects for its chapters 
  3789.       or a folder that contains several reports. The chapters or reports, in 
  3790.       turn, could be parent objects that contain their own children, such as 
  3791.       the major sections of a chapter or report. 
  3792.  
  3793.       If the child objects of a parent object are not displayed, the parent 
  3794.       object can be Expanded to display them as a new branch in the Tree view. 
  3795.       Once a parent item has been expanded, it can be Collapsed to remove its 
  3796.       child objects from the display. The following figure shows a Tree view 
  3797.       with objects: 
  3798.  
  3799.      Details view 
  3800.  
  3801.       A Details view combines small icons with text that provides additional 
  3802.       information about objects. The type of information displayed depends on 
  3803.       the type of object and the type of tasks the user wants to perform. A 
  3804.       Details view gives the user access to some of the object's more 
  3805.       frequently used information, without requiring the user to open the 
  3806.       object. Small icons are included in a Details view to provide a way for 
  3807.       the user to easily recognize objects and to directly manipulate each 
  3808.       object. Some Workplace Shell classes define a set of information that a 
  3809.       user can display in a Details view of all instances of objects belonging 
  3810.       to the class. The following figure shows a Details view with objects: 
  3811.  
  3812.  
  3813. ΓòÉΓòÉΓòÉ 5.1.2. Container Objects ΓòÉΓòÉΓòÉ
  3814.  
  3815. A container object holds other objects. Its primary purpose is to provide a way 
  3816. for the user to group related objects for easy access and retrieval. To 
  3817. illustrate its importance, consider the example of the design of a software 
  3818. model of a car dealership. A salesperson needs a car object to represent each 
  3819. car model on his lot. He also needs a customer object to represent each 
  3820. customer who purchases a car. He needs a worksheet object to track sales, 
  3821. profits, inventory, customers, and so on. Finally, he needs a container objects 
  3822. to group these objects. The following figure shows a container holding several 
  3823. related objects: 
  3824.  
  3825.  
  3826. ΓòÉΓòÉΓòÉ 5.2. Using Container Methods ΓòÉΓòÉΓòÉ
  3827.  
  3828. This section provides an example of what the Workplace Shell covers versus the 
  3829. container control. Secondly, it explains why the Workplace Shell subclasses the 
  3830. owner of a container and the frame window. Finally, this section describes the 
  3831. Workplace Shell container methods. More specifically, it explains how to: 
  3832.  
  3833.      Insert one object into a container 
  3834.  
  3835.      Insert multiple objects into a container 
  3836.  
  3837.      Remove an object from a container 
  3838.  
  3839.      Set emphasis on an object 
  3840.  
  3841.      Register a new open view 
  3842.  
  3843.      Obtain the object's MINIRECORDCORE pointer 
  3844.  
  3845.      Obtain a pointer to an object 
  3846.  
  3847.  
  3848. ΓòÉΓòÉΓòÉ 5.2.1. Workplace Shell and the Container Control ΓòÉΓòÉΓòÉ
  3849.  
  3850. CUA container control is the primary key of interacting with Workplace Shell 
  3851. objects. All objects with which the user interacts are simply records that have 
  3852. been inserted into a container control. 
  3853.  
  3854. The container control uses RECORDCORE and MINIRECORDCORE structures to 
  3855. represent the items that it holds. Memory for these structures is allocated by 
  3856. sending the container a CM_ALLOCRECORD message. When memory is allocated, the 
  3857. records may be inserted using the CM_INSERTRECORD message. The Workplace Shell 
  3858. provides object instance methods that perform all of this for you. 
  3859.  
  3860. When an object is created, the Workplace Shell automatically allocates memory 
  3861. for the MINIRECORDCORE structure and stores the pointer in the object's 
  3862. instance data. Only one MINIRECORDCORE per object is used even if the object 
  3863. exists in multiple views. 
  3864.  
  3865. The wpQueryCoreRecord method can be used to obtain the pointer to the 
  3866. MINIRECORDCORE structure that was allocated when the object was created. You 
  3867. would use this method to obtain a pointer to the MINIRECORDCORE structure that 
  3868. the container is using to represent the object. This may be necessary if you 
  3869. need to perform a task and no instance method for that task exists. If the 
  3870. container can perform the task, the application can use _wpQueryCoreRecord to 
  3871. obtain the PMINIRECORDCORE and send the container a message explicitly. The 
  3872. OBJECT_FROM_PREC macro performs the inverse function of _wpQueryCoreRecord and 
  3873. is used to obtain a pointer to the object (self) when the pointer to the 
  3874. MINIRECORDCORE structure is known. 
  3875.  
  3876.  
  3877. ΓòÉΓòÉΓòÉ 5.2.2. Workplace Shell Container Owner Subclass Procedure ΓòÉΓòÉΓòÉ
  3878.  
  3879. Any Workplace Shell object can be inserted into any container control created 
  3880. on the Workplace process using wpCnrInsertObject. When an object is inserted 
  3881. into a container via _wpCnrInsertObject, the Workplace Shell subclasses the 
  3882. owner of the container, and intercept some messages and notifications from the 
  3883. container. In this way, the Workplace Shell provides support that maps 
  3884. container records to their WPObject counterparts, and related behaviors. In 
  3885. other words, using the object's instance methods to insert an object into a 
  3886. container allows the object to inherit all of the Workplace Shell features, 
  3887. such as context menu, and Pickup and Drop operation. 
  3888.  
  3889. Note:  Since the Workplace Shell subclasses the container control's owner, you 
  3890.        can only have ONE container control into which you are inserting objects 
  3891.        per owner. This means you may have to expand your window hierarchy. 
  3892.  
  3893.  When a view is registered, the Workplace Shell subclasses the frame window. 
  3894.  The Workplace Shell adds the viewed object's context menu to the system menu 
  3895.  of the view. The Workplace Shell assumes that the container window has an ID 
  3896.  of FID_CLIENT and that the container's owner is a frame window. This means 
  3897.  that the container window is the client area of a frame window that was 
  3898.  created with WinCreateStdWindow. 
  3899.  
  3900.  When a view of an object is opened, a USAGE_OPENVIEW item is added to the 
  3901.  object's in-use list. The USAGE_OPENVIEW items are used to automatically 
  3902.  switch to the open view when the user chooses to open the same view again. 
  3903.  This behavior is controlled by wpOpen or wpSwitchTo. For more detail on the 
  3904.  USAGE_OPENVIEW item, see Object Usage: Usage Methods. 
  3905.  
  3906.  
  3907. ΓòÉΓòÉΓòÉ 5.2.3. Inserting Container Objects ΓòÉΓòÉΓòÉ
  3908.  
  3909. The wpCnrInsertObject and wpclsInsertMultipleObjects methods are used to insert 
  3910. objects into a container window. Objects inserted using these methods 
  3911. automatically inherit the default Workplace Shell behavior such as context 
  3912. menus, and Pickup and Drop capability. When an object is inserted into a 
  3913. container, the Workplace Shell will add a USAGE_RECORD item to the object's 
  3914. in-use list. There will be one of these USAGE_RECORD items for each view 
  3915. (container window) that the object is inserted in. These methods send the 
  3916. CM_INSERTRECORD message to the container window. 
  3917.  
  3918.  
  3919. ΓòÉΓòÉΓòÉ 5.2.3.1. Inserting One Object ΓòÉΓòÉΓòÉ
  3920.  
  3921. The wpCnrInsertObject method inserts a record into a container control window. 
  3922. The following shows the syntax of wpCnrInsertObject: 
  3923.  
  3924. #define INCL_WINWORKPLACE
  3925. #include <os2.h>
  3926.  
  3927. PMINIRECORDCORE wpCnrInsertObject (WPObject *self,
  3928.                                    HWND hwndCnr,
  3929.                                    PPOINTL pIcon,
  3930.                                    PMINIRECORDCORE pParent,
  3931.                                    PRECORDINSERT pRecInsert)
  3932.  
  3933. The self (WPObject *) parameter is the pointer to the object on which the 
  3934. method is being invoked. It points to an object of class WPObject. 
  3935.  
  3936. The hwndCnr (HWND) parameter is the handle of the container control window. 
  3937.  
  3938. The pIcon (PPOINTL) parameter is the pointer to a POINTL structure specifying 
  3939. the initial icon position in the container control window. 
  3940.  
  3941. The pParent (PMINIRECORDCORE) parameter is the pointer to the parent record. 
  3942. The pParent parameter specifies the record of the immediate parent of the 
  3943. record being inserted. This parameter should be set to NULL, if the record has 
  3944. no parent or if the Tree view is not supported. 
  3945.  
  3946. The pRecInsert (PRECORDINSERT) parameter is the pointer to the RECORDINSERT 
  3947. structure specifying how this record is to be inserted relative to other 
  3948. records in the same container. The possible values of this parameter are: 
  3949.  
  3950.  Value                    Description 
  3951.  
  3952.  NULL                     Insert the record into the next available position. 
  3953.  
  3954.  Other                    Insert the record into the position specified by 
  3955.                           pRecInsert. 
  3956.  
  3957.  The rc (PMINIRECORDCORE) parameter is returned with one of the following 
  3958.  values: 
  3959.  
  3960.  Value                    Description 
  3961.  
  3962.  NULL                     Error occurred. 
  3963.  
  3964.  Other                    Pointer to the inserted record. 
  3965.  
  3966.  This method is used to give Workplace Shell object behavior (such as context 
  3967.  menu support) to records inserted directly into a WC_CONTAINER control window. 
  3968.  To remove records from the container, a call to wpCnrRemoveObject should be 
  3969.  made. The following figure shows the insertion of an object into a container 
  3970.  control window: 
  3971.  
  3972.   /************************************************************************/
  3973.   /* This sample code assumes that the object has already been created    */
  3974.   /* using wpclsNew and object's pointer has been obtained                */
  3975.   /* using wpclsQueryObject.                                              */
  3976.   /************************************************************************/
  3977.  
  3978.   WPObject *self;                           /* The object to be inserted  */
  3979.   HWND hwndCnr;                             /* Handle of the container    */
  3980.                                             /* window                     */
  3981.   POINTL ptlIcon;                           /* Location within container  */
  3982.                                             /* to place record            */
  3983.   RECORDINSERT RecordInsert;                /* Container RECORDINSERT     */
  3984.                                             /* data structure             */
  3985.  
  3986.   /************************************************************************/
  3987.   /* Set up the RECORDINSERT data structure.                              */
  3988.   /* The object will be inserted at the beginning of the list of records. */
  3989.   /************************************************************************/
  3990.  
  3991.   RecordInsert.cb = sizeof(RECORDINSERT);   /* Size of the RECORDINSERT   */
  3992.                                             /* data structure             */
  3993.   RecordInsert.pRecordParent = NULL;        /* Insert record at root      */
  3994.                                             /* level                      */
  3995.   RecordInsert.zOrder = CMA_TOP;            /* Top of the z-order         */
  3996.   RecordInsert.cRecordsInsert = 1;          /* Inserting 1 record         */
  3997.   RecordInsert.fInvalidateRecord = TRUE;    /* Invalidate record at the   */
  3998.                                             /* time it is inserted        */
  3999.   RecordInsert.pRecordOrder =               /* Place record at beginning  */
  4000.     (PRECORDCORE)CMA_FIRST;                 /* of the list of records     */
  4001.                                             /* already inserted           */
  4002.  
  4003.   /************************************************************************/
  4004.   /* Initialize the location where the object will be inserted.           */
  4005.   /************************************************************************/
  4006.  
  4007.   ptlIcon.x = 50;
  4008.   ptlIcon.y = 50;
  4009.  
  4010.   /************************************************************************/
  4011.   /* Inserting object at location 50,50.                                  */
  4012.   /************************************************************************/
  4013.  
  4014.   _wpCnrInsertObject(self, hwndCnr, &ptlIcon, NULL, &RecordInsert)
  4015.  
  4016.  
  4017. ΓòÉΓòÉΓòÉ 5.2.3.2. Inserting Multiple Objects ΓòÉΓòÉΓòÉ
  4018.  
  4019. The wpclsInsertMultipleObjects method is used to insert multiple objects into a 
  4020. container window at one time. The following shows the syntax of 
  4021. wpclsInsertMultipleObjects: 
  4022.  
  4023. #define INCL_WINWORKPLACE
  4024. #include <os2.h>
  4025.  
  4026. BOOL wpclsInsertMultipleObjects(M_WPObject *self,
  4027.                                 HWND hwndCnr,
  4028.                                 PPOINTL pptlIcon,
  4029.                                 PVOID *pObjectArray,
  4030.                                 PVOID pRecordParent,
  4031.                                 ULONG NumRecords)
  4032.  
  4033. The self (M_WPObject *) parameter is the pointer to the WPObject class object. 
  4034.  
  4035. The hwndCnr (HWND) parameter is the handle of the container window to insert 
  4036. objects into. 
  4037.  
  4038. The pptlIcon (PPOINTL) parameter is the pointer to a POINTL structure 
  4039. specifying the coordinates for the position of the first object inserted. 
  4040.  
  4041. The pObjectArray (PVOID *) parameter is the pointer to an array of object 
  4042. pointers. The objects in this array are to be inserted into the container. 
  4043.  
  4044. The pRecordParent (PVOID) parameter is the parent record pointer. This 
  4045. parameter should be set to NULL if the records being inserted will not have a 
  4046. parent or if the Tree view is not supported. 
  4047.  
  4048. The NumRecords (ULONG) parameter is the number of objects in the pObjectArray 
  4049. parameter. 
  4050.  
  4051. The rc (BOOL) parameter is returned with one of the following values: 
  4052.  
  4053.  Boolean                  Description 
  4054.  
  4055.  TRUE                     Objects successfully inserted into the container. 
  4056.  
  4057.  FALSE                    Error occurred. 
  4058.  
  4059.  This method is used for the rapid insertion of multiple objects into the 
  4060.  container all at once. The wpCnrInsertObject method performs the same function 
  4061.  as this method but operates on only one object at a time. This method will add 
  4062.  each of the objects to the in-use list. The following figure shows the 
  4063.  insertion of multiple objects into a container control window: 
  4064.  
  4065.   BOOL wpclsInsertMultipleObjects(M_WPObject *self,
  4066.                                   HWND hwndCnr,
  4067.                                   PPOINTL pptlIcon,
  4068.                                   PVOID *pObjectArray,
  4069.                                   PVOID pRecordParent,
  4070.                                   ULONG NumRecords)
  4071.  
  4072.   M_WPObject *self;
  4073.   HWND hwndCnr;
  4074.   POINTL ptlIcon;
  4075.   PVOID pObjectArray{5};
  4076.   ULONG i;
  4077.  
  4078.   /************************************************************************/
  4079.   /* pObjectArray has been filled in with pointers to objects             */
  4080.   /* created using WinCreateObject or wpClsNew                            */
  4081.   /************************************************************************/
  4082.  
  4083.   /************************************************************************/
  4084.   /* Initial location for first object being inserted.                    */
  4085.   /************************************************************************/
  4086.  
  4087.   ptlIcon.x = 50;
  4088.   ptlIcon.y = 50;
  4089.  
  4090.   /************************************************************************/
  4091.   /* Inserting multiple objects.                                          */
  4092.   /************************************************************************/
  4093.  
  4094.   _wpclsInsertMultipleObjects(self, hwndCnr, &ptlIcon, &pObjectArray, NULL,5);
  4095.  
  4096.  
  4097. ΓòÉΓòÉΓòÉ 5.2.4. Removing Container Objects ΓòÉΓòÉΓòÉ
  4098.  
  4099. The wpCnrRemoveObject method should be called to remove an object from a 
  4100. container, if that object was inserted using either wpCnrInsertObject or 
  4101. wpclsInsertMultipleObjects. When the object is removed from a container, the 
  4102. USAGE_RECORD item, which was added to the in-use list when the object was 
  4103. inserted, will be removed. This method sends the CM_REMOVERECORD message to the 
  4104. container. The following shows the syntax of wpCnrRemoveObject: 
  4105.  
  4106. #define INCL_WINWORKPLACE
  4107. #include <os2.h>
  4108.  
  4109. BOOL wpCnrRemoveObject (WPObject *self,
  4110.                         HWND hwndCnr,
  4111.                         PMINIRECORDCORE pRecord)
  4112.  
  4113. The self (WPObject *) parameter is the pointer to the object on which the 
  4114. method is being invoked. It points to an object of class WPObject. 
  4115.  
  4116. The hwndCnr (HWND) parameter is the handle of the container control window. 
  4117.  
  4118. The pRecord (PMINIRECORDCORE) parameter is the pointer to the record to be 
  4119. removed. 
  4120.  
  4121. rc (BOOL) is returned with one of the following values: 
  4122.  
  4123.  Boolean                  Description 
  4124.  
  4125.  TRUE                     Record successfully removed. 
  4126.  
  4127.  FALSE                    Error occurred. 
  4128.  
  4129.  The following figure shows the deletion of an object from a container control 
  4130.  window: 
  4131.  
  4132.   /************************************************************************/
  4133.   /* This sample code assumes that the object has already been            */
  4134.   /* created using wpclsNew and object's point has been                   */
  4135.   /* obtained using wpclsQueryObject.                                     */
  4136.   /************************************************************************/
  4137.  
  4138.   WPObject *self;               /* The object to be removed               */
  4139.   HWND hwndCnr;                 /* Handle of the container window         */
  4140.   PMINIRECORDCORE pRecord;      /* Pointer to container record            */
  4141.  
  4142.   /************************************************************************/
  4143.   /* Removing the record from the container window.                       */
  4144.   /************************************************************************/
  4145.  
  4146.   _wpCnrRemoveObject(self, hwndCnr, pRecord);
  4147.  
  4148.  
  4149. ΓòÉΓòÉΓòÉ 5.2.5. Setting Emphasis on Objects ΓòÉΓòÉΓòÉ
  4150.  
  4151. The wpCnrSetEmphasis method provides a way to change the visual emphasis of an 
  4152. object. Visual emphasis can be used to give the user feedback as to the state 
  4153. of the object. For example, when a folder is opened on the Desktop, in-use 
  4154. emphasis is added to the folder icon. The Workplace Shell accomplishes this by 
  4155. calling wpCnrSetEmphasis on the object. 
  4156.  
  4157. This method sends the CM_SETRECORDEMPHASIS message to the container. The CRA_* 
  4158. flags that are specified for the ulEmphasisAttr parameter are the same as those 
  4159. for the CM_SETRECORDEMPHASIS container message. The following shows the syntax 
  4160. of wpCnrSetEmphasis: 
  4161.  
  4162. #define INCL_WINWORKPLACE
  4163. #include <os2.h>
  4164.  
  4165. BOOL wpCnrSetEmphasis (WPObject *self, ULONG ulEmphasisAttr, BOOL fTurnOn)
  4166.  
  4167. The self (WPObject *) parameter is the pointer to the object on which the 
  4168. method is being invoked. It points to an object of class WPObject. 
  4169.  
  4170. The ulEmphasisAttr (ULONG) parameter is the type of emphasis to set on the 
  4171. object. The CRA_* flags are as follows. These flags are the container's record 
  4172. attribute flags. The flags may be combined using the logical OR ( | ) operator. 
  4173.  
  4174.  Emphasis Type            Description 
  4175.  
  4176.  CRA_CURSORED             Specifies that the record will be drawn with a 
  4177.                           selection cursor. 
  4178.  
  4179.  CRA_DISABLED             Specifies that the record will be drawn with 
  4180.                           unavailable-state emphasis. 
  4181.  
  4182.  CRA_INUSE                Specifies that a record will be drawn with in-use 
  4183.                           emphasis. 
  4184.  
  4185.  CRA_PICKED               Specifies that the record will be drawn with "picked" 
  4186.                           emphasis. It is part of the Pickup and Drop 
  4187.                           operation. 
  4188.  
  4189.  CRA_SELECTED             Specifies that a record will be drawn with 
  4190.                           selected-state emphasis. 
  4191.  
  4192.  CRA_SOURCE               Specifies that the record will be drawn with 
  4193.                           source-menu emphasis. 
  4194.  
  4195.  The fTurnOn (BOOL) parameter sets or resets the specified attribute. 
  4196.  
  4197.  Boolean                  Description 
  4198.  
  4199.  TRUE                     Set the specified attribute. 
  4200.  
  4201.  FALSE                    Reset the specified attribute. 
  4202.  
  4203.  rc (BOOL) is returned with one of the following values: 
  4204.  
  4205.  Boolean                  Description 
  4206.  
  4207.  TRUE                     Attribute successfully set. 
  4208.  
  4209.  FALSE                    Error occurred. 
  4210.  
  4211.  The following figure shows how to set the emphasis on a container object: 
  4212.  
  4213.   /************************************************************************/
  4214.   /* This sample code assumes that the object has already been created    */
  4215.   /* using wpclsNew and object's pointer has been obtained                */
  4216.   /* using wpclsQueryObject.                                              */
  4217.   /************************************************************************/
  4218.  
  4219.   WPObject *self;              /* The object whose emphasis is being set  */
  4220.   ULONG ulEmphasis;            /* ULONG data structure                    */
  4221.  
  4222.   ulEmphasis = CRA_INUSE;      /* Emphasis type desired                   */
  4223.  
  4224.   /************************************************************************/
  4225.   /* Setting emphasis on the object.                                      */
  4226.   /************************************************************************/
  4227.  
  4228.   _wpCnrSetEmphasis(self, ulEmphasis, TRUE);
  4229.  
  4230.  
  4231. ΓòÉΓòÉΓòÉ 5.2.6. Registering a New Open View ΓòÉΓòÉΓòÉ
  4232.  
  4233. The wpRegisterView method should be called whenever a new view of an object is 
  4234. created. Registering a view will set the title of the frame window to the 
  4235. object's title and add the view title as the current view in the window list. 
  4236. The wpRegisterView method is used to allow an object to register a new open 
  4237. view. The following shows the syntax of wpRegisterView: 
  4238.  
  4239. #define INCL_WINWORKPLACE
  4240. #include <os2.h>
  4241.  
  4242. BOOL wpRegisterView (WPObject *self, HWND hwndFrame, PSZ pszViewTitle)
  4243.  
  4244. The self (WPObject *) parameter is the pointer to the object on which the 
  4245. method is being invoked. It points to an object of class WPObject. 
  4246.  
  4247. The hwndFrame (HWND) parameter is the handle of the frame window containing the 
  4248. new view. 
  4249.  
  4250. The pszViewTitle (PSZ) parameter is the pointer to a string containing the name 
  4251. of the view. 
  4252.  
  4253. The rc (BOOL) parameter is returned with one of the following values: 
  4254.  
  4255.  Boolean                  Description 
  4256.  
  4257.  TRUE                     New view successfully registered. 
  4258.  
  4259.  FALSE                    Error occurred. 
  4260.  
  4261.  Registering a view will set the object title as the title of the frame window 
  4262.  and add a view title as the current view in the window list and titlebar. The 
  4263.  following figure shows how to register a new open view of an object: 
  4264.  
  4265.   WPObject *self;
  4266.   HWND hwndFrame;
  4267.   PSZ pszViewTitle="OS/2 Programs - Icon View";
  4268.  
  4269.   _wpRegisterView(self, hwndFrame, pszViewTitle);
  4270.  
  4271.  
  4272. ΓòÉΓòÉΓòÉ 5.2.7. Obtaining the Object's MINIRECORDCORE Pointer ΓòÉΓòÉΓòÉ
  4273.  
  4274. The wpQueryCoreRecord method is used to obtain a pointer to the MINIRECORDCORE 
  4275. structure associated with a given object. When an object is created, the 
  4276. Workplace Shell automatically allocates memory for a MINIRECORDCORE structure 
  4277. and stores a pointer to it in the object's instance data. The following shows 
  4278. the syntax of wpQueryCoreRecord: 
  4279.  
  4280. #define INCL_WINWORKPLACE
  4281. #include <os2.h>
  4282.  
  4283. PMINIRECORDCORE wpQueryCoreRecord (WPObject *self);
  4284.  
  4285. The self (WPObject *) paramter is the pointer to the object on which the method 
  4286. is being invoked. It points to an object of class WPObject. 
  4287.  
  4288. The pRecord (PMINIRECORDCORE) parameter is returned. It points to the 
  4289. MINIRECORDCORE structure for the object. 
  4290.  
  4291. Every object has a MINIRECORDCORE structure associated with it so it can be 
  4292. placed into a container. This method is used to obtain the PMINIRECORDCORE when 
  4293. the pointer to the object is known. The following figure shows how to obtain a 
  4294. pointer to the MINIRECORDCORE structure associated with an object: 
  4295.  
  4296. PMINIRECORDCORE pRecord;
  4297. WPObject *self;
  4298.  
  4299. pRecord = _wpQueryCoreRecord(self);
  4300.  
  4301.  
  4302. ΓòÉΓòÉΓòÉ 5.2.7.1. Obtaining a Pointer to an Object ΓòÉΓòÉΓòÉ
  4303.  
  4304. The OBJECT_FROM_PREC macro is used to obtain a pointer to an object when the 
  4305. PMINIRECORDCORE is known. The following figure shows how to obtain a pointer to 
  4306. an object: 
  4307.  
  4308. WPObject *self;
  4309. PMINIRECORDCORE pRecord;
  4310.  
  4311. self = OBJECT_FROM_PREC(pRecord);
  4312.  
  4313.  
  4314. ΓòÉΓòÉΓòÉ 6. Object Criteria: Details Methods ΓòÉΓòÉΓòÉ
  4315.  
  4316. The class defines the object's instance data and methods. Details data are part 
  4317. of instance data and define more accurately the behavior of the object. This 
  4318. chapter describes the general concepts of Details data and explains how to use 
  4319. the details methods in Workplace Shell applications. 
  4320.  
  4321.  
  4322. ΓòÉΓòÉΓòÉ 6.1. About Details Methods ΓòÉΓòÉΓòÉ
  4323.  
  4324. The basic unit of organization of SOM programs is the object. SOM objects 
  4325. consist of instance data and methods. SOM classes define the behavior of sets 
  4326. of like objects. You can think of a SOM class as a description of an object. 
  4327. The class defines the object's instance data and methods. Details data are part 
  4328. of instance data and define more accurately the behavior of the object. 
  4329.  
  4330. Not all classes have the Details data section defined. Only those classes that 
  4331. have a requirement to store such information define this section as part of the 
  4332. instance data. After the Details data are defined, it is the class creator's 
  4333. responsibility to set and use them correctly. Details data allows you to: 
  4334.  
  4335.      Define, for a class of objects, some confidential data along with general 
  4336.       data 
  4337.  
  4338.      Have a special container Details view 
  4339.  
  4340.      Choose specific Details fields to be displayed in Details view by 
  4341.       filtering out unwanted fields 
  4342.  
  4343.      Filter objects that match or do not match a set of criteria 
  4344.  
  4345.      Search for objects based on a single or complex set of criteria 
  4346.  
  4347.      Sort objects. 
  4348.  
  4349.  The Details data of all objects contained in a container can be displayed in a 
  4350.  Details view. The fields that are displayed in the Details view correspond to 
  4351.  the Object type (class object) that is selected in the View page (page three 
  4352.  of the View pages) of the Settings notebook. Once the Object type selected, 
  4353.  the fields are listed in the Details to display drop-down list box. the 
  4354.  following figure shows an example of the Details view for a Workplace Shell 
  4355.  class. Each record provides information for a specific instance of an object 
  4356.  belonging to the class. 
  4357.  
  4358.                           Details for Instances of MyObject Class
  4359.                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4360.                 Γöé Icon  Γöé  Title  Γöé Object Class ΓöéΓöé Field1 Γöé Field2 Γöé Field3 Γöé
  4361.                 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4362.     Instance 1  Γöé       Γöé         Γöé              ΓöéΓöé        Γöé        Γöé        Γöé
  4363.                 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4364.     Instance 2  Γöé       Γöé         Γöé              ΓöéΓöé        Γöé        Γöé        Γöé
  4365.                 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4366.                 Γöé       Γöé         Γöé              ΓöéΓöé        Γöé        Γöé        Γöé
  4367.                 Γöé       Γöé         Γöé              ΓöéΓöé        Γöé        Γöé        Γöé
  4368.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤Γö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4369.  
  4370.  This Details view window is two windows separated by a split bar. The left 
  4371.  side of the window contains, at least, the Title column (the default column) 
  4372.  and can also contain the Details fields available for all classes and, in 
  4373.  turn, for all objects. The right side of the window can be empty, if the 
  4374.  objects to be represented are not descended from the chosen class. The user 
  4375.  can choose: 
  4376.  
  4377.      Which class provides Details fields to the window 
  4378.  
  4379.      Which Details fields of this class are visible. 
  4380.  
  4381.  By default, the system sets the WPFileSystem class that provides all Details 
  4382.  fields to be visible. The Workplace Shell provides a Settings notebook, page 
  4383.  three of the View pages, to set the class and Details fields to be displayed 
  4384.  in the Details view. The following figure shows the Settings notebook, page 
  4385.  three of the View pages: 
  4386.  
  4387.  A record that contains information for an object instance of the class is 
  4388.  created by overriding wpQueryDetailsData. The column headings for a Details 
  4389.  view are specified by overriding wpclsQueryDetailsInfo. 
  4390.  
  4391.  An object can inherit the set of Details data defined by its ancestors. A 
  4392.  record containing Details data for an object can also contain sets of Details 
  4393.  data from objects that are defined by its parent or ancestors. The Workplace 
  4394.  Shell handles this by creating records of contiguous blocks of memory. To 
  4395.  inherit the details defined by ancestor classes, wpQueryDetailsData calls the 
  4396.  parent class wpQueryDetailsData, which calls its parent class 
  4397.  wpQueryDetailsData, and so forth, until the oldest ancestor that defined 
  4398.  Details data is reached. In addition to inheriting Details data from its 
  4399.  ancestors, the object can have some of its own. For each call to 
  4400.  wpQueryDetailsData, a variable-length block of memory containing a set of 
  4401.  Details data for the object is added to the record. A pointer is moved to the 
  4402.  end of the last block of memory added to the record, where the next call to 
  4403.  wpQueryDetailsData adds the next block of memory. Each block in the record 
  4404.  contains a set of Details data for the object defined by its class or by one 
  4405.  of its ancestor classes, as shown in the following figure: 
  4406.  
  4407.  
  4408.       ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4409.              Γöé Details Defined Γöé Details Defined Γöé Details Defined Γöé
  4410.              Γöé by MyObject's   Γöé by MyObject's   Γöé by MyObject     Γöé
  4411.              Γöé Ancestor        Γöé Parent          Γöé                 Γöé
  4412.       ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4413.  
  4414.  The format for Details data contained in a record is defined by overriding 
  4415.  wpclsQueryDetailsInfo. The format is defined in a linked list of 
  4416.  CLASSFIELDINFO data structures for each Details field in a record. This linked 
  4417.  list is created the same way as a record: wpclsQueryDetailsInfo calls its 
  4418.  parent class wpclsQueryDetailsInfo, which calls its parent class 
  4419.  wpclsQueryDetailsInfo, and so forth. Each call adds a set of CLASSFIELDINFO 
  4420.  data structures to the linked list until the list contains all CLASSFIELDINFO 
  4421.  data structures for each Details field of the object's Details record, as 
  4422.  shown in the following figure: 
  4423.  
  4424.  
  4425.        Format of          Format of                   Format of
  4426.        Details Data       Details Data                Details Data
  4427.        Defined by         Defined by                  Defined by
  4428.        its Ancestor       its Parent                  MyObject
  4429.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4430.    ΓöÇΓöÇ>Field1ΓöÇ>Field2ΓöÇΓöÇΓöÇΓöÇ>Field3ΓöÇ>Field4ΓöÇΓöÇΓöÇΓöÇ>Field5ΓöÇ>Field6ΓöÇ>Field7ΓöÇ>Field8ΓöÇΓöÇΓöÇ>
  4431.  
  4432.  The CLASSFIELDINFO data structure describes the attributes of Details data for 
  4433.  each field. 
  4434.  
  4435.  
  4436. ΓòÉΓòÉΓòÉ 6.2. Using Details Methods ΓòÉΓòÉΓòÉ
  4437.  
  4438. The CAR sample Workplace Shell object in the Toolkit can be used to illustrate 
  4439. the requirements for defining Details data for a class of objects. CAR can 
  4440. provide Details data for CAR objects by: 
  4441.  
  4442.    1. Defining a data structure for the Details fields to be included in the 
  4443.       Details view, as shown in the following sample code: 
  4444.  
  4445.             /* CARDETAILS:  Structure used for Details view  */
  4446.  
  4447.             typedef struct _CARDETAILS
  4448.             {
  4449.                PSZ      pszMake;     /* Manufacturer     */
  4450.                PSZ      pszModel;    /* Model            */
  4451.                PSZ      pszColor;    /* Color of car     */
  4452.                CDATE    cdateSale;   /* Date of sale     */
  4453.                ULONG    ulPrice;     /* Price in dollars */
  4454.             }
  4455.             CARDETAILS;
  4456.             typedef CARDETAILS *PCARDETAILS;
  4457.  
  4458.    2. Defining and initializing a static array of CLASSFIELDINFO structures for 
  4459.       each set of Details data, as shown in the following sample code. This is 
  4460.       done on class initialization, when wpclsInitData is called. 
  4461.  
  4462.       Note:  Title and Icon details are defined for CAR objects by its ancestor 
  4463.              class WPObject. This means that the CLASSFIELDINFO data structures 
  4464.              for Title and Icon details are defined and initialized in the 
  4465.              WPObject class definition. 
  4466.  
  4467.             #define NUM_CAR_FIELDS 5
  4468.  
  4469.             CLASSFIELDINFO fieldinfo[NUM_CAR_FIELDS];
  4470.  
  4471.             PSZ pszCarColTitles[] =
  4472.             {
  4473.                "Make",           /* Details column 1 */
  4474.                "Model",          /* Details column 2 */
  4475.                "Color",          /* Details column 3 */
  4476.                "Sale date",      /* Details column 4 */
  4477.                "Price ($)"       /* Details column 5 */
  4478.             };
  4479.                 .
  4480.                 .
  4481.                 .
  4482.  
  4483.             /****************************************************************/
  4484.             /* Method:  wpclsInitData                                       */
  4485.             /* Purpose: Initialize the Details data                         */
  4486.             /****************************************************************/
  4487.  
  4488.             SOM_Scope void SOMLINK carM_wpclsInitData(M_Car *somSelf)
  4489.  
  4490.             {
  4491.               USHORT          rc, i;
  4492.               PCLASSFIELDINFO pCFI;
  4493.  
  4494.               /* M_CarData *somThis  = M_CarGetData(somSelf); */
  4495.               M_CarMethodDebug("M_Car","carM_wpclsInitData");
  4496.  
  4497.               /* Call the parent class method first */
  4498.               parent_wpclsInitData(somSelf);
  4499.  
  4500.               /*   Get the class title */
  4501.               if (!WinLoadString(WinQueryAnchorBlock(HWND_DESKTOP),
  4502.                                  _clsQueryModuleHandle(somSelf),
  4503.                                  ID_TITLE,
  4504.                                  sizeof(szCarClassTitle), szCarClassTitle))
  4505.                 /* If the load string has failed, use the parent's string */
  4506.                 strcpy(szCarClassTitle, parent_wpclsQueryTitle(somSelf));
  4507.  
  4508.               /* Initialize everything needed for the CLASSFIELDINFO */
  4509.               /* data structure for the CAR object class             */
  4510.               for (i=0,pCFI=fieldinfo;i<NUM_CAR_FIELDS;i++,pCFI++)
  4511.  
  4512.               {
  4513.                 /* Memset the structure to zero's */
  4514.                 memset((PCH)pCFI,0,sizeof(CLASSFIELDINFO));
  4515.  
  4516.                 pCFI->cb             = sizeof(CLASSFIELDINFO);
  4517.  
  4518.                 pCFI->flData         = CFA_RIGHT     |
  4519.                                        CFA_SEPARATOR |
  4520.                                        CFA_FIREADONLY;
  4521.  
  4522.                 pCFI->flTitle        = CFA_CENTER        |
  4523.                                        CFA_SEPARATOR     |
  4524.                                        CFA_HORZSEPARATOR |
  4525.                                        CFA_STRING        |
  4526.                                        CFA_FITITLEREADONLY;
  4527.  
  4528.                 pCFI->pNextFieldInfo = pCFI + 1;   /* Point to the next CLASSFIELDINFO */
  4529.                 pCFI->pTitleData     = (PVOID) apszCarColTitles[i];
  4530.                 pCFI->flCompare      = COMPARE_SUPPORTED |
  4531.                                        SORTBY_SUPPORTED;
  4532.  
  4533.                 switch (i)
  4534.                 {
  4535.                   case INDEX_MAKE:
  4536.                     pCFI->flData           |= CFA_STRING;
  4537.                     pCFI->offFieldData      = (ULONG)(FIELDOFFSET(CARDETAILS,pszMake));
  4538.                     pCFI->ulLenFieldData    = sizeof(PSZ);
  4539.                     pCFI->DefaultComparison = CMP_EQUAL;
  4540.                     break;
  4541.  
  4542.                   case INDEX_MODEL:
  4543.                     pCFI->flData           |= CFA_STRING;
  4544.                     pCFI->offFieldData      = (ULONG)(FIELDOFFSET(CARDETAILS,pszModel));
  4545.                     pCFI->ulLenFieldData    = sizeof(PSZ);
  4546.                     pCFI->DefaultComparison = CMP_EQUAL;
  4547.                     break;
  4548.  
  4549.                   case INDEX_COLOR:
  4550.                     pCFI->flData           |= CFA_STRING;
  4551.                     pCFI->offFieldData      = (ULONG)(FIELDOFFSET(CARDETAILS,pszColor));
  4552.                     pCFI->ulLenFieldData    = sizeof(PSZ);
  4553.                     pCFI->DefaultComparison = CMP_EQUAL;
  4554.                     break;
  4555.  
  4556.                   case INDEX_SALE_DATE:
  4557.                     pCFI->flData           |= CFA_DATE;
  4558.                     pCFI->offFieldData      = (ULONG)(FIELDOFFSET(CARDETAILS,cdateSale));
  4559.                     pCFI->ulLenFieldData    = sizeof(CDATE);
  4560.                     pCFI->ulLenCompareValue = sizeof(CDATE);
  4561.                     pCFI->DefaultComparison = CMP_GREATER;
  4562.                     break;
  4563.  
  4564.                   case INDEX_PRICE:
  4565.                     pCFI->flData           |= CFA_ULONG;
  4566.                     pCFI->offFieldData      = (ULONG)(FIELDOFFSET(CARDETAILS,ulPrice));
  4567.                     pCFI->ulLenFieldData    = sizeof(ULONG);
  4568.                     pCFI->ulLenCompareValue = sizeof(ULONG);
  4569.                     pCFI->DefaultComparison = CMP_GREATER;
  4570.                     break;
  4571.  
  4572.                 }  /* End switch(i) */
  4573.               }   /* End for (i=0,pCFI=fieldinfo;i<NUM_CAR_FIELDS;i++,pCFI++) */
  4574.               /* Terminate linked list */
  4575.               fieldinfo[NUM_CAR_FIELDS-1].pNextFieldInfo = NULL;
  4576.             }   /* End carM_ wpclsInitData() */
  4577.  
  4578.    3. Defining the column headings and format of the Details data placed into 
  4579.       the object's Details record by overriding wpclsQueryDetailsInfo, as shown 
  4580.       in the following sample code: 
  4581.  
  4582.             /****************************************************************/
  4583.             /* Method: wpclsQueryDetailsInfo                                */
  4584.             /* Appends the CAR specific chain of FIELDINFO data structure   */
  4585.             /* describing the Details data of this object to                */
  4586.             /* *ppClassFieldInfo, if ppClassFieldInfo is non-NULL.          */
  4587.             /* In this case, it also sets *ppClasssFieldInfo to the head    */
  4588.             /* of the linked list.                                          */
  4589.             /*                                                              */
  4590.             /* Adds the number of bytes required by the Details data for    */
  4591.             /* car to *pSize, if pSize is non-NULL.                         */
  4592.             /*                                                              */
  4593.             /* Add Details data for this object.                            */
  4594.             /****************************************************************/
  4595.  
  4596.             SOM_Scope ULONG SOMLINK
  4597.               redcarM_wpclsQueryDetailsInfo(M_Car *somself,
  4598.                                             PCLASSFIELDINFO *ppClassFieldInfo,
  4599.                                             PULONG pSize)
  4600.  
  4601.             {
  4602.               ULONG           cParentColumns;
  4603.               PCLASSFIELDINFO pCFI;
  4604.               ULONG           i;
  4605.  
  4606.               /* M_CarData  *somThis = M_CarGetData(somself); */
  4607.               M_CarMethodDebug("M_Car","carM_wpclsQueryDetailsInfo");
  4608.  
  4609.               /* Always call the parent method first to retrieve the number */
  4610.               /* of Details columns and parent's data already defined in    */
  4611.               /* the Details buffer.                                        */
  4612.               cParentColumns =
  4613.                 parent_wpclsQueryDetailsInfo(somself,ppClassFieldInfo,pSize);
  4614.  
  4615.               /* If pSize is non-NULL, we must add the size of our */
  4616.               /* Details column data structure.                    */
  4617.               if (pSize)
  4618.                 *pSize += sizeof(CARDETAILS);  /* Adjust size */
  4619.  
  4620.               /*******************************************************************/
  4621.               /* If the request was for the chained FIELDINFO data structures    */
  4622.               /* (ppClassFieldInfo is non-NULL), link them in.                   */
  4623.               /* Eventually the chain will look like this:                       */
  4624.               /*                                                                 */
  4625.               /* Grandparent - Parent - Me - Child - Grandchild.                 */
  4626.               /*                                                                 */
  4627.               /* Get the pointer to the beginning of the chain.                  */
  4628.               /* If the beginning of the chain is 0, assign the address          */
  4629.               /* of the first CLASSFIELDINFO structure to *ppClassFieldInfo.     */
  4630.               /* Otherwise, *ppClassFieldInfo points to the first column         */
  4631.               /* description in the chain.  The chain is examined and            */
  4632.               /* the CLASSFIELDINFO data structure is linked to the end of it.   */
  4633.               /*******************************************************************/
  4634.  
  4635.               if (ppClassFieldInfo)
  4636.               {
  4637.                 /* Find the last link in the chain; then link the CLASSFIELDINFO */
  4638.                 /* data structures to the chain.                                 */
  4639.                 if (*ppClassFieldInfo)
  4640.                 {
  4641.                   pCFI = *ppClassFieldInfo;
  4642.                   for (i=0;i<cParentColumns;i++)
  4643.                     pCFI = (pCFI->pNextFieldInfo) ? pCFI->pNextFieldInfo : pCFI;
  4644.  
  4645.                   pCFI->pNextFieldInfo = fieldinfo;
  4646.                 }
  4647.                 else
  4648.                   *ppClassFieldInfo = fieldinfo;
  4649.               }
  4650.               return ((ULONG) (cParentColumns + NUM_CAR_FIELDS));
  4651.             }   /* End carM_wpclsQueryDetailsInfo() */
  4652.  
  4653.    4. Adding Details data to an object's Details record by overriding 
  4654.       wpQueryDetailsData, as shown in the following sample code: 
  4655.  
  4656.             /*
  4657.              *  Returns the car specific data for the Details view of this object.
  4658.              *  Sets the pointer (*ppDetailsData) to the beginning of the buffer
  4659.              *  into which the data is written.
  4660.              */
  4661.  
  4662.             SOM_Scope ULONG SOMLINK car_wpQueryDetailsData(Car *somSelf,
  4663.                                                            PVOID *ppDetailsData,
  4664.                                                            PULONG pcp)
  4665.  
  4666.             {
  4667.               PCARDETAILS pCarDetails;
  4668.               PBYTE       pSize;
  4669.               CarData *somThis = CarGetData(somSelf);
  4670.               CarMethodDebug("Car","car_wpQueryDetailsData");
  4671.  
  4672.               parent_wpQueryDetailsData(somSelf,ppDetailsData,pcp);
  4673.  
  4674.               if (ppDetailsData)    /* Query data */
  4675.               {
  4676.                 pCarDetails                  = (PCARDETAILS) *ppDetailsData;
  4677.                 pCarDetails->pszMake         = "Toyota";   /* Manufacturer     */
  4678.                 pCarDetails->pszModel        = "Camry";    /* Model name       */
  4679.                 pCarDetails->pszColor        = "BLUE";     /* Color of the car */
  4680.                 pCarDetails->cdateSale.day   = 24;         /* Date of sale     */
  4681.                 pCarDetails->cdateSale.month = 12;
  4682.                 pCarDetails->cdateSale.year  = 91;
  4683.                 pCarDetails->ulPrice         = 14000;      /* Price in dollars */
  4684.  
  4685.                 /* Point to buffer location after the Details data */
  4686.                 *ppDetailsData = ((PBYTE) (*ppDetailsData)) + sizeof(*pCarDetails);
  4687.  
  4688.               }   /* End if (ppDetailsData) */
  4689.               else   /* Query size of data */
  4690.               {
  4691.                 /* Caller is querying the buffer size */
  4692.                 *pcp += sizeof(*pCarDetails);
  4693.               }
  4694.               return(TRUE);
  4695.             }   /* End car_wpQueryDetailsData() */
  4696.  
  4697.  
  4698. ΓòÉΓòÉΓòÉ 6.2.1. Including Objects in a Container ΓòÉΓòÉΓòÉ
  4699.  
  4700. A container represents the standard mode to organize objects you work with. It 
  4701. simply stores objects and allows them to interact with the user. Sometimes, 
  4702. however, a container can contain unnecessary objects. For this reason, the 
  4703. Workplace Shell provides a powerful tool that allows you to filter objects you 
  4704. want to include in or to exclude from the container. You specify objects to be 
  4705. included in a container by selecting the Include tab of the Settings notebook. 
  4706. The filter for this container is specified by the criteria that tells the 
  4707. system to include, in the container, all objects that match the criteria. The 
  4708. default criteria is shown in the following figure: 
  4709.  
  4710. I Flags less than --H-
  4711.  
  4712. This criteria means that all objects that do not have the hidden attribute set 
  4713. will be included in the Open view of the container. The following figure shows 
  4714. the Include dialog, which is set with the default criteria: 
  4715.  
  4716. The Include dialog provides the following push buttons to manipulate criteria: 
  4717.  
  4718.  Push Button         Description 
  4719.  
  4720.  Add                 Brings up a dialog for adding new criteria. 
  4721.  
  4722.  Change              Brings up a dialog for changing the selected criteria. 
  4723.  
  4724.  Delete              Deletes the selected criteria. 
  4725.  
  4726.  Undo                Resets the criteria to the state it was in when you opened 
  4727.                      the Include tab. 
  4728.  
  4729.  Default             Resets the criteria to the default criteria as shown in 
  4730.                      the second previous figure. 
  4731.  
  4732.  Help                Provides help on the Include tab. 
  4733.  
  4734.  As an example, to set the criteria to include nothing (exclude everything), 
  4735.  delete the default criteria and add the criteria shown in the following 
  4736.  figure: 
  4737.  
  4738.   E  ObjectClass  is equal to  Object
  4739.  
  4740.  
  4741. ΓòÉΓòÉΓòÉ 6.2.1.1. Adding Criteria ΓòÉΓòÉΓòÉ
  4742.  
  4743. All objects in the system have properties such as name, date of creation, size, 
  4744. color, and so forth. A group of like objects make up a class. The objects in 
  4745. one class differ from the objects in another class by their properties. If a 
  4746. class is descended from another class, however, the objects from the descended 
  4747. class have, at least, all the properties of its parent, and can have some of 
  4748. their own. The following figure shows the Add Criteria dialog: 
  4749.  
  4750. To create a valid criteria, four elements must be specified: 
  4751.  
  4752.  Element                  Description 
  4753.  
  4754.  Attribute                Lists all the different attributes you can select for 
  4755.                           the criteria. 
  4756.  
  4757.  Comparison type          Lists all the different comparison types associated 
  4758.                           with the selected attribute. 
  4759.  
  4760.  Comparison value         Lists all the different values associated with the 
  4761.                           selected attribute. 
  4762.  
  4763.  Use of criteria          Contains two radio buttons: 
  4764.  
  4765.                               To include objects that match the criteria. 
  4766.  
  4767.                               To exclude objects that match the criteria. 
  4768.  
  4769.  The following table shows the attributes that are available in the system at 
  4770.  installation time. The attributes are listed in the same order as the ones 
  4771.  shown in the Attribute drop-down list box. 
  4772.  
  4773.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4774.   ΓöéAttribute                     ΓöéClass                         Γöé
  4775.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4776.   ΓöéObjectTitle                   ΓöéWPObject                      Γöé
  4777.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4778.   ΓöéObjectStyle                   ΓöéWPObject                      Γöé
  4779.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4780.   ΓöéObjectClass                   ΓöéWPObject                      Γöé
  4781.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4782.   ΓöéRealName                      ΓöéWPFileSystem                  Γöé
  4783.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4784.   ΓöéSize                          ΓöéWPFileSystem                  Γöé
  4785.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4786.   ΓöéLastWriteDate                 ΓöéWPFileSystem                  Γöé
  4787.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4788.   ΓöéLastWriteTime                 ΓöéWPFileSystem                  Γöé
  4789.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4790.   ΓöéLastAccessDate                ΓöéWPFileSystem                  Γöé
  4791.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4792.   ΓöéLastAccesTime                 ΓöéWPFileSystem                  Γöé
  4793.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4794.   ΓöéCreationDate                  ΓöéWPFileSystem                  Γöé
  4795.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4796.   ΓöéCreationTime                  ΓöéWPFileSystem                  Γöé
  4797.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4798.   ΓöéFlags                         ΓöéWPFileSystem                  Γöé
  4799.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4800.   ΓöéReadOnlyFlag                  ΓöéWPFileSystem                  Γöé
  4801.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4802.   ΓöéHiddenFlag                    ΓöéWPFileSystem                  Γöé
  4803.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4804.   ΓöéSystemFlag                    ΓöéWPFileSystem                  Γöé
  4805.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4806.   ΓöéDirectoryFlag                 ΓöéWPFileSystem                  Γöé
  4807.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4808.   ΓöéArchivedFlag                  ΓöéWPFileSystem                  Γöé
  4809.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4810.   ΓöéSubject                       ΓöéWPFileSystem                  Γöé
  4811.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4812.   ΓöéComments                      ΓöéWPFileSystem                  Γöé
  4813.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4814.   ΓöéKey Phases                    ΓöéWPFileSystem                  Γöé
  4815.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4816.   ΓöéHistory                       ΓöéWPFileSystem                  Γöé
  4817.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4818.   ΓöéExtended Attribute Size       ΓöéWPFileSystem                  Γöé
  4819.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4820.  
  4821.  After selecting the attribute, comparison type, and comparison value, select 
  4822.  the appropriate radio button to specify whether to include or exclude objects 
  4823.  that match the specified criteria. 
  4824.  
  4825.  
  4826. ΓòÉΓòÉΓòÉ 6.2.1.2. Changing Criteria ΓòÉΓòÉΓòÉ
  4827.  
  4828. The following figure shows the Change Criteria dialog: 
  4829.  
  4830. To change a criteria, specify the Attribute, Comparison type, Comparison value, 
  4831. or Use of criteria, and select the Change push button. 
  4832.  
  4833.  
  4834. ΓòÉΓòÉΓòÉ 6.2.2. Searching for Objects ΓòÉΓòÉΓòÉ
  4835.  
  4836. The Workplace Shell has a Find tool that allows you to search for objects based 
  4837. on several criteria. Every container pop-up menu in the system has a Find 
  4838. Objects dialog. The following figure shows the Find Objects dialog: 
  4839.  
  4840. You use the Find Objects dialog to search for objects by their names, or by 
  4841. selecting the More push button and by specifying several criteria. The Find 
  4842. Objects dialog comes with default values: 
  4843.  
  4844.  Default Values           Description 
  4845.  
  4846.  Name                     Specifies the name of the object to search for. The 
  4847.                           asterisk (*) is the default and means to search for 
  4848.                           all object names. 
  4849.  
  4850.  Start Folder             Specifies where the search begins. The default is the 
  4851.                           path of the container from which the Find process is 
  4852.                           started. For the Desktop, the default is <ALL 
  4853.                           DRIVES>. The drop-down list box contains additional 
  4854.                           options, including the specific drives available in 
  4855.                           the system. 
  4856.  
  4857.  Search All Subfolders    Specifies to search all subfolders. The default is to 
  4858.                           search the specified folder. 
  4859.  
  4860.  Save Results             Creates a folder containing the Find result objects. 
  4861.                           The Find result objects are shadows of the objects, 
  4862.                           not the objects themselves. If this option is not 
  4863.                           checked, Find creates a window with icons that 
  4864.                           represent pointers to the real objects. This is the 
  4865.                           default option. 
  4866.  
  4867.  Locate                   Allows you to specify another starting point for the 
  4868.                           Find process. The following figure shows the Locate 
  4869.                           dialog. The focus is on the Desktop tab. 
  4870.  
  4871.                           The Locate dialog contains five options: 
  4872.  
  4873.                                Option         Description 
  4874.  
  4875.                           Desktop             Lists all folders in the Desktop 
  4876.                                               folder. 
  4877.  
  4878.                           Drives              Displays the contents of a drive 
  4879.                                               in Tree view. 
  4880.  
  4881.                           Opened              Lists all folders currently open 
  4882.                                               on the Desktop. 
  4883.  
  4884.                           Path                Specifies, in command line 
  4885.                                               format, where the search begins. 
  4886.                                               This is an alternative to Start 
  4887.                                               Folder. 
  4888.  
  4889.                           Related             Gives the Tree view for the drive 
  4890.                                               from which the Find process 
  4891.                                               started. 
  4892.  
  4893.  More                     Specifies more criterias for the Find process. This 
  4894.                           brings up the same dialog window as the one used in 
  4895.                           "Changing Criteria". 
  4896.  
  4897.  Find                     Starts the search process. After the Find process is 
  4898.                           started, a Search in progress dialog is displayed. 
  4899.                           When the search is completed a Find results window 
  4900.                           comes up that shows the name of all objects found. 
  4901.  
  4902.  
  4903. ΓòÉΓòÉΓòÉ 6.2.3. Sorting Objects ΓòÉΓòÉΓòÉ
  4904.  
  4905. You specify objects to sort on by selecting the Sort tab of the Settings 
  4906. notebook. The following figure shows the Sort dialog: 
  4907.  
  4908. There are four elements to consider for sorting objects: 
  4909.  
  4910.  Element                            Description 
  4911.  
  4912.  Object type                        Defines the type of object to sort on. 
  4913.  
  4914.  Sort by attribute                  Defines the attributes to sort on. The 
  4915.                                     attributes are associated with the object 
  4916.                                     type selected. 
  4917.  
  4918.  Default sort attribute             Specifies the system default sort 
  4919.                                     attribute. 
  4920.  
  4921.  Always maintain sort order         Refreshes any Open views every time a 
  4922.                                     folder's object is moved, copied, or 
  4923.                                     shadowed inside or outside its folder. 
  4924.  
  4925.  To select the previous sort criteria, press the Undo push button. To select 
  4926.  the default sort criteria, press the Default push button. 
  4927.  
  4928.  Two object Details fields introduced by WPObject are sortable criteria: Name 
  4929.  and Type. WPFileSystem introduces eight other sortable criteria. The following 
  4930.  table shows the name of each detail as shown on the object's context menu: 
  4931.  
  4932.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4933.   ΓöéObject Details Field   ΓöéAttribute          Γöé
  4934.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4935.   ΓöéName                   ΓöéName               Γöé
  4936.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4937.   ΓöéType                   ΓöéType               Γöé
  4938.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4939.   ΓöéReal name              ΓöéReal name          Γöé
  4940.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4941.   ΓöéSize of the file       ΓöéSize               Γöé
  4942.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4943.   ΓöéLast modification date ΓöéLast write date    Γöé
  4944.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4945.   ΓöéLast modification time ΓöéLast write time    Γöé
  4946.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4947.   ΓöéLast access date       ΓöéLast access date   Γöé
  4948.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4949.   ΓöéLast access time       ΓöéLast access time   Γöé
  4950.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4951.   ΓöéDate of creation       ΓöéCreation date      Γöé
  4952.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4953.   ΓöéTime of creation       ΓöéCreation time      Γöé
  4954.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4955.  
  4956.  WPObject and WPFileSystem are the only system classes that contribute Details 
  4957.  fields to the Sort dialog of the Settings notebook. User-defined class may 
  4958.  introduce their own Details fields as sort criteria. 
  4959.  
  4960.  The sort class for a particular container determines what class' sort Details 
  4961.  fields will appear as active sort criteria on the container's Sort dialog of 
  4962.  the Settings page. The default sort class for all containers is WPFileSystem. 
  4963.  This sort class can be manually changed via the container's Settings page, and 
  4964.  it can also be programmatically changed by using wpSetFldrSortClass. 
  4965.  
  4966.  The wpSetFldrSortClass and wpQueryFldrSortClass methods are needed to set both 
  4967.  the Always maintain sort order checkbox on a container's Sort dialog, as well 
  4968.  as the chosen sort field. 
  4969.  
  4970.  Note:  The sort methods are explained in Folder Related Methods. 
  4971.  
  4972.  
  4973. ΓòÉΓòÉΓòÉ 7. Object Errors: Error Handling Methods ΓòÉΓòÉΓòÉ
  4974.  
  4975. The Workplace Shell provides methods which you can override to design your own 
  4976. error handling system, using error objects. This chapter provides information 
  4977. on error handling methods for Workplace Shell applications. 
  4978.  
  4979.  
  4980. ΓòÉΓòÉΓòÉ 7.1. About Error Handling Methods ΓòÉΓòÉΓòÉ
  4981.  
  4982. The WPObject class provides methods which can be overridden to design your own 
  4983. error handling system. 
  4984.  
  4985. The wpQueryError method obtains the error identity that was set on an object by 
  4986. the last call to wpSetError. The wpQueryError method can be called at any time. 
  4987.  
  4988. The wpSetError method sets the error identity on an object. Typically, this 
  4989. method is called prior to returning from a method that is unsuccessful. The 
  4990. wpQueryError method is then called to identify the error. 
  4991.  
  4992. Similar to object errors, class errors can also be queried and set using 
  4993. wpclsQueryError and wpclsSetError. 
  4994.  
  4995. The wpclsQueryError method obtains the error identity that was set on a class 
  4996. object by the last call to wpclsSetError. The wpclsQueryError method can be 
  4997. called at any time. 
  4998.  
  4999. The wpclsSetError method sets the error identity on a class object. Typically, 
  5000. this method is called prior to returning from a class method that is 
  5001. unsuccessful. The wpclsQueryError method is then called to identify the error. 
  5002.  
  5003.  
  5004. ΓòÉΓòÉΓòÉ 7.2. Using Error Handling Methods ΓòÉΓòÉΓòÉ
  5005.  
  5006. This section describes, via sample code fragments, how you can use the error 
  5007. handling methods. Specifically the first sample code shows how wpQueryError 
  5008. retrieves the error identity that was set on an object. The second code 
  5009. fragment shows how to design your own error handling system by overriding 
  5010. wpSetError. 
  5011.  
  5012. The following sample code shows how wpQueryError retrieves the error identity 
  5013. that was set on an object: 
  5014.  
  5015. // METHOD: my_wpDrop
  5016. //
  5017. // DESCRIPTION:
  5018. //   SOMObject
  5019. //     ΓööΓöÇΓöÇΓöÇWPObject
  5020. //           ΓööΓöÇΓöÇΓöÇWPFileSystem
  5021. //                ΓööΓöÇΓöÇΓöÇWPFolder
  5022. //                       ΓööΓöÇΓöÇΓöÇMyFolder
  5023. //
  5024. //   When an object is dropped on a folder,
  5025. //   this method is called on the target folder.
  5026. //
  5027. //   This sample code shows how wpQueryError retrieves
  5028. //   the error identity that was set on an object.
  5029. //
  5030. SOM_Scope MRESULT SOMLINK my_wpDrop(MyFolder *self,
  5031.                                     HWND      hwndCnr,
  5032.                                     PDRAGINFO pDragInfo,
  5033.                                     PDRAGITEM pDragItem)
  5034. {
  5035.   MRESULT       mr;        // Return value
  5036.   ULONG         ulError;   // Error code set on folder
  5037.  
  5038.   // Clear existing error code
  5039.   _wpSetError(self, NO_ERROR);
  5040.   // Call the parent to handle the drop
  5041.   mr = parent_wpDrop(self, hwndCnr, pDragInfo, pDragItem);
  5042.  
  5043.   // If parent returns an error, check to see if the disk is full
  5044.   if (mr == (MRESULT)RC_DROP_ERROR)
  5045.   {
  5046.     // Query the error code set on the folder
  5047.     ulError = _wpQueryError(self);
  5048.     // If the disk is full, display a message to the user
  5049.     if (ulError == ERROR_DISK_FULL)
  5050.     {
  5051.       WinMessageBox(HWND_DESKTOP,
  5052.                     NULLHANDLE,             // Owner Window
  5053.                     "Error Disk Full",      // Body of the message
  5054.                     "Unsuccessful Drop",    // Title of the message
  5055.                     0,                      // Message box id
  5056.                     MB_ERROR | MB_OK);      // Icon and button flags
  5057.     }
  5058.   }
  5059.   return mr;
  5060. }
  5061.  
  5062. The following sample code shows shows how to design your own error handling 
  5063. system by overriding wpSetError: 
  5064.  
  5065. // METHOD: my_wpSetError
  5066. //
  5067. // DESCRIPTION:
  5068. //   Sets the error on an object.
  5069. //   User-defined errors can be handled here.
  5070. //
  5071. //   This sample code shows how to design your own
  5072. //   error handling system by overriding wpSetError.
  5073.  
  5074. SOM_Scope BOOL SOMLINK my_wpSetError(MyFolder *self,
  5075.                                      ULONG ulErrorId)
  5076. {
  5077.   // Check to see if this is a user-defined error
  5078.   if (ulErrorId > WPERR_USER)
  5079.   {
  5080.     // Handle user-defined errors here
  5081.   }
  5082.   // Call the parent to set the error
  5083.   return (parent_wpSetError(self, ulErrorId));
  5084. }
  5085.  
  5086.  
  5087. ΓòÉΓòÉΓòÉ 8. Object Information: Set/Query Methods ΓòÉΓòÉΓòÉ
  5088.  
  5089. The Workplace Shell provides several set and query methods that you can use to 
  5090. set or to get object information, such as the default view of the object's 
  5091. in-use list, the object's icon, and the object's title. This chapter provides 
  5092. information for using object information methods. It describes how to define 
  5093. the behavior of Workplace Shell objects, using applicable styles. 
  5094.  
  5095.  
  5096. ΓòÉΓòÉΓòÉ 8.1. About Set/Query Methods ΓòÉΓòÉΓòÉ
  5097.  
  5098. The set and query methods are used to set and interrogate the properties of 
  5099. objects. The information associated with an object can be: 
  5100.  
  5101.      Default help 
  5102.      Default view 
  5103.      Error set 
  5104.      Handle 
  5105.      Icon 
  5106.      Icon data 
  5107.      Identifier 
  5108.      Settings page size 
  5109.      Title. 
  5110.  
  5111.  As some methods relate to one another, they have been grouped into the 
  5112.  following sections: 
  5113.  
  5114.      General (including Class style and Object style) 
  5115.      Data file 
  5116.      Desktop 
  5117.      Disk (File-System Device) 
  5118.      File System 
  5119.      Folder 
  5120.      Icon 
  5121.      Network 
  5122.      Palette 
  5123.      Power 
  5124.      Printer 
  5125.      Program reference and program file 
  5126.      Shadow 
  5127.      View. 
  5128.  
  5129.  Each section is divided into tables that are grouped as follows: 
  5130.  
  5131.      Methods that obtain information and that are overridden 
  5132.      Methods that obtain information but are not normally overridden 
  5133.      Methods that set information and that are overridden 
  5134.      Methods that set information but are not normally overridden. 
  5135.  
  5136.  Note:  The help and error methods are explained in the following chapters: 
  5137.  
  5138.  Error handling methods        Object Errors: Error Handling Methods. 
  5139.  
  5140.  Help methods                  Object Aid: Help Methods. 
  5141.  
  5142.  
  5143. ΓòÉΓòÉΓòÉ 8.1.1. General Characteristics Methods ΓòÉΓòÉΓòÉ
  5144.  
  5145. A program or Workplace Shell object would call the following methods to get 
  5146. general information about an object. A Workplace Shell object would override 
  5147. these methods to define its characteristics. 
  5148.  
  5149. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5150. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5151. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5152. ΓöéwpIdentify                    ΓöéReturns a string that is      Γöé
  5153. Γöé                              Γöéunique within a given         Γöé
  5154. Γöé                              Γöécontainer that identifies the Γöé
  5155. Γöé                              Γöéspecified object.             Γöé
  5156. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5157. ΓöéwpQueryConfirmations          ΓöéReturns the set of            Γöé
  5158. Γöé                              Γöéconfirmations that are set forΓöé
  5159. Γöé                              Γöéthis object.                  Γöé
  5160. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5161. ΓöéwpQueryDefaultHelp            ΓöéReturns the object's default  Γöé
  5162. Γöé                              Γöéhelp panel.                   Γöé
  5163. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5164. ΓöéwpQueryNameClashOptions       ΓöéReturns the set of options    Γöé
  5165. Γöé                              Γöéthat are not available on the Γöé
  5166. Γöé                              Γöéname clash dialog for this    Γöé
  5167. Γöé                              Γöéobject.                       Γöé
  5168. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5169. ΓöéwpQueryTitle                  ΓöéReturns the object's title.   Γöé
  5170. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5171. ΓöéwpQueryTrueStyle              ΓöéQueries this object's current Γöé
  5172. Γöé                              Γöéclass true style.             Γöé
  5173. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5174. ΓöéwpclsQueryDefaultHelp         ΓöéReturns the class default helpΓöé
  5175. Γöé                              Γöépanel. This help panel is usedΓöé
  5176. Γöé                              Γöéfor all objects of this class.Γöé
  5177. Γöé                              ΓöéThe default help panel can be Γöé
  5178. Γöé                              Γöéchanged for an individual     Γöé
  5179. Γöé                              Γöéobject if:                    Γöé
  5180. Γöé                              Γöé                              Γöé
  5181. Γöé                              Γöéo The object overrides        Γöé
  5182. Γöé                              Γöé  wpQueryDefaultHelp.         Γöé
  5183. Γöé                              Γöéo The wpSetDefaultHelp method Γöé
  5184. Γöé                              Γöé  is called.                  Γöé
  5185. Γöé                              Γöéo The wpSetup method is calledΓöé
  5186. Γöé                              Γöé  with the HELPPANEL keyword. Γöé
  5187. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5188. ΓöéwpclsQuerySetting             ΓöéReturns a settings value for  Γöé
  5189. Γöé                              Γöéan abstract class object. An  Γöé
  5190. Γöé                              Γöéabstract class object would   Γöé
  5191. Γöé                              Γöéoverride this method if it    Γöé
  5192. Γöé                              Γöésaved its class settings.     Γöé
  5193. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5194. ΓöéwpclsQueryStyle               ΓöéReturns the class style. See  Γöé
  5195. Γöé                              ΓöéClass Styles.                 Γöé
  5196. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5197. ΓöéwpclsQueryTitle               ΓöéReturns the class title. This Γöé
  5198. Γöé                              Γöétitle is used for all objects Γöé
  5199. Γöé                              Γöéof this class, including the  Γöé
  5200. Γöé                              Γöéclass template. The title can Γöé
  5201. Γöé                              Γöébe changed for an individual  Γöé
  5202. Γöé                              Γöéobject if:                    Γöé
  5203. Γöé                              Γöé                              Γöé
  5204. Γöé                              Γöéo The object overrides        Γöé
  5205. Γöé                              Γöé  wpQueryTitle.               Γöé
  5206. Γöé                              Γöéo The wpSetTitle method is    Γöé
  5207. Γöé                              Γöé  called.                     Γöé
  5208. Γöé                              Γöéo The wpSetup method is       Γöé
  5209. Γöé                              Γöé  called with the TITLE       Γöé
  5210. Γöé                              Γöé  keyword, when the user      Γöé
  5211. Γöé                              Γöé  edits the object's title    Γöé
  5212. Γöé                              Γöé  on the General page of the  Γöé
  5213. Γöé                              Γöé  Settings notebook, or when  Γöé
  5214. Γöé                              Γöé  the user edits the          Γöé
  5215. Γöé                              Γöé  object's title under        Γöé
  5216. Γöé                              Γöé  the icon.                   Γöé
  5217. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5218.  
  5219. A program or Workplace Shell object would call the following methods to get 
  5220. general information about an object. These methods are not normally overridden. 
  5221.  
  5222. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5223. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5224. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5225. ΓöéwpFindTaskRec                 ΓöéAn object is sent this messageΓöé
  5226. Γöé                              Γöéto return information specificΓöé
  5227. Γöé                              Γöéto the task being performed inΓöé
  5228. Γöé                              Γöéa task thread.                Γöé
  5229. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5230. ΓöéwpGetTrueClassName            ΓöéReturns the class name for theΓöé
  5231. Γöé                              Γöégiven object.                 Γöé
  5232. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5233. ΓöéwpQueryContainerFlagPtr       ΓöéReturns the pointer to a flag Γöé
  5234. Γöé                              Γöéindicating whether or not the Γöé
  5235. Γöé                              Γöéobject is in a container.     Γöé
  5236. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5237. ΓöéwpQueryCoreRecord             ΓöéReturns the pointer to the    Γöé
  5238. Γöé                              Γöéobject's MINIRECORDCORE data  Γöé
  5239. Γöé                              Γöéstructure.                    Γöé
  5240. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5241. ΓöéwpQueryDefaultIconPos         ΓöéReturns the default icon      Γöé
  5242. Γöé                              Γöéposition used when this objectΓöé
  5243. Γöé                              Γöéis first inserted into a      Γöé
  5244. Γöé                              Γöéfolder.                       Γöé
  5245. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5246. ΓöéwpQueryError                  ΓöéReturns the last error code   Γöé
  5247. Γöé                              Γöéset by calling the object's   Γöé
  5248. Γöé                              ΓöéwpSetError. This is normally  Γöé
  5249. Γöé                              Γöéan error code being returned  Γöé
  5250. Γöé                              Γöéby a failing instance method. Γöé
  5251. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5252. ΓöéwpQueryFolder                 ΓöéReturns the object pointer forΓöé
  5253. Γöé                              Γöéthe folder containing the     Γöé
  5254. Γöé                              Γöéobject.                       Γöé
  5255. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5256. ΓöéwpQueryHandle                 ΓöéReturns the object's unique   Γöé
  5257. Γöé                              Γöépersistent handle.            Γöé
  5258. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5259. ΓöéwpQueryObjectID               ΓöéReturns the object's          Γöé
  5260. Γöé                              Γöéidentifier. The object        Γöé
  5261. Γöé                              Γöéidentifier is set by calling  Γöé
  5262. Γöé                              ΓöéwpSetObjectID for the object  Γöé
  5263. Γöé                              Γöéor by calling wpSetup for the Γöé
  5264. Γöé                              Γöéobject with the OBJECTID      Γöé
  5265. Γöé                              Γöékeyword.                      Γöé
  5266. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5267. ΓöéwpQueryScreenGroupID          ΓöéReturns the screen group      Γöé
  5268. Γöé                              Γöéidentifier of the application Γöé
  5269. Γöé                              Γöérunning for this object.      Γöé
  5270. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5271. ΓöéwpQueryStyle                  ΓöéReturns the object's current  Γöé
  5272. Γöé                              Γöéstyle flags. See Object StylesΓöé
  5273. Γöé                              Γöé.                             Γöé
  5274. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5275. ΓöéwpQueryStyle                  ΓöéReturns the object's style.   Γöé
  5276. Γöé                              ΓöéSee Object Styles.            Γöé
  5277. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5278. ΓöéwpclsQueryError               ΓöéReturns the last error code   Γöé
  5279. Γöé                              Γöéset by calling the class'     Γöé
  5280. Γöé                              ΓöéwpclsSetError. This is        Γöé
  5281. Γöé                              Γöénormally an error code that isΓöé
  5282. Γöé                              Γöéreturned by a failing class   Γöé
  5283. Γöé                              Γöémethod.                       Γöé
  5284. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5285. ΓöéwpclsQueryFolder              ΓöéReturns the pointer to the    Γöé
  5286. Γöé                              Γöéfolder object that correspondsΓöé
  5287. Γöé                              Γöéto the specified file system  Γöé
  5288. Γöé                              Γöépath.                         Γöé
  5289. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5290. ΓöéwpclsQueryObject              ΓöéReturns the pointer to the    Γöé
  5291. Γöé                              Γöéobject that corresponds to theΓöé
  5292. Γöé                              Γöéspecified persistent object   Γöé
  5293. Γöé                              Γöéhandle.                       Γöé
  5294. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5295. ΓöéwpclsQueryStyle               ΓöéReturns the object class'     Γöé
  5296. Γöé                              Γöéstyle. See Class Styles.      Γöé
  5297. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5298.  
  5299. A program or Workplace Shell object would call the following methods to set 
  5300. general information about an object. These methods are not normally overridden. 
  5301.  
  5302. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5303. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5304. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5305. ΓöéwpModifyStyle                 ΓöéSets or clears individual     Γöé
  5306. Γöé                              Γöéflags within the object's     Γöé
  5307. Γöé                              Γöéstyle. This method call is an Γöé
  5308. Γöé                              Γöéatomic operation as only the  Γöé
  5309. Γöé                              Γöéspecified style flags are     Γöé
  5310. Γöé                              Γöéchanged, even if other runningΓöé
  5311. Γöé                              Γöéthreads try to modify the     Γöé
  5312. Γöé                              Γöéstyle flags at the same time. Γöé
  5313. Γöé                              ΓöéSee Object Styles.            Γöé
  5314. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5315. ΓöéwpSetDefaultHelp              ΓöéSets the object's default helpΓöé
  5316. Γöé                              Γöépanel.                        Γöé
  5317. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5318. ΓöéwpSetDefaultIconPos           ΓöéSets the object's default iconΓöé
  5319. Γöé                              Γöéposition which is used when itΓöé
  5320. Γöé                              Γöéis inserted into a folder.    Γöé
  5321. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5322. ΓöéwpSetError                    ΓöéSets the current error code   Γöé
  5323. Γöé                              Γöéfor the object. This method isΓöé
  5324. Γöé                              Γöénormally called by an instanceΓöé
  5325. Γöé                              Γöémethod to pass an error code  Γöé
  5326. Γöé                              Γöéback to the caller.           Γöé
  5327. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5328. ΓöéwpSetObjectID                 ΓöéSets the object's identifier. Γöé
  5329. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5330. ΓöéwpSetStyle                    ΓöéSets the object's style. This Γöé
  5331. Γöé                              Γöémethod exists only for        Γöé
  5332. Γöé                              Γöécompatibility with old        Γöé
  5333. Γöé                              Γöéobjects. All new or changed   Γöé
  5334. Γöé                              Γöéobjects should use            Γöé
  5335. Γöé                              ΓöéwpModifyStyle instead. See    Γöé
  5336. Γöé                              ΓöéObject Styles.                Γöé
  5337. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5338. ΓöéwpSetTaskRec                  ΓöéAdds, replaces, or deletes a  Γöé
  5339. Γöé                              Γöétask data block.              Γöé
  5340. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5341. ΓöéwpSetTitle                    ΓöéSets the object's title.      Γöé
  5342. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5343. ΓöéwpclsSetError                 ΓöéSets the current error code   Γöé
  5344. Γöé                              Γöéfor the class. This method is Γöé
  5345. Γöé                              Γöénormally called by a class    Γöé
  5346. Γöé                              Γöémethod to pass an error code  Γöé
  5347. Γöé                              Γöéback to the caller.           Γöé
  5348. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5349.  
  5350. A program or Workplace Shell object would call the following method to set 
  5351. general information about an object. A Workplace Shell object would override 
  5352. this method to define its characteristics. 
  5353.  
  5354. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5355. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5356. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5357. ΓöéwpclsQueryInstanceClass       ΓöéReturns the name of a class   Γöé
  5358. Γöé                              Γöéthat this object can become.  Γöé
  5359. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5360. ΓöéwpclsSetSetting               ΓöéSets a settings value for an  Γöé
  5361. Γöé                              Γöéabstract class object. An     Γöé
  5362. Γöé                              Γöéabstract class object would   Γöé
  5363. Γöé                              Γöéoverride this method if it    Γöé
  5364. Γöé                              Γöéwants to save its class       Γöé
  5365. Γöé                              Γöésettings.                     Γöé
  5366. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5367.  
  5368.  
  5369. ΓòÉΓòÉΓòÉ 8.1.1.1. Class Styles ΓòÉΓòÉΓòÉ
  5370.  
  5371. Workplace Shell object classes have styles that define the behavior of all 
  5372. objects of that class. The object class style is defined by wpclsQueryStyle. 
  5373. When an object is created, the object's style is initially inherited from the 
  5374. class. The following table lists the class style flags: 
  5375.  
  5376. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5377. ΓöéStyle Name                    ΓöéDescription                   Γöé
  5378. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5379. ΓöéCLSSTYLE_NEVERCOPY            ΓöéObjects of this class cannot  Γöé
  5380. Γöé                              Γöébe copied.                    Γöé
  5381. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5382. ΓöéCLSSTYLE_NEVERDELETE          ΓöéObjects of this class cannot  Γöé
  5383. Γöé                              Γöébe deleted.                   Γöé
  5384. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5385. ΓöéCLSSTYLE_NEVERDRAG            ΓöéObjects of this class cannot  Γöé
  5386. Γöé                              Γöébe dragged.                   Γöé
  5387. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5388. ΓöéCLSSTYLE_NEVERLINK            ΓöéObjects of this class cannot  Γöé
  5389. Γöé                              Γöéhave shadows.                 Γöé
  5390. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5391. ΓöéCLSSTYLE_NEVERMOVE            ΓöéObjects of this class cannot  Γöé
  5392. Γöé                              Γöébe moved.                     Γöé
  5393. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5394. ΓöéCLSSTYLE_NEVERPRINT           ΓöéObjects of this class cannot  Γöé
  5395. Γöé                              Γöébe printed.                   Γöé
  5396. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5397. ΓöéCLSSTYLE_NEVERRENAME          ΓöéObjects of this class cannot  Γöé
  5398. Γöé                              Γöébe renamed.                   Γöé
  5399. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5400. ΓöéCLSSTYLE_NEVERSETTINGS        ΓöéObjects of this class cannot  Γöé
  5401. Γöé                              Γöébe opened in Settings view.   Γöé
  5402. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5403. ΓöéCLSSTYLE_NEVERTEMPLATE        ΓöéThis class does not have a    Γöé
  5404. Γöé                              Γöétemplate. Also, objects of    Γöé
  5405. Γöé                              Γöéthis class will not have a    Γöé
  5406. Γöé                              ΓöéCreate another option in theirΓöé
  5407. Γöé                              Γöécontext menu.                 Γöé
  5408. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5409. ΓöéCLSSTYLE_NEVERVISIBLE         ΓöéObjects of this class are     Γöé
  5410. Γöé                              Γöénever visible.                Γöé
  5411. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5412.  
  5413.  
  5414. ΓòÉΓòÉΓòÉ 8.1.1.2. Object Styles ΓòÉΓòÉΓòÉ
  5415.  
  5416. Workplace Shell objects have styles that define their behavior. The object 
  5417. class style is defined by wpQueryStyle. When an object is created, the object's 
  5418. style is initially inherited from the class. The wpQueryStyle method can modify 
  5419. the style flags to tailor the object. Also, wpModifyStyle can be used to set or 
  5420. reset individual style flags for the object. The following table lists the 
  5421. object style flags: 
  5422.  
  5423. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5424. ΓöéStyle Name                    ΓöéDescription                   Γöé
  5425. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5426. ΓöéOBJSTYLE_NOCOPY               ΓöéThe object cannot be copied.  Γöé
  5427. Γöé                              ΓöéThe Copy option is not valid  Γöé
  5428. Γöé                              Γöéfor a direct manipulation     Γöé
  5429. Γöé                              Γöéoperation (Pickup and Drop)   Γöé
  5430. Γöé                              Γöéand there is no Copy option inΓöé
  5431. Γöé                              Γöéthe object's context menu.    Γöé
  5432. Γöé                              ΓöéThis option is inherited from Γöé
  5433. Γöé                              Γöéthe class' CLSSTYLE_NEVERCOPY Γöé
  5434. Γöé                              Γöéstyle.                        Γöé
  5435. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5436. ΓöéOBJSTYLE_NODELETE             ΓöéThe object cannot be deleted. Γöé
  5437. Γöé                              ΓöéThe object cannot be dragged  Γöé
  5438. Γöé                              Γöéto the shredder and there is  Γöé
  5439. Γöé                              Γöéno Delete option in the       Γöé
  5440. Γöé                              Γöéobject's context menu. This   Γöé
  5441. Γöé                              Γöéoption is inherited from the  Γöé
  5442. Γöé                              Γöéclass' CLSSTYLE_NEVERDELETE   Γöé
  5443. Γöé                              Γöéstyle.                        Γöé
  5444. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5445. ΓöéOBJSTYLE_NODRAG               ΓöéThe object cannot be copied orΓöé
  5446. Γöé                              Γöémoved. Direct manipulation    Γöé
  5447. Γöé                              Γöéoperations (Pickup and Drop)  Γöé
  5448. Γöé                              Γöéare not valid for this object Γöé
  5449. Γöé                              Γöéand there are no Copy, Move,  Γöé
  5450. Γöé                              Γöéor Pickup options in the      Γöé
  5451. Γöé                              Γöéobject's context menu. This   Γöé
  5452. Γöé                              Γöéoption is inherited from the  Γöé
  5453. Γöé                              Γöéclass' CLSSTYLE_NEVERDRAG     Γöé
  5454. Γöé                              Γöéstyle.                        Γöé
  5455. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5456. ΓöéOBJSTYLE_NODROPON             ΓöéNo other object can be droppedΓöé
  5457. Γöé                              Γöéon this object using a direct Γöé
  5458. Γöé                              Γöémanipulation operation (PickupΓöé
  5459. Γöé                              Γöéand Drop).                    Γöé
  5460. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5461. ΓöéOBJSTYLE_NOLINK               ΓöéThe object cannot have        Γöé
  5462. Γöé                              Γöéshadows. The Link option is   Γöé
  5463. Γöé                              Γöénot valid for a direct        Γöé
  5464. Γöé                              Γöémanipulation operation (PickupΓöé
  5465. Γöé                              Γöéand Drop) and there is no     Γöé
  5466. Γöé                              ΓöéCreate shadow option in the   Γöé
  5467. Γöé                              Γöéobject's context menu. This   Γöé
  5468. Γöé                              Γöéoption is inherited from the  Γöé
  5469. Γöé                              Γöéclass' CLSSTYLE_NEVERLINK     Γöé
  5470. Γöé                              Γöéstyle.                        Γöé
  5471. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5472. ΓöéOBJSTYLE_NOMOVE               ΓöéThe object cannot be moved.   Γöé
  5473. Γöé                              ΓöéThe Move option is not valid  Γöé
  5474. Γöé                              Γöéfor a direct manipulation     Γöé
  5475. Γöé                              Γöéoperation (Pickup and Drop)   Γöé
  5476. Γöé                              Γöéand there is no Move option inΓöé
  5477. Γöé                              Γöéthe object's context menu.    Γöé
  5478. Γöé                              ΓöéThis option is inherited from Γöé
  5479. Γöé                              Γöéthe class' CLSSTYLE_NEVERMOVE Γöé
  5480. Γöé                              Γöéstyle.                        Γöé
  5481. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5482. ΓöéOBJSTYLE_NOPRINT              ΓöéThe object cannot be printed. Γöé
  5483. Γöé                              ΓöéThe object cannot be dragged  Γöé
  5484. Γöé                              Γöéto a Printer object and there Γöé
  5485. Γöé                              Γöéis no Print option in the     Γöé
  5486. Γöé                              Γöéobject's context menu. This   Γöé
  5487. Γöé                              Γöéoption is inherited from the  Γöé
  5488. Γöé                              Γöéclass' CLSSTYLE_NEVERPRINT    Γöé
  5489. Γöé                              Γöéstyle.                        Γöé
  5490. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5491. ΓöéOBJSTYLE_NORENAME             ΓöéThis object cannot be renamed.Γöé
  5492. Γöé                              ΓöéIts title cannot be changed   Γöé
  5493. Γöé                              Γöéeither by directly editing theΓöé
  5494. Γöé                              Γöétitle under the icon or by    Γöé
  5495. Γöé                              Γöéchanging the title on the     Γöé
  5496. Γöé                              ΓöéGeneral page of the Settings  Γöé
  5497. Γöé                              Γöénotebook.                     Γöé
  5498. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5499. ΓöéOBJSTYLE_NOSETTINGS           ΓöéThis object cannot be opened  Γöé
  5500. Γöé                              Γöéin Settings view. There is no Γöé
  5501. Γöé                              ΓöéSettings option in the        Γöé
  5502. Γöé                              Γöéobject's context menu. This   Γöé
  5503. Γöé                              Γöéoption is inherited from the  Γöé
  5504. Γöé                              Γöéclass' CLSSTYLE_NEVERSETTINGS Γöé
  5505. Γöé                              Γöéstyle.                        Γöé
  5506. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5507. ΓöéOBJSTYLE_NOTDEFAULTICON       ΓöéThe icon associated with this Γöé
  5508. Γöé                              Γöéobject is not the class       Γöé
  5509. Γöé                              Γöédefault icon.                 Γöé
  5510. Γöé                              Γöé                              Γöé
  5511. Γöé                              ΓöéNote:                         Γöé
  5512. Γöé                              ΓöéYou should never modify this  Γöé
  5513. Γöé                              Γöéstyle option because the      Γöé
  5514. Γöé                              ΓöéWorkplace Shell uses it for   Γöé
  5515. Γöé                              Γöéthe following reasons:        Γöé
  5516. Γöé                              Γöé                              Γöé
  5517. Γöé                              Γöéo When you copy an object,    Γöé
  5518. Γöé                              Γöé  the Workplace Shell         Γöé
  5519. Γöé                              Γöé  determines when to create   Γöé
  5520. Γöé                              Γöé  a copy of the object's      Γöé
  5521. Γöé                              Γöé  icon.                       Γöé
  5522. Γöé                              Γöéo When the Workplace Shell    Γöé
  5523. Γöé                              Γöé  frees an icon.              Γöé
  5524. Γöé                              Γöé                              Γöé
  5525. Γöé                              ΓöéIf this style flag is set     Γöé
  5526. Γöé                              Γöéincorrectly, the object's     Γöé
  5527. Γöé                              Γöéicon could disappear or       Γöé
  5528. Γöé                              Γöécould not be freed when       Γöé
  5529. Γöé                              Γöénecessary, thereby wasting    Γöé
  5530. Γöé                              Γöésystem memory.                Γöé
  5531. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5532. ΓöéOBJSTYLE_TEMPLATE             ΓöéThis object is a template.    Γöé
  5533. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5534.  
  5535.  
  5536. ΓòÉΓòÉΓòÉ 8.1.2. Data File Related Methods ΓòÉΓòÉΓòÉ
  5537.  
  5538. A program or Workplace Shell object would call the following methods to get 
  5539. information about a data file object. These methods are not normally 
  5540. overridden. 
  5541.  
  5542. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5543. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5544. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5545. ΓöéwpQueryAssociatedFileIcon     ΓöéReturns the handle of the iconΓöé
  5546. Γöé                              Γöéfor the WPProgram or          Γöé
  5547. Γöé                              ΓöéWPProgramFile object          Γöé
  5548. Γöé                              Γöéassociated with the data file Γöé
  5549. Γöé                              Γöéobject.                       Γöé
  5550. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5551. ΓöéwpQueryAssociatedProgram      ΓöéReturns the pointer to the    Γöé
  5552. Γöé                              ΓöéWPProgram or WPProgramFile    Γöé
  5553. Γöé                              Γöéobject associated with the    Γöé
  5554. Γöé                              Γöédata file object.             Γöé
  5555. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5556. ΓöéwpQueryPointerFromContents    ΓöéReturns a pointer to shared   Γöé
  5557. Γöé                              Γöémemory containing the contentsΓöé
  5558. Γöé                              Γöéof the WPDataFile object.     Γöé
  5559. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5560. ΓöéwpclsEnumClipboardClasses     ΓöéEnumerates through all the    Γöé
  5561. Γöé                              Γöéobject classes that a         Γöé
  5562. Γöé                              Γöéparticular rendering mechanismΓöé
  5563. Γöé                              Γöésupports.                     Γöé
  5564. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5565.  
  5566. A program or Workplace Shell object would call the following method to query 
  5567. information about a data file object. This method may be overridden to force 
  5568. the association of a specific icon with a data file. 
  5569.  
  5570. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5571. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5572. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5573. ΓöéwpQueryHandleFromContents     ΓöéReturns a handle to a known   Γöé
  5574. Γöé                              Γöésystem data type based on a   Γöé
  5575. Γöé                              Γöéfile's contents.  This is an  Γöé
  5576. Γöé                              Γöéabstract method; subclasses   Γöé
  5577. Γöé                              Γöéthat describe files for which Γöé
  5578. Γöé                              Γöéa system handle type exist    Γöé
  5579. Γöé                              Γöé(such as WPIcon or WPBitmap)  Γöé
  5580. Γöé                              Γöéshould subclass this method.  Γöé
  5581. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5582.  
  5583. A program or Workplace Shell object would call the following method to set 
  5584. information about a data file object. This method may be overridden to force 
  5585. the association of a specific icon with a data file. 
  5586.  
  5587. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5588. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5589. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5590. ΓöéwpSetAssociatedFileIcon       ΓöéChange the icon associated    Γöé
  5591. Γöé                              Γöéwith the data file object.    Γöé
  5592. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5593. ΓöéwpSetContentsFromHandle       ΓöéSets a file's contents based  Γöé
  5594. Γöé                              Γöéon a handle to a known system Γöé
  5595. Γöé                              Γöédata type.  This is an        Γöé
  5596. Γöé                              Γöéabstract method; subclasses   Γöé
  5597. Γöé                              Γöéthat describe files for which Γöé
  5598. Γöé                              Γöéa system handle type exist    Γöé
  5599. Γöé                              Γöé(such as WPIcon or WPBitmap)  Γöé
  5600. Γöé                              Γöéshould subclass this method.  Γöé
  5601. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5602. ΓöéwpSetContentsFromPointer      ΓöéSets a WPDataFile object's    Γöé
  5603. Γöé                              Γöécontents based on a pointer toΓöé
  5604. Γöé                              Γöéshared memory.                Γöé
  5605. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5606.  
  5607. A program or Workplace Shell object would call the following method to render 
  5608. information about a data file object. 
  5609.  
  5610. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5611. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5612. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5613. ΓöéwpRenderFromClipboard         ΓöéOpens the clipboard and       Γöé
  5614. Γöé                              Γöéretrieves the type of data    Γöé
  5615. Γöé                              Γöéspecified in the clipboard    Γöé
  5616. Γöé                              Γöéformat passed in, then writes Γöé
  5617. Γöé                              Γöéthe clipboard data to a file. Γöé
  5618. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5619.  
  5620. A program or Workplace Shell object would call the following method to add a 
  5621. clipboard association to a data file object. 
  5622.  
  5623. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5624. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5625. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5626. ΓöéwpclsAddClipboardAssoc        ΓöéAdds an association between a Γöé
  5627. Γöé                              Γöéclipboard format and a        Γöé
  5628. Γöé                              Γöéparticular class name.        Γöé
  5629. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5630.  
  5631.  
  5632. ΓòÉΓòÉΓòÉ 8.1.3. Desktop Related Methods ΓòÉΓòÉΓòÉ
  5633.  
  5634. A program or Workplace Shell object would call the following methods to get 
  5635. information about a Desktop object. These methods are not normally overridden. 
  5636.  
  5637. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5638. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5639. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5640. ΓöéwpIsCurrentDesktop            ΓöéReturns an indication of      Γöé
  5641. Γöé                              Γöéwhether or not the Desktop    Γöé
  5642. Γöé                              Γöéobject is the active Desktop. Γöé
  5643. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5644. ΓöéwpclsQueryActiveDesktop       ΓöéReturns the pointer to the    Γöé
  5645. Γöé                              Γöéactive Desktop object.        Γöé
  5646. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5647. ΓöéwpclsQueryActiveDesktopHWND   ΓöéReturns the window handle for Γöé
  5648. Γöé                              Γöéthe active Desktop.           Γöé
  5649. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5650. ΓöéwpQueryAutoLockup             ΓöéReturns the current value of  Γöé
  5651. Γöé                              Γöéthe automatic lockup option.  Γöé
  5652. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5653. ΓöéwpQueryLockupAutoDim          ΓöéReturns the current value of  Γöé
  5654. Γöé                              Γöéthe lockup auto-dim option.   Γöé
  5655. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5656. ΓöéwpQueryLockupBackground       ΓöéReturns the current values forΓöé
  5657. Γöé                              Γöéthe lockup background.        Γöé
  5658. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5659. ΓöéwpQueryLockupFullScreen       ΓöéReturns the current value of  Γöé
  5660. Γöé                              Γöéthe lockup full-screen option.Γöé
  5661. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5662. ΓöéwpQueryLockupOnStartup        ΓöéReturns the current value of  Γöé
  5663. Γöé                              Γöéthe lockup on the startup     Γöé
  5664. Γöé                              Γöéoption.                       Γöé
  5665. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5666. ΓöéwpQueryLockupTimeout          ΓöéReturns the current timeout   Γöé
  5667. Γöé                              Γöévalue for automatic lockup.   Γöé
  5668. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5669. ΓöéwpclsQueryObjectFromFrame     ΓöéReturns the pointer to the    Γöé
  5670. Γöé                              Γöéobject associated with the    Γöé
  5671. Γöé                              Γöéspecified frame window.       Γöé
  5672. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5673.  
  5674. A program or Workplace Shell object would call the following methods to get 
  5675. information about a Desktop object. 
  5676.  
  5677. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5678. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5679. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5680. ΓöéwpQueryDefaultDropOp          ΓöéQueries the default drop      Γöé
  5681. Γöé                              Γöéoperation of objects that are Γöé
  5682. Γöé                              Γöédropped on the Desktop.  The  Γöé
  5683. Γöé                              Γöédefault is set on the Desktop Γöé
  5684. Γöé                              Γöépage of the Desktop's SettingsΓöé
  5685. Γöé                              Γöénotebook. This method can be  Γöé
  5686. Γöé                              Γöéoverridden to control the     Γöé
  5687. Γöé                              ΓöéDesktop's default drop        Γöé
  5688. Γöé                              Γöéoperation                     Γöé
  5689. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5690.  
  5691. A program or Workplace Shell object would call the following methods to get 
  5692. information about a Desktop object. These methods are not normally overridden. 
  5693.  
  5694. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5695. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5696. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5697. ΓöéwpSetAutoLockup               ΓöéSets the value of the         Γöé
  5698. Γöé                              Γöéautomatic lockup option.      Γöé
  5699. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5700. ΓöéwpSetDefaultDropOp            ΓöéSets the default drop         Γöé
  5701. Γöé                              Γöéoperation of objects that are Γöé
  5702. Γöé                              Γöédropped on the Desktop.  The  Γöé
  5703. Γöé                              Γöédefault is set on the Desktop Γöé
  5704. Γöé                              Γöépage of the Desktop's SettingsΓöé
  5705. Γöé                              Γöénotebook.                     Γöé
  5706. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5707. ΓöéwpSetLockupAutoDim            ΓöéSets the value of the lockup  Γöé
  5708. Γöé                              Γöéauto-dim option.              Γöé
  5709. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5710. ΓöéwpSetLockupBackground         ΓöéSets the current values for   Γöé
  5711. Γöé                              Γöéthe lockup background.        Γöé
  5712. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5713. ΓöéwpSetLockupFullScreen         ΓöéSets the value of the lockup  Γöé
  5714. Γöé                              Γöéfull-screen option.           Γöé
  5715. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5716. ΓöéwpSetLockupOnStartup          ΓöéSets the value of the lockup  Γöé
  5717. Γöé                              Γöéon the startup option.        Γöé
  5718. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5719. ΓöéwpSetLockupTimeout            ΓöéSets the timeout value for    Γöé
  5720. Γöé                              Γöéautomatic lockup.             Γöé
  5721. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5722.  
  5723.  
  5724. ΓòÉΓòÉΓòÉ 8.1.4. Disk (File-System Device) Related Methods ΓòÉΓòÉΓòÉ
  5725.  
  5726. A program or Workplace Shell object would call the following methods to set 
  5727. information about a disk object. These methods are not normally overridden. 
  5728.  
  5729. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5730. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5731. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5732. ΓöéwpQueryDriveLockStatus        ΓöéReturns the lock status of a  Γöé
  5733. Γöé                              Γöédisk object.                  Γöé
  5734. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5735. ΓöéwpQueryLogicalDrive           ΓöéReturns the logical drive     Γöé
  5736. Γöé                              Γöénumber for a disk object.     Γöé
  5737. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5738. ΓöéwpQueryRootFolder             ΓöéReturns the root folder objectΓöé
  5739. Γöé                              Γöéfor the logical drive         Γöé
  5740. Γöé                              Γöérepresented by a disk object. Γöé
  5741. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5742.  
  5743. A program or Workplace Shell object would call the following method to set 
  5744. information about a disk object. A disk object would override this method to 
  5745. define its characteristics. 
  5746.  
  5747. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5748. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5749. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5750. ΓöéwpSetCorrectDiskIcon          ΓöéSets the correct icon for the Γöé
  5751. Γöé                              Γöédisk object.                  Γöé
  5752. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5753.  
  5754.  
  5755. ΓòÉΓòÉΓòÉ 8.1.5. File System Related Methods ΓòÉΓòÉΓòÉ
  5756.  
  5757. A program or Workplace Shell object would call the following methods to get 
  5758. information about a file system object. These methods are not normally 
  5759. overridden. 
  5760.  
  5761. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5762. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5763. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5764. ΓöéwpQueryAttr                   ΓöéReturns the file attributes ofΓöé
  5765. Γöé                              Γöéthe file system object.       Γöé
  5766. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5767. ΓöéwpQueryCreation               ΓöéReturns the creation date and Γöé
  5768. Γöé                              Γöétime of the file system       Γöé
  5769. Γöé                              Γöéobject.                       Γöé
  5770. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5771. ΓöéwpQueryDateInfo               ΓöéReturns the file system       Γöé
  5772. Γöé                              Γöéobject's:                     Γöé
  5773. Γöé                              Γöé                              Γöé
  5774. Γöé                              Γöéo Creation date and time      Γöé
  5775. Γöé                              Γöéo Last access date and timeo  Γöé
  5776. Γöé                              Γöéo Last update date and time.  Γöé
  5777. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5778. ΓöéwpQueryDisk                   ΓöéReturns the pointer to the    Γöé
  5779. Γöé                              Γöédisk object for the drive on  Γöé
  5780. Γöé                              Γöéwhich the file system object  Γöé
  5781. Γöé                              Γöéresides.                      Γöé
  5782. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5783. ΓöéwpQueryEASize                 ΓöéReturns the size, in bytes, ofΓöé
  5784. Γöé                              Γöéthe extended attributes of theΓöé
  5785. Γöé                              Γöéfile system object.           Γöé
  5786. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5787. ΓöéwpQueryEASupport              ΓöéDetermines whether extended   Γöé
  5788. Γöé                              Γöéattributes are supported for  Γöé
  5789. Γöé                              Γöéthe specified file system     Γöé
  5790. Γöé                              Γöéobject.                       Γöé
  5791. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5792. ΓöéwpQueryFilename               ΓöéReturns the name of the file  Γöé
  5793. Γöé                              Γöésystem object.                Γöé
  5794. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5795. ΓöéwpQueryFileSize               ΓöéReturns the size, in bytes, ofΓöé
  5796. Γöé                              Γöéthe file system object.       Γöé
  5797. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5798. ΓöéwpQueryLastAccess             ΓöéReturns the last access date  Γöé
  5799. Γöé                              Γöéand time of the file system   Γöé
  5800. Γöé                              Γöéobject.                       Γöé
  5801. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5802. ΓöéwpQueryLastWrite              ΓöéReturns the last write date   Γöé
  5803. Γöé                              Γöéand time of the file system   Γöé
  5804. Γöé                              Γöéobject.                       Γöé
  5805. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5806. ΓöéwpQueryRealName               ΓöéReturns the real name of the  Γöé
  5807. Γöé                              Γöéfile system object. For file  Γöé
  5808. Γöé                              Γöésystems that do not support   Γöé
  5809. Γöé                              Γöélong file names, such as the  Γöé
  5810. Γöé                              ΓöéFAT file system which allows 8Γöé
  5811. Γöé                              Γöécharacters for the file name  Γöé
  5812. Γöé                              Γöéand 3 for the extension, the  Γöé
  5813. Γöé                              Γöéreal name may be different    Γöé
  5814. Γöé                              Γöéthan the object's title.      Γöé
  5815. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5816. ΓöéwpQueryRefreshFlags           ΓöéQueries the refresh flags for Γöé
  5817. Γöé                              Γöéa file system object.  The    Γöé
  5818. Γöé                              Γöérefresh flags consist of a    Γöé
  5819. Γöé                              ΓöéDIRTYBIT and a FOUNDBIT that  Γöé
  5820. Γöé                              Γöéare used to allow refresh to  Γöé
  5821. Γöé                              Γöédetect deleted files and new  Γöé
  5822. Γöé                              Γöéfiles after asking a folder toΓöé
  5823. Γöé                              Γöére-populate.                  Γöé
  5824. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5825. ΓöéwpQueryType                   ΓöéReturns the type of the file  Γöé
  5826. Γöé                              Γöésystem object.                Γöé
  5827. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5828. ΓöéwpclsQueryAwakeObject         ΓöéReturns the pointer to the    Γöé
  5829. Γöé                              Γöéfile system object            Γöé
  5830. Γöé                              Γöécorresponding to the specifiedΓöé
  5831. Γöé                              Γöépath name, if the file system Γöé
  5832. Γöé                              Γöéobject is awake.              Γöé
  5833. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5834. ΓöéwpclsQueryInstanceFilter      ΓöéReturns a string containing   Γöé
  5835. Γöé                              Γöéthe filter for files that     Γöé
  5836. Γöé                              Γöécomprise the object class.    Γöé
  5837. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5838. ΓöéwpclsQueryInstanceType        ΓöéReturns a string containing   Γöé
  5839. Γöé                              Γöéthe .TYPE attribute for the   Γöé
  5840. Γöé                              Γöéfiles that comprise the objectΓöé
  5841. Γöé                              Γöéclass.                        Γöé
  5842. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5843. ΓöéwpclsQueryObjectFromPath      ΓöéReturns the pointer to an     Γöé
  5844. Γöé                              Γöéobject which represents the   Γöé
  5845. Γöé                              Γöégiven file or directory.      Γöé
  5846. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5847.  
  5848. A program or Workplace Shell object would call the following methods to set 
  5849. information about a file system object. These methods are not normally 
  5850. overridden. 
  5851.  
  5852. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5853. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5854. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5855. ΓöéwpSetAttr                     ΓöéChanges the file attributes ofΓöé
  5856. Γöé                              Γöéthe file system object.       Γöé
  5857. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5858. ΓöéwpSetDateInfo                 ΓöéChanges the file system       Γöé
  5859. Γöé                              Γöéobject's:                     Γöé
  5860. Γöé                              Γöé                              Γöé
  5861. Γöé                              Γöéo Creation date and time      Γöé
  5862. Γöé                              Γöéo Last access date and timeo  Γöé
  5863. Γöé                              Γöéo Last update date and time.  Γöé
  5864. Γöé                              Γöé                              Γöé
  5865. Γöé                              ΓöéNote:                         Γöé
  5866. Γöé                              ΓöéThis method changes only the  Γöé
  5867. Γöé                              Γöédates and times kept in the   Γöé
  5868. Γöé                              Γöépersistent data of the file   Γöé
  5869. Γöé                              Γöésystem object.  It does not   Γöé
  5870. Γöé                              Γöéchange the actual dates and   Γöé
  5871. Γöé                              Γöétimes kept by the underlying  Γöé
  5872. Γöé                              Γöéfile system.                  Γöé
  5873. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5874. ΓöéwpSetFileSizeInfo             ΓöéChanges the file size and     Γöé
  5875. Γöé                              Γöéextended attribute size of theΓöé
  5876. Γöé                              Γöéfile system object.           Γöé
  5877. Γöé                              Γöé                              Γöé
  5878. Γöé                              ΓöéNote:                         Γöé
  5879. Γöé                              ΓöéThis method changes only      Γöé
  5880. Γöé                              Γöéthe sizes kept in the         Γöé
  5881. Γöé                              Γöépersistent data of the file   Γöé
  5882. Γöé                              Γöésystem object.  It does not   Γöé
  5883. Γöé                              Γöéchange the actual sizes used  Γöé
  5884. Γöé                              Γöéby the underlying file        Γöé
  5885. Γöé                              Γöésystem.                       Γöé
  5886. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5887. ΓöéwpSetRealName                 ΓöéChanges the real name of the  Γöé
  5888. Γöé                              Γöéfile system object. This is   Γöé
  5889. Γöé                              Γöéthe name of the object        Γöé
  5890. Γöé                              Γöémaintained by the underlying  Γöé
  5891. Γöé                              Γöéfile system.                  Γöé
  5892. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5893. ΓöéwpSetTitleAndRenameFile       ΓöéChanges the file system       Γöé
  5894. Γöé                              Γöéobject's title and real name, Γöé
  5895. Γöé                              Γöéso that they match.           Γöé
  5896. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5897. ΓöéwpSetType                     ΓöéChanges the .TYPE attribute ofΓöé
  5898. Γöé                              Γöéthe file system object.       Γöé
  5899. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5900.  
  5901.  
  5902. ΓòÉΓòÉΓòÉ 8.1.6. Folder Related Methods ΓòÉΓòÉΓòÉ
  5903.  
  5904. A program or Workplace Shell object would call the following methods to get 
  5905. information about a folder object. These methods are not normally overridden. 
  5906.  
  5907. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5908. ΓöéMethod Name                   ΓöéDescription                   Γöé
  5909. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5910. ΓöéwpInitIconPosData             ΓöéReads the .ICONPOS extended   Γöé
  5911. Γöé                              Γöéattribute (EA) for the folder Γöé
  5912. Γöé                              Γöédirectory to determine where  Γöé
  5913. Γöé                              Γöéto position the object icons  Γöé
  5914. Γöé                              Γöéwithin the folder.            Γöé
  5915. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5916. ΓöéwpIsDetailsColumnVisible      ΓöéReturns the visibility state  Γöé
  5917. Γöé                              Γöéof a specified Details view   Γöé
  5918. Γöé                              Γöécolumn of the folder object.  Γöé
  5919. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5920. ΓöéwpIsSortAttribAvailable       ΓöéReturns an indication of      Γöé
  5921. Γöé                              Γöéwhether or not a sort         Γöé
  5922. Γöé                              Γöéattribute is available for a  Γöé
  5923. Γöé                              Γöécolumn of the Details view of Γöé
  5924. Γöé                              Γöéthe folder object.            Γöé
  5925. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5926. ΓöéwpQueryContent                ΓöéReturns the pointer to an     Γöé
  5927. Γöé                              Γöéobject contained in the       Γöé
  5928. Γöé                              Γöéfolder. This method may be    Γöé
  5929. Γöé                              Γöécalled within a loop to       Γöé
  5930. Γöé                              Γöéenumerate all of the objects  Γöé
  5931. Γöé                              Γöécontained in the folder.      Γöé
  5932. Γöé                              Γöé                              Γöé
  5933. Γöé                              ΓöéNote:                         Γöé
  5934. Γöé                              ΓöéThe folder must be awake for  Γöé
  5935. Γöé                              Γöéthis method to return the     Γöé
  5936. Γöé                              Γöépointers to all objects       Γöé
  5937. Γöé                              Γöécontained in the folder.      Γöé
  5938. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5939. ΓöéwpQueryFldrAttr               ΓöéReturns the folder object's   Γöé
  5940. Γöé                              Γöéattributes.                   Γöé
  5941. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5942. ΓöéwpQueryFldrBackground         ΓöéReturns the current values forΓöé
  5943. Γöé                              Γöéthe folder background.        Γöé
  5944. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5945. ΓöéwpQueryFldrDetailsClass       ΓöéReturns the class for which   Γöé
  5946. Γöé                              Γöédata is displayed in the      Γöé
  5947. Γöé                              ΓöéDetails view of the folder    Γöé
  5948. Γöé                              Γöéobject.                       Γöé
  5949. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5950. ΓöéwpQueryFldrFlags              ΓöéReturns the current state of  Γöé
  5951. Γöé                              Γöéthe folder object's flags.    Γöé
  5952. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5953. ΓöéwpQueryFldrFont               ΓöéReturns the name of the font  Γöé
  5954. Γöé                              Γöéused for the specified view ofΓöé
  5955. Γöé                              Γöéthe folder object.            Γöé
  5956. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5957. ΓöéwpQueryFldrSort               ΓöéReturns the sort attribute    Γöé
  5958. Γöé                              Γöéused for the specified view ofΓöé
  5959. Γöé                              Γöéthe folder object.            Γöé
  5960. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5961. ΓöéwpQueryFldrSortClass          ΓöéReturns the object class for  Γöé
  5962. Γöé                              Γöéwhich sorting is performed forΓöé
  5963. Γöé                              Γöéthe folder object.            Γöé
  5964. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5965. ΓöéwpQueryIconPosition           ΓöéFinds the saved icon postion  Γöé
  5966. Γöé                              Γöéfor this record.              Γöé
  5967. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5968. ΓöéwpQueryIconTextBackgroundColorΓöéReturns the current color     Γöé
  5969. Γöé                              Γöébeing used for the icon text  Γöé
  5970. Γöé                              Γöébackground.                   Γöé
  5971. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5972. ΓöéwpQueryIconTextColor          ΓöéReturns the current color     Γöé
  5973. Γöé                              Γöébeing used for the icon text  Γöé
  5974. Γöé                              Γöéin the specified view.        Γöé
  5975. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5976. ΓöéwpQueryIconTextVisibility     ΓöéReturns the current state of  Γöé
  5977. Γöé                              Γöéicon text visibility for the  Γöé
  5978. Γöé                              Γöéspecified view.               Γöé
  5979. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5980. ΓöéwpQueryIconViewPos            ΓöéReturns a pointer to the      Γöé
  5981. Γöé                              ΓöéIconViewPos array of the      Γöé
  5982. Γöé                              Γöéfolder object.                Γöé
  5983. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5984. ΓöéwpQueryMenuBarVisibility      ΓöéReturns the visibility state  Γöé
  5985. Γöé                              Γöéof the folder's menu bar.     Γöé
  5986. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5987. ΓöéwpQueryMenuStyle              ΓöéReturns the current menu      Γöé
  5988. Γöé                              Γöéstyle, which is either long orΓöé
  5989. Γöé                              Γöéshort.                        Γöé
  5990. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5991. ΓöéwpQueryNextIconPos            ΓöéReturns the next position at  Γöé
  5992. Γöé                              Γöéwhich an icon is inserted intoΓöé
  5993. Γöé                              Γöéthe folder object.            Γöé
  5994. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5995. ΓöéwpQueryOpenFolders            ΓöéAllows for the enumeration of Γöé
  5996. Γöé                              Γöéall open folders in the       Γöé
  5997. Γöé                              Γöésystem.                       Γöé
  5998. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5999. ΓöéwpQueryShadowTextColor        ΓöéReturns the current color     Γöé
  6000. Γöé                              Γöébeing used for the shadow textΓöé
  6001. Γöé                              Γöéin the specified view.        Γöé
  6002. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6003. ΓöéwpclsQueryOpenFolders         ΓöéReturns the pointer to an openΓöé
  6004. Γöé                              Γöéfolder object. This method mayΓöé
  6005. Γöé                              Γöébe called in a loop to        Γöé
  6006. Γöé                              Γöéenumerate all currently open  Γöé
  6007. Γöé                              Γöéfolders.                      Γöé
  6008. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6009.  
  6010. A program or Workplace Shell object would call the following methods to set 
  6011. information about a folder object. These methods are not normally overridden. 
  6012.  
  6013. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6014. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6015. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6016. ΓöéwpModifyFldrFlags             ΓöéSets or clears individual     Γöé
  6017. Γöé                              Γöéflags within the folder       Γöé
  6018. Γöé                              Γöéobject.                       Γöé
  6019. Γöé                              Γöé                              Γöé
  6020. Γöé                              ΓöéNote:                         Γöé
  6021. Γöé                              ΓöéThis method is an atomic      Γöé
  6022. Γöé                              Γöéoperation as only the         Γöé
  6023. Γöé                              Γöéspecified flags are changed,  Γöé
  6024. Γöé                              Γöéeven if other running threads Γöé
  6025. Γöé                              Γöétry to modify the flags at    Γöé
  6026. Γöé                              Γöéthe same time.                Γöé
  6027. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6028. ΓöéwpSetDetailsColumnVisibility  ΓöéChanges the visibility state  Γöé
  6029. Γöé                              Γöéof a specified column of data Γöé
  6030. Γöé                              Γöéfor the Details view of the   Γöé
  6031. Γöé                              Γöéfolder object.                Γöé
  6032. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6033. ΓöéwpSetFldrAttr                 ΓöéChanges the folder object's   Γöé
  6034. Γöé                              Γöéattributes.                   Γöé
  6035. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6036. ΓöéwpSetFldrBackground           ΓöéSets the values for the folderΓöé
  6037. Γöé                              Γöébackground.                   Γöé
  6038. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6039. ΓöéwpSetFldrDetailsClass         ΓöéChanges the object class for  Γöé
  6040. Γöé                              Γöéwhich data is displayed in a  Γöé
  6041. Γöé                              ΓöéDetails view of the folder    Γöé
  6042. Γöé                              Γöéobject.                       Γöé
  6043. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6044. ΓöéwpSetFldrFlags                ΓöéChanges the folder object's   Γöé
  6045. Γöé                              Γöéflags.                        Γöé
  6046. Γöé                              Γöé                              Γöé
  6047. Γöé                              ΓöéNote:                         Γöé
  6048. Γöé                              ΓöéThis method exists only for   Γöé
  6049. Γöé                              Γöécompatibility with old        Γöé
  6050. Γöé                              Γöéobjects.  All new or changed  Γöé
  6051. Γöé                              Γöéobjects should use            Γöé
  6052. Γöé                              ΓöéwpModifyFldrFlags instead.    Γöé
  6053. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6054. ΓöéwpSetFldrFont                 ΓöéChanges the font used for the Γöé
  6055. Γöé                              Γöéspecified view of the folder  Γöé
  6056. Γöé                              Γöéobject.                       Γöé
  6057. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6058. ΓöéwpSetFldrSort                 ΓöéChanges the sort attribute forΓöé
  6059. Γöé                              Γöéthe specified view of the     Γöé
  6060. Γöé                              Γöéfolder object.                Γöé
  6061. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6062. ΓöéwpSetFldrSortClass            ΓöéChanges the object class for  Γöé
  6063. Γöé                              Γöéwhich data is sorted for the  Γöé
  6064. Γöé                              Γöéfolder object.                Γöé
  6065. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6066. ΓöéwpSetFolder                   ΓöéSets this object to reside in Γöé
  6067. Γöé                              Γöéthe specified folder.         Γöé
  6068. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6069. ΓöéwpSetIconTextBackgroundColor  ΓöéSets the color to be used for Γöé
  6070. Γöé                              Γöéthe icon text background.     Γöé
  6071. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6072. ΓöéwpSetIconTextColor            ΓöéSets the color to be used for Γöé
  6073. Γöé                              Γöéthe icon text for the         Γöé
  6074. Γöé                              Γöéspecified view.               Γöé
  6075. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6076. ΓöéwpSetIconTextVisibility       ΓöéSets the icon text visibility Γöé
  6077. Γöé                              Γöéfor the specified view.       Γöé
  6078. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6079. ΓöéwpSetMenuBarVisibility        ΓöéSets the visibility state of  Γöé
  6080. Γöé                              Γöéthe folder's menu bar.        Γöé
  6081. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6082. ΓöéwpSetNextIconPos              ΓöéChanges the next position at  Γöé
  6083. Γöé                              Γöéwhich an icon is inserted intoΓöé
  6084. Γöé                              Γöéthe folder object. This methodΓöé
  6085. Γöé                              Γöécan be used to ensure that    Γöé
  6086. Γöé                              Γöéobjects inserted into the     Γöé
  6087. Γöé                              Γöéfolder are displayed where youΓöé
  6088. Γöé                              Γöéwant them.                    Γöé
  6089. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6090. ΓöéwpSetRefreshFlags             ΓöéSets the refresh flags for a  Γöé
  6091. Γöé                              Γöéfile system object.  The      Γöé
  6092. Γöé                              Γöérefresh flags consist of a    Γöé
  6093. Γöé                              ΓöéDIRTYBIT and a FOUNDBIT that  Γöé
  6094. Γöé                              Γöéare used to allow refresh to  Γöé
  6095. Γöé                              Γöédetect deleted files and new  Γöé
  6096. Γöé                              Γöéfiles, after asking a folder  Γöé
  6097. Γöé                              Γöéto re-populate.               Γöé
  6098. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6099. ΓöéwpSetShadowTextColor          ΓöéSets the color to be used for Γöé
  6100. Γöé                              Γöéthe shadow text for the       Γöé
  6101. Γöé                              Γöéspecified view.               Γöé
  6102. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6103. ΓöéwpSetSortAttribAvailable      ΓöéChanges the indication of     Γöé
  6104. Γöé                              Γöéwhether or not a sort         Γöé
  6105. Γöé                              Γöéattribute is available for a  Γöé
  6106. Γöé                              Γöécolumn of a Details view of   Γöé
  6107. Γöé                              Γöéthe folder object.            Γöé
  6108. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6109.  
  6110. A program or Workplace Shell object would call the following methods to flush 
  6111. notification messages or free icon position data for a folder object. These 
  6112. methods are not normally overridden. 
  6113.  
  6114. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6115. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6116. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6117. ΓöéwpFlushNotifications          ΓöéForces all pending file systemΓöé
  6118. Γöé                              Γöénotifications for a folder to Γöé
  6119. Γöé                              Γöébe processed immediately.     Γöé
  6120. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6121. ΓöéwpFreeIconPosData             ΓöéFrees the .ICONPOS extended   Γöé
  6122. Γöé                              Γöéattribute (EA) information    Γöé
  6123. Γöé                              Γöéthat is allocated by          Γöé
  6124. Γöé                              ΓöéwpInitIconPosData.            Γöé
  6125. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6126.  
  6127.  
  6128. ΓòÉΓòÉΓòÉ 8.1.7. Icon Related Methods ΓòÉΓòÉΓòÉ
  6129.  
  6130. A program or Workplace Shell object would call the following methods to get 
  6131. information about an object's icons. A Workplace Shell object would override 
  6132. these methods to define its icons. 
  6133.  
  6134. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6135. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6136. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6137. ΓöéwpQueryHandleFromContents     ΓöéReturns a handle to a known   Γöé
  6138. Γöé                              Γöésystem data type based on a   Γöé
  6139. Γöé                              Γöéfile's contents.  This is an  Γöé
  6140. Γöé                              Γöéabstract method; subclasses   Γöé
  6141. Γöé                              Γöéthat describe files for which Γöé
  6142. Γöé                              Γöéa system handle type exist    Γöé
  6143. Γöé                              Γöé(such as WPIcon or WPBitmap)  Γöé
  6144. Γöé                              Γöéshould subclass this method.  Γöé
  6145. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6146. ΓöéwpQueryIconData               ΓöéReturns the information that  Γöé
  6147. Γöé                              Γöédefines the object's icon.    Γöé
  6148. Γöé                              ΓöéThis overrides the class      Γöé
  6149. Γöé                              Γöédefault icon defined by       Γöé
  6150. Γöé                              ΓöéwpclsQueryIconData.           Γöé
  6151. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6152. ΓöéwpclsQueryIconData            ΓöéReturns the information that  Γöé
  6153. Γöé                              Γöédefines the class default     Γöé
  6154. Γöé                              Γöéicon. This icon is associated Γöé
  6155. Γöé                              Γöéwith every object of this     Γöé
  6156. Γöé                              Γöéclass. This icon can be       Γöé
  6157. Γöé                              Γöéchanged for an individual     Γöé
  6158. Γöé                              Γöéobject if:                    Γöé
  6159. Γöé                              Γöé                              Γöé
  6160. Γöé                              Γöéo The object overrides        Γöé
  6161. Γöé                              Γöé  wpQueryIconData.            Γöé
  6162. Γöé                              Γöéo The wpSetIconData method    Γöé
  6163. Γöé                              Γöé  is called.                  Γöé
  6164. Γöé                              Γöéo The wpSetup method is calledΓöé
  6165. Γöé                              Γöé  with the ICONFILE or        Γöé
  6166. Γöé                              Γöé  ICONRESOURCE keyword, or if Γöé
  6167. Γöé                              Γöé  the user edits the icon on  Γöé
  6168. Γöé                              Γöé  the General page of the     Γöé
  6169. Γöé                              Γöé  Settings notebook.          Γöé
  6170. Γöé                              Γöé                              Γöé
  6171. Γöé                              ΓöéFor a folder class, this is   Γöé
  6172. Γöé                              Γöéthe closed folder icon.       Γöé
  6173. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6174. ΓöéwpclsQueryIconDataN           ΓöéReturns the information that  Γöé
  6175. Γöé                              Γöédefines the nth class default Γöé
  6176. Γöé                              Γöéanimation icon.               Γöé
  6177. Γöé                              Γöé                              Γöé
  6178. Γöé                              ΓöéNote:                         Γöé
  6179. Γöé                              ΓöéThis method is available only Γöé
  6180. Γöé                              Γöéfor a folder class.  It       Γöé
  6181. Γöé                              Γöédefines the default open      Γöé
  6182. Γöé                              Γöéfolder icon for all objects   Γöé
  6183. Γöé                              Γöéof this class.  This icon can Γöé
  6184. Γöé                              Γöébe changed for an individual  Γöé
  6185. Γöé                              Γöéobject if wpSetup is called   Γöé
  6186. Γöé                              Γöéwith the ICONNFILE or         Γöé
  6187. Γöé                              ΓöéICONNRESOURCE keyword, or if  Γöé
  6188. Γöé                              Γöéthe user edits the animation  Γöé
  6189. Γöé                              Γöéicon on General page 2 of the Γöé
  6190. Γöé                              ΓöéSettings notebook.            Γöé
  6191. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6192.  
  6193. A program or Workplace Shell object would call the following methods to get 
  6194. information about an object's icons. These methods are not normally overridden 
  6195. by the object. 
  6196.  
  6197. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6198. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6199. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6200. ΓöéwpQueryIcon                   ΓöéReturns the handle of the     Γöé
  6201. Γöé                              Γöéobject's icon.                Γöé
  6202. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6203. ΓöéwpclsQueryIcon                ΓöéReturns the handle of the     Γöé
  6204. Γöé                              Γöéclass default icon. For a     Γöé
  6205. Γöé                              Γöéfolder class, this method     Γöé
  6206. Γöé                              Γöéreturns the handle of the     Γöé
  6207. Γöé                              Γöéclass' default closed folder  Γöé
  6208. Γöé                              Γöéicon.                         Γöé
  6209. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6210. ΓöéwpclsQueryIconN               ΓöéReturns the handle of the nth Γöé
  6211. Γöé                              Γöéclass default animation icon. Γöé
  6212. Γöé                              ΓöéThis method is available only Γöé
  6213. Γöé                              Γöéfor a folder class. It returnsΓöé
  6214. Γöé                              Γöéthe handle of the class'      Γöé
  6215. Γöé                              Γöédefault open folder icon.     Γöé
  6216. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6217.  
  6218. A program or Workplace Shell object would call the following methods to change 
  6219. the icon for an object. These methods are not normally overridden by the 
  6220. object. 
  6221.  
  6222. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6223. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6224. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6225. ΓöéwpSetIcon                     ΓöéSets the handle of the        Γöé
  6226. Γöé                              Γöéobject's icon. This handle is Γöé
  6227. Γöé                              Γöénot saved in the persistent   Γöé
  6228. Γöé                              Γöédata of the object, so it has Γöé
  6229. Γöé                              Γöéeffect until the object goes  Γöé
  6230. Γöé                              Γöédormant. This method affects  Γöé
  6231. Γöé                              Γöéall open views of the object. Γöé
  6232. Γöé                              ΓöéFor a folder object, wpSetIconΓöé
  6233. Γöé                              Γöéaffects the icon displayed:   Γöé
  6234. Γöé                              Γöé                              Γöé
  6235. Γöé                              Γöéo In the title bar.           Γöé
  6236. Γöé                              Γöéo On the Toolbar.             Γöé
  6237. Γöé                              Γöéo On the General page 1 of    Γöé
  6238. Γöé                              Γöé  the Settings notebook.      Γöé
  6239. Γöé                              Γöéo In all containers if the    Γöé
  6240. Γöé                              Γöé  object is closed.           Γöé
  6241. Γöé                              Γöé  If the object is open, all  Γöé
  6242. Γöé                              Γöé  containers continue to show Γöé
  6243. Γöé                              Γöé  the object's animation      Γöé
  6244. Γöé                              Γöé  icon.                       Γöé
  6245. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6246. ΓöéwpSetIconData                 ΓöéSets the definition for the   Γöé
  6247. Γöé                              Γöéobject's icon. This icon      Γöé
  6248. Γöé                              Γöédefinition is saved with the  Γöé
  6249. Γöé                              Γöépersistent data of the object.Γöé
  6250. Γöé                              ΓöéIt permanently changes the    Γöé
  6251. Γöé                              Γöéobject's icon. This method    Γöé
  6252. Γöé                              Γöéautomatically calls wpSetIcon Γöé
  6253. Γöé                              Γöéto update the visual display  Γöé
  6254. Γöé                              Γöéof the object's icon.         Γöé
  6255. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6256. ΓöéwpSetProgIcon                 ΓöéSets the visible icon         Γöé
  6257. Γöé                              Γöéassociated with the program   Γöé
  6258. Γöé                              Γöéreference or program file     Γöé
  6259. Γöé                              Γöéobject. This method is        Γöé
  6260. Γöé                              Γöéavailable only for a program  Γöé
  6261. Γöé                              Γöéreference or program file     Γöé
  6262. Γöé                              Γöéobject.                       Γöé
  6263. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6264. ΓöéwpclsSetIcon                  ΓöéSets the handle of the defaultΓöé
  6265. Γöé                              Γöéclass icon.                   Γöé
  6266. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6267. ΓöéwpclsSetIconData              ΓöéSets the definition of the    Γöé
  6268. Γöé                              Γöédefault class icon.           Γöé
  6269. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6270.  
  6271.  
  6272. ΓòÉΓòÉΓòÉ 8.1.8. Image File Related Methods ΓòÉΓòÉΓòÉ
  6273.  
  6274. A program or Workplace Shell object would call the following methods to get 
  6275. information about an image file object. These methods are not normally 
  6276. overridden. 
  6277.  
  6278. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6279. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6280. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6281. ΓöéwpQueryBitmapData             ΓöéReturns a pointer to the      Γöé
  6282. Γöé                              Γöébitmap data for the image     Γöé
  6283. Γöé                              Γöéfile.                         Γöé
  6284. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6285. ΓöéwpQueryBitmapHandle           ΓöéReturns a handle to the bitmapΓöé
  6286. Γöé                              Γöéthat can be displayed showing Γöé
  6287. Γöé                              Γöéthe contents of the image fileΓöé
  6288. Γöé                              Γöéand a handle to the palette toΓöé
  6289. Γöé                              Γöébe used when displaying the   Γöé
  6290. Γöé                              Γöébitmap.                       Γöé
  6291. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6292. ΓöéwpQueryBitmapInfoHeader       ΓöéReturns a pointer to the      Γöé
  6293. Γöé                              Γöébitmap information header for Γöé
  6294. Γöé                              Γöéthe image file.               Γöé
  6295. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6296.  
  6297. A program or Workplace Shell object would call the following method to set 
  6298. information about an image file object. 
  6299.  
  6300. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6301. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6302. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6303. ΓöéwpSetBitmapData               ΓöéSets the bitmap data for the  Γöé
  6304. Γöé                              Γöéimage file.  This method will Γöé
  6305. Γöé                              Γöéconvert the bitmap data to theΓöé
  6306. Γöé                              Γöéappropriate format and update Γöé
  6307. Γöé                              Γöéthe actual image data file.   Γöé
  6308. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6309.  
  6310. A program or Workplace Shell object would call the following method to read or 
  6311. write information about an image file object. 
  6312.  
  6313. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6314. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6315. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6316. ΓöéwpReadImageFile               ΓöéReads the image data for the  Γöé
  6317. Γöé                              Γöéimage file and stores it in   Γöé
  6318. Γöé                              Γöéthe instance data for the     Γöé
  6319. Γöé                              Γöéobject. If the image data has Γöé
  6320. Γöé                              Γöéalready been read, this methodΓöé
  6321. Γöé                              Γöésimply returns TRUE.  It does Γöé
  6322. Γöé                              Γöénot refresh the image data.   Γöé
  6323. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6324. ΓöéwpWriteImageFile              ΓöéWrites the image data for the Γöé
  6325. Γöé                              Γöéimage file from the instance  Γöé
  6326. Γöé                              Γöédata.                         Γöé
  6327. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6328.  
  6329.  
  6330. ΓòÉΓòÉΓòÉ 8.1.9. Network Related Methods ΓòÉΓòÉΓòÉ
  6331.  
  6332. A program or Workplace Shell object would call the following methods to get 
  6333. information about a network object. These methods are not normally overridden. 
  6334.  
  6335. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6336. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6337. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6338. ΓöéwpQueryNetIdentity            ΓöéReturns the fully qualified   Γöé
  6339. Γöé                              Γöénetwork name for a network    Γöé
  6340. Γöé                              Γöégroup object.                 Γöé
  6341. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6342. ΓöéwpQueryObjectNetId            ΓöéReturns the network ID of the Γöé
  6343. Γöé                              Γöéshared directory object that  Γöé
  6344. Γöé                              Γöéthis object is linked to.     Γöé
  6345. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6346. ΓöéwpQuerySrvrIdentity           ΓöéReturns the fully qualified   Γöé
  6347. Γöé                              Γöénetwork name for this server  Γöé
  6348. Γöé                              Γöéobject.                       Γöé
  6349. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6350.  
  6351. A program or Workplace Shell object would call the following methods to set 
  6352. information about a network object. These methods are not normally overridden. 
  6353.  
  6354. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6355. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6356. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6357. ΓöéwpSetNetIdentity              ΓöéSets the fully qualified      Γöé
  6358. Γöé                              Γöénetwork name for a network    Γöé
  6359. Γöé                              Γöégroup object.                 Γöé
  6360. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6361. ΓöéwpSetObjectNetId              ΓöéSets the network ID of the    Γöé
  6362. Γöé                              Γöéshared directory object that  Γöé
  6363. Γöé                              Γöéthis object is linked to.     Γöé
  6364. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6365.  
  6366.  
  6367. ΓòÉΓòÉΓòÉ 8.1.10. Palette Related Methods ΓòÉΓòÉΓòÉ
  6368.  
  6369. A program or Workplace Shell object would call the following methods to get 
  6370. information about a palette object. A palette object would override these 
  6371. methods to define its characteristics. 
  6372.  
  6373. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6374. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6375. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6376. ΓöéwpQueryPaletteHelp            ΓöéReturns the help panel ID thatΓöé
  6377. Γöé                              Γöéis displayed when the Help    Γöé
  6378. Γöé                              Γöépush button is pressed in an  Γöé
  6379. Γöé                              Γöéopen palette view.            Γöé
  6380. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6381. ΓöéwpclsQueryEditString          ΓöéReturns the title for the EditΓöé
  6382. Γöé                              Γöépush button.                  Γöé
  6383. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6384.  
  6385. A program or Workplace Shell object would call the following method to get 
  6386. information about a palette object. This method is normally not overridden. 
  6387.  
  6388. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6389. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6390. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6391. ΓöéwpQueryPaletteInfo            ΓöéReturns information about the Γöé
  6392. Γöé                              Γöépalette.                      Γöé
  6393. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6394.  
  6395. A program or Workplace Shell object would call the following method to set 
  6396. information about a palette object. This method is normally not overridden. 
  6397.  
  6398. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6399. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6400. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6401. ΓöéwpSetPaletteInfo              ΓöéChanges the current           Γöé
  6402. Γöé                              Γöéinformation about the palette.Γöé
  6403. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6404.  
  6405.  
  6406. ΓòÉΓòÉΓòÉ 8.1.11. Power Related Methods ΓòÉΓòÉΓòÉ
  6407.  
  6408. A program or Workplace Shell object would call the following methods to get 
  6409. information about a power object. A power object would override these methods 
  6410. to define its characteristics. 
  6411.  
  6412. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6413. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6414. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6415. ΓöéwpQueryAutoRefresh            ΓöéReturns the current state     Γöé
  6416. Γöé                              Γöé(enabled or disabled) for     Γöé
  6417. Γöé                              Γöéautomatic refresh of the powerΓöé
  6418. Γöé                              Γöéobject's status window.       Γöé
  6419. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6420. ΓöéwpQueryRefreshRate            ΓöéReturns the current refresh   Γöé
  6421. Γöé                              Γöérate (in minutes) for the     Γöé
  6422. Γöé                              Γöépower object's status window  Γöé
  6423. Γöé                              Γöéwhen automatic refresh is     Γöé
  6424. Γöé                              Γöéenabled.                      Γöé
  6425. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6426.  
  6427. A program or Workplace Shell object would call the following methods to get 
  6428. information about a power object. These methods are normally not overridden. 
  6429.  
  6430. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6431. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6432. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6433. ΓöéwpQueryDefStatusView          ΓöéReturns the default view for  Γöé
  6434. Γöé                              Γöéthe power object when         Γöé
  6435. Γöé                              Γöé"Advanced power management"   Γöé
  6436. Γöé                              Γöé(APM) is enabled.             Γöé
  6437. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6438. ΓöéwpQueryPowerConfirmation      ΓöéReturns the current state     Γöé
  6439. Γöé                              Γöé(enabled or disabled) for the Γöé
  6440. Γöé                              Γöépower object's confirmation   Γöé
  6441. Γöé                              Γöémessage. This message is      Γöé
  6442. Γöé                              Γöéoptionally displayed when     Γöé
  6443. Γöé                              Γöépower state changes are       Γöé
  6444. Γöé                              Γöérequested from its context    Γöé
  6445. Γöé                              Γöémenu.                         Γöé
  6446. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6447. ΓöéwpQueryPowerManagement        ΓöéReturns the current state     Γöé
  6448. Γöé                              Γöé(enabled or disabled) for     Γöé
  6449. Γöé                              Γöé"Advanced power management"   Γöé
  6450. Γöé                              Γöé(APM).                        Γöé
  6451. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6452.  
  6453. A program or Workplace Shell object would call the following methods to set 
  6454. information about a power object. These methods are normally not overridden. 
  6455.  
  6456. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6457. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6458. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6459. ΓöéwpSetAutoRefresh              ΓöéEnables or disables automatic Γöé
  6460. Γöé                              Γöérefresh of the power object's Γöé
  6461. Γöé                              Γöéstatus window.                Γöé
  6462. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6463. ΓöéwpSetDefStatusView            ΓöéSets the default status view  Γöé
  6464. Γöé                              Γöéfor the power object when     Γöé
  6465. Γöé                              Γöé"Advanced power management" isΓöé
  6466. Γöé                              Γöéenabled.                      Γöé
  6467. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6468. ΓöéwpSetPowerConfirmation        ΓöéEnables or disables the       Γöé
  6469. Γöé                              Γöédisplay of the power object's Γöé
  6470. Γöé                              Γöéconfirmation message when     Γöé
  6471. Γöé                              Γöépower state changes are       Γöé
  6472. Γöé                              Γöérequested from its context    Γöé
  6473. Γöé                              Γöémenu.                         Γöé
  6474. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6475. ΓöéwpSetPowerManagement          ΓöéEnables or disables "Advanced Γöé
  6476. Γöé                              Γöépower management".            Γöé
  6477. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6478. ΓöéwpSetRefreshRate              ΓöéSets the refresh rate for the Γöé
  6479. Γöé                              Γöépower object's status window  Γöé
  6480. Γöé                              Γöéwhen automatic refresh is     Γöé
  6481. Γöé                              Γöéenabled.                      Γöé
  6482. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6483.  
  6484.  
  6485. ΓòÉΓòÉΓòÉ 8.1.12. Printer and Print Job Related Methods ΓòÉΓòÉΓòÉ
  6486.  
  6487. A program or Workplace Shell object would call the following methods to get 
  6488. information about a printer or print job object. These methods are normally not 
  6489. overridden. 
  6490.  
  6491. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6492. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6493. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6494. ΓöéwpQueryComputerName           ΓöéReturns the name of the       Γöé
  6495. Γöé                              Γöécomputer on which the printer Γöé
  6496. Γöé                              Γöéobject exists.                Γöé
  6497. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6498. ΓöéwpQueryJobFile                ΓöéReturns the name of the spool Γöé
  6499. Γöé                              Γöéfile for the print job object.Γöé
  6500. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6501. ΓöéwpQueryJobId                  ΓöéReturns the job ID for the    Γöé
  6502. Γöé                              Γöéprint job object.             Γöé
  6503. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6504. ΓöéwpQueryJobType                ΓöéReturns the data type for the Γöé
  6505. Γöé                              Γöéprint job object.             Γöé
  6506. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6507. ΓöéwpQueryLocalAlias             ΓöéReturns the name of the local Γöé
  6508. Γöé                              Γöéprint queue for a remote      Γöé
  6509. Γöé                              Γöéprinter object.               Γöé
  6510. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6511. ΓöéwpQueryNetworkId              ΓöéReturns the fully qualified   Γöé
  6512. Γöé                              Γöénetwork ID of the remote      Γöé
  6513. Γöé                              Γöéprinter queue for a remote    Γöé
  6514. Γöé                              Γöéprinter object.               Γöé
  6515. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6516. ΓöéwpQueryPrinterName            ΓöéReturns the name of the print Γöé
  6517. Γöé                              Γöéqueue for this printer object.Γöé
  6518. Γöé                              ΓöéFor a remote printer object,  Γöé
  6519. Γöé                              Γöéthis is the computer's printerΓöé
  6520. Γöé                              Γöéqueue name on which the       Γöé
  6521. Γöé                              Γöéprinter object exists. The    Γöé
  6522. Γöé                              Γöéname of the local print queue Γöé
  6523. Γöé                              Γöécan be obtained by calling    Γöé
  6524. Γöé                              ΓöéwpQueryLocalAlias.            Γöé
  6525. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6526. ΓöéwpQueryPrintObject            ΓöéReturns a pointer to the      Γöé
  6527. Γöé                              Γöéprinter object to which the   Γöé
  6528. Γöé                              Γöéprint job is associated with. Γöé
  6529. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6530. ΓöéwpQueryQueueOptions           ΓöéReturns the printer object's  Γöé
  6531. Γöé                              Γöéqueue options.                Γöé
  6532. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6533. ΓöéwpQueryRemoteOptions          ΓöéReturns the printer object's  Γöé
  6534. Γöé                              Γöéremote options.               Γöé
  6535. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6536.  
  6537. A program or Workplace Shell object would call the following methods to set 
  6538. information about a printer or print job object. These methods are normally not 
  6539. overridden. 
  6540.  
  6541. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6542. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6543. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6544. ΓöéwpSetComputerName             ΓöéSets the name of the computer Γöé
  6545. Γöé                              Γöéon which the printer object   Γöé
  6546. Γöé                              Γöéresides.                      Γöé
  6547. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6548. ΓöéwpSetDefaultPrinter           ΓöéSets the printer object as theΓöé
  6549. Γöé                              Γöédefault printer.              Γöé
  6550. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6551. ΓöéwpSetJobProperties            ΓöéSets the print job properties.Γöé
  6552. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6553. ΓöéwpSetPrinterName              ΓöéSets the name of the printer  Γöé
  6554. Γöé                              Γöéobject.                       Γöé
  6555. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6556. ΓöéwpSetQueueOptions             ΓöéSets the printer object's     Γöé
  6557. Γöé                              Γöéqueue options.                Γöé
  6558. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6559. ΓöéwpSetRemoteOptions            ΓöéSets the printer object's     Γöé
  6560. Γöé                              Γöéremote options.               Γöé
  6561. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6562.  
  6563.  
  6564. ΓòÉΓòÉΓòÉ 8.1.13. Program Reference and Program File Related Methods ΓòÉΓòÉΓòÉ
  6565.  
  6566. A program or Workplace Shell object would call the following methods to get 
  6567. information about a program reference or a program file object. A program 
  6568. reference or program file object would override these methods to define its 
  6569. characteristics. 
  6570.  
  6571. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6572. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6573. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6574. ΓöéwpQueryAssociationFilter      ΓöéReturns the list of filters   Γöé
  6575. Γöé                              Γöéthat the program reference or Γöé
  6576. Γöé                              Γöéprogram file object is        Γöé
  6577. Γöé                              Γöéassociated to.                Γöé
  6578. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6579. ΓöéwpQueryAssociationType        ΓöéReturns the list of types thatΓöé
  6580. Γöé                              Γöéthe program reference or      Γöé
  6581. Γöé                              Γöéprogram file object is        Γöé
  6582. Γöé                              Γöéassociated to.                Γöé
  6583. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6584. ΓöéwpQueryProgramAssociations    ΓöéReturns the list of filters orΓöé
  6585. Γöé                              Γöétypes for the program         Γöé
  6586. Γöé                              Γöéreference or program file     Γöé
  6587. Γöé                              Γöéobject.                       Γöé
  6588. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6589.  
  6590. A program or Workplace Shell object would call the following method to get 
  6591. information about a program reference or a program file object. This method is 
  6592. not normally overriden. 
  6593.  
  6594. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6595. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6596. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6597. ΓöéwpQueryProgDetails            ΓöéReturns the program details   Γöé
  6598. Γöé                              Γöéfor the program reference or  Γöé
  6599. Γöé                              Γöéprogram file object.          Γöé
  6600. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6601. ΓöéwpQueryWarnBeforeStart        ΓöéQueries the program           Γöé
  6602. Γöé                              Γöéreference's Warn Before Start Γöé
  6603. Γöé                              Γöéflag.  If this flag is set,   Γöé
  6604. Γöé                              Γöéput up a warning dialog beforeΓöé
  6605. Γöé                              Γöéstarting the program.         Γöé
  6606. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6607. ΓöéwpQueryWarnBeforeStart        ΓöéQueries the program           Γöé
  6608. Γöé                              Γöéreference's Warn Before Start Γöé
  6609. Γöé                              Γöéflag.  If this flag is set,   Γöé
  6610. Γöé                              Γöéput up a warning dialog beforeΓöé
  6611. Γöé                              Γöéstarting the program.         Γöé
  6612. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6613.  
  6614. A program or Workplace Shell object would call the following methods to set 
  6615. information about a program reference or a program file object. These methods 
  6616. are not normally overridden. 
  6617.  
  6618. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6619. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6620. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6621. ΓöéwpSetAssociationFilter        ΓöéChanges the list of filters   Γöé
  6622. Γöé                              Γöéthat the program reference or Γöé
  6623. Γöé                              Γöéprogram file object is        Γöé
  6624. Γöé                              Γöéassociated to.                Γöé
  6625. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6626. ΓöéwpSetAssociationType          ΓöéChanges the list of types thatΓöé
  6627. Γöé                              Γöéthe program reference or      Γöé
  6628. Γöé                              Γöéprogram file object is        Γöé
  6629. Γöé                              Γöéassociated to.                Γöé
  6630. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6631. ΓöéwpSetProgDetails              ΓöéChanges the program details   Γöé
  6632. Γöé                              Γöéfor the program reference or  Γöé
  6633. Γöé                              Γöéprogram file object.          Γöé
  6634. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6635. ΓöéwpSetProgramAssociations      ΓöéChanges the list of filters orΓöé
  6636. Γöé                              Γöétypes that the program        Γöé
  6637. Γöé                              Γöéreference or program file     Γöé
  6638. Γöé                              Γöéobject is associated to.      Γöé
  6639. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6640. ΓöéwpSetWarnBeforeStart          ΓöéSets the program reference's  Γöé
  6641. Γöé                              ΓöéWarn Before Start flag.  If   Γöé
  6642. Γöé                              Γöéthis flag is set, put up a    Γöé
  6643. Γöé                              Γöéwarning dialog before startingΓöé
  6644. Γöé                              Γöéthe program.                  Γöé
  6645. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6646. ΓöéwpSetWarnBeforeStart          ΓöéSets the program reference's  Γöé
  6647. Γöé                              ΓöéWarn Before Start flag.  If   Γöé
  6648. Γöé                              Γöéthis flag is set, put up a    Γöé
  6649. Γöé                              Γöéwarning dialog before startingΓöé
  6650. Γöé                              Γöéthe program.                  Γöé
  6651. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6652.  
  6653.  
  6654. ΓòÉΓòÉΓòÉ 8.1.14. Shadow Related Methods ΓòÉΓòÉΓòÉ
  6655.  
  6656. A program or Workplace Shell object would call the following method to get 
  6657. information about a shadow object. This method is normally not overridden. 
  6658.  
  6659. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6660. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6661. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6662. ΓöéwpQueryShadowedObject         ΓöéReturns a pointer to the      Γöé
  6663. Γöé                              Γöéobject this shadow is linked  Γöé
  6664. Γöé                              Γöéto.                           Γöé
  6665. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6666.  
  6667. A program or Workplace Shell object would call the following methods to set 
  6668. information about a shadow object. These methods are normally not overridden. 
  6669.  
  6670. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6671. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6672. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6673. ΓöéwpSetLinkToObject             ΓöéChanges a shadow object to    Γöé
  6674. Γöé                              Γöélink to a new object.         Γöé
  6675. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6676. ΓöéwpSetShadowTitle              ΓöéChanges the title of a shadow Γöé
  6677. Γöé                              Γöéobject without changing the   Γöé
  6678. Γöé                              Γöétitle of the object the shadowΓöé
  6679. Γöé                              Γöéis linked to.                 Γöé
  6680. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6681.  
  6682.  
  6683. ΓòÉΓòÉΓòÉ 8.1.15. View Related Methods ΓòÉΓòÉΓòÉ
  6684.  
  6685. A program or Workplace Shell object would call the following methods to get 
  6686. information about a view of an object. A Workplace Shell object would override 
  6687. these methods to define the characteristics of its open views. 
  6688.  
  6689. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6690. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6691. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6692. ΓöéwpQueryButtonAppearance       ΓöéReturns which button          Γöé
  6693. Γöé                              Γöé(minimize, hide, or the systemΓöé
  6694. Γöé                              Γöédefault) appears in the frame Γöé
  6695. Γöé                              Γöécontrol for an open view of   Γöé
  6696. Γöé                              Γöéthe object.                   Γöé
  6697. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6698. ΓöéwpQueryConcurrentView         ΓöéReturns an indication of      Γöé
  6699. Γöé                              Γöéwhether or not this object    Γöé
  6700. Γöé                              Γöéallows multiple concurrent    Γöé
  6701. Γöé                              Γöéviews to be opened.           Γöé
  6702. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6703. ΓöéwpQueryDefaultView            ΓöéReturns the view of the objectΓöé
  6704. Γöé                              Γöéthat is opened when the       Γöé
  6705. Γöé                              Γöédefault view is opened.       Γöé
  6706. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6707. ΓöéwpQueryMinWindow              ΓöéReturns the behavior of the   Γöé
  6708. Γöé                              Γöéobject when it is minimized   Γöé
  6709. Γöé                              Γöé(Minimize window to Desktop,  Γöé
  6710. Γöé                              ΓöéMinimize window to viewer, or Γöé
  6711. Γöé                              Γöéuse the system default        Γöé
  6712. Γöé                              Γöébehavior).                    Γöé
  6713. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6714. ΓöéwpclsQueryButtonAppearance    ΓöéReturns the class default for Γöé
  6715. Γöé                              Γöéwhich button (minimize, hide, Γöé
  6716. Γöé                              Γöéor the system default) appearsΓöé
  6717. Γöé                              Γöéin the frame control for an   Γöé
  6718. Γöé                              Γöéopen view of any object of    Γöé
  6719. Γöé                              Γöéthis class.                   Γöé
  6720. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6721. ΓöéwpclsQueryDefaultView         ΓöéReturns the class default of  Γöé
  6722. Γöé                              Γöéwhich view of the object is   Γöé
  6723. Γöé                              Γöéopened when the default view  Γöé
  6724. Γöé                              Γöéis opened. The default view isΓöé
  6725. Γöé                              Γöéassociated with every object  Γöé
  6726. Γöé                              Γöéof the class. The default viewΓöé
  6727. Γöé                              Γöécan be changed for an         Γöé
  6728. Γöé                              Γöéindividual object if:         Γöé
  6729. Γöé                              Γöé                              Γöé
  6730. Γöé                              Γöéo The object overrides        Γöé
  6731. Γöé                              Γöé  wpQueryDefaultView.         Γöé
  6732. Γöé                              Γöéo The wpSetDefaultView method Γöé
  6733. Γöé                              Γöé  is called.                  Γöé
  6734. Γöé                              Γöéo The wpSetup method is calledΓöé
  6735. Γöé                              Γöé  with the DEFAULTVIEW        Γöé
  6736. Γöé                              Γöé  keyword.                    Γöé
  6737. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6738. ΓöéwpclsQuerySettingsPageSize    ΓöéReturns the size of the       Γöé
  6739. Γöé                              ΓöéSettings notebook pages       Γöé
  6740. Γöé                              Γöédisplayed for the object      Γöé
  6741. Γöé                              Γöéclass.                        Γöé
  6742. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6743.  
  6744. A program or Workplace Shell object would call the following methods to set the 
  6745. characteristics for the open views of the object. These methods are not 
  6746. normally overridden. 
  6747.  
  6748. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6749. ΓöéMethod Name                   ΓöéDescription                   Γöé
  6750. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6751. ΓöéwpSetButtonAppearance         ΓöéDefines which button          Γöé
  6752. Γöé                              Γöé(minimize, hide, or the systemΓöé
  6753. Γöé                              Γöédefault) appears in the frame Γöé
  6754. Γöé                              Γöécontrol for an open view of   Γöé
  6755. Γöé                              Γöéthe object. This value is     Γöé
  6756. Γöé                              Γöénormally returned by          Γöé
  6757. Γöé                              ΓöéwpQueryButtonAppearance.      Γöé
  6758. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6759. ΓöéwpSetConcurrentView           ΓöéDefines whether or not the    Γöé
  6760. Γöé                              Γöéobject allows multiple        Γöé
  6761. Γöé                              Γöéconcurrent views to be opened.Γöé
  6762. Γöé                              ΓöéThis value is normally        Γöé
  6763. Γöé                              Γöéreturned by                   Γöé
  6764. Γöé                              ΓöéwpQueryConcurrentView.        Γöé
  6765. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6766. ΓöéwpSetDefaultView              ΓöéDefines which view of the     Γöé
  6767. Γöé                              Γöéobject is opened when the     Γöé
  6768. Γöé                              Γöédefault view is opened. This  Γöé
  6769. Γöé                              Γöévalue is normally returned by Γöé
  6770. Γöé                              ΓöéwpQueryDefaultView.           Γöé
  6771. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6772. ΓöéwpSetMinWindow                ΓöéDefines the behavior of the   Γöé
  6773. Γöé                              Γöéobject when it is minimized   Γöé
  6774. Γöé                              Γöé(Minimize window to Desktop,  Γöé
  6775. Γöé                              ΓöéMinimize window to viewer, or Γöé
  6776. Γöé                              Γöéuse the system default        Γöé
  6777. Γöé                              Γöébehavior). This value is      Γöé
  6778. Γöé                              Γöénormally returned by          Γöé
  6779. Γöé                              ΓöéwpQueryMinWindow.             Γöé
  6780. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6781. ΓöéwpclsSetSettingsPageSize      ΓöéSets the size of the Settings Γöé
  6782. Γöé                              Γöénotebook pages displayed for  Γöé
  6783. Γöé                              Γöéthe object class.             Γöé
  6784. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6785.  
  6786.  
  6787. ΓòÉΓòÉΓòÉ 8.2. Using Set/Query Methods ΓòÉΓòÉΓòÉ
  6788.  
  6789. The set and query methods can be divided into four different groups of methods: 
  6790.  
  6791.      Instance query methods 
  6792.      Instance set methods 
  6793.      Class query methods 
  6794.      Class set methods. 
  6795.  
  6796.  This section describes each of them and provides sample code fragments. It 
  6797.  also explains their role, and whether or not they are used to override 
  6798.  methods. 
  6799.  
  6800.  
  6801. ΓòÉΓòÉΓòÉ 8.2.1. Instance Query Methods ΓòÉΓòÉΓòÉ
  6802.  
  6803. The instance query methods are used to define the properties of an instance of 
  6804. your object. You would normally override these methods to define the unique 
  6805. properties of the instance of the object. For example, you might override 
  6806. wpclsQueryStyle if you want to prevent all instances of your object from being 
  6807. deleted. However, you would override wpQueryStyle to prevent only certain 
  6808. instances of this object from being deleted, as shown in the following sample 
  6809. code: 
  6810.  
  6811. ULONG SOMLINK myfdr_wpQueryStyle(MyFolder *somSelf)
  6812. {
  6813.   ULONG ulStyle;
  6814.   ULONG ulAttr;
  6815.  
  6816.   MyFolderMethodDebug("MyFolder","myfdr_wpQueryStyle");
  6817.   ulStyle = parent_wpQueryStyle(somSelf);
  6818.   ulAttr  = _wpQueryAttr( somSelf );
  6819.  
  6820.   if (ulAttr & FILE_READONLY)
  6821.   {
  6822.     ulStyle |= OBJSTYLE_NODELETE;
  6823.   }
  6824.   return ulStyle;
  6825. }
  6826.  
  6827.  
  6828. ΓòÉΓòÉΓòÉ 8.2.2. Instance Set Methods ΓòÉΓòÉΓòÉ
  6829.  
  6830. The instance set methods are used to modify the properties of a specific object 
  6831. instance. You would not normally override these methods but would call these 
  6832. methods to change the behavior of the corresponding instance query method or 
  6833. the behavior of the object. For example, you might call wpSetIcon to change the 
  6834. current icon for your object, as shown in the following sample code: 
  6835.  
  6836.     .
  6837.     .
  6838.     .
  6839.  
  6840. /* Load the icon from the resource file */
  6841. hptrIcon = WinLoadPointer(HWND_DESKTOP,vhmod,IDP_Folder3);
  6842.  
  6843. /* Make this the current icon for the object */
  6844. _wpSetIcon(somSelf,hptrIcon);
  6845.  
  6846.     .
  6847.     .
  6848.     .
  6849.  
  6850.  
  6851. ΓòÉΓòÉΓòÉ 8.2.3. Class Query Methods ΓòÉΓòÉΓòÉ
  6852.  
  6853. The class query methods are used to define the properties of an object class. 
  6854. You would normally override these methods to define the unique properties of 
  6855. the class object. For example, you would override wpclsQueryTitle to provide a 
  6856. unique title for your object class. If you were defining a class called 
  6857. MyFolder, as a subclass of WPFolder, you might supply the following method to 
  6858. make the default title for all instances (including the template) of the 
  6859. MyFolder object "My Folder". 
  6860.  
  6861. PSZ  SOMLINK myfdrM_wpclsQueryTitle(M_MyFolder *self)
  6862. {
  6863.   M_MyFolderMethodDebug("M_MyFolder","myfdrM_wpclsQueryTitle");
  6864.   return ("My Folder");
  6865. }
  6866.  
  6867. If you want to provide a unique icon for all instances of your class, you would 
  6868. override wpclsQueryIconData, as shown in the following sample code: 
  6869.  
  6870. ULONG SOMLINK myfdrM_wpclsQueryIconData(M_MyFolder *self,
  6871.                                         PICONINFO pIconInfo)
  6872.  
  6873. {
  6874.   M_MyFolderMethodDebug("M_MyFolder","myfdrM_wpclsQueryIconData");
  6875.   if (pIconInfo)
  6876.   {
  6877.     /*
  6878.      *  vhmod is a global variable containing the
  6879.      *  module handle for your .DLL
  6880.      *  IDP_MyFolder is the resource number for the class icon
  6881.      */
  6882.     pIconInfo->fFormat = ICON_RESOURCE;
  6883.     pIconInfo->hmod    = vhmod;
  6884.     pIconInfo->resid   = IDP_MyFolder;
  6885.   }
  6886.   return (sizeof(ICONINFO));
  6887. }
  6888.  
  6889. If your class is a subclass of WPFolder (as in the above example) and you want 
  6890. to provide an animation icon, that is the icon that is displayed when an 
  6891. instance of your folder object is opened, you would override 
  6892. wpclsQueryIconDataN, as shown in the following sample code: 
  6893.  
  6894. ULONG SOMLINK fdrM_wpclsQueryIconDataN(M_MyFolder *self,
  6895.                                        PICONINFO pIconInfo,
  6896.                                        ULONG ulIconIndex)
  6897.  
  6898. {
  6899.   ULONG ulReturn;
  6900.  
  6901.   M_MyFolderMethodDebug("M_MyFolder","myfdrM_wpclsQueryIconDataN");
  6902.   switch (ulIconIndex)
  6903.   {
  6904.     case 0:
  6905.     /* Return the information for the closed folder icon */
  6906.     ulReturn = _wpclsQueryIconData(self,pIconInfo);
  6907.     break;
  6908.     case 1:
  6909.     /* Return the information for the open folder icon */
  6910.     if (pIconInfo)
  6911.     {
  6912.       pIconInfo->fFormat = ICON_RESOURCE;
  6913.       pIconInfo->hmod    = vhmod;
  6914.       pIconInfo->resid   = IDP_MyFolder2;
  6915.     }
  6916.     ulReturn = sizeof(ICONINFO);
  6917.     break;
  6918.  
  6919.     default:
  6920.     /* Invalid index value specified */
  6921.     ulReturn = 0;
  6922.   }
  6923.   return (ulReturn);
  6924. }
  6925.  
  6926.  
  6927. ΓòÉΓòÉΓòÉ 8.2.4. Class Set Methods ΓòÉΓòÉΓòÉ
  6928.  
  6929. The class set methods are used to modify the properties of an object class. You 
  6930. would not normally override these methods but would call these methods to 
  6931. change the behavior of the corresponding class query method. For example, you 
  6932. might call wpclsSetError to define an error code to be returned by the next 
  6933. call to wpclsQueryError, as shown in the following sample code: 
  6934.  
  6935. /* Set the class error code */
  6936. _wpclsSetError(_MyFolder,0x1234);
  6937.     .
  6938.     .
  6939.     .
  6940. /* Retrieve the last class error code */
  6941. ulLastError = _wpclsQueryError(_MyFolder);
  6942.  
  6943.  
  6944. ΓòÉΓòÉΓòÉ 9. Object Initialization and Termination: Setup/Cleanup Methods ΓòÉΓòÉΓòÉ
  6945.  
  6946. The Workplace Shell provides methods that you can use to setup the 
  6947. characteristics and behaviors of an object. Likewise, it also provides methods 
  6948. that you can use to cleanup after an object is no longer in use. This chapter 
  6949. provides information on setup and cleanup methods that are available in the 
  6950. Workplace Shell. 
  6951.  
  6952.  
  6953. ΓòÉΓòÉΓòÉ 9.1. About Setup/Cleanup Methods ΓòÉΓòÉΓòÉ
  6954.  
  6955. Setup and cleanup methods support object initialization and termination. The 
  6956. setup methods are used to set up object characteristics during creation of the 
  6957. object. The cleanup methods are used to ensure that memory and other resources 
  6958. allocated to an object are freed when the object is no longer in use. 
  6959.  
  6960.  
  6961. ΓòÉΓòÉΓòÉ 9.1.1. Create the Object ΓòÉΓòÉΓòÉ
  6962.  
  6963. When an object is created, by using WinCreateObject for example, wpclsNew is 
  6964. called. You will likely not be concerned with this method because it performs 
  6965. functions such as allocating memory for the object, getting SOM to initialize 
  6966. the object, and creating the persistent image of the object as file system 
  6967. attributes or .INI file entries. You will be interested in methods that it 
  6968. invokes. These include wpInitData and wpSetupOnce. 
  6969.  
  6970.  
  6971. ΓòÉΓòÉΓòÉ 9.1.2. Initialize the Object's Instance Data ΓòÉΓòÉΓòÉ
  6972.  
  6973. The wpInitData method is called from WPObject's override of somDefaultInit 
  6974. immediately after the memory for the object has been allocated. The allocated 
  6975. memory is zero filled. If the zero initialization is not adequate for the 
  6976. object instance data for your class, override this method and set the instance 
  6977. variable values appropriately. The wpInitData method is called whenever the 
  6978. object is instantiated, whether it be during initial object creation or 
  6979. awakening it from dormancy. In the latter case, wpRestoreState is invoked after 
  6980. wpInitData. 
  6981.  
  6982.  
  6983. ΓòÉΓòÉΓòÉ 9.1.3. Setup the Object's Characteristics and Behaviors ΓòÉΓòÉΓòÉ
  6984.  
  6985. The wpSetupOnce method is called during initial object creation following 
  6986. wpInitData and the creation of the persistent image. It is not called when an 
  6987. object is awakened from dormancy. The primary purpose of wpSetupOnce is to: 
  6988.  
  6989.      Call wpSetup to set the object characteristics and behaviors based on the 
  6990.       setup string input to WinCreateObject. 
  6991.  
  6992.      Perform non-setup string initialization that cannot be done during the 
  6993.       wpInitData processing. 
  6994.  
  6995.  The non-setup string initialization may have been deferred because it required 
  6996.  existence of the persistent image or because it was data other than instance 
  6997.  data that required initialization. Override wpSetupOnce only if your class has 
  6998.  non-setup string initialization to perform because WPObject wpSetupOnce calls 
  6999.  wpSetup. Override wpSetup if your object class has defined unique setup string 
  7000.  keywords or keyword values. 
  7001.  
  7002.  The wpSetup method is also invoked as a result of WinSetObjectData being 
  7003.  called on an existing object. The wpScanSetupString method exists as a helper 
  7004.  routine for parsing values from the setup string. 
  7005.  
  7006.  
  7007. ΓòÉΓòÉΓòÉ 9.1.4. Setup and Query the Object's State ΓòÉΓòÉΓòÉ
  7008.  
  7009. One of the last steps of object creation or awakening is setting the object to 
  7010. the initialized state. The wpIsObjectInitialized method queries the object for 
  7011. this indication. 
  7012.  
  7013. The last step is the invocation of wpObjectReady. This is a notification to the 
  7014. object indicating completion of the creation or awakening operation. Override 
  7015. this method if you want to receive this notification. The wpObjectReady method 
  7016. indicates when it is safe to call wpSaveDeferred on a newly instantiated 
  7017. object. 
  7018.  
  7019.  
  7020. ΓòÉΓòÉΓòÉ 9.1.5. Uninitialize the Object ΓòÉΓòÉΓòÉ
  7021.  
  7022. The wpUnInitData method is the opposite of wpInitData. It is called by 
  7023. WPObject's override of somDestruct just prior to freeing the object's memory, 
  7024. during the process of making the object dormant or destroying it. The object's 
  7025. instance data, and memory allocated via wpAllocMem, are automatically 
  7026. deallocated. Override this method if your object has allocated additional 
  7027. resources since the last time it was awakened. 
  7028.  
  7029.  
  7030. ΓòÉΓòÉΓòÉ 9.1.6. Destroy the Object ΓòÉΓòÉΓòÉ
  7031.  
  7032. The wpFree method is the opposite of wpclsNew. It destroys the persistent image 
  7033. of the object and frees the object's memory. Override this method to free 
  7034. resources you have allocated that are associated with the persistent image of 
  7035. the object. 
  7036.  
  7037.  
  7038. ΓòÉΓòÉΓòÉ 9.1.7. Workplace Shell Setup Strings ΓòÉΓòÉΓòÉ
  7039.  
  7040. Classes can define keynames and values that affect the behavior of their 
  7041. objects. Use keynames with setup methods as follows: 
  7042.  
  7043.      To set a certain behavior during object creation, specify the keyname in 
  7044.       the setup string of WinCreateObject. 
  7045.  
  7046.      To change the behavior of an existing object, specify the keyname in the 
  7047.       setup string of WinSetObjectData. 
  7048.  
  7049.  Because keynames have default values, setup strings are not required for these 
  7050.  calls. 
  7051.  
  7052.  Every class may define its own set of keynames and values. The Workplace Shell 
  7053.  Reference contains the definition of keynames for all classes. Keynames and 
  7054.  the values supported by the WPObject class are listed in the following table: 
  7055.  
  7056.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7057.   ΓöéKeyname           ΓöéValue       ΓöéDescription                   Γöé
  7058.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7059.   ΓöéCCVIEW            ΓöéDEFAULT     ΓöéUses the default value of the Γöé
  7060.   Γöé                  Γöé            Γöéconcurrent view setting of theΓöé
  7061.   Γöé                  Γöé            Γöésystem, when the user selects Γöé
  7062.   Γöé                  Γöé            Γöéopen. This is the default     Γöé
  7063.   Γöé                  Γöé            Γöévalue.                        Γöé
  7064.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7065.   Γöé                  ΓöéYES         ΓöéCreates new views of the      Γöé
  7066.   Γöé                  Γöé            Γöéobject every time the user    Γöé
  7067.   Γöé                  Γöé            Γöéselects open.                 Γöé
  7068.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7069.   Γöé                  ΓöéNO          ΓöéResurfaces open views of      Γöé
  7070.   Γöé                  Γöé            Γöéobject, when the user selects Γöé
  7071.   Γöé                  Γöé            Γöéopen.                         Γöé
  7072.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7073.   ΓöéDEFAULTVIEW       ΓöéDEFAULT     ΓöéSets the default open view to Γöé
  7074.   Γöé                  Γöé            Γöéthe object's class default    Γöé
  7075.   Γöé                  Γöé            Γöéview as returned by           Γöé
  7076.   Γöé                  Γöé            ΓöéwpclsQueryDefaultView. This isΓöé
  7077.   Γöé                  Γöé            Γöéthe default value.            Γöé
  7078.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7079.   Γöé                  ΓöéSETTINGS    ΓöéSets the default open view to Γöé
  7080.   Γöé                  Γöé            Γöéthe Settings view.            Γöé
  7081.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7082.   Γöé                  ΓöéID          ΓöéSets the default open view to Γöé
  7083.   Γöé                  Γöé            Γöéthe "id" of a user-added view Γöé
  7084.   Γöé                  Γöé            Γöé(0 - 9).                      Γöé
  7085.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7086.   ΓöéHELPLIBRARY       Γöéfilename    ΓöéSets the help library.        Γöé
  7087.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7088.   ΓöéHELPPANEL         Γöéid          ΓöéSets the object's default helpΓöé
  7089.   Γöé                  Γöé            Γöépanel. This is equivalent to  Γöé
  7090.   Γöé                  Γöé            Γöécalling wpSetDefaultHelp.     Γöé
  7091.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7092.   ΓöéHIDEBUTTON        ΓöéYES         ΓöéViews of this object have a   Γöé
  7093.   Γöé                  Γöé            Γöéhide button as opposed to a   Γöé
  7094.   Γöé                  Γöé            Γöéminimize button.              Γöé
  7095.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7096.   Γöé                  ΓöéNO          ΓöéViews of this object have a   Γöé
  7097.   Γöé                  Γöé            Γöéminimize button as opposed to Γöé
  7098.   Γöé                  Γöé            Γöéa hide button.                Γöé
  7099.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7100.   Γöé                  Γöé            ΓöéThe default is the current    Γöé
  7101.   Γöé                  Γöé            Γöésystem Button appearance for  Γöé
  7102.   Γöé                  Γöé            Γöéwindows setting. This cannot  Γöé
  7103.   Γöé                  Γöé            Γöébe specified here.            Γöé
  7104.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7105.   ΓöéICONFILE          Γöéfilename    ΓöéSets the object's icon. This  Γöé
  7106.   Γöé                  Γöé            Γöéis equivalent to calling      Γöé
  7107.   Γöé                  Γöé            ΓöéwpSetIconData.                Γöé
  7108.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7109.   ΓöéICONPOS           Γöéx, y        ΓöéSets the object's initial iconΓöé
  7110.   Γöé                  Γöé            Γöéposition in a folder. The x   Γöé
  7111.   Γöé                  Γöé            Γöéand y values represent the    Γöé
  7112.   Γöé                  Γöé            Γöéposition in the folder in     Γöé
  7113.   Γöé                  Γöé            Γöépercentage coordinates.       Γöé
  7114.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7115.   ΓöéICONRESOURCE      Γöéid, module  ΓöéSets the object's icon. This  Γöé
  7116.   Γöé                  Γöé            Γöéis equivalent to calling      Γöé
  7117.   Γöé                  Γöé            ΓöéwpSetIconData. The "id" is theΓöé
  7118.   Γöé                  Γöé            Γöéicon resource ID in the       Γöé
  7119.   Γöé                  Γöé            Γöédynamic link library (DLL)    Γöé
  7120.   Γöé                  Γöé            Γöé"module".                     Γöé
  7121.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7122.   ΓöéMINWIN            ΓöéHIDE        ΓöéHides views of object, when   Γöé
  7123.   Γöé                  Γöé            Γöéthe minimize button is        Γöé
  7124.   Γöé                  Γöé            Γöéselected.                     Γöé
  7125.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7126.   Γöé                  ΓöéVIEWER      ΓöéMinimizes views of the object Γöé
  7127.   Γöé                  Γöé            Γöéto Minimize window to viewer, Γöé
  7128.   Γöé                  Γöé            Γöéwhen the minimize button is   Γöé
  7129.   Γöé                  Γöé            Γöéselected.                     Γöé
  7130.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7131.   Γöé                  ΓöéDESKTOP     ΓöéMinimizes views of the object Γöé
  7132.   Γöé                  Γöé            Γöéto Minimize window to Desktop,Γöé
  7133.   Γöé                  Γöé            Γöéwhen the minimize button is   Γöé
  7134.   Γöé                  Γöé            Γöéselected.                     Γöé
  7135.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7136.   Γöé                  Γöé            ΓöéThe default is the current    Γöé
  7137.   Γöé                  Γöé            ΓöéMinimize button setting. This Γöé
  7138.   Γöé                  Γöé            Γöécannot be specified here.     Γöé
  7139.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7140.   ΓöéNOCOPY            ΓöéYES         ΓöéUsers cannot copy objects.    Γöé
  7141.   Γöé                  Γöé            ΓöéThis is equivalent to calling Γöé
  7142.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7143.   Γöé                  Γöé            ΓöéOBJSTYLE_NOCOPY style.        Γöé
  7144.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7145.   Γöé                  ΓöéNO          ΓöéUsers can copy objects. This  Γöé
  7146.   Γöé                  Γöé            Γöéis the default value.         Γöé
  7147.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7148.   ΓöéNODELETE          ΓöéYES         ΓöéUsers cannot delete objects.  Γöé
  7149.   Γöé                  Γöé            ΓöéThis is equivalent to calling Γöé
  7150.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7151.   Γöé                  Γöé            ΓöéOBJSTYLE_NODELETE style.      Γöé
  7152.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7153.   Γöé                  ΓöéNO          ΓöéUsers can delete objects. ThisΓöé
  7154.   Γöé                  Γöé            Γöéis the default value.         Γöé
  7155.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7156.   ΓöéNODRAG            ΓöéYES         ΓöéUsers cannot drag objects.    Γöé
  7157.   Γöé                  Γöé            ΓöéThis is equivalent to calling Γöé
  7158.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7159.   Γöé                  Γöé            ΓöéOBJSTYLE_NODRAG style.        Γöé
  7160.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7161.   Γöé                  ΓöéNO          ΓöéUsers can drag objects. This  Γöé
  7162.   Γöé                  Γöé            Γöéis the default value.         Γöé
  7163.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7164.   ΓöéNODROP            ΓöéYES         ΓöéNo other objects can be       Γöé
  7165.   Γöé                  Γöé            Γöédropped on this object. This  Γöé
  7166.   Γöé                  Γöé            Γöéis equivalent to calling      Γöé
  7167.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7168.   Γöé                  Γöé            ΓöéOBJSTYLE_NODROPON style.      Γöé
  7169.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7170.   Γöé                  ΓöéNO          ΓöéObjects can be dropped on thisΓöé
  7171.   Γöé                  Γöé            Γöéobject. This is the default   Γöé
  7172.   Γöé                  Γöé            Γöévalue.                        Γöé
  7173.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7174.   ΓöéNOLINK            ΓöéYES         ΓöéObjects cannot be linked. ThisΓöé
  7175.   Γöé                  Γöé            Γöéis equivalent to calling      Γöé
  7176.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7177.   Γöé                  Γöé            ΓöéOBJSTYLE_NOLINK style.        Γöé
  7178.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7179.   Γöé                  ΓöéNO          ΓöéObjects can be linked. This isΓöé
  7180.   Γöé                  Γöé            Γöéthe default value.            Γöé
  7181.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7182.   ΓöéNOMOVE            ΓöéYES         ΓöéUsers cannot move objects.    Γöé
  7183.   Γöé                  Γöé            ΓöéThis is equivalent to calling Γöé
  7184.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7185.   Γöé                  Γöé            ΓöéOBJSTYLE_NOMOVE style.        Γöé
  7186.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7187.   Γöé                  ΓöéNO          ΓöéUsers can move objects. This  Γöé
  7188.   Γöé                  Γöé            Γöéis the default value.         Γöé
  7189.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7190.   ΓöéNOPRINT           ΓöéYES         ΓöéUsers cannot print objects.   Γöé
  7191.   Γöé                  Γöé            ΓöéThis is equivalent to calling Γöé
  7192.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7193.   Γöé                  Γöé            ΓöéOBJSTYLE_NOPRINT style.       Γöé
  7194.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7195.   Γöé                  ΓöéNO          ΓöéUsers can print objects. This Γöé
  7196.   Γöé                  Γöé            Γöéis the default value.         Γöé
  7197.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7198.   ΓöéNORENAME          ΓöéYES         ΓöéUsers cannot rename objects.  Γöé
  7199.   Γöé                  Γöé            ΓöéThis is equivalent to calling Γöé
  7200.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7201.   Γöé                  Γöé            ΓöéOBJSTYLE_NORENAME style.      Γöé
  7202.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7203.   Γöé                  ΓöéNO          ΓöéUsers can rename objects. ThisΓöé
  7204.   Γöé                  Γöé            Γöéis the default value.         Γöé
  7205.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7206.   ΓöéNOSETTINGS        ΓöéYES         ΓöéUsers cannot open the object'sΓöé
  7207.   Γöé                  Γöé            ΓöéSettings notebook. This is    Γöé
  7208.   Γöé                  Γöé            Γöéequivalent to calling         Γöé
  7209.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7210.   Γöé                  Γöé            ΓöéOBJSTYLE_NOSETTINGS style.    Γöé
  7211.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7212.   Γöé                  ΓöéNO          ΓöéUsers can open the object's   Γöé
  7213.   Γöé                  Γöé            ΓöéSettings notebook. This is theΓöé
  7214.   Γöé                  Γöé            Γöédefault value.                Γöé
  7215.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7216.   ΓöéNOSHADOW (Same as ΓöéYES         ΓöéUsers cannot create shadows ofΓöé
  7217.   ΓöéNOLINK)           Γöé            Γöéobjects. This is equivalent toΓöé
  7218.   Γöé                  Γöé            Γöécalling wpSetStyle with the   Γöé
  7219.   Γöé                  Γöé            ΓöéOBJSTYLE_NOLINK style.        Γöé
  7220.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7221.   Γöé                  ΓöéNO          ΓöéUsers can create shadows of   Γöé
  7222.   Γöé                  Γöé            Γöéobjects. This is the default  Γöé
  7223.   Γöé                  Γöé            Γöévalue.                        Γöé
  7224.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7225.   ΓöéNOTVISIBLE        ΓöéYES         ΓöéObjects are not visible. This Γöé
  7226.   Γöé                  Γöé            Γöéis equivalent to calling      Γöé
  7227.   Γöé                  Γöé            ΓöéwpSetStyle with the           Γöé
  7228.   Γöé                  Γöé            ΓöéOBJSTYLE_NOTVISIBLE style.    Γöé
  7229.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7230.   Γöé                  ΓöéNO          ΓöéObjects are visible. This is  Γöé
  7231.   Γöé                  Γöé            Γöéthe default value.            Γöé
  7232.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7233.   ΓöéOBJECTID          Γöé<name>      ΓöéSets a persistent ID for the  Γöé
  7234.   Γöé                  Γöé            Γöéobject. The OBJECTID can be   Γöé
  7235.   Γöé                  Γöé            Γöéused to obtain a pointer or   Γöé
  7236.   Γöé                  Γöé            Γöéhandle to the object by       Γöé
  7237.   Γöé                  Γöé            Γöécalling wpclsQueryObject or   Γöé
  7238.   Γöé                  Γöé            ΓöéWinQueryObject. An OBJECTID isΓöé
  7239.   Γöé                  Γöé            Γöéany unique string preceded    Γöé
  7240.   Γöé                  Γöé            Γöéwith a < and terminated with aΓöé
  7241.   Γöé                  Γöé            Γöé>.                            Γöé
  7242.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7243.   Γöé                  Γöé            ΓöéThe default is to not have an Γöé
  7244.   Γöé                  Γöé            ΓöéID.                           Γöé
  7245.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7246.   ΓöéOPEN              ΓöéSETTINGS    ΓöéOpens settings view when      Γöé
  7247.   Γöé                  Γöé            Γöéobject is created or when     Γöé
  7248.   Γöé                  Γöé            ΓöéWinSetObjectData is called.   Γöé
  7249.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7250.   Γöé                  ΓöéDEFAULT     ΓöéOpens the default view when anΓöé
  7251.   Γöé                  Γöé            Γöéobject is created or when     Γöé
  7252.   Γöé                  Γöé            ΓöéWinSetObjectData is called.   Γöé
  7253.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7254.   Γöé                  Γöé            ΓöéThe default is to not open a  Γöé
  7255.   Γöé                  Γöé            Γöéview.                         Γöé
  7256.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7257.   ΓöéTEMPLATE          ΓöéYES         ΓöéUsers can create object       Γöé
  7258.   Γöé                  Γöé            Γöétemplate. This is equivalent  Γöé
  7259.   Γöé                  Γöé            Γöéto calling wpSetStyle with theΓöé
  7260.   Γöé                  Γöé            ΓöéOBJSTYLE_TEMPLATE style.      Γöé
  7261.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7262.   Γöé                  ΓöéNO          ΓöéUsers cannot create object    Γöé
  7263.   Γöé                  Γöé            Γöétemplate. This is the default Γöé
  7264.   Γöé                  Γöé            Γöévalue.                        Γöé
  7265.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7266.   ΓöéTITLE             ΓöéTitle       ΓöéSets the object's title. This Γöé
  7267.   Γöé                  Γöé            Γöéis equivalent to calling      Γöé
  7268.   Γöé                  Γöé            ΓöéwpSetTitle.                   Γöé
  7269.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7270.  
  7271.  The following code fragments is an example of WPObject setup string: 
  7272.  
  7273.   PSZ pszSetupString = "TITLE    = MYObject;"
  7274.                        "ICONFILE = MYOBJ.ICO;"
  7275.                        "OBJECTID = <MyObjectID>";
  7276.  
  7277.  
  7278. ΓòÉΓòÉΓòÉ 9.2. Using Setup/Cleanup Methods ΓòÉΓòÉΓòÉ
  7279.  
  7280. This section describes how the setup and cleanup methods relate to one another 
  7281. using sample code fragments. 
  7282.  
  7283. Note:  The sample code fragments in this section are part of a complete program 
  7284.        that provides a new object class, Stack, whose instances implement 
  7285.        standard programming push down stacks. The program is illustrated in 
  7286.        Sample Code for Setup/Cleanup Methods. 
  7287.  
  7288.  The stack is implemented as a linked list of entries with the head of the list 
  7289.  being the top of the stack. The following code fragments shows the content of 
  7290.  the stack elements and the stack instance data: 
  7291.  
  7292.   typedef struct _STACKENTRY
  7293.   {
  7294.     PSTACKENTRY pNext;
  7295.     BYTE        ReserveZeros[8];
  7296.     ULONG       cbEntry;
  7297.     BYTE        Entry[1];
  7298.   } STACKENTRY *PSTACKENTRY;
  7299.  
  7300.   BOOL        bInitialized;   // Initialization flag
  7301.   PSTACKENTRY pStackTop;      // Head of stack linked list
  7302.   HMTX        hmtxStack;      // Stack serialization semaphore
  7303.  
  7304.  
  7305. ΓòÉΓòÉΓòÉ 9.2.1. Initializing the Object's Instance Data ΓòÉΓòÉΓòÉ
  7306.  
  7307. The wpInitData method initializes the Stack's instance data. Zero 
  7308. initialization is statisfactory for the stack top pointer (pStackTop), so there 
  7309. is nothing to do with respect to the instance data. However, I will take this 
  7310. opportunity to increment the awake stack instance count being maintained by the 
  7311. class because I want to decrement it in wpUnInitData. There are three 
  7312. additional items to note when overriding wpInitData: 
  7313.  
  7314.    1. The wpInitData method is invoked prior to the determination or 
  7315.       restoration of an object's state. It is therefore necessary to be 
  7316.       extremely careful about what other instance methods are called. It is 
  7317.       best to call none unless you wrote them. 
  7318.  
  7319.    2. It is safest to call the parent's wpInitData before doing your own 
  7320.       initialization. 
  7321.  
  7322.    3. If it is possible for this class to be a common ancestor in a multiple 
  7323.       inheritance scenario, then this method needs to be written such that 
  7324.       multiple invocations are handled. For example, if a class named Stack23 
  7325.       was derived from classes Stack2 and Stack3 which in turn were subclasses 
  7326.       of Stack, that situation would exist. Not all Workplace Shell classes 
  7327.       (WP*) currently take this precaution. Therefore, it is advisable to not 
  7328.       inherit from more than one Workplace Shell class. Using SOM initializers 
  7329.       and destructors is an alternative to overriding wpInitData in the 
  7330.       multiple inheritance situation. 
  7331.  
  7332.  The following sample code shows the use of wpInitData: 
  7333.  
  7334.   SOM_Scope void SOMLINK stk_wpInitData(
  7335.                          Stack *somSelf) // In  - pointer to the object
  7336.   {
  7337.     StackData *somThis = StackGetData(somSelf);
  7338.     StackMethodDebug("Stack","stk_wpInitData");
  7339.  
  7340.     parent_wpInitData(somSelf);
  7341.     if (!(_bInitialized))
  7342.     {
  7343.        _bInitialized = TRUE;
  7344.        _clsIncObjectCount(_somGetClass(somSelf), STK_AWAKECOUNT);
  7345.      } /* Endif */
  7346.      return;
  7347.  
  7348.   }  // End stk_wpInitData
  7349.  
  7350.  
  7351. ΓòÉΓòÉΓòÉ 9.2.2. Initializing a Newly Created Object ΓòÉΓòÉΓòÉ
  7352.  
  7353. The wpSetupOnce method is called once during the creation of an object. I will 
  7354. push one item onto the stack. Unless popped by the setup string, every newly 
  7355. created stack will have this item. The following sample code shows the use of 
  7356. wpSetupOnce: 
  7357.  
  7358. SOM_Scope BOOL SOMLINK stk_wpSetupOnce(
  7359.                        Stack *somSelf,      // In  - pointer to the object
  7360.                        PSZ pszSetupString)
  7361.  
  7362. // The method returns the value:
  7363. //     TRUE  = successful
  7364. //     FALSE = error
  7365. {
  7366.   PSZ pszStackItem = "***** BOTTOM OF STACK *****";
  7367.  
  7368.   // StackData *somThis = StackGetData(somSelf);
  7369.   StackMethodDebug("Stack","stk_wpSetupOnce");
  7370.  
  7371.   _Push(somSelf, pszStackItem, strlen(pszStackItem) + 1);
  7372.   return (parent_wpSetupOnce(somSelf, pszSetupString));
  7373.  
  7374. } // End stk_wpSetupOnce
  7375.  
  7376.  
  7377. ΓòÉΓòÉΓòÉ 9.2.3. Setting the Object's Characteristics and Behaviors ΓòÉΓòÉΓòÉ
  7378.  
  7379. Invoking wpSetupOnce parent causes wpSetup to be called. Two new keywords, 
  7380. PUSHITEM and POPITEM, have been defined for this class to push and pop items 
  7381. from the stack. This method is invoked when an object is created and when 
  7382. WinSetObjectData is called. Note the use of wpIsObjectInitialized and 
  7383. wpSaveDeferred to write the persistent image to the .INI file, if called as a 
  7384. result of WinSetObjectData. The wpScanSetupString method searches a setup 
  7385. string for a given keyname and returns its corresponding value. It also has a 
  7386. feature which returns just the length of the value when passed NULL as a 
  7387. pointer to the value buffer. Keynames and their values are separated by 
  7388. semicolons in the setup string. The escape character ( ^ ) followed by a 
  7389. semicolon can be used to represent a semicolon, if one is required in a keyname 
  7390. value specification. The following code fragments shows an example of a setup 
  7391. string for a stack object: 
  7392.  
  7393. PSZ pszSetupString = "TITLE    = MyStack;"
  7394.                      "OBJECTID = <MyStack>;"
  7395.                      "PUSHITEM = Pushed by Setup"
  7396.  
  7397. The following sample code shows the use of wpSetup: 
  7398.  
  7399. SOM_Scope BOOL SOMLINK stk_wpSetup(
  7400.                        Stack *somSelf,    // In - pointer to the object
  7401.                        PSZ   pszSetupString)
  7402.  
  7403. // The method returns the value:
  7404. //     TRUE  = successful
  7405. //     FALSE = error
  7406. {
  7407.   BOOL  bSaveObject = FALSE;
  7408.   BOOL  bStatus;
  7409.   ULONG cbValue;
  7410.   PSZ   pszValue;
  7411.  
  7412.   // StackData *somThis = StackGetData(somSelf);
  7413.   StackMethodDebug("Stack","stk_wpSetup");
  7414.  
  7415.   bStatus = parent_wpSetup(somSelf, pszSetupString);
  7416.   if (bStatus && pszSetupString && *pszSetupString)
  7417.   { //
  7418.     // Process PUSHITEM
  7419.     //
  7420.     if (_wpScanSetupString(somSelf,
  7421.                            pszSetupString,
  7422.                            "PUSHITEM",
  7423.                            NULL,
  7424.                            &cbValue))
  7425.     {
  7426.  
  7427.       pszValue = (PSZ)_wpAllocMem(somSelf, cbValue, NULL);
  7428.       bStatus  = FALSE;
  7429.       if (pszValue)
  7430.       {
  7431.         bStatus = _wpScanSetupString(somSelf,
  7432.                                      pszSetupString,
  7433.                                      "PUSHITEM",
  7434.                                      pszValue,
  7435.                                      &cbValue);
  7436.  
  7437.         if (bStatus)
  7438.         {
  7439.           bStatus     = _Push(somSelf, pszValue, cbValue);
  7440.           bSaveObject = bStatus;
  7441.         } /* Endif */
  7442.         _wpFreeMem(somSelf, (PBYTE)pszValue);
  7443.       } /* Endif */
  7444.     } /* Endif */
  7445.  
  7446.     //
  7447.     // Process POPITEM
  7448.     //
  7449.     if (bStatus && _wpScanSetupString(somSelf,
  7450.                                       pszSetupString,
  7451.                                       "POPITEM",
  7452.                                       NULL,
  7453.                                       &cbValue))
  7454.     {
  7455.       bStatus = FALSE;
  7456.  
  7457.       if (_Pop(somSelf, NULL, &cbValue))
  7458.       {
  7459.         pszValue = (PSZ)_wpAllocMem(somSelf, cbValue, NULL);
  7460.         if (pszValue)
  7461.         {
  7462.           bStatus     = _Pop(somSelf, pszValue, &cbValue);
  7463.           bSaveObject = bStatus;
  7464.           _wpFreeMem(somSelf, (PBYTE)pszValue);
  7465.         } /* Endif */
  7466.       } /* Endif */
  7467.     } /* Endif */
  7468.  
  7469.     if (bSaveObject && _wpIsObjectInitialized(somSelf))
  7470.     { //
  7471.       // Save the object to the INI file
  7472.       //
  7473.       _wpSaveDeferred(somSelf);
  7474.     } /* Endif */
  7475.   } /* Endif */
  7476.   return(bStatus);
  7477. } // End stk_wpSetup
  7478.  
  7479.  
  7480. ΓòÉΓòÉΓòÉ 9.2.4. Notifying the Object Is Ready ΓòÉΓòÉΓòÉ
  7481.  
  7482. The invocation of wpObjectReady is a signal that the object creation or 
  7483. awakening is complete. The following sample code uses this method to increment 
  7484. the persistent object count: 
  7485.  
  7486. SOM_Scope void SOMLINK stk_wpObjectReady(
  7487.           Stack *somSelf,       // In - pointer to the object
  7488.           ULONG ulCode,         // In - type of operation completed
  7489.           WPObject *refObject)  // In - pointer to the source
  7490.                                 //      object, if copy/shadow create
  7491.  
  7492. {
  7493.   // StackData *somThis = StackGetData(somSelf);
  7494.   StackMethodDebug("Stack","stk_wpObjectReady");
  7495.  
  7496.   parent_wpObjectReady(somSelf, ulCode, refObject);
  7497.   if (!(ulCode & OR_AWAKE))
  7498.   {
  7499.      _clsIncObjectCount(_somGetClass(somSelf), STK_PERSISTENTCOUNT);
  7500.   } /* Endif */
  7501.   return;
  7502. } // End stk_wpObjectReady
  7503.  
  7504.  
  7505. ΓòÉΓòÉΓòÉ 9.2.5. Uninitializing the Object ΓòÉΓòÉΓòÉ
  7506.  
  7507. The wpUnInitData method is executed just prior to deallocation of the object's 
  7508. memory during the process of making the object dormant or its permanent 
  7509. destruction. We want to deallocate all the memory and other resources allocated 
  7510. during this instantiation of the object. Memory allocated via wpAllocMem() is 
  7511. freed automatically by one of the Workplace Shell ancestors, so we need not do 
  7512. it here. As in the override of wpUnInitData, the multiple inheritance issue 
  7513. should be addressed here as well. The following sample code shows the use of 
  7514. wpUnInitData: 
  7515.  
  7516. SOM_Scope void SOMLINK stk_wpUnInitData(
  7517.                        Stack *somSelf)  // In - pointer to the object
  7518. {
  7519.   StackData *somThis = StackGetData(somSelf);
  7520.   StackMethodDebug("Stack","stk_wpUnInitData");
  7521.  
  7522.   if (_bInitialized)
  7523.   {
  7524.     _bInitialized = FALSE;
  7525.     _clsDecObjectCount(_somGetClass(somSelf), STK_AWAKECOUNT);
  7526.   } /* Endif */
  7527.   parent_wpUnInitData(somSelf);
  7528. } // End stk_wpUnInitData
  7529.  
  7530.  
  7531. ΓòÉΓòÉΓòÉ 9.2.6. Destroying the Object ΓòÉΓòÉΓòÉ
  7532.  
  7533. The wpFree method is generally overridden by storage classes such as 
  7534. WPFileSystem and WPAbstract, which provide for the permanent storage of an 
  7535. object's instance data. In addition, if you have an application that needs to 
  7536. destroy an object, call wpDelete rather than wpFree since it provides the user 
  7537. a chance to confirm the deletion. In this example, wpFree is overridden so that 
  7538. a count of stack object instances can be maintained. It is important that the 
  7539. somSelf pointer for the object not be used again following the call to 
  7540. parent_wpFree. The following sample code shows the use of wpFree: 
  7541.  
  7542. SOM_Scope BOOL SOMLINK stk_wpFree(
  7543.                        Stack *somSelf)  // In - pointer to the object
  7544.  
  7545. // The method returns the value
  7546. //     TRUE  = successful
  7547. //     FALSE = error
  7548. {
  7549.   BOOL      bStatus;
  7550.   SOMClass  *Class;
  7551.  
  7552.   // StackData *somThis = StackGetData(somSelf);
  7553.   StackMethodDebug("Stack","stk_wpFree");
  7554.  
  7555.   Class = _somGetClass(somSelf);
  7556.   bStatus = parent_wpFree(somSelf);
  7557.  
  7558.   if (bStatus)
  7559.   {
  7560.     _clsDecObjectCount(Class, STK_PERSISTENTCOUNT);
  7561.   } /* Endif */
  7562.   return(bStatus);
  7563. }  // End stk_wpFree
  7564.  
  7565.  
  7566. ΓòÉΓòÉΓòÉ 9.3. Sample Code for Setup/Cleanup Methods ΓòÉΓòÉΓòÉ
  7567.  
  7568. This section illustrates a complete setup/cleanup sample program. 
  7569.  
  7570. The Workplace Shell Stack object is a sample Workplace Shell SOM application 
  7571. that demonstrates the use of the setup and cleanup methods. The complete 
  7572. program provides a new object class, Stack, whose instances implement standard 
  7573. programming push down stacks. WPAbstract is the parent class of the Stack class 
  7574. providing persistence of the stack entries, via the OS2.INI file. The Stack 
  7575. class also maintains the number of permanent object instances and currently 
  7576. awake objects (instantiated in memory). 
  7577.  
  7578. A Settings notebook page has been added to each object allowing the user to: 
  7579.  
  7580.      View a stack's contents 
  7581.  
  7582.      Push new items onto the stack 
  7583.  
  7584.      Pop existing items from the stack. 
  7585.  
  7586.  The awake and total object counts are also displayed on each object's new 
  7587.  notebook page. The following figure shows the Stack Settings notebook: 
  7588.  
  7589.  
  7590. ΓòÉΓòÉΓòÉ 9.3.1. Pushing Items onto the Stack ΓòÉΓòÉΓòÉ
  7591.  
  7592. To push a new item onto the top of the stack, enter a text string in the New 
  7593. item to push field and click on the Push push button. The pushed item will 
  7594. appear at the top of the list. 
  7595.  
  7596.  
  7597. ΓòÉΓòÉΓòÉ 9.3.2. Popping Items from the Stack ΓòÉΓòÉΓòÉ
  7598.  
  7599. To pop the top item from the stack just click on the Pop push button. The 
  7600. popped item will be removed from the list and will appear in the New item to 
  7601. push field. 
  7602.  
  7603.  
  7604. ΓòÉΓòÉΓòÉ 9.3.3. Setup/Cleanup Application Sample Code ΓòÉΓòÉΓòÉ
  7605.  
  7606. Several parts of this program are explained in Using Setup/Cleanup Methods. 
  7607.  
  7608. The setup/cleanup application includes the following files: 
  7609.  
  7610.  File Name           Description 
  7611.  
  7612.  WPSTACK.IDL         Class interface definition 
  7613.  
  7614.  WPSTACK.C           Source code 
  7615.  
  7616.  WPSTACK.RCH         Resource header 
  7617.  
  7618.  WPSTACK.RC          Resource definition 
  7619.  
  7620.  WPSTACK.IPF         Stack help source 
  7621.  
  7622.  WPSTACK.MAK         Stack make file for building the application. 
  7623.  
  7624.  
  7625. ΓòÉΓòÉΓòÉ 9.3.3.1. Class Definition File for Stack ΓòÉΓòÉΓòÉ
  7626.  
  7627. The following sample illustrates the class interface definition file (IDL): 
  7628.  
  7629. //# CLASS: Stack
  7630. //#
  7631. //# CLASS HIERARCHY:
  7632. //#
  7633. //#    SOMObject
  7634. //#      ΓööΓöÇΓöÇΓöÇWPObject
  7635. //#            ΓööΓöÇΓöÇΓöÇWPAbstract
  7636. //#                  ΓööΓöÇΓöÇΓöÇStack
  7637. //#
  7638.  
  7639. #ifndef wpstack_idl
  7640. #define wpstack_idl
  7641.  
  7642. #include "wpabs.idl"
  7643. typedef somToken PSTACKENTRY;  //# Dummy typedef for instance variable
  7644.  
  7645. interface M_Stack;
  7646.  
  7647. interface Stack : WPAbstract
  7648. {
  7649.   ULONG InsertStackPage(in HWND hwndDlg);
  7650.   //# PARAMETERS:
  7651.   //#   HWND  hwndDlg   // In -  notebook dialog window handle
  7652.   //#   ULONG return    // Out - 0 = error occurred, else page #
  7653.   //#
  7654.   //# DESC: Adds the new Settings notebook page.
  7655.  
  7656.   BOOL Lock();
  7657.   //# PARAMETERS:
  7658.   //#   BOOL  return  // Out - TRUE  = successful
  7659.   //#                          FALSE = errror
  7660.   //#
  7661.   //# DESC: Lock the stack using a mutex semaphore so we don't have
  7662.   //#       to worry about multiple threads messing up the linked list.
  7663.  
  7664.   BOOL Pop(in PVOID pBuffer, inout ULONG pcbBuffer);
  7665.   //# PARAMETERS:
  7666.   //#   PVOID pBuffer,      // In    - pointer to buffer for popped item
  7667.   //#   PULONG pcbBuffer);  // InOut - size in bytes of pop buffer (in),
  7668.   //#                       //         size actually returned (out)
  7669.   //#   BOOL  return        // Out   - TRUE  = successful
  7670.   //#                                  FALSE = errror
  7671.   //# DESC: Pops an entry from the stack.
  7672.  
  7673.   BOOL Push(in PVOID pNewItem, in ULONG cbNewItem);
  7674.   //# PARAMETERS:
  7675.   //#   PVOID pNewItem,   // In  - pointer to the item to push
  7676.   //#   ULONG cbNewItem   // In  - size in bytes of item to push
  7677.   //#   BOOL  return      // Out - TRUE  = successful
  7678.   //#                              FALSE = errror
  7679.   //# DESC: Pushes an entry onto the stack.
  7680.  
  7681.   BOOL Unlock();
  7682.   //# PARAMETERS:
  7683.   //#   BOOL  return  // Out - TRUE  = successful
  7684.   //#                          FALSE = errror
  7685.   //#
  7686.   //# DESC: Unlock the stack, releasing the mutex semaphore.
  7687.  
  7688.   #ifdef __SOMIDL__
  7689.   implementation
  7690.   {
  7691.     releaseorder: InsertStackPage, Lock, Pop, Push, Unlock;
  7692.  
  7693.     /*
  7694.      * Class modifiers
  7695.      */
  7696.     functionprefix = stk_;
  7697.     majorversion   = 1;
  7698.     minorversion   = 2;
  7699.     filestem       = wpstack;
  7700.     metaclass      = M_Stack;
  7701.     callstyle      = oidl;
  7702.     dllname        = "wpstack.dll";
  7703.  
  7704.     /*
  7705.      * Internal instance variables
  7706.      */
  7707.     BOOL        bInitialized;
  7708.     PSTACKENTRY pStackTop;
  7709.     HMTX        hmtxStack;
  7710.  
  7711.     /*
  7712.      * Passthru to the .IH file the following:
  7713.      */
  7714.     passthru C_ih =
  7715.     "#define STK_APPLICATION        \"wpstack class\""
  7716.     "#define STK_PERSISTENTCOUNTKEY \"object count\""
  7717.     "#define MPNULL                 (MPFROMP( NULL ))"
  7718.     "#define MPZERO                 (MPFROMSHORT( 0 ))"
  7719.     "#define MRTRUE                 (MRFROMSHORT( (SHORT) TRUE ))"
  7720.     "#define MRFALSE                (MRFROMSHORT( (SHORT) FALSE ))"
  7721.     ""
  7722.     "typedef struct _STACKENTRY"
  7723.     "{"
  7724.     "   struct _STACKENTRY *Next;"
  7725.     "   BYTE        ReserveZeros[8];"
  7726.     "   ULONG       cbEntry;"
  7727.     "   BYTE        Entry[1];"
  7728.     "} STACKENTRY, *PSTACKENTRY;"
  7729.     "";
  7730.  
  7731.     /*
  7732.      * Passthru to the .H file the following:
  7733.      */
  7734.     passthru C_h =
  7735.     "#define STK_AWAKECOUNT      1"
  7736.     "#define STK_PERSISTENTCOUNT 2"
  7737.     "";
  7738.  
  7739.     /*
  7740.      * Method modifiers
  7741.      */
  7742.     wpAddSettingsPages:              override;
  7743.     wpFree:                          override;
  7744.     wpInitData:                      override;
  7745.     wpObjectReady:                   override;
  7746.     wpRestoreState:                  override;
  7747.     wpSaveState:                     override;
  7748.     wpSetup:                         override;
  7749.     wpSetupOnce:                     override;
  7750.     wpUnInitData:                    override;
  7751.   };
  7752.   #Endif /* __SOMIDL__ */
  7753. };
  7754.  
  7755. interface M_Stack : M_WPAbstract
  7756. {
  7757.   ULONG clsDecObjectCount(in ULONG ulCountType);
  7758.   //# PARAMETERS:
  7759.   //#   ULONG ulCountType  // In  - STK_AWAKECOUNT,
  7760.   //#                               STK_PERSISTENTCOUNT
  7761.   //#   ULONG return       // Out - new count value
  7762.   //#
  7763.   //# DESC: Decrements the number of defined object instances.
  7764.  
  7765.   ULONG clsIncObjectCount(in ULONG ulCountType);
  7766.   //# PARAMETERS:
  7767.   //#   ULONG ulCountType  // In  - STK_AWAKECOUNT,
  7768.   //#                               STK_PERSISTENTCOUNT
  7769.   //#   ULONG return       // Out - new count value
  7770.   //#
  7771.   //# DESC: Increments the number of defined object instances.
  7772.  
  7773.   HMODULE clsQueryModuleHandle();
  7774.   //# PARAMETERS: HMODULE return // Out - DLL module handle
  7775.   //#
  7776.   //# DESC: Gets resource module handle.
  7777.  
  7778.   ULONG clsQueryObjectCount(in ULONG ulCountType);
  7779.   //# PARAMETERS:
  7780.   //#   ULONG ulCountType  // In  - STK_AWAKECOUNT,
  7781.   //#                               STK_PERSISTENTCOUNT
  7782.   //#   ULONG return       // Out - count of awake/persistent instances
  7783.   //#
  7784.   //# DESC: Returns the current number of defined object instances.
  7785.  
  7786.   #ifdef __SOMIDL__
  7787.   implementation
  7788.   {
  7789.     releaseorder: clsDecObjectCount,
  7790.                   clsIncObjectCount,
  7791.                   clsQueryModuleHandle,
  7792.                   clsQueryObjectCount;
  7793.  
  7794.     /*
  7795.      * Class modifiers
  7796.      */
  7797.     functionprefix = stkM_;
  7798.     majorversion   = 1;
  7799.     minorversion   = 2;
  7800.     filestem       = wpstack;
  7801.     callstyle      = oidl;
  7802.     dllname        = "wpstack.dll";
  7803.  
  7804.     /*
  7805.      * Internal instance variables
  7806.      */
  7807.     HMODULE  hmod;              /* Resource module handle            */
  7808.     ULONG    ulAwakeCount;      /* No. of stack instances in memory  */
  7809.     ULONG    ulPersistentCount; /* Total number of stack instances   */
  7810.  
  7811.     /*
  7812.      * Method modifiers
  7813.      */
  7814.     wpclsInitData:                   override;
  7815.     wpclsQueryDefaultHelp:           override;
  7816.     wpclsQueryDefaultView:           override;
  7817.     wpclsQueryIconData:              override;
  7818.   };
  7819.   #Endif /* __SOMIDL__ */
  7820. };
  7821. #Endif  /* wpstack_idl */
  7822.  
  7823.  
  7824. ΓòÉΓòÉΓòÉ 9.3.3.2. Source Code for Stack ΓòÉΓòÉΓòÉ
  7825.  
  7826. The following sample illustrates the source code (C): 
  7827.  
  7828. // Description...... M_Stack, Stack
  7829. //
  7830. //     SOMObject
  7831. //       ΓööΓöÇΓöÇΓöÇWPObject
  7832. //             ΓööΓöÇΓöÇΓöÇWPAbstract
  7833. //                   ΓööΓöÇΓöÇΓöÇStack
  7834. //
  7835. // This class implements a persistent stack whose data is saved in the
  7836. // OS2.INI file by inheritance from WPAbstract.
  7837. //
  7838. // Instance Methods..........
  7839. //
  7840. //                  InsertStackPage             introduced
  7841. //                  Lock                        introduced
  7842. //                  Pop                         introduced
  7843. //                  Push                        introduced
  7844. //                  Unlock                      introduced
  7845. //                  wpAddSettingsPages          override
  7846. //                  wpFree                      override
  7847. //                  wpInitData                  override
  7848. //                  wpObjectReady               override
  7849. //                  wpRestoreState              override
  7850. //                  wpSaveState                 override
  7851. //                  wpSetup                     override
  7852. //                  wpSetupOnce                 override
  7853. //                  wpUnInitData                override
  7854. //
  7855. // Class Methods..........
  7856. //
  7857. //                  clsDecObjectCount           introduced
  7858. //                  clsIncObjectCount           introduced
  7859. //                  clsQueryModuleHandle        introduced
  7860. //                  clsQueryObjectCount         introduced
  7861. //                  wpclsInitData               override
  7862. //                  wpclsQueryDefaultHelp       override
  7863. //                  wpclsQueryDefaultView       override
  7864. //                  wpclsQueryIconData          override
  7865. //
  7866. // Non-Method Functions.......
  7867. //
  7868. //                  DialogProc
  7869. //
  7870. // *******************************************************************
  7871.  
  7872. #ifndef SOM_Module_wpstack_Source
  7873. #define SOM_Module_wpstack_Source
  7874. #endif
  7875. #define Stack_Class_Source
  7876. #define M_Stack_Class_Source
  7877.  
  7878. #include "stdlib.h"
  7879. #include "string.h"
  7880. #define  INCL_PM
  7881. #define  INCL_DOS
  7882. #define  INCL_DOSERRORS
  7883. #define  INCL_DEV
  7884. #define  INCL_WPCLASS
  7885. #define  INCL_WINWORKPLACE
  7886. #include "os2.h"
  7887. #include "wpstack.rch"
  7888. #include "wpstack.ih"
  7889.  
  7890. //
  7891. // Forward procedure declarations
  7892. //
  7893. MRESULT EXPENTRY DialogProc(HWND, ULONG, MPARAM, MPARAM);
  7894.  
  7895. //
  7896. // Global variables
  7897. //
  7898. PSZ vpszClassName   = "Stack";
  7899. PSZ vpszHelpLibrary = "wpstack.hlp";
  7900.  
  7901. // *********************************************************************
  7902. //
  7903. // METHOD NAME: stk_InsertStackPage
  7904. //
  7905. // FUNCTION: Inserts the new page into the Settings notebook.
  7906. //           This method exists so that subclassers can remove
  7907. //           or replace this page.
  7908. //
  7909. //**********************************************************************
  7910. SOM_Scope ULONG SOMLINK stk_InsertStackPage(
  7911.    Stack *somSelf,  // In - pointer to the object
  7912.    HWND hwndDlg)    // In - notebook window handle
  7913.  
  7914. // Method return value out - 0 = error, otherwise new page ID
  7915. {
  7916.    PAGEINFO  pi;
  7917.    // StackData *somThis = StackGetData(somSelf);
  7918.    StackMethodDebug("Stack","stk_InsertStackPage");
  7919.  
  7920.    memset((PCH) &pi, 0, sizeof(PAGEINFO));
  7921.    pi.cb                  = sizeof(PAGEINFO);
  7922.    pi.hwndPage            = NULLHANDLE;
  7923.    pi.usPageStyleFlags    = BKA_MAJOR;
  7924.    pi.usPageInsertFlags   = BKA_FIRST;
  7925.    pi.pfnwp               = DialogProc;
  7926.    pi.resid               = _clsQueryModuleHandle(_Stack);
  7927.    pi.dlgid               = DLG_STYLE;
  7928.    pi.pszName             = "~Stack";
  7929.    pi.pCreateParams       = somSelf;
  7930.    pi.pszHelpLibraryName  = vpszHelpLibrary;
  7931.    return(_wpInsertSettingsPage(somSelf, hwndDlg, &pi));
  7932.  
  7933. }  // End stk_InsertStackPage
  7934.  
  7935. // *********************************************************************
  7936. //
  7937. // METHOD NAME: stk_Lock
  7938. //
  7939. // FUNCTION: Locks the stack using a mutex semaphore so it does not
  7940. //           have to worry about multiple threads messing up the
  7941. //           linked list.
  7942. //
  7943. //**********************************************************************
  7944. SOM_Scope BOOL SOMLINK stk_Lock(
  7945.    Stack *somSelf) // In - pointer to the object
  7946.  
  7947. // Method return value out - TRUE = successful, False = error
  7948. {
  7949.    ULONG rc;
  7950.    QMSG   qmsg;
  7951.    MQINFO mqinfo;
  7952.    StackData *somThis = StackGetData(somSelf);
  7953.    StackMethodDebug("Stack","stk_Lock");
  7954.  
  7955.    if (!_hmtxStack)
  7956.    {
  7957.       rc = DosCreateMutexSem(NULL, &_hmtxStack, 0, TRUE);
  7958.    }
  7959.    else
  7960.    {
  7961.       rc = DosRequestMutexSem(_hmtxStack,100);
  7962.       if (rc)
  7963.       {
  7964.  
  7965.          if (WinQueryQueueInfo(HMQ_CURRENT,&mqinfo,sizeof(MQINFO)))
  7966.          {  //
  7967.             // For a PM process/thread, do a fake WinMsgSemWait
  7968.             //
  7969.             while (rc)
  7970.             {
  7971.                if (rc==ERROR_TIMEOUT)
  7972.                {
  7973.                   WinPeekMsg(WinQueryAnchorBlock(HWND_DESKTOP),
  7974.                              &qmsg,
  7975.                              NULLHANDLE,
  7976.                              0,0,
  7977.                              PM_NOREMOVE);  /* For example,         */
  7978.                                             /* fake a WinMsgSemWait */
  7979.                } /* Endthen */
  7980.  
  7981.                else
  7982.                {
  7983.                   break;
  7984.                } /* Endif */
  7985.                rc = DosRequestMutexSem(_hmtxStack, 100);
  7986.             } /* Endwhile */
  7987.          } /* Endthen */
  7988.  
  7989.          else
  7990.          {  //
  7991.             // For a non PM process/thread, just block on the semaphore
  7992.             //
  7993.             rc = DosRequestMutexSem(_hmtxStack, SEM_INDEFINITE_WAIT);
  7994.          } /* Endif */
  7995.       } /* Endif */
  7996.    } /* Endif */
  7997.    return(!rc);
  7998.  
  7999. }  // End stk_Lock
  8000.  
  8001. // *********************************************************************
  8002. //
  8003. // METHOD NAME: stk_Pop
  8004. //
  8005. // FUNCTION:  Pops an item from the stack.
  8006. //
  8007. //**********************************************************************
  8008. SOM_Scope BOOL SOMLINK stk_Pop(
  8009.    Stack  *somSelf,   // In    - pointer to the object
  8010.    PVOID  pBuffer,    // In    - pointer to the buffer for popped item.
  8011.                       //         NULL means return the buffer's size
  8012.    PULONG pcbBuffer)  // InOut - size in bytes of the pop buffer (in),
  8013.                       //         size actually returned (out)
  8014.  
  8015. // Method return value out - TRUE = successful, FALSE = error
  8016. {
  8017.    BOOL        bSem;
  8018.    PSTACKENTRY pNextEntry;
  8019.    BOOL        bStatus = FALSE;
  8020.    StackData *somThis = StackGetData(somSelf);
  8021.    StackMethodDebug("Stack","stk_Pop");
  8022.  
  8023.    /*
  8024.     * pStackTop is an instance variable, initialized to NULL,
  8025.     * which points to the top (first) entry
  8026.     * on the stack (list).
  8027.     */
  8028.    bSem = _Lock(somSelf);  // Semaphore that protects the stack chain
  8029.    if (_pStackTop)
  8030.    {
  8031.       if (pBuffer)
  8032.       {
  8033.  
  8034.          if (*pcbBuffer >= _pStackTop->cbEntry)
  8035.          {
  8036.             memcpy(pBuffer, _pStackTop->Entry, _pStackTop->cbEntry);
  8037.             *pcbBuffer = _pStackTop->cbEntry;
  8038.             pNextEntry = _pStackTop->Next;
  8039.             bStatus    = _wpFreeMem(somSelf, (PBYTE)_pStackTop);
  8040.             if (bStatus)
  8041.             {
  8042.                _pStackTop = pNextEntry;
  8043.             } /* Endif */
  8044.          } /* Endif */
  8045.       } /* Endthen */
  8046.  
  8047.       else
  8048.       {
  8049.          *pcbBuffer = _pStackTop->cbEntry;
  8050.          bStatus    = TRUE;
  8051.       } /* Endif */
  8052.    } /* Endif */
  8053.    if (bSem) _Unlock(somSelf);
  8054.    return(bStatus);
  8055.  
  8056. } // End stk_Pop
  8057.  
  8058. // *********************************************************************
  8059. //
  8060. // METHOD NAME: stk_Push
  8061. //
  8062. // FUNCTION: Pushes an item onto the stack.
  8063. //
  8064. //**********************************************************************
  8065. SOM_Scope BOOL  SOMLINK stk_Push(
  8066.    Stack *somSelf,     // In - pointer to the object
  8067.    PVOID pNewItem,     // In - pointer to the item to push
  8068.    ULONG cbNewItem)    // In - size in bytes of item to push
  8069.  
  8070. // Method return value out - TRUE = successful, FALSE = error
  8071. {
  8072.    BOOL        bSem;
  8073.    PSTACKENTRY pNewEntry;
  8074.    BOOL        bStatus  = FALSE;
  8075.    StackData   *somThis = StackGetData(somSelf);
  8076.    StackMethodDebug("Stack","stk_Push");
  8077.  
  8078.    pNewEntry = (PSTACKENTRY)_wpAllocMem(somSelf,
  8079.                 cbNewItem +
  8080.                 sizeof(STACKENTRY) -
  8081.                 sizeof(BYTE),
  8082.                 NULL);
  8083.  
  8084.    if (pNewEntry)
  8085.    {
  8086.       /*
  8087.        * pStackTop is an instance variable, initialized to NULL,
  8088.        * which points to the top (first) entry
  8089.        * on the stack (list)
  8090.        */
  8091.       memset(pNewEntry, 0, sizeof(STACKENTRY));
  8092.       bSem = _Lock(somSelf);  // Semaphore protect the stack chain.
  8093.       pNewEntry->Next = _pStackTop;
  8094.       _pStackTop = pNewEntry;
  8095.  
  8096.       if (pNewItem && cbNewItem)
  8097.       {
  8098.          pNewEntry->cbEntry = cbNewItem;
  8099.          memcpy(pNewEntry->Entry, pNewItem, cbNewItem);
  8100.       } /* Endif */
  8101.       if (bSem) _Unlock(somSelf);
  8102.       bStatus = TRUE;
  8103.    } /* Endif */
  8104.    return(bStatus);
  8105. } /* End stk_Push */
  8106.  
  8107. // *********************************************************************
  8108. //
  8109. // METHOD NAME: stk_Unlock
  8110. //
  8111. // FUNCTION: Unlocks the stack, releasing the mutex semaphore.
  8112. //
  8113. //**********************************************************************
  8114. SOM_Scope BOOL SOMLINK stk_Unlock(
  8115.    Stack *somSelf) // In - pointer to the object
  8116.  
  8117. // Method return value out - TRUE = successful, False = error.
  8118. {
  8119.    ULONG rc = 0;
  8120.    StackData *somThis = StackGetData(somSelf);
  8121.    StackMethodDebug("Stack","stk_Unlock");
  8122.  
  8123.    if (_hmtxStack)
  8124.    {
  8125.       rc = DosReleaseMutexSem(_hmtxStack);
  8126.    } /* Endif */
  8127.    return(!rc);
  8128.  
  8129. }  // End stk_Unlock
  8130.  
  8131. // *********************************************************************
  8132. //
  8133. // METHOD NAME: stk_wpAddSettingsPages
  8134. //
  8135. // FUNCTION:
  8136. //
  8137. //   Adds the new stack page by calling InsertStackPage().  This page
  8138. //   shows the contents of the stack and allows pushing and popping
  8139. //   entries.  It is added on top of existing pages.
  8140. //
  8141. //***********************************************************************
  8142.  
  8143. SOM_Scope BOOL SOMLINK stk_wpAddSettingsPages(
  8144.    Stack *somSelf,    // In - pointer to the object
  8145.    HWND hwndNotebook) // In - Settings notebook window handle
  8146.  
  8147. // Method return value out - TRUE = successful, FALSE = error
  8148. {
  8149.     // StackData *somThis = StackGetData(somSelf);
  8150.     StackMethodDebug("Stack","stk_wpAddSettingsPages");
  8151.  
  8152.     parent_wpAddSettingsPages(somSelf, hwndNotebook);
  8153.     return(_InsertStackPage(somSelf, hwndNotebook) != 0);
  8154.  
  8155. } // End stk_wpAddSettingsPages
  8156.  
  8157. // *********************************************************************
  8158. //
  8159. // METHOD NAME: stk_wpFree
  8160. //
  8161. // FUNCTION:
  8162. //
  8163. //   wpFree is generally overridden by storage classes such as
  8164. //   WPFileSystem and WPAbstract, which provide for the permanent
  8165. //   storage of an object's instance data.  In addition, if you
  8166. //   are trying to destroy an object, call wpDelete rather than wpFree
  8167. //   since it provides a user confirmation capability.
  8168. //
  8169. //   In this example, wpFree is overridden so that a count of stack
  8170. //   object instances can be maintained.  It is important that the
  8171. //   somSelf pointer for the object not be used again following the
  8172. //   call to parent_wpFree.
  8173. //
  8174. //**********************************************************************
  8175. SOM_Scope BOOL SOMLINK stk_wpFree(
  8176.    Stack *somSelf)  // In - pointer to the object
  8177.  
  8178. // Method return value out - TRUE = successful, FALSE = error
  8179. {
  8180.    BOOL      bStatus;
  8181.    SOMClass  *Class;
  8182.    // StackData *somThis = StackGetData(somSelf);
  8183.    StackMethodDebug("Stack","stk_wpFree");
  8184.  
  8185.    Class   = _somGetClass(somSelf);
  8186.    bStatus = parent_wpFree(somSelf);
  8187.    if (bStatus)
  8188.    {
  8189.       _clsDecObjectCount(Class, STK_PERSISTENTCOUNT);
  8190.    } /* Endif */
  8191.    return(bStatus);
  8192.  
  8193. }  // End stk_wpFree
  8194.  
  8195. // *********************************************************************
  8196. //
  8197. // METHOD NAME:  stk_wpInitData
  8198. //
  8199. // FUNCTION:
  8200. //
  8201. //   Initializes the stack's instance data.  Zero initialization is
  8202. //   statisfactory for the stack top pointer (pStackTop), so there is
  8203. //   nothing to do with respect to the instance data.  However, I will take
  8204. //   this opportunity to increment the awake stack instance count being
  8205. //   maintained by the class because I want to decrement it in wpUnInitData.
  8206. //   There are three additional items to note when overriding wpInitData.
  8207.  
  8208. //   First, wpInitData is invoked prior to the determination or restoration
  8209. //   of an object's state.  It is therefore necessary to be extremely
  8210. //   careful about what other instance methods are called.  It is best to
  8211. //   call none unless you wrote them.
  8212. //
  8213. //   Second, it is safest to call the parent's wpInitData method before
  8214. //   doing your own initialization.
  8215. //
  8216. //   Third, if it is possible for this class to be a common ancestor in a
  8217. //   multiple inheritance scenario, then this method needs to be written
  8218. //   such that multiple invocations are handled.  For example, if a class
  8219. //   named Stack23 was derived from classes Stack2 and Stack3 which in
  8220. //   turn were subclasses of Stack, that situation would exist.  Not
  8221. //   all Workplace Shell classes (WP*.)  currently take this precaution.
  8222. //   Therefore, it is advisable not to inherit from more than one
  8223. //   Workplace Shell class.  Using SOM initializers and destructors is
  8224. //   an alternative to overriding wpInitData in the multiple
  8225. //   inheritance situation.
  8226. //
  8227. //***********************************************************************
  8228.  
  8229. SOM_Scope void SOMLINK stk_wpInitData(
  8230.    Stack *somSelf)  // In - pointer to the object
  8231. {
  8232.     StackData *somThis = StackGetData(somSelf);
  8233.     StackMethodDebug("Stack","stk_wpInitData");
  8234.  
  8235.     parent_wpInitData(somSelf);
  8236.     if (!(_bInitialized))
  8237.     {
  8238.        _bInitialized = TRUE;
  8239.        _clsIncObjectCount(_somGetClass(somSelf), STK_AWAKECOUNT);
  8240.     } /* Endif */
  8241.     return;
  8242.  
  8243. }  // End stk_wpInitData
  8244.  
  8245. // *********************************************************************
  8246. //
  8247. // METHOD NAME:  stk_wpObjectReady
  8248. //
  8249. // FUNCTION:
  8250. //
  8251. //   Notifies that the object's creation/awakening is complete.
  8252. //   This example uses this method to increment the persistent
  8253. //   object count.
  8254. //
  8255. //**********************************************************************
  8256.  
  8257. SOM_Scope void SOMLINK stk_wpObjectReady(
  8258.    Stack    *somSelf,    // In - pointer to the object
  8259.    ULONG    ulCode,      // In - type of operation completed
  8260.    WPObject *refObject)  // In - pointer to the source object
  8261.                          //      if an object's
  8262.                          //      copy/shadow is created
  8263.  
  8264. {
  8265.     // StackData *somThis = StackGetData(somSelf);
  8266.     StackMethodDebug("Stack","stk_wpObjectReady");
  8267.  
  8268.     parent_wpObjectReady(somSelf, ulCode, refObject);
  8269.     if (!(ulCode & OR_AWAKE))
  8270.     {
  8271.        _clsIncObjectCount(_somGetClass(somSelf), STK_PERSISTENTCOUNT);
  8272.     } /* Endif */
  8273.     return;
  8274.  
  8275. } // End stk_wpObjectReady
  8276.  
  8277. // *********************************************************************
  8278. //
  8279. // METHOD NAME:  stk_wpRestoreState
  8280. //
  8281. // FUNCTION:
  8282. //
  8283. //   Restores the stack items from the persistent INI file storage
  8284. //   into the memory resident linked list pointed to by the
  8285. //   pStackTop instance variable.
  8286. //
  8287. //**********************************************************************
  8288.  
  8289. SOM_Scope BOOL  SOMLINK stk_wpRestoreState(
  8290.    Stack *somSelf,    // In - pointer to the object
  8291.    ULONG ulReserved)
  8292.  
  8293. {
  8294.    ULONG       i;
  8295.    ULONG       ulItemCount;
  8296.    ULONG       cbItem;
  8297.    PBYTE       pItem;
  8298.    PSTACKENTRY pPrevItem = NULL;
  8299.    BOOL        bStatus;
  8300.    StackData *somThis = StackGetData(somSelf);
  8301.    StackMethodDebug("Stack","stk_wpRestoreState");
  8302.  
  8303.    bStatus = _wpRestoreLong(somSelf, vpszClassName, 0, &ulItemCount);
  8304.    for (i=1; (i<=ulItemCount) && bStatus; i++)
  8305.    {
  8306.       bStatus = _wpRestoreData(somSelf, vpszClassName, i, NULL, &cbItem);
  8307.       if (bStatus)
  8308.       {
  8309.          pItem = _wpAllocMem(somSelf, cbItem, NULL);
  8310.  
  8311.          if (pItem)
  8312.          {
  8313.             bStatus = _wpRestoreData(somSelf, vpszClassName, i, pItem, &cbItem);
  8314.             if (bStatus)
  8315.             {
  8316.                if (pPrevItem)
  8317.                {
  8318.                   pPrevItem->Next = (PSTACKENTRY)pItem;
  8319.                } /* Endthen */
  8320.  
  8321.                else
  8322.                {
  8323.                   _pStackTop = (PSTACKENTRY)pItem;
  8324.                } /* Endif */
  8325.                pPrevItem = (PSTACKENTRY)pItem;
  8326.             } /* Endthen */
  8327.  
  8328.             else
  8329.             {
  8330.                _wpFreeMem(somSelf, pItem);
  8331.             } /* Endif */
  8332.          } /* Endif */
  8333.       } /* Endif */
  8334.    } /* Endfor */
  8335.    return (parent_wpRestoreState(somSelf, ulReserved));
  8336.  
  8337. } // End stk_wpRestoreState
  8338.  
  8339. // *********************************************************************
  8340. //
  8341. // METHOD NAME: stk_wpSaveState
  8342. //
  8343. // FUNCTION:
  8344. //
  8345. //   Saves the memory resident linked list to a buffer, which will be
  8346. //   written to a permanent INI file storage by the WPAbstract class.
  8347. //   The memory resident linked list is pointed to by the
  8348. //   pStackTop instance variable.
  8349. //
  8350. //**********************************************************************
  8351.  
  8352. SOM_Scope BOOL  SOMLINK stk_wpSaveState(
  8353.    Stack *somSelf)    // In - pointer to the object
  8354.  
  8355. {
  8356.    BOOL        bSem;
  8357.    ULONG       i;
  8358.    ULONG       ulItemCount = 0;
  8359.    ULONG       cbItem;
  8360.    PSTACKENTRY pItem;
  8361.    BOOL        bStatus;
  8362.    StackData *somThis = StackGetData(somSelf);
  8363.    StackMethodDebug("Stack","stk_wpSaveState");
  8364.  
  8365.    bSem = _Lock(somSelf);  // Semaphore that protects the stack chain
  8366.    for (pItem = _pStackTop; pItem; pItem = pItem->Next, ulItemCount++){;};
  8367.    bStatus = _wpSaveLong(somSelf, vpszClassName, 0, ulItemCount);
  8368.    for (pItem = _pStackTop, i = 1; bStatus && pItem; pItem = pItem->Next, i++)
  8369.    {
  8370.       cbItem  = sizeof(STACKENTRY) + pItem->cbEntry - 1;
  8371.       bStatus = _wpSaveData(somSelf, vpszClassName, i, (PBYTE)pItem, cbItem);
  8372.    } /* Endfor */
  8373.    if (bSem) _Unlock(somSelf);
  8374.    return(parent_wpSaveState(somSelf));
  8375.  
  8376. } // End stk_wpSaveState
  8377.  
  8378. // *********************************************************************
  8379. //
  8380. // METHOD NAME:  stk_wpSetup
  8381. //
  8382. // FUNCTION:
  8383. //
  8384. //   Two new keywords, PUSHITEM and POPITEM, have been defined for this
  8385. //   class to push and pop items from the stack.  This method is invoked
  8386. //   when an object is created and when WinSetObjectData() is called.
  8387. //   wpIsObjectInitialized and wpSaveDeferred are used to write
  8388. //   the persistent image to the INI file, if they are called as a result
  8389. //   of WinSetObjectData.
  8390. //
  8391. //**********************************************************************
  8392.  
  8393. SOM_Scope BOOL  SOMLINK stk_wpSetup(
  8394.    Stack *somSelf,    // In - pointer to the object
  8395.    PSZ   pszSetupString)
  8396.  
  8397. // Method return value out - TRUE = successful, FALSE = error
  8398. {
  8399.    BOOL  bSaveObject = FALSE;
  8400.    BOOL  bStatus;
  8401.    ULONG cbValue;
  8402.    PSZ   pszValue;
  8403.  
  8404.    // StackData *somThis = StackGetData(somSelf);
  8405.    StackMethodDebug("Stack","stk_wpSetup");
  8406.  
  8407.    bStatus = parent_wpSetup(somSelf, pszSetupString);
  8408.    if (bStatus && pszSetupString && *pszSetupString)
  8409.  
  8410.    {  //
  8411.       // Process PUSHITEM
  8412.       //
  8413.       if (_wpScanSetupString(somSelf,
  8414.                              pszSetupString,
  8415.                              "PUSHITEM",
  8416.                              NULL,
  8417.                              &cbValue))
  8418.       {
  8419.          pszValue = (PSZ)_wpAllocMem(somSelf, cbValue, NULL);
  8420.          bStatus  = FALSE;
  8421.  
  8422.          if (pszValue)
  8423.          {
  8424.             bStatus = _wpScanSetupString(somSelf,
  8425.                                          pszSetupString,
  8426.                                          "PUSHITEM",
  8427.                                          pszValue,
  8428.                                          &cbValue);
  8429.  
  8430.             if (bStatus)
  8431.             {
  8432.                bStatus     = _Push(somSelf, pszValue, cbValue);
  8433.                bSaveObject = bStatus;
  8434.             } /* Endif */
  8435.             _wpFreeMem(somSelf, (PBYTE)pszValue);
  8436.          } /* Endif */
  8437.       } /* Endif */
  8438.  
  8439.       //
  8440.       // Process POPITEM
  8441.       //
  8442.       if (bStatus &&
  8443.           _wpScanSetupString(somSelf,
  8444.                              pszSetupString,
  8445.                              "POPITEM",
  8446.                              NULL,
  8447.                              &cbValue))
  8448.       {
  8449.          bStatus = FALSE;
  8450.  
  8451.          if (_Pop(somSelf, NULL, &cbValue))
  8452.          {
  8453.             pszValue = (PSZ)_wpAllocMem(somSelf, cbValue, NULL);
  8454.             if (pszValue)
  8455.             {
  8456.                bStatus     = _Pop(somSelf, pszValue, &cbValue);
  8457.                bSaveObject =  bStatus;
  8458.                _wpFreeMem(somSelf, (PBYTE)pszValue);
  8459.             } /* Endif */
  8460.          } /* Endif */
  8461.       } /* Endif */
  8462.  
  8463.       if (bSaveObject && _wpIsObjectInitialized(somSelf))
  8464.       {  //
  8465.          // Save the object to the INI file.
  8466.          //
  8467.          _wpSaveDeferred(somSelf);
  8468.       } /* Endif */
  8469.    } /* Endif */
  8470.    return(bStatus);
  8471.  
  8472. } // End stk_wpSetup
  8473.  
  8474. // *********************************************************************
  8475. //
  8476. // METHOD NAME:  stk_wpSetupOnce
  8477. //
  8478. // FUNCTION:
  8479. //
  8480. //   This method is called once during the creation of an object.
  8481. //   One item is pushed onto the stack.  Unless popped by the
  8482. //   setup string, every newly created stack will have this item.
  8483. //
  8484. //**********************************************************************
  8485.  
  8486. SOM_Scope BOOL  SOMLINK stk_wpSetupOnce(
  8487.    Stack *somSelf,    // In - pointer to the object
  8488.    PSZ   pszSetupString)
  8489.  
  8490. // Method return value out - TRUE = successful, FALSE = error
  8491. {
  8492.     PSZ pszStackItem = "***** BOTTOM OF STACK *****";
  8493.     // StackData *somThis = StackGetData(somSelf);
  8494.     StackMethodDebug("Stack","stk_wpSetupOnce");
  8495.  
  8496.     _Push(somSelf, pszStackItem, strlen(pszStackItem) + 1);
  8497.     return (parent_wpSetupOnce(somSelf, pszSetupString));
  8498.  
  8499. } // End stk_wpSetupOnce
  8500.  
  8501. // *********************************************************************
  8502. //
  8503. // METHOD NAME:  stk_wpUnInitData
  8504. //
  8505. // FUNCTION:
  8506. //
  8507. //    This method is executed just prior to the deallocation of the
  8508. //    object's memory, during the process of making the object dormant
  8509. //    or its permanent destruction.  All memory and other resources allocated
  8510. //    during the instantiation of the object will be deallocated.  Memory
  8511. //    allocated by wpAllocMem() will be freed automatically by one of the
  8512. //    Workplace Shell ancestors, so there is no need to do this here.  As in
  8513. //    the wpInitData() override, the multiple inheritance issue should be
  8514. //    addressed here as well.
  8515. //
  8516. //**********************************************************************
  8517.  
  8518. SOM_Scope void  SOMLINK stk_wpUnInitData(
  8519.    Stack *somSelf)    // In - pointer to the object
  8520. {
  8521.    StackData *somThis = StackGetData(somSelf);
  8522.    StackMethodDebug("Stack","stk_wpUnInitData");
  8523.  
  8524.    if (_bInitialized)
  8525.    {
  8526.       _bInitialized = FALSE;
  8527.       _clsDecObjectCount(_somGetClass(somSelf), STK_AWAKECOUNT);
  8528.    } /* Endif */
  8529.    parent_wpUnInitData(somSelf);
  8530.  
  8531. } // End stk_wpUnInitData
  8532.  
  8533. // *********************************************************************
  8534. //
  8535. // METHOD NAME:  stkM_clsDecObjectCount
  8536. //
  8537. // FUNCTION:
  8538. //
  8539. //    Decrements the "awake" or "persistent" object instance count
  8540. //    for the class.
  8541. //
  8542. //**********************************************************************
  8543.  
  8544. SOM_Scope ULONG SOMLINK stkM_clsDecObjectCount(
  8545.    M_Stack *somSelf,  // In - pointer to the class object
  8546.    ULONG ulCountType) // In - STK_AWAKECOUNT,
  8547.                       //      STK_PERSISTENTCOUNT
  8548.  
  8549. // Method return value out - new count value
  8550. {
  8551.    ULONG ulCount = 0;
  8552.  
  8553.    M_StackData *somThis = M_StackGetData(somSelf);
  8554.    M_StackMethodDebug("M_Stack","stkM_clsDecObjectCount");
  8555.  
  8556.    switch (ulCountType)
  8557.    {
  8558.       case STK_AWAKECOUNT:
  8559.          ulCount = --_ulAwakeCount;
  8560.          break;
  8561.  
  8562.       case STK_PERSISTENTCOUNT:
  8563.          ulCount = --_ulPersistentCount;
  8564.          //
  8565.          // Write this value to the INI file
  8566.          //
  8567.          PrfWriteProfileData(HINI_USERPROFILE,
  8568.                              STK_APPLICATION,
  8569.                              STK_PERSISTENTCOUNTKEY,
  8570.                              &_ulPersistentCount,
  8571.                              sizeof(ULONG));
  8572.          break;
  8573.  
  8574.       default:
  8575.          break;
  8576.    } /* Endswitch */
  8577.    return(ulCount);
  8578.  
  8579. }  // stkM_clsDecObjectCount
  8580.  
  8581. // *********************************************************************
  8582. //
  8583. // METHOD NAME:  stkM_clsIncObjectCount
  8584. //
  8585. // FUNCTION:
  8586. //
  8587. //    Increments the "awake" or "persistent" object instance count
  8588. //    for the class.
  8589. //
  8590. //**********************************************************************
  8591.  
  8592. SOM_Scope ULONG somlink stkM_clsIncObjectCount(
  8593.    M_Stack *somSelf,  // In - pointer to the class object
  8594.    ULONG ulCountType) // In - STK_AWAKECOUNT,
  8595.                       //      STK_PERSISTENTCOUNT
  8596.  
  8597. // Method return value out - new count value
  8598. {
  8599.    ULONG ulCount = 0;
  8600.  
  8601.    M_StackData *somThis = M_StackGetData(somSelf);
  8602.    M_StackMethodDebug("M_Stack","stkM_clsIncObjectCount");
  8603.  
  8604.    switch (ulCountType)
  8605.    {
  8606.       case STK_AWAKECOUNT:
  8607.          ulCount = ++_ulAwakeCount;
  8608.          break;
  8609.  
  8610.       case STK_PERSISTENTCOUNT:
  8611.          ulCount = ++_ulPersistentCount;
  8612.          //
  8613.          // Need to write this value to the INI file
  8614.          //
  8615.          PrfWriteProfileData(HINI_USERPROFILE,
  8616.                              STK_APPLICATION,
  8617.                              STK_PERSISTENTCOUNTKEY,
  8618.                              &_ulPersistentCount,
  8619.                              sizeof(ULONG));
  8620.          break;
  8621.  
  8622.       default:
  8623.          break;
  8624.    } /* Endswitch */
  8625.    return(ulCount);
  8626.  
  8627. } // stkM_clsIncObjectCount
  8628.  
  8629. // *********************************************************************
  8630. //
  8631. // METHOD NAME:  stkM_clsQueryModuleHandle
  8632. //
  8633. // FUNCTION:
  8634. //
  8635. //    Returns the resource file module handle which was obtained
  8636. //    by wpclsInitData during the initialization process.
  8637. //
  8638. //**********************************************************************
  8639.  
  8640. SOM_Scope HMODULE somlink stkM_clsQueryModuleHandle(
  8641.    M_Stack *somSelf)  // In - pointer to the class object
  8642.  
  8643. // Method return value out - resouce module handle
  8644. {
  8645.    M_StackData *somThis = M_StackGetData(somSelf);
  8646.    M_StackMethodDebug("M_Stack","stkM_clsQueryModuleHandle");
  8647.  
  8648.    return(_hmod);
  8649.  
  8650. } // End stkM_clsQueryModuleHandle
  8651.  
  8652. // *********************************************************************
  8653. //
  8654. // METHOD NAME:  stkM_clsQueryObjectCount
  8655. //
  8656. // FUNCTION:
  8657. //
  8658. //    Returns the "awake" or "persistent" object instance count
  8659. //    for the class.
  8660. //
  8661. //**********************************************************************
  8662.  
  8663. SOM_Scope ULONG somlink stkM_clsQueryObjectCount(
  8664.    M_Stack *somSelf,  // In - pointer to the class object
  8665.    ULONG ulCountType) // In - STK_AWAKECOUNT,
  8666.                       //      STK_PERSISTENTCOUNT
  8667.  
  8668. // Method return value out - current count value
  8669. {
  8670.    ULONG ulCount = 0;
  8671.  
  8672.    M_StackData *somThis = M_StackGetData(somSelf);
  8673.    M_StackMethodDebug("M_Stack","stkM_clsQueryObjectCount");
  8674.  
  8675.    switch (ulCountType)
  8676.    {
  8677.       case STK_AWAKECOUNT:
  8678.          ulCount = _ulAwakeCount;
  8679.          break;
  8680.  
  8681.       case STK_PERSISTENTCOUNT:
  8682.          ulCount = _ulPersistentCount;
  8683.          break;
  8684.  
  8685.       default:
  8686.          break;
  8687.    } /* Endswitch */
  8688.    return(ulCount);
  8689.  
  8690. } // End stkM_clsQueryObjectCount
  8691.  
  8692. // *********************************************************************
  8693. //
  8694. // METHOD NAME:  stkM_wpclsInitData
  8695. //
  8696. // FUNCTION:
  8697. //
  8698. //    Initializes the class data (resource file module handle).
  8699. //    In this case, the resouce file is linked with the code
  8700. //    (WPSTACK.DLL).  The parent initialization is usually done first so
  8701. //    that some ancestor methods can be called.
  8702. //
  8703. //**********************************************************************
  8704.  
  8705. SOM_Scope void somlink stkM_wpclsInitData(
  8706.    M_Stack *somSelf)  // In - pointer to the class object
  8707. {
  8708.    PSZ         psz;
  8709.    somId       stackId;
  8710.    ULONG       cbValue  = sizeof(ULONG);
  8711.    M_StackData *somThis = M_StackGetData(somSelf);
  8712.    M_StackMethodDebug("M_Stack","stkM_wpclsInitData");
  8713.  
  8714.    parent_wpclsInitData(somSelf);
  8715.    stackId = somIdFromString("Stack");
  8716.    psz = _somLocateClassFile(SOMClassMgrObject,
  8717.                              stackId,
  8718.                              Stack_MajorVersion,
  8719.                              Stack_MinorVersion);
  8720.    SOMFree(stackId);
  8721.  
  8722.    if (psz != NULL)
  8723.    {
  8724.       DosQueryModuleHandle(psz, &_hmod);
  8725.    } /* Endif */
  8726.  
  8727.    //
  8728.    // Get the persistent object count from the INI file
  8729.    //
  8730.    PrfQueryProfileData(HINI_USERPROFILE,
  8731.                        STK_APPLICATION,
  8732.                        STK_PERSISTENTCOUNTKEY,
  8733.                        &_ulPersistentCount,
  8734.                        &cbValue);
  8735.    return;
  8736.  
  8737. } // End stkM_wpclsInitData
  8738.  
  8739. // *********************************************************************
  8740. //
  8741. // METHOD NAME:  stkM_wpclsQueryDefaultHelp
  8742. //
  8743. // FUNCTION:
  8744. //
  8745. //    Returns the help panel DLL and ID.
  8746. //
  8747. //**********************************************************************
  8748.  
  8749. SOM_Scope BOOL somlink stkM_wpclsQueryDefaultHelp(
  8750.    M_Stack *somSelf,       // In - pointer to the class object
  8751.    PULONG  pHelpPanelId,
  8752.    PSZ     pszHelpLibrary)
  8753.  
  8754. // Method return value out - TRUE = successful, FALSE = error
  8755. {
  8756.     // M_StackData *somThis = M_StackGetData(somSelf);
  8757.     M_StackMethodDebug("M_Stack","stkM_wpclsQueryDefaultHelp");
  8758.  
  8759.     if (pHelpPanelId)
  8760.     {
  8761.        *pHelpPanelId = ID_HELP_STACK;
  8762.     } /* Endif */
  8763.  
  8764.     if (pszHelpLibrary)
  8765.     {
  8766.        strcpy(pszHelpLibrary, vpszHelpLibrary);
  8767.     } /* Endif */
  8768.     return(TRUE);
  8769.  
  8770. } // End stkM_wpclsQueryDefaultHelp
  8771.  
  8772. // *********************************************************************
  8773. //
  8774. // METHOD NAME:  stkM_wpclsQueryDefaultView
  8775. //
  8776. // FUNCTION:
  8777. //
  8778. //    Opens the Settings view as the default.
  8779. //
  8780. //**********************************************************************
  8781.  
  8782. SOM_Scope ULONG somlink stkM_wpclsQueryDefaultView(
  8783.    M_Stack *somSelf)  // In - pointer to the class object
  8784. {
  8785.    // M_StackData *somThis = M_StackGetData(somSelf);
  8786.    M_StackMethodDebug("M_Stack","stkM_wpclsQueryDefaultView");
  8787.  
  8788.    return OPEN_SETTINGS;
  8789.  
  8790. }  // End stkM_wpclsQueryDefaultView
  8791.  
  8792. // *********************************************************************
  8793. //
  8794. // METHOD NAME:  stkM_wpclsQueryIconData
  8795. //
  8796. // FUNCTION:
  8797. //
  8798. //    This method is overridden so that the class' objects has
  8799. //    a unique icon.
  8800. //
  8801. //**********************************************************************
  8802.  
  8803. SOM_Scope ULONG SOMLINK stkM_wpclsQueryIconData(
  8804.    M_Stack   *somSelf,   // In - pointer to the class object
  8805.    PICONINFO pIconInfo ) // In - buffer for the icon data
  8806.  
  8807. // Method return value out - size of data returned
  8808. {
  8809.     // M_StackData *somThis = M_StackGetData(somSelf);
  8810.     M_StackMethodDebug("M_Stack","stkM_wpclsQueryIcon");
  8811.  
  8812.    if (pIconInfo)
  8813.    {
  8814.       pIconInfo->fFormat = ICON_RESOURCE;
  8815.       pIconInfo->hmod    = _clsQueryModuleHandle(somSelf);
  8816.       pIconInfo->resid   = ID_OBJECTICON;
  8817.    }
  8818.    return sizeof(ICONINFO);
  8819.  
  8820. } // End stkM_wpclsQueryIconData
  8821.  
  8822. // *********************************************************************
  8823. //
  8824. // PROCEDURE NAME:  DialogProc
  8825. //
  8826. // FUNCTION:
  8827. //
  8828. //   This is the dialog procedure for the new Settings notebook page.
  8829. //
  8830. //**********************************************************************
  8831.  
  8832. MRESULT EXPENTRY DialogProc(HWND hwndDlg,
  8833.                             ULONG msg,
  8834.                             MPARAM mp1,
  8835.                             MPARAM mp2)
  8836.  
  8837. {
  8838.    typedef struct _WINDATA
  8839.    {
  8840.       SOMAny     *somSelf;
  8841.       StackData  *somThis;
  8842.    }  WINDATA, *PWINDATA;
  8843.  
  8844.    MRESULT     mresultWpRtnCd = MRFALSE;
  8845.    PWINDATA    pwin = (PWINDATA) WinQueryWindowPtr(hwndDlg, QWL_USER);
  8846.    CHAR        szNewItem[CCHMAXPATH];
  8847.    ULONG       cbNewItem;
  8848.    PSTACKENTRY pItem;
  8849.    BOOL        bSem;
  8850.  
  8851.    switch( msg )
  8852.    {
  8853.       case WM_INITDLG:
  8854.       {
  8855.          pwin = (PWINDATA) _wpAllocMem((SOMAny *) mp2,
  8856.                                        sizeof(WINDATA), NULL);
  8857.          WinSetWindowPtr(hwndDlg, QWL_USER, pwin);
  8858.  
  8859.          //
  8860.          // Initialize WINDATA structure
  8861.          //
  8862.          pwin->somSelf     = (SOMAny *) mp2;
  8863.          pwin->somThis     = StackGetData(pwin->somSelf);
  8864.  
  8865.          //
  8866.          // Display the stack object count statistics
  8867.          //
  8868.          _ltoa(_clsQueryObjectCount(_somGetClass(pwin->somSelf),
  8869.                                     STK_AWAKECOUNT),
  8870.                szNewItem, 10);
  8871.          WinSetDlgItemText(hwndDlg, DLG_AWAKECOUNT, szNewItem);
  8872.          _ltoa(_clsQueryObjectCount(_somGetClass(pwin->somSelf),
  8873.                                     STK_PERSISTENTCOUNT),
  8874.                szNewItem, 10);
  8875.          WinSetDlgItemText(hwndDlg, DLG_PERSISTENTCOUNT, szNewItem);
  8876.  
  8877.          //
  8878.          // Insert stack items into the list box
  8879.          //
  8880.          bSem = _Lock(pwin->somSelf);
  8881.          for (pItem = pwin->somThis->pStackTop; pItem; pItem = pItem->Next)
  8882.          {
  8883.             WinInsertLboxItem(WinWindowFromID(hwndDlg, DLG_ITEMLIST),
  8884.                               LIT_END, pItem->Entry);
  8885.          } /* Endfor */
  8886.          if (bSem) _Unlock(pwin->somSelf);
  8887.  
  8888.          //
  8889.          // Return TRUE to tell PM that we changed focus
  8890.          //
  8891.          mresultWpRtnCd = (MRESULT) TRUE;
  8892.          break;
  8893.       }  /* End of case WM_INITDLG */
  8894.  
  8895.       case WM_COMMAND:
  8896.       {
  8897.          switch(SHORT1FROMMP(mp1))
  8898.          {
  8899.             case DLG_PUSH:    /* Push pushbutton  */
  8900.             {
  8901.                szNewItem[0] = '\0';
  8902.                cbNewItem = WinQueryDlgItemText(hwndDlg,
  8903.                                                DLG_NEWITEM,
  8904.                                                sizeof(szNewItem),
  8905.                                                szNewItem);
  8906.  
  8907.                if (_Push(pwin->somSelf, szNewItem, cbNewItem+1))
  8908.                {
  8909.                   WinInsertLboxItem(WinWindowFromID(hwndDlg, DLG_ITEMLIST),
  8910.                                     0, szNewItem);
  8911.                   _wpSaveDeferred(pwin->somSelf);  // Save state to INI file
  8912.                } /* Endif */
  8913.                break;
  8914.             }
  8915.  
  8916.             case DLG_POP:   /* Pop pushbutton */
  8917.             {
  8918.                szNewItem[0] = '\0';
  8919.                cbNewItem = sizeof(szNewItem);
  8920.  
  8921.                if (_Pop(pwin->somSelf, szNewItem, &cbNewItem))
  8922.                {
  8923.                   cbNewItem = cbNewItem ? cbNewItem : 1;
  8924.                   WinSetDlgItemText(hwndDlg, DLG_NEWITEM, szNewItem);
  8925.                   WinDeleteLboxItem(WinWindowFromID
  8926.                                     (hwndDlg, DLG_ITEMLIST), 0);
  8927.                   _wpSaveDeferred(pwin->somSelf);  // Save state to INI file
  8928.                } /* Endif */
  8929.                break;
  8930.             }
  8931.  
  8932.             case DLG_HELP:    /* Help push button  */
  8933.             {
  8934.                _wpDisplayHelp(pwin->somSelf, ID_HELP_STACK, vpszHelpLibrary);
  8935.                break;
  8936.             }
  8937.  
  8938.             default:
  8939.                break;
  8940.          }
  8941.          break;
  8942.       }  /* End of case WM_COMMAND */
  8943.  
  8944.       case WM_DESTROY:
  8945.       {
  8946.          _wpFreeMem(pwin->somSelf, (PBYTE)pwin);
  8947.          mresultWpRtnCd = WinDefDlgProc(hwndDlg, msg, mp1, mp2);
  8948.          break;
  8949.       }  /* End of case WM_DESTROY */
  8950.  
  8951.       default:
  8952.       {
  8953.          mresultWpRtnCd = WinDefDlgProc(hwndDlg, msg, mp1, mp2);
  8954.          break;
  8955.       } // End of default:
  8956.    }
  8957.    return mresultWpRtnCd;
  8958. \}
  8959. #pragma info(nouse)
  8960.  
  8961.  
  8962. ΓòÉΓòÉΓòÉ 9.3.3.3. Resource Header File for Stack ΓòÉΓòÉΓòÉ
  8963.  
  8964. The following sample illustrates the resource header file (RCH): 
  8965.  
  8966. #define ID_OBJECTICON               255
  8967. #define ID_HELP_STACK               256
  8968.  
  8969. #define DLG_STYLE                   100
  8970. #define DLG_AWAKECOUNT              101
  8971. #define DLG_PERSISTENTCOUNT         102
  8972. #define DLG_NEWITEM                 103
  8973. #define DLG_ITEMLIST                104
  8974. #define DLG_PUSH                    105
  8975. #define DLG_POP                     106
  8976. #define DLG_HELP                    107
  8977.  
  8978. The following sample illustrates the resource definition file (RC): 
  8979.  
  8980. #include <os2.h>
  8981. #include "wpstack.rch"
  8982.  
  8983. ICON  ID_OBJECTICON    WPSTACK.ICO
  8984.  
  8985. DLGTEMPLATE DLG_STYLE LOADONCALL MOVEABLE DISCARDABLE
  8986. BEGIN
  8987.     DIALOG  "", DLG_STYLE, 0, 0, 224, 200, NOT FS_DLGBORDER
  8988.     BEGIN
  8989.         /*
  8990.          * Create output fields for stack object count statistics.
  8991.          * Will display them on every object.
  8992.          */
  8993.         LTEXT           "Awake Stack Count:"  -1,  10, 140,  85,  8
  8994.         LTEXT           ""        DLG_AWAKECOUNT, 100, 140,  25,  8
  8995.         LTEXT           "Total Stack Count:"  -1,  10, 130,  85,  8
  8996.         LTEXT           ""   DLG_PERSISTENTCOUNT, 100, 130,  25,  8
  8997.  
  8998.         /*
  8999.          * Create an entry field for specifying text to push
  9000.          * and a list box for the current stack contents
  9001.          */
  9002.         LTEXT           "New item to push:"  -1,  10, 120,  76,  8
  9003.         ENTRYFIELD      "",         DLG_NEWITEM,  10, 105, 180,  8,
  9004.                         ES_MARGIN
  9005.  
  9006.         LTEXT           "Stack contents:",   -1,  10,  90,  76,  8
  9007.         LISTBOX                    DLG_ITEMLIST,  10,  30, 180, 54,
  9008.                         LS_HORZSCROLL
  9009.  
  9010.         /*
  9011.          * Align the push button along the bottom
  9012.          */
  9013.         PUSHBUTTON      "P~ush",   DLG_PUSH,        7, 7, 38, 14
  9014.         PUSHBUTTON      "P~op",    DLG_POP,        57, 7, 38, 14
  9015.         PUSHBUTTON      "~Help",   DLG_HELP,      107, 7, 38, 14
  9016.     END
  9017. END
  9018.  
  9019.  
  9020. ΓòÉΓòÉΓòÉ 9.3.3.4. Help Source File for Stack ΓòÉΓòÉΓòÉ
  9021.  
  9022. The following sample illustrates the help source file (IPF): 
  9023.  
  9024. :userdoc.
  9025. .*--------------------------------------------------------------
  9026. .*  Main window extended help panel
  9027. .*--------------------------------------------------------------
  9028. .*
  9029. :h1 res=256 name=PANEL_MAIN.Workplace Shell Stack Object
  9030. :i1 id=abtStl.Workplace Shell Stack Object
  9031. :p.
  9032. The Workplace Shell Stack object is a sample Workplace Shell SOM
  9033. application that demonstrates the use of Workplace
  9034. Shell setup and cleanup methods.
  9035. The application provides a new object class, Stack, whose
  9036. instances implement standard programming push down stacks.
  9037. WPAbstract is the parent class of the Stack class providing persistence
  9038. of the stack entries, via the OS2.INI file.
  9039. The Stack class also maintains the number of permanent
  9040. object instances and currently awaken objects
  9041. (instantiated in memory).
  9042. :p.
  9043. A Settings notebook page has been added to each object allowing the
  9044. user to view a stacks contents, push new items onto the stack, and
  9045. pop existing items from the stack.
  9046. The awake and total object counts are also displayed on each
  9047. object's new notebook page.
  9048. :p.
  9049. :hp2.Pushing Items onto the Stack:ehp2.
  9050. :p.
  9051. To push a new item onto the top of the stack, enter a text string in
  9052. the input field labeled New item to push and click on the
  9053. Push push button.
  9054. The pushed item will appear at the top of the list.
  9055. :hp2.Popping Items from the Stack:ehp2.
  9056. :p.
  9057. To pop the top item from the stack just click on the
  9058. Pop push button.
  9059. The popped item will be removed from the list and appear in
  9060. the New item to push field.
  9061. .*
  9062. :euserdoc.
  9063.  
  9064.  
  9065. ΓòÉΓòÉΓòÉ 9.3.3.5. Make File for Stack ΓòÉΓòÉΓòÉ
  9066.  
  9067. The following sample illustrates the make file (MAK): 
  9068.  
  9069. .SUFFIXES: .c .obj .dll .idl .h .ih .rc .res
  9070.  
  9071. SC        = sc
  9072. SCFLAGS   = -maddstar -S128000 -C128000 -mnoint -v
  9073. SCLIST    = -s "ih;h;c;def"
  9074.  
  9075. INCLUDE   = .;d:\som\include;d:\wpshidl\h;$(INCLUDE)
  9076. SMINCLUDE = .;d:\som\include;d:\wpshidl\idl;$(SMINCLUDE)
  9077. LIB       = d:\som\lib;e:\ibmcpp\lib;e:\toolkt21\os2lib;$(LIB)
  9078. CFLAGS    = -Ge- -Ss+ -C+ -Kb -Q+ -Ms
  9079. LFLAGS    = /MAP /NOL /NOI /EXEPACK:2 /PACKCODE /PACKDATA /FAR /ALIGN:4
  9080.  
  9081. b=wpstack
  9082.  
  9083. all:         $(b).dll $(b).ih $(b).hlp
  9084.  
  9085. .c.obj:       icc $(CFLAGS) $*.c
  9086.  
  9087. $(b).dll:    $(b).ih $(b).obj $(b).def $(b).res
  9088.              link386 $(b) $(LFLAGS),$(b).dll,$(b).map,somtk,$(b)
  9089.              rc $(b).res $(b).dll
  9090.              mapsym $(b).map
  9091.  
  9092. $(b).obj:    $(b).c $(b).h
  9093.  
  9094. $(b).res:    $(b).rc $(b).ico
  9095.              rc -r $(b).rc
  9096.  
  9097. $(b).ih:     $(b).idl
  9098.              $(SC) $(SCFLAGS) $(SCLIST) $(@B).idl
  9099.  
  9100. $(b).hlp:    $(b).ipf
  9101.              ipfc $(b).ipf
  9102.  
  9103. clean:       -del $(b).ih  $(b).h   $(b).obj $(b).dll
  9104.              -del $(b).map $(b).sym $(b).res $(b).def
  9105.  
  9106.  
  9107. ΓòÉΓòÉΓòÉ 10. Object Memory: Memory Allocation Methods ΓòÉΓòÉΓòÉ
  9108.  
  9109. The Workplace Shell provides methods which you can override to design your own 
  9110. memory management system, or utilize to manage memory required for objects of 
  9111. your application. This chapter provides information on memory management 
  9112. methods for Workplace Shell applications. 
  9113.  
  9114.  
  9115. ΓòÉΓòÉΓòÉ 10.1. About Memory Allocation Methods ΓòÉΓòÉΓòÉ
  9116.  
  9117. The wpAllocMem method allocates memory for use by an object. A record of memory 
  9118. blocks allocated by calls to wpAllocMem is kept by adding USAGE_MEMORY type 
  9119. items to the object's USEITEM list. The USEITEM list is examined by 
  9120. wpUnInitData when the object is destroyed or made dormant to free previously 
  9121. allocated resources. 
  9122.  
  9123. Memory that is allocated to an object is de-allocated automatically when the 
  9124. object is no longer in use, assuming the memory has not already been cleaned up 
  9125. by the object. wpFreeMem is called to free allocated memory, even if the object 
  9126. is still in use. This method should be overriden to free memory that was 
  9127. allocated with an override method of wpAllocMem. 
  9128.  
  9129.  
  9130. ΓòÉΓòÉΓòÉ 10.2. Using Memory Allocation Methods ΓòÉΓòÉΓòÉ
  9131.  
  9132. As an example of the way these methods may be utilized, consider the definition 
  9133. of a WPAbstract subclass, Stack, with the Push() and Pop() methods. The 
  9134. following sample code fragments show the Push() and Pop() methods using the 
  9135. memory allocation methods. Push() allocates space for the new item, initializes 
  9136. its contents and places it on the stack while Pop() removes the top item from 
  9137. the stack, and returns its contents. The stack is implemented as a linked list 
  9138. of entries with the head of the list being the top of the stack. Assume the 
  9139. existence of methods, Lock() and Unlock(), which protect the stack linked list 
  9140. in a multithread environment. 
  9141.  
  9142. Note:  The sample code fragments in this section are part of a complete program 
  9143.        that provides a new object class, Stack, whose instances implement 
  9144.        standard programming push down stacks. The program is illustrated in 
  9145.        "Sample Code for Setup/Cleanup Methods". 
  9146.  
  9147.   #include "stack.ih"
  9148.  
  9149.   typedef struct _STACKENTRY
  9150.     {
  9151.       PSTACKENTRY pNext;
  9152.       BYTE        ReserveZeros[8];
  9153.       ULONG       cbEntry;
  9154.       BYTE        Entry[1];
  9155.     } STACKENTRY; *PSTACKENTRY;
  9156.  
  9157.   /************************  wpAllocMem Method  ************************/
  9158.  
  9159.   SOM_Scope BOOL SOMLINK stk_Push(
  9160.             Stack *somSelf,     // In - pointer to the object
  9161.             PVOID pNewItem,     // In - pointer to the item to push
  9162.             ULONG cbNewItem)    // In - size in bytes of item to push
  9163.  
  9164.   // The method returns the value:
  9165.   //     TRUE  = successful
  9166.   //     FALSE = error
  9167.   {
  9168.     BOOL        bSem;
  9169.     PSTACKENTRY pNewEntry;
  9170.     BOOL        bStatus = FALSE;
  9171.     StackData  *somThis = StackGetData(somSelf);
  9172.     StackMethodDebug("Stack","stk_Push");
  9173.  
  9174.     pNewEntry = (PSTACKENTRY)_wpAllocMem(somSelf,
  9175.                 cbNewItem +
  9176.                 sizeof(STACKENTRY) -
  9177.                 sizeof(BYTE),
  9178.                 NULL);
  9179.  
  9180.     if (pNewEntry)
  9181.     {
  9182.       /*
  9183.        * pStackTop is an instance variable, initialized to NULL,
  9184.        * which points to the top (first) entry
  9185.        * on the stack (list)
  9186.        */
  9187.       memset(pNewEntry, 0, sizeof(STACKENTRY));
  9188.       bSem = _Lock(somSelf);  // Semaphore that protects the stack chain
  9189.       pNewEntry->Next = _pStackTop;
  9190.       _pStackTop = pNewEntry;
  9191.  
  9192.       if (pNewItem && cbNewItem)
  9193.       {
  9194.         pNewEntry->cbEntry = cbNewItem;
  9195.         memcpy(pNewEntry->Entry, pNewItem, cbNewItem);
  9196.       } /* Endif */
  9197.  
  9198.       if (bSem) _Unlock(somSelf);
  9199.       bStatus = TRUE;
  9200.     } /* Endif */
  9201.     return(bStatus);
  9202.   } /* End stk_Push */
  9203.  
  9204.  
  9205.   /************************  wpFreeMem Method  *************************/
  9206.  
  9207.   SOM_Scope BOOL SOMLINK stk_Pop(
  9208.             Stack *somSelf,   // In    - pointer to the object
  9209.             PVOID  pBuffer,   // In    - pointer to buffer for popped item,
  9210.                               //         NULL means return size of buffer
  9211.             PULONG pcbBuffer) // InOut - size in bytes of pop buffer,
  9212.                               //         size actually returned
  9213.  
  9214.   // The method returns the value:
  9215.   //     TRUE  = successful
  9216.   //     FALSE = error
  9217.   {
  9218.     BOOL        bSem;
  9219.     PSTACKENTRY pNextEntry;
  9220.     BOOL        bStatus = FALSE;
  9221.     StackData  *somThis = StackGetData(somSelf);
  9222.     StackMethodDebug("Stack","stk_Pop");
  9223.  
  9224.     /*
  9225.      * pStackTop is an instance variable, initialized to NULL,
  9226.      * which points to the top (first) entry
  9227.      * on the stack (list).
  9228.      */
  9229.     bSem = _Lock(somSelf);  // Semaphore that protects the stack chain
  9230.  
  9231.     if (_pStackTop)
  9232.     {
  9233.       if (pBuffer)
  9234.       {
  9235.         if (*pcbBuffer >= _pStackTop->cbEntry)
  9236.         {
  9237.           memcpy(pBuffer, _pStackTop->Entry, _pStackTop->cbEntry);
  9238.           *pcbBuffer = _pStackTop->cbEntry;
  9239.  
  9240.           pNextEntry = _pStackTop->Next;
  9241.           bStatus    = _wpFreeMem(somSelf, (PBYTE)_pStackTop);
  9242.           if (bStatus)
  9243.           {
  9244.             _pStackTop = pNextEntry;
  9245.           } /* Endif */
  9246.         } /* Endif */
  9247.  
  9248.       } /* Endthen */
  9249.       else
  9250.       {
  9251.         *pcbBuffer = _pStackTop->cbEntry;
  9252.         bStatus    = TRUE;
  9253.       } /* Endif */
  9254.     } /* Endif */
  9255.  
  9256.     if (bSem) _Unlock(somSelf);
  9257.     return(bStatus);
  9258.   } // End stk_Pop
  9259.  
  9260.  
  9261. ΓòÉΓòÉΓòÉ 11. Object Mobility: Direct Manipulation Methods ΓòÉΓòÉΓòÉ
  9262.  
  9263. Direct manipulation is interaction with objects by way of a pointing device. 
  9264. For example, using direct manipulation, a user can move an object from one 
  9265. container to another by dragging an object icon from a source container and 
  9266. dropping it on a target container. Direct manipulation methods allow you to 
  9267. specify how objects that are directly effected by such a move communicate with 
  9268. each other. This chapter outlines the protocols of direct manipulation with 
  9269. respect to their interactions with the Workplace Shell. The following material 
  9270. is presented as a supplement to information on direct manipulation in the 
  9271. Presentation Manager Programming Guide - Advanced Topics. 
  9272.  
  9273.  
  9274. ΓòÉΓòÉΓòÉ 11.1. About Direct Manipulation Methods ΓòÉΓòÉΓòÉ
  9275.  
  9276. Direct manipulation enables the user to visually drag an object (the source 
  9277. object) and drop it on another object (the target object) causing an 
  9278. interaction, or data exchange, between the objects. The Workplace Shell tracks 
  9279. an object being dragged, notifying target objects and windows as the source 
  9280. object is being dragged over them and when it is dropped on them. The Workplace 
  9281. Shell notifies a target object by calling the object's direct manipulation 
  9282. methods that process the source object being dragged and dropped. Direct 
  9283. manipulation methods initialize the structures that convey information about 
  9284. objects being moved to the target and describe images to be displayed during 
  9285. the Drag operation. 
  9286.  
  9287.  
  9288. ΓòÉΓòÉΓòÉ 11.1.1. Direct Manipulation on Workplace Shell Objects ΓòÉΓòÉΓòÉ
  9289.  
  9290. Common objects are provided by the Workplace Shell for use in applications. 
  9291. When an icon is dragged over a Workplace Shell object, the target object sends 
  9292. a message to the source container to enable a direct manipulation exchange. The 
  9293. message explains what the target object does. Completion of a drop requires 
  9294. that the source and target objects share a common rendering mechanism. If the 
  9295. source object is not appropriate for a drop on the target and the drop is 
  9296. prohibited, a "do-not" symbol is shown. Workplace Shell handles standard 
  9297. Presentation Manager rendering mechanisms, as well as its own mechanisms, to 
  9298. allow easy integration of Presentation Manager applications. 
  9299.  
  9300. Workplace Shell simplifies implementation of a direct manipulation operation, 
  9301. handling the filling of data structures, the drag sequence, and notification of 
  9302. the target when a successful drop occurs. The standard direct manipulation 
  9303. capabilities of the Workplace Shell include Print, Delete and File Move/Copy. 
  9304.  
  9305.  
  9306. ΓòÉΓòÉΓòÉ 11.1.2. Direct Manipulation on PM Applications ΓòÉΓòÉΓòÉ
  9307.  
  9308. For PM applications, the Workplace Shell sends DM_ messages to PM windows using 
  9309. the standard or enhanced direct manipulation protocols. The Workplace Shell 
  9310. will drag source objects rendered as OBJECT or as OS2FILE and will accept 
  9311. source objects rendered in the same way. The Workplace Shell also will send a 
  9312. DM_PRINTOBJECT message to items dropped on the printer object. 
  9313.  
  9314. Users can drag source objects over windows that an object creates. When this 
  9315. occurs, the Workplace Shell sends DM_ messages to these windows. Therefore, 
  9316. window procedures associated with the windows that the object creates must be 
  9317. able to process DM_ messages. 
  9318.  
  9319. Target objects are not necessarily able to process every type of source object 
  9320. that is dropped on them. They are, however, capable of processing more than one 
  9321. type of dropped source object. Printer objects, for example, cannot print 
  9322. binary files, but they can print both text and graphics files. Because of 
  9323. differing capabilities, each target object should determine if it can process 
  9324. the source object being dropped on it. The following table shows the direct 
  9325. manipulation messages that are sent to target objects and the methods that are 
  9326. invoked by the Workplace Shell: 
  9327.  
  9328. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9329. ΓöéDescription    ΓöéMethod Name      ΓöéInvoked OnΓöéMessage Name      Γöé
  9330. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9331. ΓöéFormat drag    ΓöéwpFormatDragItem ΓöéSource    ΓöéNone              Γöé
  9332. Γöéinformation    Γöé                 Γöé          Γöé                  Γöé
  9333. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9334. ΓöéRequest        ΓöéwpRender         ΓöéSource    ΓöéDM_RENDER         Γöé
  9335. Γöérendering      Γöé                 Γöé          Γöé                  Γöé
  9336. Γöéformat         Γöé                 Γöé          Γöé                  Γöé
  9337. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9338. ΓöéRendering      ΓöéwpRenderComplete ΓöéTarget    ΓöéDM_RENDERCOMPLETE Γöé
  9339. Γöérequest        Γöé                 Γöé          Γöé                  Γöé
  9340. Γöécompleted      Γöé                 Γöé          Γöé                  Γöé
  9341. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9342. ΓöéObjects being  ΓöéwpDragOver       ΓöéTarget    ΓöéDM_DRAGOVER       Γöé
  9343. Γöédragged over   Γöé                 Γöé          Γöé                  Γöé
  9344. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9345. ΓöéObject has beenΓöéwpDrop           ΓöéSource    ΓöéDM_DROP           Γöé
  9346. Γöédropped        Γöé                 Γöé          Γöé                  Γöé
  9347. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9348. ΓöéDrag/Drop is   ΓöéwpEndConversationΓöéTarget    ΓöéDM_ENDCONVERSATIONΓöé
  9349. Γöécomplete       Γöé                 Γöé          Γöé                  Γöé
  9350. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9351.  
  9352. The "Source" and "Target" windows in the following diagram represent windows 
  9353. that have been subclassed, via CnrOwnerSubclassProc, by the Workplace Shell: 
  9354.  
  9355.  
  9356.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9357.                       Γöé       Source                           Target        Γöé
  9358.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9359.                                 Γöé                                Γöé
  9360.         User begins drag        Γöé                                Γöé
  9361.          (WM_BEGINDRAG ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöé                                Γöé
  9362.                or               Γöé                                Γöé
  9363.            WM_PICKUP)           Γöé                                Γöé
  9364.                                 Γöé                                Γöé
  9365.                                 Γöé                                Γöé
  9366.                   wpFormatDragItem(sourceobject)                 Γöé
  9367.                                 Γöé                                Γöé
  9368.                                 Γöé          DM_DRAGOVER           Γöé
  9369.                               .>ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöé
  9370.                               . Γöé                                Γöé
  9371.                               . Γöé                    wpDragOver(targetobject)
  9372.                               . Γöé                                Γöé
  9373.                               . Γöé         DDR_  response         Γöé
  9374.                               ..Γöé<ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé
  9375.                                 Γöé                                Γöé
  9376.         User ends drag          Γöé                                Γöé
  9377.          (WM_ENDDRAG)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöé                                Γöé
  9378.                                 Γöé            DM_DROP             Γöé
  9379.                                 ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöé
  9380.                                 Γöé                                Γöé
  9381.                                 Γöé                      wpDrop(targetobject)
  9382.                                 Γöé                                Γöé
  9383.                              ... If source rendering is indicated ...
  9384.                                 Γöé                                Γöé
  9385.                                 Γöé                                Γöé
  9386.                                 Γöé        DM_RENDERPREPARE        Γöé
  9387.                                 Γöé         (If necessary)         Γöé
  9388.                                 Γöé<ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé<.
  9389.                                 Γöé                                Γöé .
  9390.                                 Γöé           DM_RENDER            Γöé .
  9391.                                 Γöé         (If supported)         Γöé .
  9392.                                 Γöé<ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé .
  9393.                                 Γöé                                Γöé .
  9394.                       wpRender(sourceobject)                     Γöé .
  9395.                                 Γöé                                Γöé .
  9396.                                 Γöé        DM_RENDERCOMPLETE       Γöé .
  9397.                                 ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöé .
  9398.                                 Γöé                                Γöé..
  9399.                                 Γöé                                Γöé
  9400.                                 Γöé                 wpRenderComplete(targetobject)
  9401.                                 Γöé                                Γöé
  9402.                                 Γöé                                Γöé
  9403.                                 Γöé                                Γöé
  9404.                                 Γöé                                Γöé
  9405.                                 Γöé        DM_ENDCONVERSATION      Γöé
  9406.                                 Γöé<ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé
  9407.                                 Γöé                                Γöé
  9408.                   wpEndConversation(sourceobject)
  9409.  
  9410.  
  9411. ΓòÉΓòÉΓòÉ 11.2. Using Direct Manipulation Methods ΓòÉΓòÉΓòÉ
  9412.  
  9413. This section shows the sequence of method flows for a typical direct 
  9414. manipulation operation. 
  9415.  
  9416.  
  9417. ΓòÉΓòÉΓòÉ 11.2.1. Starting a Drag Operation ΓòÉΓòÉΓòÉ
  9418.  
  9419. Folders are containers; therefore, they receive notification from the container 
  9420. controls when an object is added to a container. The Workplace Shell subclasses 
  9421. the owner of the container control. The Workplace Shell initiates the Drag 
  9422. operation, calls wpFormatDragItem to fill out the data structures, and calls 
  9423. DrgDrag or DrgLazyDrag to perform the actual dragging. A Workplace Shell object 
  9424. need not invoke DrgDrag or DrgLazyDrag, since this is done automatically by the 
  9425. Workplace Shell when the object completes the processing of wpFormatDragItem. 
  9426.  
  9427. When the user begins to drag an object, the source object is notified by the 
  9428. system, which invokes the object's wpFormatDragItem. This method is used to 
  9429. build a DRAGITEM structure, which is passed to a potential target object. The 
  9430. DRAGITEM structure contains the source object's rendering information, which is 
  9431. used to determine whether a Drop operation is valid at that point. Default 
  9432. information for the DRAGITEM structure is inserted by the default processing 
  9433. provided by the parent class, but an object class may override the method and 
  9434. include its own class-specific processing. The DRAGITEM structure is nested 
  9435. within a DRAGINFO structure, which is passed to any object over which the 
  9436. current item is being dragged. In a situation where more than one object is 
  9437. being dragged, a separate DRAGITEM is produced for each object and the set of 
  9438. structures is combined into a single DRAGINFO structure. The DRAGINFO 
  9439. structure, as shown in the following code fragments contains information about 
  9440. the Drag operation: 
  9441.  
  9442. typedef struct _DRAGINFO
  9443. {
  9444.   ULONG   cbDraginfo;             /* Size of DRAGINFO               */
  9445.   USHORT  cbDragitem;             /* Size of DRAGITEM               */
  9446.   USHORT  usOperation;            /* Current Drag operation         */
  9447.   HWND    hwndSource;             /* Window handle of source        */
  9448.   SHORT   xDrop;                  /* X coordinate of drop position  */
  9449.   SHORT   yDrop;                  /* Y coordinate of drop position  */
  9450.   USHORT  cditem;                 /* Count of DRAGITEM              */
  9451.   USHORT  usReserved;             /* Reserved for future use        */
  9452. } DRAGINFO;
  9453.  
  9454. The DRAGITEM data structure, as shown in the following code fragments is used 
  9455. to describe the items being dragged: 
  9456.  
  9457. typedef struct _DRAGITEM
  9458. {
  9459.   HWND    hwndItem;               /* Conversation partner          */
  9460.   ULONG   ulItemID;               /* Identifies item being dragged */
  9461.   HSTR    hstrType;               /* Type of item                  */
  9462.   HSTR    hstrRMF;                /* Rendering mechanism and format*/
  9463.   HSTR    hstrContainerName;      /* Name of source container      */
  9464.   HSTR    hstrSourceName;         /* Name of item at source        */
  9465.   HSTR    hstrTargetName;         /* Suggested name of item at dest*/
  9466.   SHORT   cxOffset;               /* X offset of the origin of the */
  9467.                                   /* image from the mouse hotspot  */
  9468.   SHORT   cyOffset;               /* Y offset of the origin of the */
  9469.                                   /* image from the mouse hotspot  */
  9470.   USHORT  fsControl;              /* Source item control flags     */
  9471.   USHORT  fsSupportedOps;         /* Ops supported by source       */
  9472. } DRAGITEM;
  9473.  
  9474. The Workplace Shell itself performs the intialization of the DRAGINFO 
  9475. structure. If class-specific processing is required, the object may perform its 
  9476. own initialization during processing of wpFormatDragItem. A Workplace Shell 
  9477. object does not need to allocate the DRAGITEM structure, since it is allocated 
  9478. by the Workplace Shell, and a pointer is passed to wpFormatDragItem. The 
  9479. following sample code shows an example of how to use wpFormatDragItem: 
  9480.  
  9481. /*
  9482.  *  Specify a unique RMF that will only be understood
  9483.  *  by my instances of class MYFOLDER.
  9484.  */
  9485.  
  9486. SOM_Scope BOOL SOMLINK myf_wpFormatDragItem(MYFILE *somSelf,
  9487.                  PDRAGITEM pdrgItem)
  9488.  
  9489. {
  9490.   /* MYFILEData *somThis = MYFILEGetData(somSelf); */
  9491.   MYFILEMethodDebug("MYFILE","myf_wpFormatDragItem");
  9492.  
  9493.   parent_wpFormatDragItem(somSelf,pdrgItem);
  9494.  
  9495.   /* We do NOT want to really let the workplace shell render
  9496.    * our object, so change the rendering mechanism and format
  9497.    * to be uniquely ours.
  9498.    */
  9499.  
  9500.   DrgDeleteStrHandle(pdrgItem->hstrRMF);
  9501.   pdrgItem->hstrRMF = DrgAddStrHandle("<DRM_OUROWNSPECIAL,DRF_OBJECT>");
  9502.   return(TRUE);
  9503. }
  9504.  
  9505.  
  9506. ΓòÉΓòÉΓòÉ 11.2.2. Determining whether Data Can Be Exchanged ΓòÉΓòÉΓòÉ
  9507.  
  9508. During the drag portion of a Drag and Drop operation, the target must determine 
  9509. if it can exchange or receive data from the source for each object involved in 
  9510. the operation. The target determines which rendering mechanism and format to 
  9511. use. There are four combinations of rendering mechanisms and formats supported 
  9512. by the Workplace Shell: 
  9513.  
  9514.      <DRM_OBJECT, DRF_OBJECT> 
  9515.  
  9516.      <DRM_OS2FILE, DRF_UNKNOWN> 
  9517.  
  9518.      <DRM_DISCARD, DRF_UNKNOWN> 
  9519.  
  9520.      (DRM_OS2FILE, DRM_PRINT) X (DRF_TEXT) 
  9521.  
  9522.  The DRAGITEM structure contains the source object's rendering information, 
  9523.  which is used to determine whether a Drop operation is valid at that point. 
  9524.  The pDragItemhstrRMF field in the DRAGITEM data structure is used to hold a 
  9525.  handle to a string containing the rendering mechanism and format. 
  9526.  
  9527.  
  9528. ΓòÉΓòÉΓòÉ 11.2.2.1. DRM_OBJECT ΓòÉΓòÉΓòÉ
  9529.  
  9530. The Workplace Shell interface uses the rendering mechanism of <DRM_OBJECT, 
  9531. DRF_OBJECT> to communicate information about the Workplace Shell objects 
  9532. involved in a direct manipulation. 
  9533.  
  9534. For the <DRM_OBJECT, DRF_OBJECT> rendering mechanism, pDragInfohwndSource is 
  9535. expected to be the window handle of the container holding objects which were 
  9536. inserted with wpCnrInsertObject. 
  9537.  
  9538. When you are using the DRM_OBJECT rendering mechanism, pDragItemulItemID 
  9539. indicates the object being dragged. For each item being dragged, 
  9540. pDragItemulItemID is the PMINIRECORDCORE or PRECORDCORE pointer associated 
  9541. with the object. The object can be retrieved using OBJECT_FROM_PREC on 
  9542. pDragItemulItemID. As soon as the target object has completed processing, a 
  9543. DM_ENDCONVERSATION message is sent to the window handle in pDragItemhwndItem. 
  9544.  
  9545. Note:  There is no way to force source rendering for DRM_OBJECT. 
  9546.  
  9547.  
  9548. ΓòÉΓòÉΓòÉ 11.2.2.2. DRM_OS2FILE ΓòÉΓòÉΓòÉ
  9549.  
  9550. This rendering mechanism can be used by various containers, including file 
  9551. folders and trash cans. These containers allow objects to be dragged and 
  9552. dropped on white space in the container to accomplish a Move or Copy operation. 
  9553. They also can allow objects in the same or another container to be dragged and 
  9554. dropped on objects within the container to accomplish an operation. 
  9555.  
  9556. When you are using DRM_OS2FILE, pDragItemulItemID is not used. 
  9557.  
  9558. If the Workplace Shell is to do target rendering, 
  9559. *(pDragItemhstrContainerName) is specified. It is the name of the directory 
  9560. that contains the file or the directory being dragged. Leave this field NULL if 
  9561. you want the Workplace Shell to send DM_RENDER messages, that is, to do source 
  9562. rendering for this object. 
  9563.  
  9564. *(pDragItemhstrSourceName) is the file or directory name being dragged and 
  9565. must be specified. 
  9566.  
  9567. *(pDragItemhstrTarget) is the suggested name of the file or directory at the 
  9568. target. 
  9569.  
  9570. Note:  If pDragItemhstrContainerName and pDragItemhstrSourceName are both 
  9571.        specified, the Workplace Shell converts the item being dragged to an 
  9572.        object and treats it like a DRM_OBJECT. 
  9573.  
  9574.  
  9575. ΓòÉΓòÉΓòÉ 11.2.2.2.1. Messages ΓòÉΓòÉΓòÉ
  9576.  
  9577.  
  9578. The following messages are used by the DRM_OS2FILE: 
  9579.  
  9580.      DM_RENDER 
  9581.  
  9582.       This message is sent by a target to a source, via wpRender, to request a 
  9583.       rendering for an object. When this message is received, the source 
  9584.       determines if it understands the rendering mechanism and format selected 
  9585.       by the target for the object. It also confirms that it allows the 
  9586.       operation selected by the user for that object. The source must respond 
  9587.       to this message before proceeding with the rendering operation. 
  9588.  
  9589.      DM_RENDERCOMPLETE 
  9590.  
  9591.       This message is posted by a source to a target, via wpRenderComplete, to 
  9592.       notify the target that the rendering operation has been completed by the 
  9593.       source, either successfully or unsuccessfully. The source can elect to 
  9594.       let the target retry a successful or an unsuccessful operation. In this 
  9595.       case, it should return to its state at the time of the drop for that 
  9596.       object and indicate, in the message, that a retry is allowed. Support for 
  9597.       this message by a source is optional. If this message is not supported, 
  9598.       then: 
  9599.  
  9600.         -  The source must convey all necessary information to the target order 
  9601.            to allow it to handle the rendering operation. 
  9602.  
  9603.         -  It must always indicate that native rendering is allowed when 
  9604.            replying to a DM_RENDER message. 
  9605.  
  9606.      DM_ENDCONVERSATION 
  9607.  
  9608.       This message is sent by a target to a source to notify the source that 
  9609.       the rendering operation is complete and that the conversation is 
  9610.       terminated. When this message is received, the entire Drop operation for 
  9611.       the object is complete. The source can now release any resources it had 
  9612.       allocated to the drop and rendering operations. When the reply is 
  9613.       received, the target can release the resources it had allocated to the 
  9614.       operation. 
  9615.  
  9616.  
  9617. ΓòÉΓòÉΓòÉ 11.2.3. Dragging over Another Object ΓòÉΓòÉΓòÉ
  9618.  
  9619. When an object is dragged over another object, the system invokes wpDragOver in 
  9620. the object being dragged over. This method receives a DRAGINFO structure, which 
  9621. contains pointers to DRAGITEM structures and other information. The potential 
  9622. target object examines this information to determine the validity of a Drop 
  9623. operation, and if the drop is not valid, changes the pointing device to 
  9624. indicate a "do not drop" situation. The following sample code shows an example 
  9625. of how to use wpDragOver: 
  9626.  
  9627. /*
  9628.  *  Rejects objects that are not file system objects from being dropped
  9629.  *  on the Browse_O_matic.
  9630.  */
  9631.  
  9632. SOM_Scope MRESULT SOMLINK Browse_O_Maticwps_wpDragOver(
  9633.                           Browse_O_Matic *somSelf,
  9634.                           HWND hwndCnr,
  9635.                           PDRAGINFO pdrgInfo)
  9636. {
  9637.   MRESULT mResult;
  9638.   ULONG   ulCount;
  9639.   ULONG   ulNumberOfObjects;
  9640.  
  9641.   /* Browse_O_MaticData *somThis = Browse_O_MaticGetData(somSelf); */
  9642.   Browse_O_MaticMethodDebug("Browse_O_Matic",
  9643.                             "Browse_O_Maticwps_wpDragOver");
  9644.  
  9645.   /* Don't call the parent. Initialize mResult to allow */
  9646.   /* the drag over to proceed                           */
  9647.   mResult = MRFROM2SHORT(DOR_DROP, DO_MOVE);
  9648.  
  9649.   /* Determine the number of objects dragged */
  9650.   /* over the Browse-O-Matic                 */
  9651.   ulNumberOfObjects = DrgQueryDragitemCount( pdrgInfo);
  9652.  
  9653.   /* Check all the objects */
  9654.   for (ulCount=0; ulCount < ulNumberOfObjects &&
  9655.                             SHORT1FROMMR(mResult) !=
  9656.                                          DOR_NEVERDROP; ulCount++)
  9657.  
  9658.   {
  9659.     /* It must be a file system type object */
  9660.     if(DrgVerifyRMF(DrgQueryDragitemPtr(pdrgInfo, ulCount),
  9661.                    "DRM_OS2FILE",
  9662.                     NULL))
  9663.       mResult = MRFROM2SHORT(DOR_DROP, SHORT2FROMMR(mResult));
  9664.     else
  9665.       mResult = MRFROM2SHORT(DOR_NEVERDROP, SHORT2FROMMR(mResult));
  9666.   }
  9667.   return(mResult);
  9668. }
  9669.  
  9670.  
  9671. ΓòÉΓòÉΓòÉ 11.2.4. Ending a Drop Operation ΓòÉΓòÉΓòÉ
  9672.  
  9673. When a Drop operation occurs, the object being dropped upon is notified by the 
  9674. system, which invokes wpDrop. This method accepts the DRAGINFO structure and 
  9675. determines whether the information is sufficient to take action, or whether 
  9676. further conversation is necessary to determine rendering information. 
  9677.  
  9678.  
  9679. ΓòÉΓòÉΓòÉ 11.2.4.1. When Dropping on a Folder ΓòÉΓòÉΓòÉ
  9680.  
  9681. When dropping DRM_OBJECT or DRM_OS2FILE on a folder, with 
  9682. pDragItemhstrContainerName or pDragItemhstrSourceName defined, the Workplace 
  9683. Shell will perform the action, for example, Copy, Move, Shadow, and notify the 
  9684. source with a DM_ENDCONVERSATION message. 
  9685.  
  9686. When dropping DRM_OS2FILE on a folder, with pDragItemhstrContainerName set to 
  9687. NULL, the Workplace Shell will initiate source rendering by sending a 
  9688. DM_RENDERPREPARE message, if DC_PREPARE is specified in the pDragItemfsControl 
  9689. word in the DRAGITEM structure. It then sends a DM_RENDER message. Again, 
  9690. DM_ENDCONVERSATION is sent as previously described. 
  9691.  
  9692.  
  9693. ΓòÉΓòÉΓòÉ 11.2.4.2. When Dropping on a Printer ΓòÉΓòÉΓòÉ
  9694.  
  9695. Workplace Shell implements the standard PM Print rendering mechanism, 
  9696. DRM_PRINT. When dropping DRM_OBJECT or DRM_OS2FILE on a printer, with 
  9697. pDragItemhstrContainerName or pDragItemhstrSourceName defined, the Workplace 
  9698. Shell will perform the action, and notify the source with a DM_ENDCONVERSATION 
  9699. message. 
  9700.  
  9701. When dropping DRM_OS2FILE, with pDragItemhstrContainerNameset to NULL, or 
  9702. dropping DRM_PRINT on a printer, the printer sends a DM_PRINTOBJECT message. 
  9703.  
  9704.  
  9705. ΓòÉΓòÉΓòÉ 11.2.4.3. When Dropping on the Shredder ΓòÉΓòÉΓòÉ
  9706.  
  9707. The Workplace Shell shredder object supports a rendering mechanism called 
  9708. DRM_DISCARD, not a standard PM mechanism. When dropping DRM_OBJECT or 
  9709. DRM_OS2FILE on a shredder, with pDragItemhstrContainerName or 
  9710. pDragItemhstrSourceName defined, the Workplace Shell will perform the action, 
  9711. and notify the source with a DM_ENDCONVERSATION message. 
  9712.  
  9713. When dropping DRM_OS2FILE, with pDragItemhstrContainerName set to NULL, or 
  9714. dropping DRM_DISCARD on the shredder, the shredder sends a DM_DISCARDOBJECT 
  9715. message. 
  9716.  
  9717. The following sample code shows an example of how to use wpDrop: 
  9718.  
  9719. /*
  9720.  *  Rejects objects that are not file system objects from being dropped
  9721.  *  from being dropped on the Browse_O_matic.
  9722.  */
  9723.  
  9724. SOM_Scope MRESULT SOMLINK Browse_O_Maticwps_wpDrop(
  9725.                           Browse_O_Matic *somSelf,
  9726.                           HWND hwndCnr,
  9727.                           PDRAGINFO pdrgInfo,
  9728.                           PDRAGITEM pdrgItem)
  9729.  
  9730. {
  9731.   CHAR    pszBuffer[255];
  9732.   MRESULT mResult;
  9733.  
  9734.   /* Browse_O_MaticData *somThis = Browse_O_MaticGetData(somSelf); */
  9735.   Browse_O_MaticMethodDebug("Browse_O_Matic",
  9736.                             "Browse_O_Maticwps_wpDrop");
  9737.  
  9738.   mResult = MRFROM2SHORT(DOR_DROP, 0);
  9739.  
  9740.   /* Don't call the parent. Initialize mResult to allow */
  9741.   /* the drop to proceed.                               */
  9742.   if(DOR_NEVERDROP != SHORT1FROMMR(mResult) &&
  9743.                       DrgVerifyRMF(pdrgItem, "DRM_OS2FILE", NULL))
  9744.  
  9745.   {
  9746.     /* Get the path */
  9747.     DrgQueryStrName(pdrgItem->hstrContainerName,
  9748.                     sizeof(pszBuffer),
  9749.                     pszBuffer);
  9750.  
  9751.     /* Append the name of the object to the path */
  9752.     DrgQueryStrName(pdrgItem->hstrSourceName,
  9753.                     sizeof(pszBuffer) - strlen(pszBuffer),
  9754.                     &pszBuffer[strlen(pszBuffer)]);
  9755.     _wpViewObject(somSelf, NULLHANDLE, OPEN_DEFAULT, (ULONG)pszBuffer);
  9756.     mResult = MRFROM2SHORT(DOR_DROP, SHORT2FROMMR(mResult));
  9757.   }
  9758.   else
  9759.     mResult = MRFROMSHORT(DOR_NEVERDROP);
  9760.  
  9761.   return(mResult);
  9762. }
  9763.  
  9764.  
  9765. ΓòÉΓòÉΓòÉ 12. Object Persistence: Save/Restore Methods ΓòÉΓòÉΓòÉ
  9766.  
  9767. The WPObject class provides methods that support persistent objects, that is, 
  9768. objects for which the system saves information. These methods include save and 
  9769. corresponding restore methods. This chapter provides information for using 
  9770. these state methods in Workplace Shell applications. 
  9771.  
  9772.  
  9773. ΓòÉΓòÉΓòÉ 12.1. About Save/Restore Methods ΓòÉΓòÉΓòÉ
  9774.  
  9775. A Workplace Shell object can exist in two states: 
  9776.  
  9777.      Dormant: persistent form of object when it is stored away on disk. If the 
  9778.       object's class is a descendant of WPFileSystem, its data is stored in the 
  9779.       object's extended attributes. If it is a descendant of WPAbstract, its 
  9780.       data is stored in the .INI file. 
  9781.  
  9782.      Awakened: object is instantiated as a SOM object that can have methods 
  9783.       invoked upon it. 
  9784.  
  9785.  The wpSaveState method will save the value of certain instance variables to a 
  9786.  persistent storage location. The wpRestoreState method will restore these 
  9787.  values for a newly awakened object. The Workplace Shell uses these methods to 
  9788.  maintain important instance data for each object. If you write a subclass of a 
  9789.  Workplace Shell class that includes its own new instance data, you must 
  9790.  override these methods to ensure that the new instance data values are 
  9791.  saved/restored along with the rest of the object's data. 
  9792.  
  9793.  The following events trigger the Save/Restore methods: 
  9794.  
  9795.      Workplace Shell calls wpRestoreState when an object is awakened. 
  9796.  
  9797.      The wpSaveImmediate method calls wpSaveState to save its data to disk. 
  9798.  
  9799.      An application must save an object to disk when a critical instance 
  9800.       variable is changed. The wpSaveImmediate method performs the save on the 
  9801.       Workplace User-interface thread, and is therefore a synchronous 
  9802.       operation. The wpSaveDeferred method causes the save to take place on a 
  9803.       separate thread, asynchronously. Therefore, for performance reasons, 
  9804.       wpSaveDeferred should be used in preference to wpSaveImmediate. 
  9805.  
  9806.      Workplace Shell calls wpSaveDeferred to asynchronously save the object's 
  9807.       state when: 
  9808.  
  9809.         -  An object is closed 
  9810.         -  An object is made dormant 
  9811.         -  The system is shut down. 
  9812.  
  9813.  The following figure shows the life cycle of an object: 
  9814.  
  9815.  If you are implementing a subclass of a Workplace Shell class with its own 
  9816.  instance variables that are supposed to persist, override wpSaveState and 
  9817.  wpRestoreState. In the override for wpSaveState, call wpSaveData, wpSaveLong, 
  9818.  or wpSaveString, for each piece of data you want saved, depending on the type 
  9819.  of each piece of instance data associated with the object. Likewise, the 
  9820.  override for wpRestoreState should call wpRestoreData, wpRestoreLong, or 
  9821.  wpRestoreString, for each piece of data to be restored. 
  9822.  
  9823.  The wpSaveState and wpRestoreState methods use a key to identify each piece of 
  9824.  data for an object. This key is made up of the class name and a unique ULONG. 
  9825.  Together, this key should uniquely identify a given piece of data for the 
  9826.  object. For user-defined subclass instance data, assign a ULONG to each piece 
  9827.  of data. Supply that ULONG along with your class name to wpSaveData, 
  9828.  wpSaveLong, or wpSaveString, when saving that piece of data. Likewise, supply 
  9829.  that ULONG along with your class name to wpRestoreData, wpRestoreLong, or 
  9830.  wpRestoreString, when restoring that piece of data. 
  9831.  
  9832.  
  9833. ΓòÉΓòÉΓòÉ 12.2. Using Save/Restore Methods ΓòÉΓòÉΓòÉ
  9834.  
  9835. The following sample codes (IDL and C files) serves as an example of how to use 
  9836. the Save/Restore methods. In this example, class X, a subclass of WPDataFile, 
  9837. introduces two pieces of persistent instance data. 
  9838.  
  9839. include wpdataf.idl
  9840.  
  9841. interface X : WPDataFile
  9842. {
  9843.   .
  9844.   .
  9845.   .
  9846.  
  9847.   implementation
  9848.   {
  9849.  
  9850.     ULONG ulA;     //# Persistent instance data introduced by class X
  9851.     PSZ   pszB;
  9852.  
  9853.     wpSaveState: override;    //# To save your data
  9854.     wpRestoreState: override; //# To restore your data
  9855.     wpInitData: override;     //# To supply default values for your data
  9856.   };
  9857. };
  9858.  
  9859. The following sample code shows the source code for X: 
  9860.  
  9861. BOOL SOMLINK x_wpSaveState(X * somSelf)
  9862. {
  9863.   _wpSaveLong(somSelf, "X", 1, _ulA);
  9864.   _wpSaveString(somSelf, "X", 2, _pszB);   // Key is X and 1 for _ulA
  9865.   return parent_wpSaveState(somSelf);      // Key is X and 2 for _pszB
  9866. }
  9867.   .
  9868.   .
  9869.   .
  9870.  
  9871. BOOL SOMLINK x_wpRestoreState(X * somSelf, ULONG ulReserved)
  9872. {
  9873.   ULONG ulSize;
  9874.  
  9875.   // Key is X and 1 for _ulA
  9876.   _wpRestoreLong(somSelf, "X", 1, &_ulA);
  9877.  
  9878.   // Key is X and 2 for _pszB
  9879.   _wpRestoreString(somSelf, "X", 2, &_pszB, &ulSize);
  9880.   return parent_wpRestoreState(somSelf, ulReserved);
  9881. }
  9882.   .
  9883.   .
  9884.   .
  9885.  
  9886. BOOL SOMLINK x_wpInitData(X * somSelf)
  9887. {
  9888.   BOOL rc;
  9889.   rc    = parent_wpInitData(somSelf);
  9890.   _ulA  = 1001;
  9891.   _pszB = "hello";
  9892.   return rc;
  9893. }
  9894.  
  9895. Note:  Some of the save and restore methods are used in a complete program that 
  9896.        is illustrated in Sample Code for Setup/Cleanup Methods. 
  9897.  
  9898.  
  9899. ΓòÉΓòÉΓòÉ 13. Object Properties: Notebook Methods ΓòÉΓòÉΓòÉ
  9900.  
  9901. A notebook is a visual component used to display the setttings for an object 
  9902. and to enable the user to change them. This chapter describes the General and 
  9903. Window pages of the Settings notebook, and explains how to use the notebook 
  9904. methods in Workplace Shell applications. 
  9905.  
  9906.  
  9907. ΓòÉΓòÉΓòÉ 13.1. About Notebook Methods ΓòÉΓòÉΓòÉ
  9908.  
  9909. WPObject defines a General page in the Settings notebook for all classes of 
  9910. objects. Because all Workplace Shell objects have general properties associated 
  9911. with them, therefore, all Workplace Shell objects have a General page in their 
  9912. Settings notebook. The General page describes all the general object properties 
  9913. such as the object's title, icon, and whether or not the object is a template. 
  9914.  
  9915. The title or icon of an object can be changed using the General page. For 
  9916. WPAbstract objects, the title and icon change is saved in the OS2.INI file. For 
  9917. the WPFileSystem objects, the title change is saved in the .LONGNAME extended 
  9918. attributes, and the icon change is saved in the .ICON extended attributes. 
  9919.  
  9920. WPObject also defines a Window page in the Settings notebook for all classes of 
  9921. objects. Most of the Abstract objects have both General and Window pages in the 
  9922. Settings notebook. Some Abstract objects like mouse and keyboard do not have a 
  9923. Window page because they have no open views other than Settings. 
  9924.  
  9925. Settings notebook pages for Workplace Shell objects are inherited from the 
  9926. ancestors of the Workplace Shell class. This means that they include pages that 
  9927. have been added or removed by their ancestor classes, in addition to the 
  9928. General and Window pages inherited from the root, WPObject class. 
  9929.  
  9930. For example, suppose that MyObject is a persistent object derived from the 
  9931. WPAbstract class. Because WPAbstract is derived from the WPObject class, 
  9932. MyObject inherits the characteristics and behaviors of WPAbstract and WPObject. 
  9933. WPAbstract inherits its Settings notebook from WPObject. MyObject, therefore, 
  9934. inherits WPObject's Settings notebook. 
  9935.  
  9936. Now suppose that MyObject class defines two additional pages in its Settings 
  9937. notebook, MyPage_1 and MyPage_2. This means that the Settings notebook for 
  9938. MyObject class has four pages: 
  9939.  
  9940.      General 
  9941.      Window 
  9942.      MyPage_1 
  9943.      MyPage_2 
  9944.  
  9945.  Consider that YourObject class is derived from MyObject class. Therefore, by 
  9946.  inheritance, YourObject class defines the following pages: 
  9947.  
  9948.      General 
  9949.      Window 
  9950.      MyPage_1 
  9951.      MyPage_2 
  9952.  
  9953.  in its Settings notebook. YourObject class defines an additional page in its 
  9954.  Settings notebook, YourPage. The Settings notebook for YourObject class has 
  9955.  now five pages: 
  9956.  
  9957.  General        Inherited from the WPObject class. 
  9958.  
  9959.  Window         Inherited from the WPObject class. 
  9960.  
  9961.  MyPage_1       Inherited from MyObject class. 
  9962.  
  9963.  MyPage_2       Inherited from MyObject class. 
  9964.  
  9965.  YourPage       Defined by YourObject. 
  9966.  
  9967.  The tabs in the Settings notebook for MyObject and YourObject are shown in the 
  9968.  following figure: 
  9969.  
  9970.  
  9971.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9972.   Γöé   MyObject Settings   Γöé                 Γöé  YourObject Settings  Γöé
  9973.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9974.   Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9975.   Γöé                       Γöé  General   Γöé    Γöé                       Γöé   General  Γöé
  9976.   Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9977.   Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9978.   Γöé                       Γöé  Window    Γöé    Γöé                       Γöé   Window   Γöé
  9979.   Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9980.   Γöé  This Page Is not     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé  This Page Is not     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9981.   Γöé  Inherited from          MyPage_1  Γöé    Γöé  Inherited from       Γöé   MyPage_1 Γöé
  9982.   Γöé  MyObject's           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé  YourObject's         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9983.   Γöé  Ancestors.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé  Ancestors.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9984.   Γöé                       Γöé  MyPage_2  Γöé    Γöé                       Γöé   MyPage_2 Γöé
  9985.   Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9986.   Γöé                       Γöé                 Γöé                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9987.   Γöé                       Γöé                 Γöé                           YourPage Γöé
  9988.   Γöé                       Γöé                 Γöé                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9989.   Γöé                       Γöé                 Γöé                       Γöé
  9990.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9991.  
  9992.  Every Settings notebook in the Workplace Shell should have Undo, Default, and 
  9993.  Help push buttons. Any changes to the Settings notebook takes effect 
  9994.  immediately, although sometimes the changes are delayed until the focus is 
  9995.  changed. 
  9996.  
  9997.  
  9998. ΓòÉΓòÉΓòÉ 13.2. Using Notebook Methods ΓòÉΓòÉΓòÉ
  9999.  
  10000. This section describes how the Settings notebook methods are used to add or to 
  10001. remove pages that a class has inherited from its ancestors' Settings notebook. 
  10002.  
  10003.  
  10004. ΓòÉΓòÉΓòÉ 13.2.1. Inserting Notebook Pages ΓòÉΓòÉΓòÉ
  10005.  
  10006. An object's Settings notebook is created by the Workplace Shell by calling the 
  10007. object's wpAddSettingsPages. Adding pages to the Settings notebook that a class 
  10008. has inherited from its ancestors is accomplished by overriding 
  10009. wpAddSettingsPages and by calling a new method that inserts the page. The new 
  10010. method calls wpInsertSettingsPage to insert the page into the object's 
  10011. notebook. The following sample code shows how to insert pages to an object's 
  10012. notebook: 
  10013.  
  10014. /**************************  New Method   ****************************/
  10015.  
  10016. SOM_Scope ULONG SOMLINK MyObject_wpAddAnotherPage(
  10017.                         MyObject *somSelf, HWND hwndNotebook)
  10018.  
  10019. {
  10020.   PAGEINFO pageinfo;
  10021.   .
  10022.   .
  10023.   /* Setup the page information data structure for my new page */
  10024.   .
  10025.   .
  10026.   /* Add the page to the Settings notebook */
  10027.   return _wpInsertSettingsPage(somSelf, hwndNotebook, &pageinfo);
  10028. }
  10029.  
  10030. /************************  Method Overrides  *************************/
  10031.  
  10032. SOM_Scope BOOL32 SOMLINK MyObject_wpAddSettingsPage (
  10033.                          MyObject *somSelf, HWND hwndNotebook)
  10034.  
  10035. {
  10036.   .
  10037.   .
  10038.  
  10039.   if (parent_wpAddSettingsPage (somSelf, hwndNotebook)
  10040.       && _wpAddAnotherPage (somSelf, hwndNotebook))
  10041.     return (TRUE);   /* Page added successfully */
  10042.   else
  10043.     return (FALSE);  /* Something failed */
  10044. }
  10045.  
  10046. New pages for an object's Settings notebook can be placed at the top or bottom 
  10047. of pages inherited from the object's ancestor classes. By calling 
  10048. parent_wpAddSettingsPages before calling the new wpAddAnotherPage, the new page 
  10049. is added to the top of the Settings notebook, above pages inherited from 
  10050. ancestor classes. If the sequence is reversed, the new page is added to the 
  10051. bottom of the Settings notebook, below pages inherited from ancestor classes. 
  10052.  
  10053. When a new page is added to the Settings notebook, any changes made to the 
  10054. object's instance data can be refreshed from the file system, via 
  10055. wpCnrRefreshDetails. This instance method causes all currently visible 
  10056. RECORDCORE structures to be refreshed with the current object details. 
  10057.  
  10058.  
  10059. ΓòÉΓòÉΓòÉ 13.2.2. Removing Notebook Pages ΓòÉΓòÉΓòÉ
  10060.  
  10061. A page can be removed from an object's Settings notebook by overriding the 
  10062. ancestors' method that inserts it. The Settings notebook for YourObject class 
  10063. inherits the General, Window, MyPage_1, and MyPage_2 pages defined by its 
  10064. ancestors, MyObject and WPObject. YourObject class might have requirements for 
  10065. MyPage_1 but not MyPage_2. To remove MyPage_2 from YourObject's Settings 
  10066. notebook, YourObject must override the method inherited from MyObject that adds 
  10067. MyPage_2 to the Settings notebook, and return SETTINGS_PAGE_REMOVED without 
  10068. calling the parent method. The following sample code shows how to remove a page 
  10069. from an object's notebook: 
  10070.  
  10071. /*********************  Method Overrides  ****************************/
  10072.  
  10073. SOM_Scope ULONG SOMLINK YourObject_wpAddAnotherPage(
  10074.                            YourObject *somSelf HWND hwndNotebook)
  10075. {
  10076.   .
  10077.   .
  10078.   .
  10079.  
  10080.   /* Remove the page from the Settings notebook */
  10081.   return (SETTINGS_PAGE_REMOVED);
  10082. }
  10083.  
  10084. The same technique can be used to replace or to remove the General page from an 
  10085. object's Settings notebook by overriding wpAddSettingsPages and 
  10086. wpAddObjectGeneralPage. The override to wpAddSettingsPages calls 
  10087. wpAddObjectGeneralPage. To remove the General page, the override to 
  10088. wpAddObjectGeneralPage returns SETTINGS_PAGE_REMOVED without calling the parent 
  10089. method. To replace the General page with another page, the override to 
  10090. wpAddObjectGeneralPage calls wpInsertSettingsPage without calling the parent 
  10091. method. 
  10092.  
  10093.  
  10094. ΓòÉΓòÉΓòÉ 14. Object Usage: Usage Methods ΓòÉΓòÉΓòÉ
  10095.  
  10096. Every Workplace Shell object in the system has an in-use list. Object usage 
  10097. methods allow an object to keep track of its resources and how it is being 
  10098. used. This chapter provides information for using in-use lists that are 
  10099. associated with objects. 
  10100.  
  10101.  
  10102. ΓòÉΓòÉΓòÉ 14.1. About Usage Methods ΓòÉΓòÉΓòÉ
  10103.  
  10104. The in-use list provides the object with information such as: 
  10105.  
  10106.      The number of container windows into which the object has been inserted 
  10107.       (USAGE_RECORD) 
  10108.  
  10109.      The number of open views (contents and settings) of the object that 
  10110.       already exist (USAGE_OPENVIEW) 
  10111.  
  10112.      How much memory the object has allocated (USAGE_MEMORY) 
  10113.  
  10114.      How many awakened shadows there are of the object (USAGE_LINK) 
  10115.  
  10116.      Which application opened the object (USAGE_OPENFILE). Note that this 
  10117.       information only applies to data file objects. 
  10118.  
  10119.  All objects that the user interacts with are actually just records that have 
  10120.  been inserted into a container control. A container is an object, such as a 
  10121.  folder, which also has an in-use list. Because of the close relationship 
  10122.  between an object's in-use list and container objects, this chapter includes a 
  10123.  description of methods that are relevant to container usage as well as object 
  10124.  usage. Object Usage methods, as shown in the following table, allow an object 
  10125.  to keep track of its resources and how it is being used: 
  10126.  
  10127.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10128.   ΓöéMethod Name              ΓöéDescription                        Γöé
  10129.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10130.   ΓöéwpAddToObjUseList        ΓöéAdds an object to the list of      Γöé
  10131.   Γöé                         Γöéobjects in use by the object.      Γöé
  10132.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10133.   ΓöéwpAssertObjectMutexSem   ΓöéThis instance method verifies that Γöé
  10134.   Γöé                         Γöéan object's mutex semaphore is heldΓöé
  10135.   Γöé                         Γöéfor the current thread.            Γöé
  10136.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10137.   ΓöéwpCnrDeleteUseItem       ΓöéDeletes the object's USAGE_RECORD  Γöé
  10138.   Γöé                         Γöéuse-item for the specified         Γöé
  10139.   Γöé                         Γöécontainer.                         Γöé
  10140.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10141.   ΓöéwpDeleteFromObjUseList   ΓöéDeletes an object from the list of Γöé
  10142.   Γöé                         Γöéobjects in use by the object.      Γöé
  10143.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10144.   ΓöéwpFindUseItem            ΓöéRetrieves an object from the list  Γöé
  10145.   Γöé                         Γöéof objects in use by the object.   Γöé
  10146.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10147.   ΓöéwpFindViewItem           ΓöéRetrieves a USAGE_OPENVIEW item    Γöé
  10148.   Γöé                         Γöéfrom the list of items in use by   Γöé
  10149.   Γöé                         Γöéthe object.                        Γöé
  10150.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10151.   ΓöéwpIsLocked               ΓöéTells you whether the object is    Γöé
  10152.   Γöé                         Γöélocked or not.                     Γöé
  10153.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10154.   ΓöéwpLockObject             ΓöéIncreases the lock counter for the Γöé
  10155.   Γöé                         Γöéobject. Objects that are locked    Γöé
  10156.   Γöé                         Γöéwill not be made dormant.          Γöé
  10157.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10158.   ΓöéwpReleaseObjectMutexSem  ΓöéReleases the mutex semaphore for anΓöé
  10159.   Γöé                         Γöéobject. Each object has associated Γöé
  10160.   Γöé                         Γöéwith it a mutex semaphore that can Γöé
  10161.   Γöé                         Γöébe used to serialize access to     Γöé
  10162.   Γöé                         Γöéresources.                         Γöé
  10163.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10164.   ΓöéwpRequestObjectMutexSem  ΓöéRequests the mutex semaphore for anΓöé
  10165.   Γöé                         Γöéobject. Each object has associated Γöé
  10166.   Γöé                         Γöéwith it a mutex semaphore that can Γöé
  10167.   Γöé                         Γöébe used to serialize access to     Γöé
  10168.   Γöé                         Γöéresources.                         Γöé
  10169.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10170.   ΓöéwpUnlockObject           ΓöéUnlocks the object so that it can  Γöé
  10171.   Γöé                         Γöébe made dormant.                   Γöé
  10172.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10173.  
  10174.  The in-use list is a linked list of USEITEM data structures. It consists of an 
  10175.  item type and a pointer to the next USEITEM data structure, immediately 
  10176.  followed by an item type-specific data structure. The types of items that can 
  10177.  be added to an object's in-use list and the type-specific data structures that 
  10178.  follow each USEITEM data structure are shown in the following table: 
  10179.  
  10180.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10181.   ΓöéItem           ΓöéStructure ΓöéDescription                        Γöé
  10182.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10183.   ΓöéUSAGE_LINK     ΓöéLINKITEM  ΓöéA shadow of the object has been    Γöé
  10184.   Γöé               Γöé          Γöéawakened.                          Γöé
  10185.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10186.   ΓöéUSAGE_MEMORY   ΓöéMEMORYITEMΓöéMemory has been allocated by       Γöé
  10187.   Γöé               Γöé          ΓöéwpAllocMem.                        Γöé
  10188.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10189.   ΓöéUSAGE_OPENFILE ΓöéVIEWFILE  ΓöéThe object (if a data file) has    Γöé
  10190.   Γöé               Γöé          Γöébeen opened.                       Γöé
  10191.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10192.   ΓöéUSAGE_OPENVIEW ΓöéVIEWITEM  ΓöéA view of the object has been      Γöé
  10193.   Γöé               Γöé          Γöéopened.                            Γöé
  10194.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10195.   ΓöéUSAGE_RECORD   ΓöéRECORDITEMΓöéThe object has been inserted into aΓöé
  10196.   Γöé               Γöé          Γöécontainer window.                  Γöé
  10197.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10198.  
  10199.  
  10200. ΓòÉΓòÉΓòÉ 14.2. Using Usage Methods ΓòÉΓòÉΓòÉ
  10201.  
  10202. This section describes the different usage methods along with explaining how 
  10203. each of them relate to an in-use item. 
  10204.  
  10205.  
  10206. ΓòÉΓòÉΓòÉ 14.2.1. Adding Items to the Object's In-Use List ΓòÉΓòÉΓòÉ
  10207.  
  10208. The wpAddToObjUseList method adds items to the object's in-use list. When an 
  10209. object's memory is allocated, wpAllocMem calls wpAddToObjUseList to add a 
  10210. USAGE_MEMORY item to the object's in-use list. The allocated memory immediately 
  10211. follows the MEMORYITEM data structure. The following figure shows the syntax of 
  10212. the MEMORYITEM data structure: 
  10213.  
  10214. typedef struct _MEMORYITEM
  10215. {
  10216.   ULONG   cbBuffer;   /* Number of bytes in memory block */
  10217. }MEMORYITEM;
  10218.  
  10219. The wpOpen method calls wpAddToObjUseList to add a USAGE_OPENVIEW item to the 
  10220. object's in-use list. The wpSwitchTo method scans the in-use list for 
  10221. USAGE_OPENVIEW items to give focus to an already existing view. In general, 
  10222. wpViewObject is used instead of wpOpen because wpViewObject considers the 
  10223. setting in the Object open behavior group-box control on the Window page of the 
  10224. Settings notebook, and calls either  wpOpen or wpSwitchTo. The following figure 
  10225. shows the syntax of the VIEWITEM data structure: 
  10226.  
  10227. typedef struct _VIEWITEM
  10228. {
  10229.   ULONG   view;              /* Object view that this represents */
  10230.   LHANDLE handle;            /* Open handle                      */
  10231.   ULONG ulViewState;         /* View state flags                 */
  10232.   HWND hwndCnr;              /* Used only by system              */
  10233.   PMINIRECORDCORE pRecord;   /* Used only by system              */
  10234. }VIEWITEM;
  10235.  
  10236. When wpSetLinkToObject is called to link a shadow to the object it points to, 
  10237. wpAddToObjUseList is called to add the USAGE_LINK item to the original object's 
  10238. in-use list. The following figure shows the syntax of the LINKITEM data 
  10239. structure: 
  10240.  
  10241. typedef struct _LINKITEM
  10242. {
  10243.   WPObject *LinkObj;         /* The link object  */
  10244. }LINKITEM;
  10245.  
  10246. When a data file is opened, its associated program is started and a 
  10247. USAGE_OPENFILE use-item is added to the data file's in-use list. The following 
  10248. figure shows the syntax of the VIEWFILE data structure: 
  10249.  
  10250. typedef struct _VIEWFILE
  10251. {
  10252.   ULONG   ulMenuId;          /* Menu id if association or menu page */
  10253.   LHANDLE handle;            /* Open handle                         */
  10254.   HWND    hwndCnr;           /* Used only by system                 */
  10255.   PMINIRECORDCORE pRecord;   /* Used only by system                 */
  10256. }VIEWFILE;
  10257.  
  10258.  
  10259. ΓòÉΓòÉΓòÉ 14.2.2. Removing Items from the Object's In-Use List ΓòÉΓòÉΓòÉ
  10260.  
  10261. When wpCnrInsertObject puts an object into a container window, its adds a 
  10262. USAGE_RECORD item to the object's in-use list. Conversely, when 
  10263. wpCnrRemoveObject is called, the USAGE_RECORD item is deleted from the object's 
  10264. in-use list and the object is removed from the container. The following figure 
  10265. shows the syntax of the RECORDITEM data structure: 
  10266.  
  10267. typedef struct _RECORDITEM
  10268. {
  10269.   HWND   hwndCnr;            /* Container into which object      */
  10270.                              /* is being inserted                */
  10271.   PMINIRECORDCORE pRecord;   /* Record pointer within container  */
  10272.   ULONG  ulUser;             /* For application use              */
  10273. }RECORDITEM;
  10274.  
  10275. Likewise, when wpFreeMem is called to free memory, it calls 
  10276. wpDeleteFromObjUseList to delete a USAGE_MEMORY item from the object's in-use 
  10277. list. 
  10278.  
  10279. When views are closed by the object's wpClose, wpDeleteFromObjUseList removes 
  10280. the applicable USAGE_OPENVIEW item from the object's in-use list. The 
  10281. wpCnrDeleteUseItem method deletes the USAGE_RECORD use-item for the specified 
  10282. container, but does not remove the object from the container. Use 
  10283. wpCnrRemoveObject to delete the USAGE_RECORD use-item and also to remove the 
  10284. object from the container. 
  10285.  
  10286.  
  10287. ΓòÉΓòÉΓòÉ 14.2.3. Increasing or Decreasing the Object's Lock Count ΓòÉΓòÉΓòÉ
  10288.  
  10289. The wpLockObject method increases the object's lock count by one. The 
  10290. wpUnlockObject method decreases the object's lock count by one. If the lock 
  10291. count is zero, the object can be made dormant. The wpIsLocked method returns 
  10292. TRUE if the object is locked. Otherwise, it returns FALSE. 
  10293.  
  10294.  
  10295. ΓòÉΓòÉΓòÉ 14.2.4. Finding an Object's In-Use Item ΓòÉΓòÉΓòÉ
  10296.  
  10297. You can use wpFindUseItem to determine how an object is being used. It searches 
  10298. an object's in-use list for items of a specified type and returns a pointer to 
  10299. the USEITEM data structure that matches that specified type. The wpFindViewItem 
  10300. method finds USAGE_OPENVIEW items in the use list. The following figure shows 
  10301. the syntax of the USEITEM data structure: 
  10302.  
  10303. typedef struct _USEITEM
  10304. {
  10305.   ULONG   type;                 /* Type of this item     */
  10306.   struct _USEITEM FAR *pNext;   /* Next item in use list */
  10307. }USEITEM;
  10308.  
  10309. The following sample code shows an example of how you can use the usage 
  10310. methods. It uses the wpFindUseItem and wpFindViewItem along with the 
  10311. USAGE_OPENVIEW item. 
  10312.  
  10313. SOMAny    *Object;
  10314. PVIEWITEM pViewItem;
  10315. PUSEITEM  pUseFile;
  10316. ULONG     ulView;
  10317. // Are there any open views of this object?
  10318. if (_wpFindUseItem(Object, USAGE_OPENVIEW, NULL))
  10319. {
  10320.   // Find any views of this object
  10321.   for (pViewItem = _wpFindViewItem(Object, VIEW_ANY, NULL);
  10322.        pViewItem;
  10323.        pViewItem = _wpFindViewItem(Object, VIEW_ANY, pViewItem))
  10324.   {
  10325.     // Is a program running?
  10326.     if (pViewItem->view == OPEN_RUNNING)
  10327.     {
  10328.       ulView = (ULONG)0;
  10329.  
  10330.       // Find any open file use-items
  10331.       for (pUseFile = _wpFindUseItem(Object, USAGE_OPENFILE, NULL);
  10332.            pUseFile;
  10333.            pUseFile = _wpFindUseItem(Object, USAGE_OPENFILE, pUseFile))
  10334.       {
  10335.         // Does the VIEWFILE's open handle match the VIEWITEM's open handle?
  10336.         if (((PVIEWFILE)(pUseFile+1))->handle == pViewItem->handle)
  10337.         {
  10338.           // Save the VIEWFILE's menu id
  10339.           ulView = ((PVIEWFILE)(pUseFile+1))->ulMenuId;
  10340.           break;
  10341.         }
  10342.       }
  10343.     }
  10344.   }
  10345. }
  10346.  
  10347.  
  10348. ΓòÉΓòÉΓòÉ 15. Object User Action: Pop-Up Menu Methods ΓòÉΓòÉΓòÉ
  10349.  
  10350. This chapter describes the pop-up context menus that can be used to invoke 
  10351. actions on Workplace Shell objects. It also provides an overview of how to 
  10352. create and manipulate the pop-up context menu for your Workplace Shell objects. 
  10353.  
  10354.  
  10355. ΓòÉΓòÉΓòÉ 15.1. About Pop-Up Menu Methods ΓòÉΓòÉΓòÉ
  10356.  
  10357. Pop-up menu methods support the actions that the user can perform on an object. 
  10358. These actions appear in a context or pop-up menu when the user presses button 2 
  10359. of the pointing device. A pop-up menu contains action choices for an object in 
  10360. its current context or state. The contents of a pop-up menu depends on the 
  10361. state of the object. 
  10362.  
  10363. Pop-up menus consist of a set of selectable items and any pull-down or 
  10364. conditional cascaded menus associated with them. In the following figure, Open, 
  10365. Settings, Open parent, Refresh now, and so on, are items in the object's 
  10366. primary pop-up menu. Icon, Tree, and Details are items in the Open pull-down or 
  10367. conditional cascaded menu. 
  10368.  
  10369. Conditional cascaded menus have mini-push buttons displayed next to the pop-up 
  10370. menu item. When the user selects the mini-push button, the pull-down menu is 
  10371. displayed. As shown in the above figure, Open, Help, and Sort have mini-push 
  10372. buttons that are represented by a right arrow () surrounded by a square box. 
  10373. If the user selects one of these three pop-up menu items, a default action 
  10374. listed in the submenu is performed. The default action is represented by a 
  10375. check mark. The default action for the Open item is Icon view, the Help item is 
  10376. General help, and the Sort item is Name. This submenu is called a conditional 
  10377. cascaded menu because it is displayed only if the user selects the mini-push 
  10378. button. 
  10379.  
  10380. Like Settings notebook pages, pop-up menus are inherited from a class' ancestor 
  10381. classes. This means that they include pop-up menu items that ancestor classes 
  10382. have added to or removed from the pop-up menu inherited from WPObject. The 
  10383. pop-up methods permit you to add new menu items to or remove menu items from 
  10384. the pop-up menu inherited from an object's ancestor classes, as shown in the 
  10385. following table: 
  10386.  
  10387. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10388. ΓöéMethod                   ΓöéDescription                        Γöé
  10389. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10390. ΓöéwpAddUserItemsToPopupMenuΓöéAdds user-defined items to the     Γöé
  10391. Γöé                         Γöépopup menu.                        Γöé
  10392. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10393. ΓöéwpFilterMenu             ΓöéFilters out options from the       Γöé
  10394. Γöé                         Γöéobject's pop-up menu that do not   Γöé
  10395. Γöé                         Γöéapply.  (OS/2 Version 4 or higher.)Γöé
  10396. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10397. ΓöéwpFilterPopupMenu        ΓöéFilters out options from the       Γöé
  10398. Γöé                         Γöéobject's pop-up menu that do not   Γöé
  10399. Γöé                         Γöéapply.                             Γöé
  10400. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10401. ΓöéwpInsertMenuItems        ΓöéInserts items into the object's    Γöé
  10402. Γöé                         Γöépop-up menu.  (OS/2 Version 4 or   Γöé
  10403. Γöé                         Γöéhigher.)                           Γöé
  10404. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10405. ΓöéwpInsertPopupMenuItems   ΓöéInserts items into the object's    Γöé
  10406. Γöé                         Γöépop-up menu.                       Γöé
  10407. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10408. ΓöéwpModifyMenu             ΓöéAdds new options to the object's   Γöé
  10409. Γöé                         Γöépop-up menu.  (OS/2 Version 4 or   Γöé
  10410. Γöé                         Γöéhigher.)                           Γöé
  10411. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10412. ΓöéwpModifyPopupMenu        ΓöéAdds new options to the object's   Γöé
  10413. Γöé                         Γöépop-up menu.                       Γöé
  10414. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10415. ΓöéwpSetMenuStyle           ΓöéSets the menu style to be either   Γöé
  10416. Γöé                         Γöélong or short.                     Γöé
  10417. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10418.  
  10419. When the user requests an object's pop-up menu, the Workplace Shell builds it 
  10420. by calling the object's wpFilterPopupMenu and wpModifyPopupMenu. The 
  10421. wpInsertPopupMenuItems method is called by an override to wpModifyPopupMenu to 
  10422. add new options to an object's pop-up menu. 
  10423.  
  10424.  
  10425. ΓòÉΓòÉΓòÉ 15.1.1. Support for User Selection of Standard Pop-Up Menu Items ΓòÉΓòÉΓòÉ
  10426.  
  10427. When the user selects a standard action from a pop-up menu, the Workplace Shell 
  10428. calls one of the pop-up menu methods shown in the following table: 
  10429.  
  10430. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10431. ΓöéMethod Name         ΓöéDescription                             Γöé
  10432. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10433. ΓöéwpAppendObject      ΓöéAppends a file system object to another Γöé
  10434. Γöé                    Γöéfile system object.                     Γöé
  10435. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10436. ΓöéwpClose             ΓöéCloses all open views of an object.     Γöé
  10437. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10438. ΓöéwpCopyObject        ΓöéCreates a new copy of the object.       Γöé
  10439. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10440. ΓöéwpCreateFromTemplateΓöéCreates an object from a template.      Γöé
  10441. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10442. ΓöéwpCreateShadowObjectΓöéCreates a shadow of an object.          Γöé
  10443. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10444. ΓöéwpDelete            ΓöéDeletes an object and prompts for       Γöé
  10445. Γöé                    Γöéconfirmation, if necessary.             Γöé
  10446. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10447. ΓöéwpDisplayHelp       ΓöéDisplays a help panel.                  Γöé
  10448. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10449. ΓöéwpHide              ΓöéHides or minimizes open views of an     Γöé
  10450. Γöé                    Γöéobject.                                 Γöé
  10451. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10452. ΓöéwpMoveJobObject     ΓöéMoves a print job to a different        Γöé
  10453. Γöé                    Γöéprinter.                                Γöé
  10454. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10455. ΓöéwpMoveObject        ΓöéMoves the object to a different         Γöé
  10456. Γöé                    Γöélocation.                               Γöé
  10457. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10458. ΓöéwpOpen              ΓöéOpens a view of the object.             Γöé
  10459. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10460. ΓöéwpPrintObject       ΓöéPrints a view of the object.            Γöé
  10461. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10462. ΓöéwpReplaceObject     ΓöéReplaces an object in another folder.   Γöé
  10463. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10464. ΓöéwpRestore           ΓöéRestores hidden or minimized views of anΓöé
  10465. Γöé                    Γöéobject.                                 Γöé
  10466. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10467.  
  10468.  
  10469. ΓòÉΓòÉΓòÉ 15.1.2. Open Views ΓòÉΓòÉΓòÉ
  10470.  
  10471. Objects can have open actions or open views associated with them. Open views 
  10472. typically are the views of an object, for example, Icon, Tree, Details, and 
  10473. Settings. Open views, for data file objects, also include programs or program 
  10474. references that the user has associated with the object. Open views are 
  10475. displayed when the user selects the cascaded mini-push button that appears next 
  10476. to the Open action on the pop-up menu. The user then can select the default 
  10477. open view or any of the open views listed in the conditional cascaded menu. The 
  10478. Workplace Shell defines a set of predefined open views, as shown in the 
  10479. following table: 
  10480.  
  10481. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10482. ΓöéView                ΓöéDescription                             Γöé
  10483. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10484. ΓöéOPEN_CONTENTS       ΓöéOpens content view.                     Γöé
  10485. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10486. ΓöéOPEN_DEFAULT        ΓöéOpens default view.                     Γöé
  10487. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10488. ΓöéOPEN_DETAILS        ΓöéOpens Details view.                     Γöé
  10489. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10490. ΓöéOPEN_HELP           ΓöéOpens help view.                        Γöé
  10491. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10492. ΓöéOPEN_RUNNING        ΓöéExecutes object.                        Γöé
  10493. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10494. ΓöéOPEN_SETTINGS       ΓöéOpens Settings notebook.                Γöé
  10495. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10496. ΓöéOPEN_TREE           ΓöéOpens Tree view.                        Γöé
  10497. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10498. ΓöéOPEN_USER           ΓöéOpens class-specific view (value greaterΓöé
  10499. Γöé                    Γöéthan OPEN_USER)                         Γöé
  10500. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10501.  
  10502. Some of the predefined open views are meaningful only to certain Workplace 
  10503. Shell classes: 
  10504.  
  10505.      OPEN_RUNNING is meaningful only to a program or program reference object 
  10506.  
  10507.      OPEN_TREE is meaningful only to file system objects such as folders, 
  10508.       drives and directories. 
  10509.  
  10510.  Workplace Shell classes can define new open views for their objects by: 
  10511.  
  10512.    1. Adding the New view menu item to the Open submenu. 
  10513.  
  10514.    2. Overriding wpMenuItemSelected to support user selection of the New view 
  10515.       menu item. 
  10516.  
  10517.    3. Overriding wpOpen to open the New view. 
  10518.  
  10519.    4. Creating and opening a standard window for the New view by calling 
  10520.       WinCreateStdWindow. 
  10521.  
  10522.       Note:  The preferred method for displaying application views of an object 
  10523.              is for the object to start a separate process, using DosExecPgm, 
  10524.              for the application. This approach moves the larger part of the 
  10525.              application code out of the Workplace Shell's process, thus 
  10526.              conserving the its resources. It also helps prevent a misbehaved 
  10527.              application from potentially interfering with the execution of the 
  10528.              Workplace Shell. 
  10529.  
  10530.    5. Adding a USAGE_VIEW item to the object's in-use list by calling 
  10531.       wpAddToObjUseList. 
  10532.  
  10533.    6. Registering the New view by calling wpRegisterView. 
  10534.  
  10535.  Note:  The Sample Code for Pop-Up Menu Methods is a complete program that 
  10536.         demonstrates how to define and open a new open view. 
  10537.  
  10538.  
  10539. ΓòÉΓòÉΓòÉ 15.2. Using Pop-Up Menu Methods ΓòÉΓòÉΓòÉ
  10540.  
  10541. This section describes the following: 
  10542.  
  10543.      Adding and removing standard pop-up menu items 
  10544.  
  10545.      Adding and removing items to a pop-up menu inherited from an object's 
  10546.       ancestors 
  10547.  
  10548.      Adding conditional cascaded menus to a pop-up menu 
  10549.  
  10550.      Supporing user selection of new pop-up menu items. 
  10551.  
  10552.  Note:  A complete program is provided to demonstrate how to customize a 
  10553.         Workplace Shell pop-up menu. The program is illustrated in Sample Code 
  10554.         for Pop-Up Menu Methods. 
  10555.  
  10556.  
  10557. ΓòÉΓòÉΓòÉ 15.2.1. Adding and Removing Standard Pop-Up Menu Items ΓòÉΓòÉΓòÉ
  10558.  
  10559. The pop-up menu of a Workplace Shell object consists of a subset of the 
  10560. standard pop-up menu items and any new menu items defined for the object's 
  10561. class or inherited from other ancestors. The WPObject class defines a set of 
  10562. standard pop-up menu items that are inherited by all Workplace Shell objects. 
  10563. The WPDesktop, WPFolder, WPPalette, and WPProgram Workplace Shell classes 
  10564. define standard pop-up menu items for their descendants. Each standard pop-up 
  10565. menu item is associated with a flag, as shown in the following table: 
  10566.  
  10567. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10568. ΓöéClass               ΓöéItem Flag           ΓöéDescription         Γöé
  10569. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10570. ΓöéWPDesktop           ΓöéCTXT_LOCKUP         ΓöéOpen Lockup now     Γöé
  10571. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10572. ΓöéCTXT_SHUTDOWN       ΓöéOpen Shut down      Γöé                    Γöé
  10573. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10574. ΓöéWPFolder            ΓöéCTXT_ARRANGE        ΓöéOpen Arrange        Γöé
  10575. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10576. ΓöéCTXT_DETAILS        ΓöéOpen Details view   Γöé                    Γöé
  10577. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10578. ΓöéCTXT_FIND           ΓöéOpen Find dialog    Γöé                    Γöé
  10579. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10580. ΓöéCTXT_ICON           ΓöéOpen Icon view      Γöé                    Γöé
  10581. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10582. ΓöéCTXT_SELECT         ΓöéOpen Select         Γöé                    Γöé
  10583. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10584. ΓöéCTXT_SORT           ΓöéOpen Sort dialog    Γöé                    Γöé
  10585. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10586. ΓöéCTXT_TREE           ΓöéOpen Tree view      Γöé                    Γöé
  10587. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10588. ΓöéWPObject            ΓöéCTXT_ARRANGE        ΓöéOpen Arrange        Γöé
  10589. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10590. ΓöéCTXT_CLOSE          ΓöéClose               Γöé                    Γöé
  10591. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10592. ΓöéCTXT_COPY           ΓöéCopy                Γöé                    Γöé
  10593. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10594. ΓöéCTXT_CRANOTHER      ΓöéCreate another      Γöé                    Γöé
  10595. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10596. ΓöéCTXT_DELETE         ΓöéDelete              Γöé                    Γöé
  10597. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10598. ΓöéCTXT_DETAILS        ΓöéOpen Details view   Γöé                    Γöé
  10599. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10600. ΓöéCTXT_HELP           ΓöéHelp                Γöé                    Γöé
  10601. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10602. ΓöéCTXT_ICON           ΓöéOpen Icon view      Γöé                    Γöé
  10603. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10604. ΓöéCTXT_LINK           ΓöéCreate shadow       Γöé                    Γöé
  10605. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10606. ΓöéCTXT_LOCKUP         ΓöéOpen Lockup dialog  Γöé                    Γöé
  10607. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10608. ΓöéCTXT_MOVE           ΓöéMove                Γöé                    Γöé
  10609. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10610. ΓöéCTXT_NEW            ΓöéCreate another      Γöé                    Γöé
  10611. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10612. ΓöéCTXT_OPEN           ΓöéOpen                Γöé                    Γöé
  10613. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10614. ΓöéCTXT_PALETTE        ΓöéOpen Palette        Γöé                    Γöé
  10615. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10616. ΓöéCTXT_PICKUP         ΓöéPick up an object   Γöé                    Γöé
  10617. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10618. ΓöéCTXT_PRINT          ΓöéPrint               Γöé                    Γöé
  10619. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10620. ΓöéCTXT_PROGRAM        ΓöéOpen program        Γöé                    Γöé
  10621. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10622. ΓöéCTXT_PUTDOWN        ΓöéPut an object down  Γöé                    Γöé
  10623. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10624. ΓöéCTXT_REFRESH        ΓöéRefresh             Γöé                    Γöé
  10625. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10626. ΓöéCTXT_SELECT         ΓöéOpen Select         Γöé                    Γöé
  10627. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10628. ΓöéCTXT_SETTINGS       ΓöéOpen Settings       Γöé                    Γöé
  10629. Γöé                    Γöénotebook            Γöé                    Γöé
  10630. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10631. ΓöéCTXT_SHADOW         ΓöéCreate shadow       Γöé                    Γöé
  10632. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10633. ΓöéCTXT_SHUTDOWN       ΓöéOpen Shut down      Γöé                    Γöé
  10634. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10635. ΓöéCTXT_SORT           ΓöéOpen Sort dialog    Γöé                    Γöé
  10636. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10637. ΓöéCTXT_SWITCHTO       ΓöéSwitch to           Γöé                    Γöé
  10638. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10639. ΓöéCTXT_TREE           ΓöéOpen Tree view      Γöé                    Γöé
  10640. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10641. ΓöéCTXT_WINDOW         ΓöéWindow              Γöé                    Γöé
  10642. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10643. ΓöéWPPalette           ΓöéCTXT_PALETTE        ΓöéOpen palette        Γöé
  10644. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10645. ΓöéWPProgram           ΓöéCTXT_PROGRAM        ΓöéOpen program        Γöé
  10646. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10647.  
  10648. Workplace Shell classes can add or delete standard pop-up menu items from their 
  10649. pop-up menu by overriding wpFilterPopupMenu. The wpFilterPopupMenu method 
  10650. returns the flags that represent the standard pop-up menu items for the object. 
  10651. By removing a standard menu item from the pop-up menu, the override to 
  10652. wpFilterPopupMenu masks the flag that corresponds to the item being removed 
  10653. from the flags that represent the standard pop-up menu items inherited from the 
  10654. object's parent. For example, suppose that printing MyObject has no meaning. To 
  10655. remove the Print option from MyObject's pop-up menu, wpFilterPopupMenu is 
  10656. overridden as shown in the following figure: 
  10657.  
  10658. /************************* Method Overrides ****************************/
  10659.  
  10660. /* Filters out any options from the pop-up menu that don't apply */
  10661. SOM_Scope ULONG SOMLINK MyObject_wpFilterPopupMenu
  10662.    (MyObject *somSelf,ULONG ulFlags, HWND hwndCnr, BOOL32 fMultiSelect)
  10663.  
  10664. {
  10665.   MyObjectData *somThis = MyObjectGetData(somSelf);
  10666.   MyObjectMethodDebug("MyObject","MyObject_wpFilterPopupMenu");
  10667.  
  10668.   /* Don't allow anyone to print MyObject  */
  10669.   return(parent_wpFilterPopupMenu(somSelf,ulFlags,hwndCnr,fMultiSelect)
  10670.                                   & ~CTXT_PRINT);
  10671. }
  10672.  
  10673. The flags that represent the standard pop-up menu items of MyObject's parent 
  10674. class are returned from the call to parent_wpFilterPopupMenu. To remove the 
  10675. Print option from MyObject's pop-up menu, these flags are joined to the 
  10676. complement of CTXT_PRINT using the AND logical operand. Conversely, if the 
  10677. pop-up menu of MyObject's parent class did not include the Print option, the 
  10678. Print option can be added to MyObject's pop-up menu by joining these flags to 
  10679. CTXT_PRINT using the OR logical operand. 
  10680.  
  10681. Note:  An object's pop-up menu is inherited from its ancestors. To ensure that 
  10682.        calls to wpFilterPopupMenu belonging to the object's ancestors do not 
  10683.        add the menu item after it is deleted, or remove the menu item after it 
  10684.        is added, the parent_wpFilterPopupMenu is called first. 
  10685.  
  10686.  
  10687. ΓòÉΓòÉΓòÉ 15.2.2. Adding and Removing Class Items to a Pop-Up Menu ΓòÉΓòÉΓòÉ
  10688.  
  10689. New items are added to the pop-up menu inherited from an object's ancestors by 
  10690. overriding the object's wpModifyPopupMenu and calling wpInsertPopupMenuItems. 
  10691. For example, to add New item to MyObject's pop-up menu, the new menu item is 
  10692. defined in a resource file in the same manner as menus are defined in PM 
  10693. programs. An ID is assigned to the new menu and to the menu item, as shown in 
  10694. the following sample code: 
  10695.  
  10696. #define ID_MOREITEMS  WPMENUID_USER+1
  10697. #define ID_NEWITEMS   WPMENUID_USER+2
  10698.  
  10699. MENU ID_MOREITEMS LOADONCALL MOVEABLE DISCARDABLE
  10700.   BEGIN
  10701.     MENUITEM "New Item", ID_NEWITEMS
  10702.   END
  10703.  
  10704. Menu items can also be deleted by overriding wpModifyPopupMenu and by sending 
  10705. the MM_DELETEITEM message to the menu. 
  10706.  
  10707. User defined menu items must be greater than 0x6500. IDs for class-specific 
  10708. menus and menu items have a value greater than WPMENUID_USER, so they do not 
  10709. conflict with IDs for menus and menu items defined by the Workplace Shell 
  10710. classes, as shown in the following sample code: 
  10711.  
  10712. /* Add a new item to MyObject's pop-up menu */
  10713. SOM_Scope BOOL32 SOMLINK MyObject_wpModifyPopupMenu
  10714.   (MyObject *somSelf,HWND hwndMenu, HWND hwndCnr, ULONG ulPosition)
  10715.  
  10716. /* Remove an item from MyObject's pop-up menu */
  10717. WinSendMsg(hwndMenu,
  10718.            MM_DELETEITEM,
  10719.            MPFROM2SHORT(MY_ITEMID,FALSE),
  10720.            NULL);
  10721.  
  10722. {
  10723.   /* Insert new items in MyObject's primary menu */
  10724.   _wpInsertPopupMenuItemsA(somSelf,
  10725.                            hwndMenu,
  10726.                            ulPosition,
  10727.                            hmod,
  10728.                            ID_MOREITEMS,
  10729.                            WPMENUID_PRIMARY);
  10730.  
  10731.   /* Add the items inherited from MyObject's parent */
  10732.   return (parent_wpModifyPopupMenu(somSelf,
  10733.                                    hwndMenu,
  10734.                                    hwndCnr,
  10735.                                    ulPosition));
  10736. }
  10737.  
  10738. The wpInsertPopupMenuItems method requires: 
  10739.  
  10740.      A handle to the module where the menu resource is defined 
  10741.  
  10742.      The ID for the menu resource 
  10743.  
  10744.      The ID for the menu where the item is being inserted. 
  10745.  
  10746.  In the above sample code, ID_MOREITEMS is the ID for the menu resource that 
  10747.  defines the new menu item being added to the object's primary pop-up menu. 
  10748.  WPMENUID_PRIMARY is the ID for the object's primary pop-up menu, where New 
  10749.  item is being inserted. 
  10750.  
  10751.  An item can be added to a pop-up submenu or conditional cascaded menu by 
  10752.  specifying the ID for the conditional cascaded menu on the call to 
  10753.  wpInsertPopupMenuItems. For example, to add New item to the Open conditional 
  10754.  cascaded menu, the call to wpInsertPopupMenuItems is modified as shown in the 
  10755.  following sample code: 
  10756.  
  10757.   /* Insert new items in MyObject's Open submenu */
  10758.   _wpInsertPopupMenuItemsA(somSelf,
  10759.                            hwndMenu,
  10760.                            ulPosition,
  10761.                            hmod,
  10762.                            ID_MOREITEMS,
  10763.                            WPMENUID_OPEN);
  10764.  
  10765.  
  10766. ΓòÉΓòÉΓòÉ 15.2.3. Adding Conditional Cascaded Menus to a Pop-Up Menu ΓòÉΓòÉΓòÉ
  10767.  
  10768. Items on an object's pop-up menu sometimes have pull-down menus or submenus 
  10769. associated with them. In the previous sample codes, New item is not a pull-down 
  10770. menu. However, New item can be defined as a pull-down menu by defining it as a 
  10771. submenu in MyObject's resource file, as shown in the following sample code: 
  10772.  
  10773. #define ID_MOREITEMS  WPMENUID_USER+1
  10774. #define ID_NEWITEMS   WPMENUID_USER+2
  10775. #define ID_SUBITEM1   WPMENUID_USER+3
  10776. #define ID_SUBITEM2   WPMENUID_USER+4
  10777. #define ID_SUBITEM3   WPMENUID_USER+5
  10778.  
  10779. MENU ID_MOREITEMS LOADONCALL MOVEABLE DISCARDABLE
  10780. BEGIN
  10781.   SUBMENU "New Item", ID_NEWITEMS
  10782.   BEGIN
  10783.     MENUITEM  "SubItem_1"  ID_SUBITEM1
  10784.     MENUITEM  "SubItem_2"  ID_SUBITEM2
  10785.     MENUITEM  "SubItem_3"  ID_SUBITEM3
  10786.   END
  10787. END
  10788.  
  10789. The New item submenu is added to MyObject's primary pop-up menu using the same 
  10790. technique as shown in the "Adding Items to Pop-Up Menu Inherited from an 
  10791. Object's Ancestors" section. For the Workplace Shell to display the submenu as 
  10792. a conditional cascaded menu with the mini-push button and default selection, 
  10793. the menu's style and default selection must be set, as shown in the following 
  10794. sample code: 
  10795.  
  10796. /**********************  Method Override  ******************************/
  10797.  
  10798. /* Add a new item to MyObject's pop-up menu  */
  10799. SOM_SCOPE BOOL32 SOMLINK MyObject_wpModifyPopupMenu
  10800.    (MyObject *somSelf, HWND hwndMenu, HWND hwndCnr, ULONG iPosition)
  10801.  
  10802. {
  10803.   .
  10804.   .
  10805.  
  10806.   MENUITEM mi;
  10807.   .
  10808.   .
  10809.  
  10810.   /* Get a handle to the New item submenu   */
  10811.   WinSendMsg(hwndMenu,
  10812.              MM_QUERYITEM,
  10813.              MPFROM2SHORT(ID_NEWITEMS),
  10814.              (MPARAM)&mi);
  10815.   hwndSubMenu = mi.hwndSubMenu;
  10816.  
  10817.   /* Query the menu's style  */
  10818.   ulstyle = WinQueryWindowULong(hwndSubMenu, QWL_STYLE);
  10819.  
  10820.   /* Add conditional cascaded capabilities to the existing menu style */
  10821.   ulstyle |= MS_CONDITIONALCASCADE;
  10822.  
  10823.   /* Set the menu style to include conditional cascaded capabilities  */
  10824.   WinSetWindowULong(hwndSubMenu, QWL_STYLE, ulstyle);
  10825.  
  10826.   /* Set the default selection in the submenu.  It must exist.  */
  10827.   WinSendMsg(hwndSubMenu,
  10828.              MM_SETDEFAULTITEMID,
  10829.              (MPARAM)ID_SUBITEM1, 0L);
  10830.   .
  10831.   .
  10832.  
  10833. }
  10834.  
  10835.  
  10836. ΓòÉΓòÉΓòÉ 15.2.4. Supporting User Selection of New Pop-Up Menu Items ΓòÉΓòÉΓòÉ
  10837.  
  10838. When a class defines new actions for its pop-up menu, it must provide for the 
  10839. processing of the actions when the user selects the action. This is done by 
  10840. overriding the following pop-up menu methods: 
  10841.  
  10842. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10843. ΓöéMethod                   ΓöéDescription                        Γöé
  10844. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10845. ΓöéwpMenuItemHelpSelected   ΓöéDisplays the help associated with  Γöé
  10846. Γöé                         Γöéclass-specific pop-up menu item.   Γöé
  10847. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10848. ΓöéwpMenuItemSelected       ΓöéProcesses class-specific pop-up    Γöé
  10849. Γöé                         Γöémenu item.                         Γöé
  10850. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10851.  
  10852. Using the previous sample code, MyObject supports SubItem_1 by overriding 
  10853. wpMenuItemSelected, as shown in the following sample code: 
  10854.  
  10855. /********************  Method Override  ********************************/
  10856.  
  10857. /* Process input from the extra menu option that we added */
  10858. SOM_Scope void SOMLINK MyObject_wpMenuItemSelected
  10859.   (MyObject *self, HWND hwndFrame, ULONG MenuID)
  10860.  
  10861. {
  10862.   .
  10863.   .
  10864.  
  10865.   /* Which of our menu items was selected?  */
  10866.   switch( MenuId )
  10867.   {
  10868.     case ID_SUBITEM1:
  10869.        .
  10870.        .
  10871.     case ID_SUBITEM2:
  10872.        .
  10873.        .
  10874.     case ID_SUBITEM3:
  10875.        .
  10876.        .
  10877.     case ID_SUBITEM4:
  10878.        .
  10879.        .
  10880.     default:
  10881.        parent_wpMenuItemSelected
  10882.   }
  10883. }
  10884.  
  10885. MyObject can support help for new pop-up menu items by overriding 
  10886. wpMenuItemHelpSelected in a similar manner. These help methods are explained in 
  10887. Object Aid: Help Methods. 
  10888.  
  10889.  
  10890. ΓòÉΓòÉΓòÉ 15.3. Sample Code for Pop-Up Menu Methods ΓòÉΓòÉΓòÉ
  10891.  
  10892. This section illustrates a complete pop-up menu sample program. The source code 
  10893. for a sample Hello application is provided here to demonstrate how to customize 
  10894. a Workplace Shell pop-up menu. The application creates a new class, Hello, from 
  10895. the WPDataFile class with a modified pop-up menu, and then creates an instance 
  10896. of the new class called MyHello. An instance of the Hello class will be just 
  10897. like a WPDataFile object with the following exceptions: 
  10898.  
  10899.      The Open submenu will have a Say Hello item. MyHello's primary menu will 
  10900.       have a Message Box item. The context menu will have the Move item 
  10901.       removed. The following figure shows MyHello object and its pop-up menu: 
  10902.  
  10903.      Selecting the Open Say Hello item or double clicking on the object will 
  10904.       cause a window to display the text "Hello, Workplace Shell.", as shown in 
  10905.       the following figure: 
  10906.  
  10907.      Double clicking on the Message Box item will display a message box with 
  10908.       information about this example, as shown in the following figure: 
  10909.  
  10910.  
  10911. ΓòÉΓòÉΓòÉ 15.3.1. Pop-Up Menu Application Sample Code ΓòÉΓòÉΓòÉ
  10912.  
  10913. The pop-up menu application includes the following files: 
  10914.  
  10915.  File Name           Description 
  10916.  
  10917.  HELLO.IDL           Class interface definition 
  10918.  
  10919.  HELLO.C             Source code 
  10920.  
  10921.  HELLO.RC            Resource code 
  10922.  
  10923.  HELLO.MAK           Hello make file for building the application 
  10924.  
  10925.  Following these files are three REXX files that register and deregister the 
  10926.  new class with the Workplace Shell, and create an instance of the class. 
  10927.  
  10928.  
  10929. ΓòÉΓòÉΓòÉ 15.3.1.1. Class Definition File for Hello ΓòÉΓòÉΓòÉ
  10930.  
  10931. The following sample illustrates the class interface definition file (IDL): 
  10932.  
  10933. //# Include the class definition file for the parent classes
  10934.  
  10935. #include <wpdataf.idl>
  10936. #include <somcls.idl>
  10937.  
  10938. interface M_Hello;   // Forward reference to metaclass
  10939.  
  10940. //#******************************************************************************
  10941. //#   Define the new class
  10942. //#******************************************************************************
  10943.  
  10944. interface Hello : WPDataFile
  10945. {
  10946. //
  10947. // CLASS: Hello
  10948. //
  10949. // CLASS HIERARCHY:
  10950. //
  10951. //     SOMObject
  10952. //       ΓööΓöÇΓöÇΓöÇWPObject
  10953. //             ΓööΓöÇΓöÇΓöÇWPFileSystem
  10954. //                   ΓööΓöÇΓöÇΓöÇWPDataFile
  10955. //                         ΓööΓöÇΓöÇΓöÇHello
  10956. //
  10957. // DESCRIPTION:
  10958. //
  10959. //    This is the sample class to demonstrate Workplace Shell menu
  10960. //    customization.
  10961. //
  10962. #ifdef __SOMIDL__
  10963. implementation
  10964. {
  10965.     //# Class modifiers
  10966.     externalstem   = hello;
  10967.     local;
  10968.     externalprefix = hlo_;
  10969.     majorversion   = 1;
  10970.     minorversion   = 2;
  10971.  
  10972.     filestem       = hello;
  10973.     metaclass      = M_Hello;
  10974.     callstyle      = idl;
  10975.     dllname        = "hello.dll";
  10976.  
  10977.     passthru C_h   =  ""
  10978.     "#define INCL_WIN"
  10979.     "#include <os2.h>"
  10980.     ""
  10981.     "/*"
  10982.     " *   The following user-defined pop-up menu items (ID_xxx) should"
  10983.     " *   be higher than WPMENUID_USER."
  10984.     " *"
  10985.     " *   The ID_OPENHELLO will become a submenu of the system's pop-up"
  10986.     " *   open menu id, WPMENUID_OPEN."
  10987.     " */"
  10988.     ""
  10989.     "#define ID_OPENHELLO   (WPMENUID_USER+1)  /* Menus to be added  */"
  10990.     "#define ID_MSGBOX      (WPMENUID_USER+2)"
  10991.     "#define IDM_OPENHELLO  (WPMENUID_USER+3)  /* Submenus of added menus */"
  10992.     "#define IDM_MSGBOX     (WPMENUID_USER+4)"
  10993.     "#define ID_FRAME       3000               /* Hello window frame ID */"
  10994.     ""
  10995.     "// The ID of the Hello window view. This is returned by the override"
  10996.     "// of wpclsQueryDefaultView to specify that the default view"
  10997.     "// is to open the Hello window. This ID MUST be the same as the ID of"
  10998.     "// the open menu item."
  10999.     ""
  11000.     "#define OPEN_HELLO     ID_OPENHELLO";
  11001.  
  11002. //#******************************************************************************
  11003. //#   Define overridden methods
  11004. //#******************************************************************************
  11005.  
  11006.     wpFilterPopupMenu: override;
  11007.  
  11008. // METHOD: wpFilterPopupMenu
  11009. //
  11010. // DESCRIPTION: Remove any menu items from the context
  11011. //              menu that don't apply.
  11012. //
  11013. // HOW TO OVERRIDE: No restrictions.
  11014. //
  11015. // NOTES:
  11016. //
  11017. //   This method is called when an objects' context menu has been requested
  11018. //   (i.e. right click or S-F10 on an object) before displaying the menu. It
  11019. //   is called before wpModifyPopupMenu.
  11020.  
  11021.     wpModifyPopupMenu: override;
  11022.  
  11023. // METHOD: wpModifyPopupMenu
  11024. //
  11025. // DESCRIPTION:  Add the menu items to the context menu.
  11026. //
  11027. // NOTES:
  11028. //
  11029. //   This method is called when an objects' context menu has been requested
  11030. //   (i.e. right click or S-F10 on an object) before displaying the menu. It
  11031. //   is called after wpFilterPopupMenu.
  11032.  
  11033.     wpMenuItemSelected: override;
  11034.  
  11035. // METHOD: wpMenuItemSelected
  11036. //
  11037. // DESCRIPTION: Processes input from the menu options that was added.
  11038. //
  11039. // NOTES:
  11040. //
  11041. //   This method is called when an item in an objects' context menu has been
  11042. //   selected.
  11043.  
  11044.     wpOpen: override;
  11045.  
  11046. // METHOD: wpOpen
  11047. //
  11048. // DESCRIPTION: Opens the Hello Workplace Shell window.
  11049. //
  11050. // NOTES:
  11051. //
  11052. //   This method is called when a new open view of an object is needed,
  11053. //   i.e. when an item in an object's Open submenu has been selected or
  11054. //   when an object is double clicked on.  This is equivalent to selecting
  11055. //   the default item in the object's Open submenu.
  11056. //
  11057. //   wpOpen should always open a new view. The Workplace Shell actually calls
  11058. //   wpViewObject first when an object is double clicked on or an open
  11059. //   submenu item is selected. wpViewObject will then call wpOpen if there
  11060. //   is currently no open view of the selected Open submenu item or if
  11061. //   mutliple concurrent views of the object are enabled.
  11062.  
  11063. };   /* End implementation */
  11064. #Endif /* __SOMIDL__ */
  11065. };
  11066.  
  11067. //#******************************************************************************
  11068. //#   Define the metaclass
  11069. //#******************************************************************************
  11070.  
  11071. interface M_Hello: M_WPDataFile
  11072. {
  11073.  
  11074. //#******************************************************************************
  11075. //#   Define metaclass methods
  11076. //#******************************************************************************
  11077.  
  11078.    HMODULE  clsQueryModuleHandle();
  11079.  
  11080. // METHOD: clsQueryModuleHandle
  11081. //
  11082. // DESCRIPTION:
  11083. //
  11084. //   Returns the module handle of this class.  If this is the
  11085. //   first invocation, DosQueryModuleHandle is called to save the handle
  11086. //   for future invocations.
  11087. //
  11088. // RETURN:
  11089. //
  11090. //   0              Unsuccessful
  11091. //   non-zero       Module handle
  11092. //
  11093. // NOTES:
  11094. //
  11095. //   This method is called when a new open view of an object is needed,
  11096. //   i.e. when an item in an object's Open submenu has been selected or
  11097. //   when an object is double clicked on.  This is equivalent to selecting
  11098. //   the default item in the object's Open submenu.
  11099. //
  11100.  
  11101. //#******************************************************************************
  11102. //#   Define metaclass data
  11103. //#******************************************************************************
  11104.  
  11105.    attribute HMODULE hmod;
  11106.  
  11107. #ifdef __SOMIDL__
  11108. implementation
  11109. {
  11110.     releaseorder: clsQueryModuleHandle;
  11111.  
  11112.     //# Class modifiers
  11113.     externalstem   = hello;
  11114.     local;
  11115.     externalprefix = hloM_;
  11116.     majorversion   = 1;
  11117.     minorversion   = 2;
  11118.     filestem       = hello;
  11119.     callstyle      = oidl;
  11120.     dllname        = "hello.dll";
  11121.  
  11122. //#******************************************************************************
  11123. //#   Define overridden metaclass methods
  11124. //#******************************************************************************
  11125.  
  11126.    wpclsQueryDefaultView: override;
  11127.  
  11128. // METHOD: wpclsQueryDefaultView
  11129. //
  11130. // DESCRIPTION: Returns the default view for a new instance
  11131. //              of this object.
  11132. //
  11133. // REMARKS:
  11134. //
  11135. //   Return the ID of the default view, OPEN_HELLO.
  11136. //   This ID must be the same as the ID of the open
  11137. //   submenu item, ID_OPENHELLO.
  11138. //
  11139. // NOTES:
  11140. //
  11141. //   This method is called to determine which view to open when an
  11142. //   object of class Hello is double clicked on.
  11143.  
  11144.    wpclsQueryTitle: override;
  11145.  
  11146. // METHOD: wpclsQueryTitle
  11147. //
  11148. // DESCRIPTION:  Return the string "Hello Workplace Shell".
  11149. //
  11150. // NOTES:
  11151. //
  11152. //   This method is called by the Workplace Shell to determine the object
  11153. //   title when an object of class Hello is created.
  11154. //
  11155.   }; /* End implementation */
  11156. #endif /* __SOMIDL__ */
  11157. };
  11158.  
  11159.  
  11160. ΓòÉΓòÉΓòÉ 15.3.1.2. Source Code for Hello ΓòÉΓòÉΓòÉ
  11161.  
  11162. The following sample illustrates the source code (C): 
  11163.  
  11164. /*
  11165.  *  This file was generated by the SOM Compiler and Emitter Framework.
  11166.  *  Generated using SOM Emitter emitctm: 2.40
  11167.  */
  11168.  
  11169. #ifndef SOM_Module_hello_Source
  11170. #define SOM_Module_hello_Source
  11171. #endif
  11172. #define Hello_Class_Source
  11173. #define M_Hello_Class_Source
  11174. #define INCL_DOS
  11175.  
  11176. #include "hello.ih"
  11177.  
  11178. MRESULT EXPENTRY ClientWinProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  11179.  
  11180. // Structure to pass the object pointer and
  11181. // use list item to the window procedure
  11182. typedef struct
  11183. {
  11184.    WPObject *self;     /* Pointer to the object    */
  11185.    USEITEM  UseItem;   /* Use list item header     */
  11186.    VIEWITEM ViewItem;  /* Open view use list item  */
  11187. } WINDOWDATA;
  11188. typedef WINDOWDATA *PWINDOWDATA;
  11189.  
  11190. /*
  11191.  * METHOD: wpFilterPopupMenu
  11192.  *
  11193.  * DESCRIPTION: Removes any menu items from the context menu that don't apply.
  11194.  *
  11195.  * HOW TO OVERRIDE: No restrictions.
  11196.  *
  11197.  * NOTES:
  11198.  *
  11199.  *   This method is called when an object's context menu has been requested
  11200.  *   (i.e. right click or S-F10 on an object) before displaying the menu. It
  11201.  *   is called before wpModifyPopupMenu.
  11202.  */
  11203. SOM_Scope ULONG  SOMLINK hlo_wpFilterPopupMenu(Hello somSelf,
  11204.                                                ULONG ulFlags,
  11205.                                                HWND hwndCnr,
  11206.                                                BOOL fMultiSelect)
  11207. {
  11208.     /* HelloData *somThis = HelloGetData(somSelf); */
  11209.     HelloMethodDebug("Hello","hlo_wpFilterPopupMenu");
  11210.  
  11211.     // Return the parent class' menu bitstring minus the "move bit"
  11212.     return (parent_wpFilterPopupMenu(somSelf,
  11213.                                      ulFlags,
  11214.                                      hwndCnr,
  11215.                                      fMultiSelect) & ~CTXT_MOVE);
  11216. }
  11217.  
  11218. /*
  11219.  * METHOD: wpModifyPopupMenu
  11220.  *
  11221.  * DESCRIPTION: Adds the menu items to the context menu.
  11222.  *
  11223.  * NOTES:
  11224.  *
  11225.  *   This method is called when an object's context menu has been requested
  11226.  *   (i.e. right click or S-F10 on an object) before displaying the menu. It
  11227.  *   is called after wpFilterPopupMenu.
  11228.  */
  11229.  
  11230. SOM_Scope BOOL  SOMLINK hlo_wpModifyPopupMenu(Hello somSelf,
  11231.                                               HWND hwndMenu,
  11232.                                               HWND hwndCnr, ULONG iPosition)
  11233.  
  11234. {
  11235.     HMODULE hmod;
  11236.     /* HelloData *somThis = HelloGetData(somSelf); */
  11237.     HelloMethodDebug("Hello","hlo_wpModifyPopupMenu");
  11238.  
  11239.     /* Get the module handle of the .DLL */
  11240.     hmod = _clsQueryModuleHandle(_Hello);
  11241.  
  11242.     /*
  11243.      *   Put the "Say Hello" submenu item in the Open submenu
  11244.      */
  11245.     _wpInsertPopupMenuItems(somSelf,          // Object
  11246.                             hwndMenu,         // Main context menu
  11247.                             0,                // Position to insert menu at
  11248.                                               // 0 = top of menu
  11249.                             hmod,             // Module of menu to insert
  11250.                             ID_OPENHELLO,     // Menu to insert
  11251.                             WPMENUID_OPEN);   // Submenu to insert menu in
  11252.  
  11253.     /*
  11254.      *   Put the "Product Info" menu item at the end of the main context menu
  11255.      */
  11256.     _wpInsertPopupMenuItems(somSelf,          // Object
  11257.                             hwndMenu,         // Main context menu
  11258.                             iPosition,        // Position to insert menu at
  11259.                                               // iPosition = next available
  11260.                             hmod,             // Module of menu to insert
  11261.                             ID_MSGBOX,        // Menu to insert
  11262.                             0);               // Submenu to insert menu in
  11263.                                               // 0 = main context menu
  11264.  
  11265.     return (parent_wpModifyPopupMenu(somSelf,
  11266.                                      hwndMenu,
  11267.                                      hwndCnr,
  11268.                                      iPosition));
  11269. }
  11270.  
  11271. /*
  11272.  * METHOD: wpMenuItemSelected
  11273.  *
  11274.  * DESCRIPTION:  Processes input from the menu options that was added.
  11275.  *
  11276.  * NOTES:
  11277.  *
  11278.  *   This method is called when an item in an objects' context menu has been
  11279.  *   selected.
  11280.  */
  11281.  
  11282. SOM_Scope BOOL  SOMLINK hlo_wpMenuItemSelected(Hello somSelf,
  11283.                                                HWND hwndFrame,
  11284.                                                ULONG ulMenuId)
  11285.  
  11286. {
  11287.     /* HelloData *somThis = HelloGetData(somSelf); */
  11288.     HelloMethodDebug("Hello","hlo_wpMenuItemSelected");
  11289.  
  11290.     switch(ulMenuId)
  11291.     {
  11292.        case IDM_OPENHELLO:
  11293.           /*
  11294.            *   Either the object was double clicked on or the Say Hello
  11295.            *   item on the Open submenu was selected.
  11296.            *
  11297.            *   We could call wpOpen here, but wpOpen will open a new view
  11298.            *   no matter what. wpViewObject only opens a new view if
  11299.            *   no open view exists or if mutliple concurrent views are enabled.
  11300.            *   Otherwise, it will give focus to the current open view.
  11301.            *
  11302.            *   wpViewObject should be used whenever possible instead of wpOpen
  11303.            *   to prevent creating multiple open views inadvertently.
  11304.            */
  11305.           _wpViewObject(somSelf,              // Object
  11306.                         NULLHANDLE,           // Workplace Shell
  11307.                                               // internal use only
  11308.                         OPEN_HELLO,           // View to open. This ID must be the
  11309.                                               // same as the menu ID ID_OPENHELLO
  11310.                         0);                   // parameter passed to wpOpen
  11311.           break;
  11312.  
  11313.        case IDM_MSGBOX:
  11314.        {
  11315.           // Message Box menu item was selected
  11316.           WinMessageBox(HWND_DESKTOP,
  11317.                         HWND_DESKTOP,
  11318.                         "Message box displayed from a Hello object's pop-up menu.",
  11319.                         "Workplace Message",
  11320.                         1,
  11321.                         MB_OK       |
  11322.                         MB_MOVEABLE |
  11323.                         MB_INFORMATION);
  11324.           break;
  11325.        }
  11326.  
  11327.        default:
  11328.           return parent_wpMenuItemSelected(somSelf, hwndFrame, ulMenuId);
  11329.     }
  11330.     return TRUE;  /* We processed it */
  11331. }
  11332.  
  11333. /*
  11334.  * METHOD: wpOpen
  11335.  *
  11336.  * DESCRIPTION:  Opens the Hello Workplace Shell window.
  11337.  *
  11338.  * NOTES:
  11339.  *
  11340.  *   This method is called when a new open view of an object is needed,
  11341.  *   i.e. when an item in an object's Open submenu has been selected or
  11342.  *   when an object is double clicked on.  This is equivalent to selecting
  11343.  *   the default item in the object's Open submenu.
  11344.  *
  11345.  *   wpOpen should always open a new view. The Workplace Shell actually
  11346.  *   calls wpViewObject first when an object is double clicked on or an Open
  11347.  *   submenu item is selected. wpViewObject will then call wpOpen if there
  11348.  *   is currently no open view of the selected Open submenu item or if
  11349.  *   mutliple concurrent views of the object are enabled.
  11350.  */
  11351.  
  11352. SOM_Scope HWND  SOMLINK hlo_wpOpen(Hello somSelf,
  11353.                                    HWND hwndCnr,
  11354.                                    ULONG ulView,
  11355.                                    ULONG param)
  11356.  
  11357. {
  11358.    /* HelloData *somThis = HelloGetData(somSelf); */
  11359.    HelloMethodDebug("Hello","hlo_wpOpen");
  11360.  
  11361.    switch (ulView)
  11362.    {
  11363.       case OPEN_HELLO:
  11364.       {
  11365.          // Request to open a Hello Workplace Shell window
  11366.          // Create a standard window
  11367.          HAB     hab;                         // Anchor block handle
  11368.          HWND hwndClient;                     // Client window handle
  11369.          HWND hwndFrame;                      // Frame window handle
  11370.          PWINDOWDATA pWindowData;
  11371.          ULONG flCreate;                      // Window creation flags
  11372.          hab = WinQueryAnchorBlock(HWND_DESKTOP);
  11373.  
  11374.          // Create the class, adding a user word to the window data to
  11375.          // anchor the object use list item for this open view
  11376.          WinRegisterClass(hab,
  11377.                           "hello",
  11378.                           ClientWinProc,
  11379.                           CS_SIZEREDRAW,
  11380.                           sizeof(*pWindowData));
  11381.  
  11382.          flCreate = FCF_SYSMENU       |
  11383.                     FCF_SIZEBORDER    |
  11384.                     FCF_TITLEBAR      |
  11385.                     FCF_MINMAX        |
  11386.                     FCF_SHELLPOSITION |
  11387.                     FCF_TASKLIST;
  11388.  
  11389.          hwndFrame = WinCreateStdWindow(HWND_DESKTOP,
  11390.                                         WS_VISIBLE,
  11391.                                         &flCreate,
  11392.                                         "hello",
  11393.                                         _wpQueryTitle(somSelf),
  11394.                                         0L,
  11395.                                         0,
  11396.                                         ID_FRAME,
  11397.                                         &hwndClient);
  11398.  
  11399.          if (hwndFrame)
  11400.          {
  11401.             WinSetFocus(HWND_DESKTOP, hwndFrame);
  11402.  
  11403.             // Now that we have created an open view, add the view to the
  11404.             // object's use list. This use list is used by wpViewObject and
  11405.             // wpClose to check for existing open views.
  11406.  
  11407.  
  11408.             // Get storage for and initialize a use list item
  11409.             pWindowData = (PWINDOWDATA) _wpAllocMem(somSelf,
  11410.                                                     sizeof(*pWindowData),
  11411.                                                     NULL);
  11412.             memset((PVOID) pWindowData, 0, sizeof(*pWindowData));
  11413.             pWindowData->self            = somSelf;
  11414.             pWindowData->UseItem.type    = USAGE_OPENVIEW;
  11415.             pWindowData->ViewItem.view   = OPEN_HELLO;
  11416.             pWindowData->ViewItem.handle = hwndFrame;
  11417.  
  11418.             // Add the use list item to the object's use list
  11419.             _wpAddToObjUseList(somSelf, &(pWindowData->UseItem));
  11420.  
  11421.             // Save the pointer to the use item in the window words so that
  11422.             // the window procedure can remove it from the list when the window
  11423.             // is closed
  11424.             WinSetWindowPtr(hwndClient, QWL_USER, pWindowData);
  11425.          }
  11426.          return hwndFrame;
  11427.       }
  11428.  
  11429.       // Some other view was requested. Pass the request on to the
  11430.       // parent (WPDataFile) class
  11431.       default:
  11432.          return (parent_wpOpen(somSelf, hwndCnr, ulView, param));
  11433.    }   /* end switch (ulView) */
  11434. }
  11435.  
  11436. /*
  11437.  * METHOD: clsQueryModuleHandle
  11438.  *
  11439.  * DESCRIPTION:
  11440.  *
  11441.  *   Returns the module handle of this class.  If this is the
  11442.  *   first invocation, DosQueryModuleHandle is called to save the handle
  11443.  *   for future invocations.
  11444.  *
  11445.  * RETURN:
  11446.  *
  11447.  *   0              Unsuccessful
  11448.  *   non-zero       Module handle
  11449.  *
  11450.  * NOTES:
  11451.  *
  11452.  *   This method is called when a new open view of an object is needed,
  11453.  *   i.e. when an item in an object's Open submenu has been selected or
  11454.  *   when an object is double clicked on. This is equivalent to selecting
  11455.  *   the default item in the object's Open submenu.
  11456.  */
  11457.  
  11458. SOM_Scope HMODULE  SOMLINK hloM_clsQueryModuleHandle(M_Hello somSelf)
  11459. {
  11460.     M_HelloData *somThis = M_HelloGetData(somSelf);
  11461.     M_HelloMethodDebug("M_Hello","hloM_clsQueryModuleHandle");
  11462.  
  11463.     //  Make sure we already have the module handle
  11464.     if (_hmod == NULLHANDLE)
  11465.     {
  11466.        zString zsPathName;
  11467.        somId   Id;
  11468.  
  11469.         //   Retrieve registered path name of the module (DLL)
  11470.         //   and query the module handle
  11471.        Id = somIdFromString("M_Hello");
  11472.        zsPathName = _somLocateClassFile(SOMClassMgrObject,
  11473.                                         Id,
  11474.                                         M_Hello_MajorVersion,
  11475.                                         M_Hello_MinorVersion);
  11476.        SOMFree(Id);
  11477.        DosQueryModuleHandle(zsPathName, &_hmod);
  11478.     }
  11479.     return (_hmod);
  11480. }
  11481.  
  11482. /*
  11483.  * METHOD: wpclsQueryDefaultView
  11484.  *
  11485.  * DESCRIPTION: Returns the default view for a new instance of this object.
  11486.  *
  11487.  * REMARKS:
  11488.  *
  11489.  *   Return the ID of the default view, OPEN_HELLO. This ID must be the
  11490.  *   same as the ID of the Open submenu item, ID_OPENHELLO.
  11491.  *
  11492.  * NOTES:
  11493.  *
  11494.  *   This method is called to determine which view to open when an object
  11495.  *   of class Hello is double clicked on.
  11496.  */
  11497.  
  11498. SOM_Scope ULONG  SOMLINK hloM_wpclsQueryDefaultView(M_Hello somSelf)
  11499. {
  11500.     /* M_HelloData *somThis = M_HelloGetData(somSelf); */
  11501.     M_HelloMethodDebug("M_Hello","hloM_wpclsQueryDefaultView");
  11502.  
  11503.     return OPEN_HELLO;
  11504. }
  11505.  
  11506. /*
  11507.  * METHOD: wpclsQueryTitle
  11508.  *
  11509.  * DESCRIPTION: Returns the string "Hello Workplace Shell".
  11510.  *
  11511.  * NOTES:
  11512.  *
  11513.  *   This method is called by the Workplace Shell to determine the object
  11514.  *   title when an object of class Hello is created.
  11515.  */
  11516.  
  11517. SOM_Scope PSZ  SOMLINK hloM_wpclsQueryTitle(M_Hello somSelf)
  11518. {
  11519.     // M_HelloData *somThis = M_HelloGetData(somSelf);
  11520.     M_HelloMethodDebug("M_Hello","hloM_wpclsQueryTitle");
  11521.  
  11522.     return "Hello Workplace Shell";
  11523. }
  11524.  
  11525. /*
  11526.  * FUNCTION: ClientWinProc
  11527.  *
  11528.  * DESCRIPTION: Window procedure for the Hello, Workplace Shell window.
  11529.  */
  11530.  
  11531. MRESULT EXPENTRY ClientWinProc (HWND hwnd,
  11532.                                 ULONG msg,
  11533.                                 MPARAM mp1,
  11534.                                 MPARAM mp2)
  11535.  
  11536. {
  11537.     BOOL  fSuccess;  // Return from function
  11538.     switch(msg)
  11539.     {
  11540.         case WM_PAINT:
  11541.         {
  11542.             HPS     hps;               // Cached PS
  11543.             RECTL   rcl;               // Window rectangle
  11544.             CHAR    sz[25];            // String
  11545.  
  11546.             hps      = WinBeginPaint (hwnd , (HPS)0, NULL);
  11547.             fSuccess = GpiErase (hps);
  11548.  
  11549.             WinQueryWindowRect (hwnd, &rcl);
  11550.             strcpy (sz, "Hello, Workplace Shell.");
  11551.             WinDrawText(hps,
  11552.                         strlen(sz),
  11553.                         sz,
  11554.                         &rcl,
  11555.                         CLR_BLACK,
  11556.                         CLR_WHITE,
  11557.                         DT_CENTER |
  11558.                         DT_VCENTER);
  11559.  
  11560.             fSuccess = WinEndPaint (hps);
  11561.             return (MRESULT) NULL;
  11562.         }
  11563.  
  11564.         case WM_CLOSE:
  11565.         {
  11566.            // Get the object pointer and the use list item from the window
  11567.            PWINDOWDATA pWindowData = (PWINDOWDATA) WinQueryWindowPtr(hwnd, QWL_USER);
  11568.  
  11569.            // Remove this window from the object's use list
  11570.            _wpDeleteFromObjUseList(pWindowData->self,&pWindowData->UseItem);
  11571.  
  11572.            // Free the use list item. Note that there is no need to supply a
  11573.            // length since this storage was allocated with wpAllocMem
  11574.            _wpFreeMem(pWindowData->self,(PBYTE)pWindowData);
  11575.  
  11576.            // Destroy the window and return
  11577.            WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
  11578.            return (MRESULT) NULL;
  11579.         }
  11580.  
  11581.         default:
  11582.            return WinDefWindowProc(hwnd, msg, mp1, mp2);
  11583.     }
  11584. }
  11585.  
  11586.  
  11587. ΓòÉΓòÉΓòÉ 15.3.1.3. Resource Code for Hello ΓòÉΓòÉΓòÉ
  11588.  
  11589. The following sample illustrates the resource code (RC): 
  11590.  
  11591. #include "hello.ih"
  11592.  
  11593. MENU ID_OPENHELLO LOADONCALL MOVEABLE DISCARDABLE
  11594. BEGIN
  11595.    MENUITEM "~Say Hello", IDM_OPENHELLO
  11596. END
  11597.  
  11598. MENU ID_MSGBOX LOADONCALL MOVEABLE DISCARDABLE
  11599. BEGIN
  11600.    MENUITEM "~Message Box", IDM_MSGBOX
  11601. END
  11602.  
  11603.  
  11604. ΓòÉΓòÉΓòÉ 15.3.1.4. Make File for Hello ΓòÉΓòÉΓòÉ
  11605.  
  11606. The following sample illustrates the make file (MAK): 
  11607.  
  11608. all:        hello.dll
  11609.  
  11610. hello.dll:  hello.obj hello.res
  11611.             link386 /co /noi /noe /m hello,hello.dll,,somtk pmwp.lib,hello.def;
  11612.             rc hello.res hello.dll
  11613.  
  11614. hello.obj:  hello.c
  11615.             icc /c /Ti /Kb /Gm /Ss /Ge- hello.c
  11616.  
  11617. hello.res:  hello.rc
  11618.             rc -r hello.rc
  11619.  
  11620.  
  11621. ΓòÉΓòÉΓòÉ 15.3.1.5. REXX Files for Hello ΓòÉΓòÉΓòÉ
  11622.  
  11623. The following shows the REXX command file for registering the Hello class: 
  11624.  
  11625. /* */
  11626. call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
  11627. call SysLoadFuncs
  11628. say  SysRegisterObjectClass("Hello", "C:\OS2\DLL\HELLO.DLL")
  11629.  
  11630. The following shows the REXX command file for creating an instance of the Hello 
  11631. class: 
  11632.  
  11633. /* */
  11634. call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
  11635. call SysLoadFuncs
  11636. say  SysCreateObject("Hello",,
  11637.                      "My Hello",,
  11638.                      "<WP_DESKTOP>",,
  11639.                      "OBJECTID=<MY_HELLO>")
  11640.  
  11641. The following shows the REXX command file for deregistering the Hello class: 
  11642.  
  11643. /* */
  11644. call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
  11645. call SysLoadFuncs
  11646. say  SysDeregisterObjectClass("Hello")
  11647.  
  11648.  
  11649. ΓòÉΓòÉΓòÉ 16. REXX Utility Workplace Shell Functions ΓòÉΓòÉΓòÉ
  11650.  
  11651. REXX combines the simplicity of a programming language such as BASIC with 
  11652. features that exist in more powerful languages such as C, PASCAL, or PL/1. Part 
  11653. of the success of REXX has been due in part to having been selected as the 
  11654. Systems Application Architecture Programming Language (SAA/PL). The purpose is 
  11655. to provide a common look and feel across all operating systems. This is 
  11656. important because CUA is the standard that the Workplace Shell uses which is 
  11657. also part of SAA. REXX provides the facility for the Workplace Shell to create, 
  11658. modify, and delete objects. This chapter describes the REXX functions and how 
  11659. to use them in Workplace Shell applications. 
  11660.  
  11661.  
  11662. ΓòÉΓòÉΓòÉ 16.1. About REXX Utility Functions ΓòÉΓòÉΓòÉ
  11663.  
  11664. The power of REXX is often overlooked by many people as to how much benefits 
  11665. one can receive by using a command based language. REXX which stands for 
  11666. restructured extended executor was created to offer an easy way to ask the 
  11667. operating system to perform a special task without writing hundreds or 
  11668. sometimes thousands of lines of computer code to do the same task. The 
  11669. simplicity of REXX is by far its strongest point along with its ease of use. 
  11670. REXX provides the facility for the Workplace Shell to create, modify, and 
  11671. delete objects in a very simplistic way. 
  11672.  
  11673. REXXUTIL is a dynamic link library (REXXUTIL.DLL) that provides specific 
  11674. functionality to the Workplace Shell, which allows manipulating Workplace Shell 
  11675. classes as well as objects. A complete description of the commands can be found 
  11676. in the OS/2 Command Reference or the online version which is located in the 
  11677. OS/2 Information folder. 
  11678.  
  11679. To use a REXXUTIL function in a REXX program, you must first register the 
  11680. function using RxFuncAdd. However, you have the choice of either registering 
  11681. one function using RxFuncAdd or you can register all functions by first 
  11682. registering SysLoadFuncs using RxFuncAdd. The following example shows how to 
  11683. register a single function: 
  11684.  
  11685. call RxFuncAdd 'SysSetObjectData', 'RexxUtil', 'SysSetObjectData'
  11686.  
  11687. The function SysSetObjectData is the only function in this case that is 
  11688. registered by RxFuncAdd. The following example shows how to register all of the 
  11689. functions using RxFuncAdd: 
  11690.  
  11691. call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  11692. call SysLoadFuncs
  11693.  
  11694. Using SysLoadFuncs allows all of the OS/2 sessions to use the REXXUTIL 
  11695. functions. 
  11696.  
  11697.  
  11698. ΓòÉΓòÉΓòÉ 16.2. Using REXX Utility Functions ΓòÉΓòÉΓòÉ
  11699.  
  11700. There are useful functions that pertain to the object oriented Workplace Shell. 
  11701. REXXUTIL provides useful functions that allow the creation, destruction, and 
  11702. the altering of the properties of objects. These functions are listed as 
  11703. follows: 
  11704.  
  11705.      SysCreateObject 
  11706.      SysDestroyObject 
  11707.      SysSetObjectData 
  11708.      SysSetIconData 
  11709.      SysRegisterObjectClass 
  11710.      SysDeregisterObjectClass 
  11711.      SysQueryClassList 
  11712.      SysGetEa 
  11713.      SysPutEa 
  11714.      SysIni 
  11715.  
  11716.  
  11717. ΓòÉΓòÉΓòÉ 16.2.1. Creating Objects ΓòÉΓòÉΓòÉ
  11718.  
  11719. The following figure shows the syntax of SysCreateObject: 
  11720.  
  11721. Syntax:  SysCreateObject(class_name,
  11722.                          title,
  11723.                          location,
  11724.                          <setup_string>,
  11725.                          <option>)
  11726.  
  11727. where
  11728.  
  11729. class_name       Name of the Workplace Shell class of which the object
  11730.                  is a member of, such as WPFolder.
  11731. title            New object's title.
  11732. location         Either an object ID, such as <WP_DESKTOP>, or a fully
  11733.                  qualified path name.
  11734. setup_string     A series of keynames that change the behavior of the
  11735.                  object.  The keynames are separated by a semicolons
  11736.                  and values are separated by commas.
  11737. option           An action to be taken if the object class already
  11738.                  exists.  The action could be FAIL, REPLACE, or UPDATE.
  11739.  
  11740. The following sample code creates two objects, one of the class WPFolder and 
  11741. one of the class WPProgram. The program object MyProgram is inserted into the 
  11742. Folder MyFolder. The location specified by MyProgram is the same as the object 
  11743. ID for MyFolder. 
  11744.  
  11745. /* */
  11746. call RxFuncAdd "SysLoadFuncs", "rexxutil", "SysLoadFuncs"
  11747. call SysLoadFuncs
  11748.  
  11749. say SysCreateObject("WPFolder",,
  11750.                     "MyFolder",,
  11751.                     "<WP_DESKTOP>",,
  11752.                     "OBJECTID=<Prefix_MyFolder>")
  11753.  
  11754. say SysCreateObject("WPProgram",,
  11755.                     "MyProgram",,
  11756.                     "<Prefix_MyFolder>",,
  11757.                     "EXENAME=C:\PGM\PGM.EXE;ASSOCFILTER=*.TXT" ,,
  11758.                     "OBJECTID=<Prefix_MyProgram>")
  11759.  
  11760.  
  11761. ΓòÉΓòÉΓòÉ 16.2.2. Destroying Objects ΓòÉΓòÉΓòÉ
  11762.  
  11763. The following figure shows the syntax of SysDestroyObject: 
  11764.  
  11765. Syntax:  SysDestroyObject(object_name)
  11766.  
  11767. where
  11768.  
  11769. object_name     Name of the object that is either the object's ID
  11770.                 assigned to the object when it was created, or the
  11771.                 fully qualified path name of the object to be destroyed.
  11772.  
  11773. The following sample code shows how to destroy and recreate the color palette 
  11774. objects. To destroy the objects first, the setup string must be modified to 
  11775. allow the color palette objects to be destroyed. The setup string NODLETE = NO 
  11776. must be changed to NODELETE = YES, so that the object can be destroyed. 
  11777.  
  11778. /***/
  11779. call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
  11780. call SysLoadFuncs
  11781.  
  11782. /* ColorObjectId  = "<WP_CLRPAL>" */
  11783. ColorObjectId1 = "<WP_LORESCLRPAL>"
  11784. ColorObjectId2 = "<WP_HIRESCLRPAL>"
  11785.  
  11786. ColorObjectLocation = "<WP_CONFIG>"
  11787. call SysSetObjectData ColorObjectId1, "NODELETE=NO"
  11788. call SysSetObjectData ColorObjectId2, "NODELETE=NO"
  11789.  
  11790. /* Call SysDestroyObject ColorObjectId */
  11791. call SysDestroyObject ColorObjectId1
  11792. call SysDestroyObject ColorObjectId2
  11793.  
  11794. rc = SysCreateObject('WPColorPalette',,
  11795.         'Solid Color Palette',,
  11796.         '<WP_CONFIG>',,
  11797.         'AUTOSETUP=LORES;NODELETE=NO;OBJECTID='ColorObjectId1,,
  11798.         'update');
  11799.  
  11800. rc = SysCreateObject('WPColorPalette',,
  11801.         'Mixed Color Palette',,
  11802.         '<WP_CONFIG>',,
  11803.         'AUTOSETUP=HIRES;NODELETE=NO;OBJECTID='ColorObjectId2,,
  11804.         'update');
  11805.  
  11806.  
  11807. ΓòÉΓòÉΓòÉ 16.2.3. Updating Objects ΓòÉΓòÉΓòÉ
  11808.  
  11809. The following figure shows the syntax of SysSetObjectData: 
  11810.  
  11811. Syntax:  SysSetObjectData(object_name, setup_string)
  11812.  
  11813. where
  11814.  
  11815. object_name      Name of the object that is either the object's ID
  11816.                  assigned to the object when it was created, or the
  11817.                  fully qualified path name of the object to be
  11818.                  destroyed.
  11819. setup_string     A series of keynames that change the behavior of the
  11820.                  object.  The keynames are separated by a semicolons
  11821.                  and values are separated by commas.
  11822.  
  11823. Each object's characteristics are modified by the setup string information that 
  11824. is passed to the object. The following sample code shows what types of setup 
  11825. information can be used to modify objects' characteristics: 
  11826.  
  11827. /* */
  11828. call RxFuncAdd "SysLoadFuncs", "rexxutil", "SysLoadFuncs"
  11829. call SysLoadFuncs
  11830.  
  11831. say SysSetObjectData("<WP_TEMPS>",,"NODELETE=NO");
  11832. say SysSetObjectData("C:\DESKTOP",,"OBJECTID=<WP_DESKTOP>")
  11833. say SysSetObjectData("<Prefix_MyProgram",,"OPEN=DEFAULT")
  11834. say SysSetObjectData("<WP_DESKTOP>",,"TITLE=Comany Name Desktop")
  11835. say SysSetObjectData("c:\pgm\pgm.exe",,"ASSOCTYPE=Plain Text, C Code")
  11836.  
  11837.  
  11838. ΓòÉΓòÉΓòÉ 16.2.4. Registering and Deregistering Objects ΓòÉΓòÉΓòÉ
  11839.  
  11840. The following figure shows the syntax of SysRegisterObjectClass: 
  11841.  
  11842. Syntax:  SysRegisterObjectClass(class_name, module_name)
  11843.  
  11844. where
  11845.  
  11846. class_name      Name of the Workplace Shell class of which the object
  11847.                 is a member, such as WPFolder.
  11848. module_name     Name of the DLL from which the object is loaded from.
  11849.  
  11850. The following figure shows the syntax of SysDeregisterObjectClass: 
  11851.  
  11852. Syntax:  SysDeregisterObjectClass(class_name)
  11853.  
  11854. where
  11855.  
  11856. class_name     Name of the Workplace Shell class to deregister.
  11857.  
  11858. In the following sample code REXX registers the class MyClass from the DLL 
  11859. defined with the fully qualified path to the system. All of the properties of 
  11860. the class MyClass are loaded through MYCLASS.DLL. Deregistering the class 
  11861. simply involves passing the class_name to successfully free the class from the 
  11862. system. 
  11863.  
  11864. /* */
  11865. call RxFuncAdd "SysLoadFuncs", "rexxutil", "SysLoadFuncs"
  11866. call SysLoadFuncs
  11867.  
  11868. say SysRegisterObjectClass("MyClass", "c:\pgm\myclass.dll")
  11869. say SysDeregisterObjectClass("MyClass")
  11870.  
  11871. call SysQueryClassList "list."
  11872.  
  11873. do i=1 to list.0
  11874.   say 'class ' i  ' is ' list.i
  11875. end
  11876.  
  11877.  
  11878. ΓòÉΓòÉΓòÉ 16.2.5. Getting Extended Attributes ΓòÉΓòÉΓòÉ
  11879.  
  11880. The following figure shows the syntax of SysGetEA: 
  11881.  
  11882. Syntax:  SysGetEA(file, name, variable)
  11883.  
  11884. where
  11885.  
  11886. file         File containing the extended attribute.
  11887. name         Name of the extended attribute, for example .ICON.
  11888. variable     Name of the REXX variable containing the extended
  11889.              attribute value.
  11890.  
  11891. The Workplace Shell uses the following extended attribute headers: 
  11892.  
  11893.  Extended Attribute       Description 
  11894.  
  11895.  .ASSOCTABLE              Enables an application to indicate the type, 
  11896.                           extension, and icon for the data file that it 
  11897.                           recognizes. 
  11898.  
  11899.  .CLASSINFO               Specifies the class type of the class object. 
  11900.  
  11901.  .ICON                    Specifies the icon that represents the file. 
  11902.  
  11903.  .LONGNAME                Stores or restores a long file name that is copied to 
  11904.                           media (floppy drive, hard drive, tape) not supporting 
  11905.                           long file names. 
  11906.  
  11907.  .TYPE                    Specifies the file type of the file object, such as 
  11908.                           plain text (TXT), bitmap (BMP), or executable (EXE). 
  11909.  
  11910.  The following sample code fragments stores the file's extended attribute icon 
  11911.  data to a temporary file. The icon data file is then modified by using the 
  11912.  icon editor. Once saved, the icon data extended attribute is updated in the 
  11913.  file. 
  11914.  
  11915.   /* */
  11916.   Arg Filename
  11917.   call RxFuncAdd "SysLoadFuncs", "rexxutil", "SysLoadFuncs"
  11918.   call SysLoadFuncs
  11919.  
  11920.   TempName = 'TEMP$.ICO'
  11921.   If (Stream (TempName, 'c', 'query exists') <> ' ') then
  11922.     'ERASE ' TempName     /* If the TempFile exists, erase it */
  11923.  
  11924.   If SysGetEA(Filename, '.icon', 'ICON') = 0 then
  11925.     do   /* Load the icon extended attribute to the TempFile */
  11926.       Parse Var ICON AInfo 5 ICON
  11927.       do I = 1 to Length(ICON)
  11928.         Rc = Charout(TmpName, Substr(Icon, I, 1))
  11929.       end
  11930.     If Length(Icon) \= 0 then Rc = Charout(TempName)
  11931.     end
  11932.  
  11933.   say
  11934.   say 'The icon data for the file ' Filename ' will now be open '
  11935.   say 'into the icon editor.'
  11936.   say 'You can update the icon.'
  11937.   say 'If this is a brand new icon, you will be prompted to '
  11938.   say 'save the data to a file.  Save it to ' TempName '.'
  11939.   say 'When you are ready, press the Enter key.'
  11940.  
  11941.   Rc=SysGetKey()
  11942.  
  11943.   '@ICONEDIT 'TempName                  /* Start the icon editor */
  11944.   Rc = SysSetIcon(Filename, TempName)   /* Update the icon data  */
  11945.                                         /* extended attributes   */
  11946.   '@DEL 'TempName
  11947.   return
  11948.  
  11949.  
  11950. ΓòÉΓòÉΓòÉ 16.2.5.1. Extended Attributes and the Workplace Shell ΓòÉΓòÉΓòÉ
  11951.  
  11952. Applications not written for the Workplace Shell need to be aware of how 
  11953. .LONGNAME and .ASSOCTABLE extended attributes are used by the Workplace Shell. 
  11954.  
  11955. In the Workplace Shell, the user can edit the name of an object. When an object 
  11956. is a file system object, the Workplace Shell renames the file object to match 
  11957. the name the user has entered. When the file system object resides on an HPFS 
  11958. disk, the new file name can have a long name and can accommodate whatever the 
  11959. user has entered. When the file system object resides on a FAT disk, the new 
  11960. file name must be no longer than eight characters. If the user has entered a 
  11961. name longer than eight characters, the Workplace Shell uses the first eight 
  11962. characters to rename the object and places the entire title in the .LONGNAME 
  11963. extended attribute associated with the file system object. This means that the 
  11964. title of a file object is the .LONGNAME extended attribute or the file name, if 
  11965. no .LONGNAME exists. 
  11966.  
  11967. An .ASSOCTABLE extended attribute contains information that associates data 
  11968. files with the applications that create them or that know how to use them. 
  11969. Applications that a data file has been associated with appear in the list of 
  11970. Open actions for the data file. This means that opening the file is equivalent 
  11971. to starting the application that creates or modifies that file. The application 
  11972. is passed the name of the file as a command-line parameter. 
  11973.  
  11974. .ASSOCTABLE extended attributes are defined in an application's resource file, 
  11975. as shown in the following example: 
  11976.  
  11977. ASSOCTABLE assoctable-id [load-option] [mem-option]
  11978. BEGIN
  11979.   association-name, file-match-string [,extended-attribute-flag] [,icon-filename]
  11980. END
  11981.  
  11982. When an application that defines an .ASSOCTABLE is installed in the Workplace 
  11983. Shell, the Workplace Shell automatically creates object templates for each type 
  11984. of data file that has been associated with the application. 
  11985.  
  11986.  
  11987. ΓòÉΓòÉΓòÉ 16.2.6. Updating Extended Attributes ΓòÉΓòÉΓòÉ
  11988.  
  11989. The following figure shows the syntax of SysPutEA: 
  11990.  
  11991. Syntax:  SysPutEA(file, name, variable)
  11992.  
  11993. where
  11994.  
  11995. file         File name containing the extended attribute.
  11996. name         Name of the extended attribute, for example, .ICON.
  11997. variable     New value of the extended attribute.
  11998.  
  11999. The following sample code fragments creates a new extended attribute called 
  12000. MYATTRIBUTE and adds a comment to it: 
  12001.  
  12002. /* */
  12003. call RxFuncAdd "SysLoadFuncs", "rexxutil", "SysLoadFuncs"
  12004. call SysLoadFuncs
  12005.  
  12006. SysPutEA('c:\myattr.cmd', MYATTRIBUTE, 'This is my attribute!!!!!')
  12007.  
  12008.  
  12009. ΓòÉΓòÉΓòÉ 16.2.7. Retrieving All Registered Object Classes ΓòÉΓòÉΓòÉ
  12010.  
  12011. The following figure shows the syntax of SysQueryClassList: 
  12012.  
  12013. Syntax:  SysQueryClassList(stem)
  12014.  
  12015. where
  12016.  
  12017. stem     Name of a stem variable in which all registered classes
  12018.          are placed.
  12019.  
  12020. The following sample code retrieves a complete list of registered objects: 
  12021.  
  12022. /* */
  12023. call RxFuncAdd 'SysLoadFuncs', 'rexxutil', 'SysLoadFuncs'
  12024. call SysLoadFuncs
  12025.  
  12026. SysQueryClassList('Class_list.')
  12027. do cnt = 1 to Class_list.0
  12028.   say Class_list.cnt
  12029. end
  12030.  
  12031.  
  12032. ΓòÉΓòÉΓòÉ 16.2.8. Setting, Querying, and Deleting Keys and Applications ΓòÉΓòÉΓòÉ
  12033.  
  12034. The following figure shows the syntaxes of SysIni: 
  12035.  
  12036. Syntax - Mode 1:  Setting single key value.
  12037.  
  12038.     SysIni([inifile], app, key, val)
  12039.  
  12040. Syntax - Mode 2:  Querying single key value.
  12041.  
  12042.     SysIni([inifile], app, key)
  12043.  
  12044. Syntax - Mode 3:  Deleting a single key.
  12045.  
  12046.     SysIni([inifile], app, key, 'DELETE:')
  12047.  
  12048. Syntax - Mode 4:  Deleting an application and all associated keys.
  12049.  
  12050.     SysIni([inifile], app, ['DELETE:'])
  12051.  
  12052. Syntax - Mode 5:  Querying names of all keys associated
  12053.                   with a certain application.
  12054.  
  12055.     SysIni([inifile], app, 'ALL:', 'stem')
  12056.  
  12057. Syntax - Mode 6:  Querying names of all applications.
  12058.  
  12059.     SysIni([inifile], 'ALL:', 'stem')
  12060.  
  12061. where
  12062.  
  12063. inifile     Name of the INI file that you work with.  This parameter
  12064.             should be a file specification, or one of the following:
  12065.  
  12066.             USER       User INI file (usually C:\OS2\OS2.INI).
  12067.                        This is the default.
  12068.             SYSTEM     System INI file
  12069.                        (usually C:\OS2\OS2SYS.INI).
  12070.             BOTH       For querying invocations, both the user and
  12071.                        system INI files are searched.  For setting
  12072.                        invocations, the user INI file is written to.
  12073.  
  12074. app         Application name or some other meaningful value with which
  12075.             you would like to store keywords.
  12076. key         Name of a keyword that is used to hold data.
  12077. val         Value to associate with the keyword of the specified
  12078.             application.
  12079. stem        Name of the stem variable to store the resultant
  12080.             information in.  STEM.0 will be set equal to the number of
  12081.             elements.
  12082.  
  12083. The following sample code shows how you can use the SysIni function. The code 
  12084. saves the value entered by the user, displays it, and deletes it. 
  12085.  
  12086. /***  Save the user-entered vlaue under the  ***/
  12087. /***  key 'NAME' of the 'MYAPP' application, ***/
  12088. /*** display it, then delete it.             ***/
  12089. pull name .
  12090. call SysIni , 'MYAPP', 'NAME', value  /* Save the value               */
  12091. say  SysIni(, 'MYAPP', 'NAME')        /* Query the value              */
  12092. call SysIni , 'MYAPP'                 /* Delete all MYAPP information */
  12093. exit
  12094.  
  12095. The following sample code displays the application name, keyname, and value of 
  12096. each line of the OS2.INI file: 
  12097.  
  12098. /***  Display all OS2.INI file information to the screen  ****/
  12099. call rxfuncadd sysloadfuncs, rexxutil, sysloadfuncs
  12100. call sysloadfuncs
  12101. call SysIni 'USER', 'All:', 'Apps.'
  12102.  
  12103. if Result \= 'ERROR:' then
  12104.   do i=1 to Apps.0
  12105.     call SysIni 'USER', Apps.i, 'All:', 'Keys'
  12106.  
  12107.     if Result \= 'ERROR:' then
  12108.       do j=1 to Keys.0
  12109.         val = SysIni('USER', Apps.i, Keys.j)
  12110.         say left(Apps.i, 20) left(Keys.j, 20),
  12111.         'Len=x'''Left(d2x(length(val)),4) left(val, 20)
  12112.       end
  12113.     end
  12114.  
  12115. The following sample code fragments retrieves a complete list of object ID 
  12116. information: 
  12117.  
  12118. /* */
  12119. call RxFuncAdd 'SysLoadFuncs', 'rexxutil', 'SysLoadFuncs'
  12120. call SysLoadFuncs
  12121.  
  12122. /* List of object IDs */
  12123. App='PM_Workplace : Location'
  12124. call RxFuncAdd 'SysLoadFuncs', 'rexxutil', 'SysLoadFuncs'
  12125. call SysLoadFuncs
  12126.  
  12127. call SysINI 'USER', App, 'All:', 'Keys'
  12128. if result \= 'Error:' then do
  12129.   call SysCls
  12130.   Say '';Say '';Say 'Listing of object ID information';Say '';
  12131.   parse value SysTextScreenSize() with row col
  12132.   j=row-10
  12133.   do i=1 to Keys.0
  12134.     if trunc(i/j)==i/j then
  12135.     do
  12136.       Say '';Say 'Press any key to display the next screen...'
  12137.       key=SysGetKey()
  12138.       call SysCls
  12139.       Say '';Say '';Say 'Listing of object ID information';Say '';
  12140.     end
  12141.     Say Keys.i
  12142.   end
  12143. end
  12144. else Say 'Error querying for' App
  12145. return
  12146.  
  12147.  
  12148. ΓòÉΓòÉΓòÉ 16.2.9. WorkPlace Shell Setup Strings ΓòÉΓòÉΓòÉ
  12149.  
  12150. The setup strings are used to specify custom attributes for creating Workplace 
  12151. Shell objects. The keynames can be concatenated together in some cases for 
  12152. defining the object. The INI.RC file that is located in the OS/2 subdirectory 
  12153. contain all of the Workplace Shell install objects. These objects are comprised 
  12154. of the title, class_name, setup string, and object ID. The keynames in the 
  12155. setup string might have to be set to values such as ON, OFF, YES, or NO. Every 
  12156. class may define its own set of keynames and values. The Workplace Shell 
  12157. Reference contains the definition of keynames for all classes. All keynames for 
  12158. WPObject class are listed in Workplace Shell Setup Strings. 
  12159.  
  12160.  
  12161. ΓòÉΓòÉΓòÉ 17. Workplace Shell and System Object Model ΓòÉΓòÉΓòÉ
  12162.  
  12163. SOM is the object technology used for the implementation of the Workplace 
  12164. Shell. It provides a language neutral, object-oriented programming methodology 
  12165. that you can use to create Workplace Shell objects and bind them to the 
  12166. Workplace Shell. This chapter describes SOM's architecture, its features and 
  12167. environment. It describes its methods, classes, and finally provides an example 
  12168. of its workings. This chapter is not intended to be a SOM programming guide. It 
  12169. is, however, intended to serve as an introduction to SOM at a level necessary 
  12170. to write Workplace Shell applications. 
  12171.  
  12172.  
  12173. ΓòÉΓòÉΓòÉ 17.1. About Workplace Shell and SOM ΓòÉΓòÉΓòÉ
  12174.  
  12175. The System Object Model (SOM) is IBM's object-oriented programming model which 
  12176. provides you language-neutral object-oriented programming mechanisms, a set of 
  12177. run times for the support and management of objects, frameworks for the 
  12178. implementation of classes and objects, and tools for associated application 
  12179. development. 
  12180.  
  12181. Workplace Shell is the OS/2 user interface and is implemented by using the SOM 
  12182. functions, methods, and structures. SOM's run-time support is what allows 
  12183. Workplace Shell applications to run on different levels of the operating system 
  12184. without having to be recompiled. 
  12185.  
  12186. Object-oriented programming is a programming paradigm based on objects, which 
  12187. are programming constructs designed to reflect items in the real world. An 
  12188. object consists of both the data necessary to describe a real-world item and 
  12189. the functions necessary to describe the behavior of the item. This is in 
  12190. contrast to the structured programming model, which focuses on things that can 
  12191. be done to the data (the functions) and which treats the data only as something 
  12192. to be acted on. Objects bind together the data that describes an item and the 
  12193. functions that act on the data. The data is called the object's state. The 
  12194. functions that define the object's behavior are called methods. Objects are 
  12195. instances, or instantiations of a class. A class is a description of an object. 
  12196. It defines the data that represents the object's state and the methods that the 
  12197. object supports. 
  12198.  
  12199. SOM is designed specifically to support the new, object-oriented paradigm, and 
  12200. to be usable with both procedural (non-object-oriented) languages and 
  12201. object-oriented languages. SOM is not a language-it is a system for defining, 
  12202. manipulating, and releasing class libraries. SOM is used to define classes and 
  12203. methods, while permitting you to choose a language for implementing these 
  12204. methods. Therefore, you will be able to use SOM quickly without having to learn 
  12205. a new language syntax. SOM consists of a run-time library and a set of utility 
  12206. programs that support building, externalizing, and manipulating software 
  12207. objects. 
  12208.  
  12209. SOM objects are language-neutral. They can be defined in one programming 
  12210. language and used by applications or objects written in another programming 
  12211. language. 
  12212.  
  12213.  
  12214. ΓòÉΓòÉΓòÉ 17.1.1. SOM Features ΓòÉΓòÉΓòÉ
  12215.  
  12216. SOM offers three important object-oriented programming features: 
  12217.  
  12218.      Encapsulation 
  12219.      Inheritance 
  12220.      Polymorphism. 
  12221.  
  12222.  
  12223. ΓòÉΓòÉΓòÉ 17.1.1.1. Encapsulation ΓòÉΓòÉΓòÉ
  12224.  
  12225. An object has an external or public view that prescribes how other objects or 
  12226. applications can interact with it. An object also has an internal or private 
  12227. view that prescribes how data and methods actually are implemented. Object 
  12228. implementation is hidden or encapsulated from the public view. 
  12229.  
  12230. You can externalize as much of an object's definition as they choose. However, 
  12231. you should carefully consider what to choose to externalize. Published methods 
  12232. and instance variables become a permanent part of an object's interface. 
  12233. Unnecessary externalization of an object's definition might compromise future 
  12234. compatibility. 
  12235.  
  12236. SOM permits changes to an object's internal implementation without affecting 
  12237. the compatibility of resulting binaries. This means that applications using SOM 
  12238. objects will not require recompilation when the SOM object definitions change. 
  12239. Full forward, binary compatibility can be retained when: 
  12240.  
  12241.      Adding new methods 
  12242.  
  12243.      Adding, changing, or deleting unpublished instance variables, provided 
  12244.       that old methods still are supported 
  12245.  
  12246.      Inserting new classes above your class in the inheritance hierarchy 
  12247.  
  12248.      Relocating methods upward in the class hierarchy. 
  12249.  
  12250.  
  12251. ΓòÉΓòÉΓòÉ 17.1.1.2. Inheritance ΓòÉΓòÉΓòÉ
  12252.  
  12253. Inheritance is the derivation of new child classes from existing parent 
  12254. classes. Child classes inherit the characteristics of their parent classes. 
  12255. This means that methods defined for a parent class automatically are defined 
  12256. for the child class. In addition to those they have inherited, child classes 
  12257. also can add their own characteristics. This means that child classes can 
  12258. define new behavior in terms of new methods. These child classes also are known 
  12259. as subclasses. 
  12260.  
  12261.  
  12262. ΓòÉΓòÉΓòÉ 17.1.1.3. Polymorphism ΓòÉΓòÉΓòÉ
  12263.  
  12264. Polymorphism, basically, is many implementations of the same method for two or 
  12265. more classes of objects. This is known in SOM as method overrides, or override 
  12266. resolution. SOM supports various types of polymorphism, so it readily can be 
  12267. mapped into different object-oriented languages. 
  12268.  
  12269. As child classes are derived from parent classes, inherited methods can be 
  12270. overridden. For example, suppose that ClassB is a child of ClassA, as 
  12271. illustrated in the following figure: 
  12272.  
  12273.  
  12274.      Definition of ClassA                       Definition of ClassB
  12275. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12276. Γöé                               Γöé        Γöé                                Γöé
  12277. Γöé    MethodA:                   Γöé        Γöé      MethodA:                  Γöé
  12278. Γöé      Print something          ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé        Print something else    Γöé
  12279. Γöé                               Γöé        Γöé                                Γöé
  12280. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12281.  
  12282. MethodA is one of the methods defined for ClassA. It also is one of the methods 
  12283. defined for ClassB and is inherited from ClassA. In SOM, MethodA can be 
  12284. overridden in the definition of ClassB to do different things for ClassB. 
  12285. MethodA, therefore, is defined for both ClassA and ClassB but is implemented 
  12286. differently for ClassA and ClassB. This means that method resolution requires 
  12287. the name of the method as well as the object being acted upon. 
  12288.  
  12289.  
  12290. ΓòÉΓòÉΓòÉ 17.1.2. SOM Run-Time Environment ΓòÉΓòÉΓòÉ
  12291.  
  12292. The SOM run-time environment contains the basic data structures and functions 
  12293. that are used to define, create, and manage classes and objects in terms of 
  12294. other classes. 
  12295.  
  12296. Note:  OS/2 operating system Version 3 includes SOM 2.1 run time and 
  12297.        Workstation DSOM. The OS/2 Version 3 Toolkit contains a subset of the 
  12298.        SOMobjects* 2.1 Toolkit. 
  12299.  
  12300.  Classes are generic definitions of sets of objects and their behaviors. 
  12301.  Classes are defined at compilation time. Class objects are the SOM run-time 
  12302.  implementation of SOM classes. Because the terms class and class object refer 
  12303.  to the same thing, but in different contexts (compilation time and run time), 
  12304.  they can be used interchangeably. Objects are created dynamically during run 
  12305.  time. Objects are instances of classes. The methods that an object responds to 
  12306.  are referred to as instance methods, because any object instance can perform 
  12307.  them. An object's instance methods are defined in its class definition, and 
  12308.  cannot be used unless an object instance already exists. Object instances are 
  12309.  created by methods that operate on the class object to make it produce an 
  12310.  object instance. Class methods that create object instances are called factory 
  12311.  methods or constructors. SOM classes that define factory methods for classes 
  12312.  are called metaclasses. Metaclasses are classes of classes. A class object is 
  12313.  an instance of its metaclass. 
  12314.  
  12315.  The relationship between objects, classes, and metaclasses is shown in the 
  12316.  following figure. 
  12317.  
  12318.                                  Only One of These      Only One of These
  12319.                                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12320.                                    Γöé    The    Γöé         Γöé The Object's Γöé
  12321.                            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé  Object's ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé Metaclass,   Γöé
  12322.        Many of These       Γöé       Γöé Class, "C Γöé         Γöé     "M"      Γöé
  12323.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12324.      ΓöîΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé     Γöé
  12325.    ΓöîΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé     Γöé       Defined here are       Defined here are
  12326.   ΓöîΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ       instance methods       class methods
  12327.   Γöé     An     Γöé Γöé ΓöéΓöÇΓöÿ             for class "C" that     for class "M" that
  12328.   Γöé   Object,  Γöé ΓöéΓöÇΓöÿ               operate on objects     operate on class
  12329.   Γöé    "O"     ΓöéΓöÇΓöÿ                 "O" (instances of      (object) "C" to
  12330.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                   class "C").            cause it to produce
  12331.                                                           instances of "C".
  12332.  
  12333.  The SOM environment can be created automatically or explicitly within any 
  12334.  process that uses it. SOM supplies three classes, as shown in the following 
  12335.  table. Classes that make up the SOM run-time environment are packaged with the 
  12336.  operating system in SOM.DLL. 
  12337.  
  12338.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12339.   ΓöéObject                        ΓöéDescription                   Γöé
  12340.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12341.   ΓöéSOMClass                      ΓöéRoot class for all SOM        Γöé
  12342.   Γöé                              Γöémetaclasses.                  Γöé
  12343.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12344.   ΓöéSOMClassMgr                   ΓöéClass for SOMClassMgrObject.  Γöé
  12345.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12346.   ΓöéSOMObject                     ΓöéRoot class for all SOM        Γöé
  12347.   Γöé                              Γöéclasses.                      Γöé
  12348.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12349.  
  12350.  SOMObject defines the essential behavior common to all SOM objects. All SOM 
  12351.  classes are subclasses of SOMObject. SOMClass defines the essential behavior 
  12352.  common to all SOM class objects. SOMClass is a subclass of SOMObject and is 
  12353.  the metaclass of the SOMObject class. By definition, SOMClass is its own 
  12354.  metaclass. SOMClassMgr is the class definition for the SOMClassMgrObject that 
  12355.  is created during SOM initialization. During SOM initialization, four objects 
  12356.  are created, as shown in the following figure. Three of these objects are 
  12357.  class objects. 
  12358.  
  12359.                             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12360.                             Γöé  SOMObject   ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé    SOMClass   Γöé
  12361.                             Γöé Class Object Γöé   ΓöîΓöÇΓöÇΓöÇΓöé  Class Object Γöé
  12362.                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12363.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  12364.   ΓöéSOMClassMgrObjectΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé SOMClassMgr  Γöé   Γöé
  12365.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ       Γöé Class Object ΓöéΓöÇΓöÇΓöÇΓöÿ
  12366.                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12367.  
  12368.  The SOMClass class object provides constructors for SOMObject class objects 
  12369.  and for the SOMClassMgr class object. SOMObject defines a set of methods 
  12370.  common to all SOM objects. Because all classes are subclasses of SOMObject, 
  12371.  they inherit the set of methods common to all SOM objects. SOMClassMgrObject 
  12372.  is an instance of the SOMClassMgr class object. SOMClassMgrObject dynamically 
  12373.  loads and unloads class libraries when referenced and tracks instances of 
  12374.  class objects. 
  12375.  
  12376.  
  12377. ΓòÉΓòÉΓòÉ 17.1.3. Creating SOM Classes ΓòÉΓòÉΓòÉ
  12378.  
  12379. The first step in creating a SOM class is to define the class and its 
  12380. relationship to other classes. In SOM, a class is defined in a formal 
  12381. specification language, the SOM interface definition language (IDL). IDL has a 
  12382. language-neutral core (appropriate for any programming language) to which some 
  12383. minor extensions have been added to simplify programming in C. IDL supports C 
  12384. and C++ programming languages. The class definition is saved in an ASCII text 
  12385. file with an extension of .IDL. 
  12386.  
  12387. The second step is to process the IDL file using the SOM compiler to produce a 
  12388. set of language-specific or use-specific binding files for the class. The 
  12389. binding files are then used to build class libraries that can be used by client 
  12390. applications; that is, applications that are to create subclasses or object 
  12391. instances. 
  12392.  
  12393. Note:  Hereafter, any information concerning SOM bindings is specifically 
  12394.        geared toward the SOM C-language bindings, as distinguished from other 
  12395.        SOM language bindings. 
  12396.  
  12397.  
  12398. ΓòÉΓòÉΓòÉ 17.1.3.1. Interface Definition Language ΓòÉΓòÉΓòÉ
  12399.  
  12400. The class definition file provides a complete description of a class, including 
  12401. its relationship to other classes, its instance data, and the methods that it 
  12402. supports and overrides. An interface definition language (IDL) file for the C 
  12403. language also describes information specific to building C-language binding 
  12404. files. 
  12405.  
  12406. An IDL specification for a single class in a single .IDL file generally has the 
  12407. sections specified in the sample code illustrated in the following sample code: 
  12408.  
  12409. //# Include directives
  12410.  
  12411. //# Type declarations
  12412.  
  12413. //# Constant declarations
  12414.  
  12415. //# Exception declarations
  12416.  
  12417. //# Interface declaration
  12418.  
  12419. interface class-name : parent-class
  12420. {
  12421.    //# Constant declarations
  12422.  
  12423.    //# Type declarations
  12424.  
  12425.    //# Exception declarations
  12426.  
  12427.    //# Attribute declarations
  12428.  
  12429.    //# Method declarations
  12430.  
  12431.    //# Implementation statement
  12432.  
  12433.    #ifdef __SOMIDL__
  12434.    implementation
  12435.    {
  12436.       //# Modifier statements
  12437.  
  12438.       //# Passthru statements
  12439.  
  12440.       //# Declarations for instance variables
  12441.    };
  12442.    #endif   // __SOMIDL__
  12443.  
  12444. //# Module declaration
  12445. };
  12446.  
  12447.  
  12448. ΓòÉΓòÉΓòÉ 17.1.3.1.1. Include Directive Statement ΓòÉΓòÉΓòÉ
  12449.  
  12450.  
  12451. Include directives tell the SOM compiler where to find the interface definition 
  12452. language (IDL) files associated with the class. These would be the IDL files 
  12453. for the class' immediate parents, its metaclass, and for any ancestor class for 
  12454. which this class overrides one or more of its methods. 
  12455.  
  12456.  
  12457. ΓòÉΓòÉΓòÉ 17.1.3.1.2. Type, Constant, and Exception Declarations ΓòÉΓòÉΓòÉ
  12458.  
  12459.  
  12460. The declaration section allows for the defining of types, constants, and 
  12461. exception structures. Any declarations defined here (outside of the interface 
  12462. declaration section described below) are not transferred to the binding files 
  12463. by the SOM compiler. 
  12464.  
  12465.  
  12466. ΓòÉΓòÉΓòÉ 17.1.3.1.3. Interface Declarations ΓòÉΓòÉΓòÉ
  12467.  
  12468.  
  12469. The interface declaration section describes the interfaces available to the 
  12470. class. By default, all interfaces defined in this section are public and 
  12471. available to client programs. These include any new methods defined for the 
  12472. class, as well as attributes. Additional types, constants, and exception 
  12473. structures may also be defined in this section. Any declarations defined in 
  12474. this section are exported by the SOM compiler to the language binding files. To 
  12475. make parts of the interface private, surround them with the preprocessor 
  12476. commands as shown in the following sample code: 
  12477.  
  12478. //# Two underscores (__) before and after the word PRIVATE
  12479. #ifdef __PRIVATE__
  12480.  
  12481. //# Private attributes. constants, types, exceptions, and methods here
  12482.  
  12483. #endif
  12484.  
  12485. Declaring attributes creates instance data plus two accessor methods: 
  12486.  
  12487.      One to set the value of the attribute 
  12488.  
  12489.      One to retrieve the value of the attribute. 
  12490.  
  12491.  
  12492. ΓòÉΓòÉΓòÉ 17.1.3.1.4. Implementation Statement ΓòÉΓòÉΓòÉ
  12493.  
  12494.  
  12495. The implementation statement in the IDL file specifies how the class will be 
  12496. implemented. This includes the following: 
  12497.  
  12498.      Names for the binding files 
  12499.  
  12500.      Names of inherited methods that will be overriden 
  12501.  
  12502.      Version number for the class 
  12503.  
  12504.      Metaclass (if any) 
  12505.  
  12506.      Release order for the methods 
  12507.  
  12508.      Other class information. 
  12509.  
  12510.  
  12511. ΓòÉΓòÉΓòÉ 17.1.3.1.5. Passthru Statement ΓòÉΓòÉΓòÉ
  12512.  
  12513.  
  12514. Passthru statements allow the class implementor to specify blocks of code that 
  12515. the SOM compiler will pass into the Header files it generates. It is 
  12516. recommended that only #include directives be exported to C and C++ programs. 
  12517. Declarations for other data should be written in SOM and exported by the SOM 
  12518. compiler itself. 
  12519.  
  12520.  
  12521. ΓòÉΓòÉΓòÉ 17.1.3.1.6. Instance Variables ΓòÉΓòÉΓòÉ
  12522.  
  12523.  
  12524. Instance variables are intended to be used only by the class' methods and not 
  12525. by client programs or subclasses' methods. Attributes should be used for data 
  12526. that is manipulated by client programs or subclassers. 
  12527.  
  12528.  
  12529. ΓòÉΓòÉΓòÉ 17.1.3.1.7. Default Processing Order ΓòÉΓòÉΓòÉ
  12530.  
  12531.  
  12532. The order in which the SOM compiler processes the attributes and methods 
  12533. described in the IDL file is critical for future compatibility when new 
  12534. attributes or methods might be introduced in the class definition. By default, 
  12535. when the SOM compiler processes the IDL file, it builds the internal data 
  12536. structures for the binding files based on the order in which the attributes and 
  12537. methods are described in the interface section of the IDL file. If, at a later 
  12538. date, new data or methods change the original ordering of methods for the 
  12539. class, the binding files and class library are built differently. Client 
  12540. applications then must be recompiled. 
  12541.  
  12542.  
  12543. ΓòÉΓòÉΓòÉ 17.1.3.1.8. Release Order List ΓòÉΓòÉΓòÉ
  12544.  
  12545.  
  12546. The default processing order for methods can be overriden, however, by 
  12547. including a release order list in the implementation section of the IDL file. 
  12548. The release order list directs the SOM compiler to process the method 
  12549. definitions in the order specified in the list, as opposed to the order in the 
  12550. interface section. New methods should always be added to the end of the release 
  12551. order list to preserve compatibility with client applications. This allows you 
  12552. to describe the methods in the interface section in any order. In particular, 
  12553. new methods may be inserted in the middle of the existing methods without 
  12554. affecting client applications. 
  12555.  
  12556.  
  12557. ΓòÉΓòÉΓòÉ 17.1.3.1.9. Comments ΓòÉΓòÉΓòÉ
  12558.  
  12559.  
  12560. An IDL file is made more readable by the use of comments. Several comment 
  12561. styles are supported by IDL, as shown in the following figure: 
  12562.  
  12563. /***************************************/
  12564. /* This is a comment that will appear  */
  12565. /* in the language binding files.      */
  12566. /***************************************/
  12567.  
  12568. /*
  12569.  * This is a comment that will appear
  12570.  * in the language binding files.
  12571.  */
  12572.  
  12573. // This is a comment that will appear
  12574. // in the language binding files.
  12575.  
  12576. //# This is a comment that will not appear
  12577. //# in the language binding files.
  12578.  
  12579. Because IDL files are used to generate language bindings, comments must be 
  12580. strictly associated with particular elements so that they appear at the 
  12581. appropriate points in the output files. If comments are not placed as 
  12582. prescribed by the IDL syntax, they might not appear where you expect to see 
  12583. them. 
  12584.  
  12585. Comments beginning with //# do not appear in any binding files. They can be 
  12586. placed anywhere in an IDL file. They can be used to comment out sections of an 
  12587. IDL file or to add historical or notational commentary. 
  12588.  
  12589.  
  12590. ΓòÉΓòÉΓòÉ 17.1.4. SOM Macros, Functions, and Data ΓòÉΓòÉΓòÉ
  12591.  
  12592. To effectively use the SOM C-language bindings, an understanding of the SOM 
  12593. naming conventions is needed. These are summarized in the following table: 
  12594.  
  12595. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12596. ΓöéPrefix    ΓöéUse                                               Γöé
  12597. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12598. Γöésom       ΓöéFunction and method names.                        Γöé
  12599. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12600. ΓöéSOM       ΓöéData items.                                       Γöé
  12601. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12602.  
  12603. For example, methods for the SOM objects provided by the SOM run time have the 
  12604. prefix, som. Constants, data structures, and pointers to functions, including 
  12605. macro names, have the prefix, SOM. 
  12606.  
  12607. Next, and most importantly, you need to understand SOM macros. SOM macros are 
  12608. used by class implementers and by client programs to: 
  12609.  
  12610.      Instantiate objects 
  12611.      Access object variables 
  12612.      Invoke object methods. 
  12613.  
  12614.  SOM macros shield you from the details and complexity of SOM data structures, 
  12615.  method resolution, and function invocations. There are two types of SOM 
  12616.  macros: 
  12617.  
  12618.      Class-specific 
  12619.      Non-class specific (or general). 
  12620.  
  12621.  
  12622. ΓòÉΓòÉΓòÉ 17.1.4.1. Class-Specific SOM Macros ΓòÉΓòÉΓòÉ
  12623.  
  12624. Class-specific macros resolve references to class methods, class functions, and 
  12625. class instance data. The macro name or macro parameters contain a class method 
  12626. name, a class function name, an instance variable name, or a class name. The 
  12627. SOM compiler automatically generates and places them in the class Header files. 
  12628. Class implementers can use them by including the class-implementation Header 
  12629. file (.IH) in their source programs. Client programs can use them by including 
  12630. the public class Header file (.H). Because the IH file includes the H file, the 
  12631. class macros defined in the H file are available to both class implementers and 
  12632. clients; and the ones defined in the IH file but not in the H file are 
  12633. available only to class implementers. 
  12634.  
  12635. The simplest macro is the " _ " (underscore) macro. Object instance data can be 
  12636. referred to by preceding the name of the data element with an underscore 
  12637. character, as shown in the following figure: 
  12638.  
  12639. return _var1;
  12640.  
  12641. Underscored-data-name macros are defined in the H public class Header file and 
  12642. are available to both class implementers and client programs. In addition, 
  12643. instance variables may be accessed by somThisvariable_name, as shown in the 
  12644. following figure: 
  12645.  
  12646. return somThisvar1;
  12647.  
  12648. Object methods can be referred to similarly and invoked by preceding the method 
  12649. name with an underscore ( _ ) character, as shown in the following figure: 
  12650.  
  12651. /* method A, with parameters x and y, operates on object obj */
  12652. _methodA(obj, x, y)
  12653.  
  12654. Underscored-method-name macros also are defined in the H public class Header 
  12655. file and are available to both class implementers and client programs. When 
  12656. nonrelated classes independently define methods with the same name, their 
  12657. methods can be invoked with a variation of this macro. The method name is 
  12658. prefixed with the underscore ( _ ) character and class name, as shown in the 
  12659. following figure: 
  12660.  
  12661. #include "classa.h"
  12662. #undef _methodA
  12663. #include "classa.h"
  12664.  
  12665. /* methodA, defined for ClassA objects,    */
  12666. /* operates on ClassA instance object obj1 */
  12667. ClassA_methodA (obj1);
  12668.  
  12669. /* methodA, defined for unrelated ClassB objects, */
  12670. /* operates on ClassB instance object obj2        */
  12671. ClassB_methodA (obj2);
  12672.  
  12673. Class objects also can be referred to by preceding the class name with an 
  12674. underscore character. Underscored-class-name macros also are defined in the H 
  12675. public class Header file and are available to both class implementers and 
  12676. client programs. 
  12677.  
  12678. Other class-specific macros are summarized in the following table: 
  12679.  
  12680. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12681. ΓöéMacros              ΓöéFunction                                          Γöé
  12682. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12683. ΓöéAccess instance dataΓöéget_<instance variable>                           Γöé
  12684. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12685. Γöé                    Γöé<classname>GetData                                Γöé
  12686. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12687. ΓöéInstantiate objects Γöé<classname>New                                    Γöé
  12688. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12689. Γöé                    Γöé<classname>Renew                                  Γöé
  12690. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12691. ΓöéInvoke methods      ΓöéSOM_Resolve                                       Γöé
  12692. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12693. Γöé                    ΓöéSOM_ResolveNoCheck                                Γöé
  12694. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12695. ΓöéInvoke methods for  Γöé<classname>_parents_<methodname>                  Γöé
  12696. Γöéeach parent         Γöé                                                  Γöé
  12697. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12698. ΓöéInvoke parent       Γöé<classname>_parent_<parentclassname> _<methodname>Γöé
  12699. Γöémethods             Γöé                                                  Γöé
  12700. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12701. ΓöéTrace methods       Γöé<classname>MethodDebug                            Γöé
  12702. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12703.  
  12704. Of the macros listed in the previous table, <classname>GetData and the parent 
  12705. method macros are defined in the IH file, but not in the H file. They are 
  12706. available only for class implementers. 
  12707.  
  12708. A class-specific function also is defined in the H file associated with a 
  12709. class. This function, <classname>NewClass, creates the class object. It is 
  12710. invoked automatically when an object is instantiated through the <classname>New 
  12711. class macro. 
  12712.  
  12713.  
  12714. ΓòÉΓòÉΓòÉ 17.1.4.2. General SOM Macros and Functions ΓòÉΓòÉΓòÉ
  12715.  
  12716. SOM provides a set of non-class-specific, or general SOM macros and functions 
  12717. that support: 
  12718.  
  12719.      ID manipulation 
  12720.      Debugging 
  12721.      Error handling 
  12722.      Getting object information. 
  12723.  
  12724.  General SOM macros are defined in the SOM.H Header file. Because SOM.H is 
  12725.  included in the class Header (H and IH) files, SOM macros are available to 
  12726.  class implementers and client programs. 
  12727.  
  12728.  
  12729. ΓòÉΓòÉΓòÉ 17.1.4.2.1. SOM ID Manipulation ΓòÉΓòÉΓòÉ
  12730.  
  12731.  
  12732. IDs are numbers that uniquely represent strings. They can be used in SOM to 
  12733. identify method names, class names, and descriptors. Typically, they are used 
  12734. to provide a fast and efficient means of comparing the strings they represent. 
  12735. SOM provides a set of macros and functions, as shown in the following table, 
  12736. that can be used to manipulate SOM IDs. 
  12737.  
  12738. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12739. ΓöéType                ΓöéInterface                               Γöé
  12740. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12741. ΓöéFunctions           ΓöésomBeginPersistentIds                   Γöé
  12742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12743. Γöé                    ΓöésomEndPersistentIds                     Γöé
  12744. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12745. Γöé                    ΓöésomRegisterId                           Γöé
  12746. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12747. Γöé                    ΓöésomSetExpectedIds                       Γöé
  12748. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12749. Γöé                    ΓöésomTotalRegIds                          Γöé
  12750. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12751. Γöé                    ΓöésomUniqueKey                            Γöé
  12752. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12753. ΓöéMacros              ΓöéSOM_CheckID                             Γöé
  12754. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12755. Γöé                    ΓöéSOM_CompareIDs                          Γöé
  12756. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12757. Γöé                    ΓöéSOM_IDFromString                        Γöé
  12758. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12759. Γöé                    ΓöéSOM_StringFromID                        Γöé
  12760. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12761.  
  12762. Initially an ID is a pointer to a string. A SOM ID automatically is converted 
  12763. to an internal ID representation by the SOM_CheckID macro or by the first 
  12764. invocation of any of the ID manipulation macros. Because the representation of 
  12765. an ID changes, SOM IDs are of a special data type, somId. 
  12766.  
  12767.  
  12768. ΓòÉΓòÉΓòÉ 17.1.4.2.2. SOM Debugging ΓòÉΓòÉΓòÉ
  12769.  
  12770.  
  12771. The SOM run-time library provides a means of generating character output by 
  12772. invoking macros and functions that call a replaceable SOM procedure called 
  12773. SOMOutCharRoutine. These macros and functions are available to assist you with 
  12774. debugging an application. Output generated by the debug macros can be 
  12775. conditionally suppressed or produced based on the setting of four global 
  12776. variables. The following table summarizes the SOM debugging macros and the 
  12777. global variables that affect them: 
  12778.  
  12779. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12780. ΓöéMacro                         ΓöéControl Variables             Γöé
  12781. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12782. ΓöéSOM_Assert                    ΓöéSOM_AssertLevel               Γöé
  12783. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12784. ΓöéSOM_Expect                    ΓöéSOM_WarnLevel                 Γöé
  12785. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12786. ΓöéSOM_TestC                     ΓöéSOM_WarnLevel                 Γöé
  12787. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12788. ΓöéSOM_WarnMsg                   ΓöéSOM_WarnLevel                 Γöé
  12789. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12790.  
  12791. In addition to the debug macros, SOM provides a function, somPrintf, that 
  12792. unconditionally generates character output. The interface to somPrintf is 
  12793. identical to the C-library printf routine. 
  12794.  
  12795. Note:  For more detail on debugging SOM, see Debugging Workplace Shell 
  12796.        Applications. 
  12797.  
  12798.  
  12799. ΓòÉΓòÉΓòÉ 17.1.4.2.3. SOM Error Handling ΓòÉΓòÉΓòÉ
  12800.  
  12801.  
  12802. The SOM run-time library also provides a way to handle SOM errors by invoking 
  12803. macros (SOM_ERROR and SOM_TEST) that call a replaceable SOM procedure called 
  12804. SomError. SomError produces a message, an error code and, if appropriate, can 
  12805. end the process where the error occurred. SOM errors are classified by 
  12806. severity, which is indicated in the low-order digit of the SOM error code. 
  12807. There are three SOM error classes, or severity levels, as shown in the 
  12808. following table: 
  12809.  
  12810. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12811. ΓöéSeverity Level ΓöéDescription                                  Γöé
  12812. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12813. ΓöéSOM_Fatal      ΓöéAbnormal and irrecoverable.                  Γöé
  12814. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12815. ΓöéSOM_Ignore     ΓöéNormal and informational only.               Γöé
  12816. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12817. ΓöéSOM_Warn       ΓöéAbnormal but not irrecoverable.              Γöé
  12818. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12819.  
  12820.  
  12821. ΓòÉΓòÉΓòÉ 17.1.4.2.4. Obtaining SOM Object Information ΓòÉΓòÉΓòÉ
  12822.  
  12823.  
  12824. A SOM class implementer or client program can easily determine the class of an 
  12825. object by invoking the SOM_GetClass macro. This macro returns a pointer to the 
  12826. class object. All SOM class objects support methods, for example, 
  12827. somGetInstanceSize, that return information about objects they create. 
  12828. Therefore, by determining the class of an object and invoking class object 
  12829. methods, more can be learned about the original object. 
  12830.  
  12831.  
  12832. ΓòÉΓòÉΓòÉ 17.1.4.2.5. Replaceable SOM Functions ΓòÉΓòÉΓòÉ
  12833.  
  12834.  
  12835. The SOM run-time environment uses SOM functions that perform memory management, 
  12836. DLL management, character output, and error handling. These functions are 
  12837. replaceable, which means that you can override them by supplying your own 
  12838. version of the default SOM functions. Replaceable SOM functions are summarized 
  12839. in the followig table: 
  12840.  
  12841. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12842. ΓöéCategory            ΓöéFunctions                               Γöé
  12843. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12844. ΓöéCharacter Output    ΓöéSOMOutCharRoutine                       Γöé
  12845. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12846. ΓöéDLL Management      ΓöéSOMClassInitFuncName                    Γöé
  12847. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12848. Γöé                    ΓöéSOMDeleteModule                         Γöé
  12849. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12850. Γöé                    ΓöéSOMLoadModule                           Γöé
  12851. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12852. ΓöéError Handling      ΓöéSOMError                                Γöé
  12853. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12854. ΓöéMemory Management   ΓöéSOMCalloc                               Γöé
  12855. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12856. Γöé                    ΓöéSOMFree                                 Γöé
  12857. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12858. Γöé                    ΓöéSOMMalloc                               Γöé
  12859. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12860. Γöé                    ΓöéSOMRealloc                              Γöé
  12861. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12862.  
  12863.  
  12864. ΓòÉΓòÉΓòÉ 17.2. Using Workplace Shell and SOM ΓòÉΓòÉΓòÉ
  12865.  
  12866. This section describes how to: 
  12867.  
  12868.      Program with objects 
  12869.  
  12870.      Use a release order list 
  12871.  
  12872.      Process IDL files 
  12873.  
  12874.      Implement a simple class 
  12875.  
  12876.      Create and manipulate SOM objects 
  12877.  
  12878.      Override methods 
  12879.  
  12880.      Define metaclasses 
  12881.  
  12882.      Build SOM class libraries 
  12883.  
  12884.      Convert CSC files to IDL files. 
  12885.  
  12886.  
  12887. ΓòÉΓòÉΓòÉ 17.2.1. Programming with Objects ΓòÉΓòÉΓòÉ
  12888.  
  12889. An example might make object-oriented programming concepts clearer. A stack is 
  12890. a common programming construct, permitting data to be stored and retrieved in a 
  12891. Last-In, First-Out (LIFO) manner, that is, the last data element placed on the 
  12892. stack is the first element that is retrieved from the stack. 
  12893.  
  12894. The data structure for the stack describes the stack, a place to store the data 
  12895. put on the stack and a variable to keep track of the location of the top of the 
  12896. stack. Given the definition of the data structure, multiple instances of the 
  12897. stack can be declared within a program. 
  12898.  
  12899. There are two basic operations that can be performed on a stack: pushing data 
  12900. onto the stack and popping data off from the stack. It also is beneficial to 
  12901. dynamically create a stack. Functions to perform these activities must be 
  12902. defined. 
  12903.  
  12904. The following sample code shows the definition of a stack data structure and 
  12905. functions and the implementation for the Push function: 
  12906.  
  12907. /* Define the stack */
  12908. struct stackType
  12909. {
  12910.   void *stackArray[STACK_SIZE];
  12911.   int stackTop;
  12912. };
  12913. typedef struct stackType Stack;
  12914.  
  12915. /* Define the stack's functions */
  12916. Stack *Create();                /* Create a new stack                  */
  12917. void Push(Stack *thisStack,     /* Push an element onto the stack      */
  12918.           void *nextElement);
  12919. void *Pop(Stack *thisStack);    /* Pop an element off from the stack   */
  12920.  
  12921. /* The definition of the Push function is provided as an example.  */
  12922. /* The rest of the functions would be defined in a similar manner. */
  12923. void Push(Stack *thisStack, void *nextElement)
  12924. {
  12925.   thisStackstackArray[thisStackstackTop] = nextElement;
  12926.   thisStackstackTop++;
  12927. }
  12928.  
  12929. A client program might use this stack to create a stack of words needing 
  12930. interpretation, as in the following sample code: 
  12931.  
  12932. main()
  12933. {
  12934.   Stack *WordStack;
  12935.  
  12936.   char *Subject = "Emily";
  12937.   char *Verb    = "eats";
  12938.   char *Object  = "ice cream";
  12939.   char *NextWord;
  12940.  
  12941.   WordStack = Create();
  12942.   Push(WordStack, Object);
  12943.   Push(WordStack, Verb);
  12944.   Push(WordStack, Subject);
  12945.      .
  12946.      .
  12947.      .
  12948.  
  12949.   while (NextWord = Pop(WordStack))
  12950.   {
  12951.     printf("%s\n", NextWord);
  12952.      .
  12953.      .
  12954.      .
  12955.   }
  12956. }
  12957.  
  12958. The stack is an example of a class. The stack contains two data elements, 
  12959. stackArray and stackTop, and supports three methods: Create, Push, and Pop. 
  12960. WordStack is an object of class Stack; it also can be called an instance of a 
  12961. stack. 
  12962.  
  12963. Methods must know the specific object on which they are to operate, which is 
  12964. called the target object or, sometimes, the receiving object. Notice that each 
  12965. method (except Create) takes as its first parameter a pointer to the target 
  12966. object. This is because a program might have many objects of a given class, and 
  12967. each is a potential target for the class methods. 
  12968.  
  12969.  
  12970. ΓòÉΓòÉΓòÉ 17.2.2. Using a Release Order List ΓòÉΓòÉΓòÉ
  12971.  
  12972. The release order list is specified using the releaseorder modifier in the 
  12973. implementation section of the IDL file, as shown in the following sample code. 
  12974. In this example, the release order list groups related methods and data 
  12975. accordingly, that is, by instance variable and the functions that operate on 
  12976. that instance variable. 
  12977.  
  12978. #ifndef  example_idl
  12979. #define  example_idl
  12980. #include <somobj.idl>
  12981.  
  12982. interface Example : SOMObject
  12983.  
  12984. {
  12985.   attribute string         szVar1;
  12986.   attribute unsigned long  ulVar2;
  12987.  
  12988.   void Show_All_Vars();
  12989.  
  12990.   #ifdef __SOMIDL__
  12991.   implementation
  12992.   {
  12993.     releaseorder:  Show_All_Vars,
  12994.                    _get_szVar1,
  12995.                    _set_szVar1,
  12996.                    _get_ulVar2,
  12997.                    _set_ulVar2;
  12998.  
  12999.     //# Class modifiers
  13000.     callstyle    = oidl;    // For compatibility with SOM1
  13001.     majorversion = 1;
  13002.     minorversion = 2;
  13003.   };
  13004.  #endif /* __SOMIDL__ */
  13005. };
  13006. #endif  /* Example_idl */
  13007.  
  13008. If a third attribute variable is added to the class definition file, 
  13009. compatibility with clients of the Example class defined in the previous sample 
  13010. code can be maintained by modifying the release order, as shown in the 
  13011. following sample code: 
  13012.  
  13013. #ifndef  example_idl
  13014. #define  example_idl
  13015. #include <somobj.idl>
  13016.  
  13017. interface Example : SOMObject
  13018.  
  13019. {
  13020.   attribute string         szVar1;
  13021.   attribute char           chVar3;   /* New data added */
  13022.   attribute unsigned long  ulVar2;
  13023.  
  13024.   void Show_All_Vars();
  13025.  
  13026.   #ifdef __SOMIDL__
  13027.   implementation
  13028.   {
  13029.    /* Add new methods at the end of the release order */
  13030.    /* list to maintain compatibility with clients     */
  13031.     releaseorder:  Show_All_Vars,
  13032.                    _get_szVar1,
  13033.                    _set_szVar1,
  13034.                    _get_ulVar2,
  13035.                    _set_ulVar2,
  13036.                    _get_chVar3,
  13037.                    _set_chVar3;
  13038.  
  13039.     //# Class modifiers
  13040.  
  13041.     callstyle = oidl;    // For compatibility with SOM1
  13042.     majorversion = 1;
  13043.     minorversion = 2;
  13044.   };
  13045. #endif /* __SOMIDL__ */
  13046. };
  13047. #endif  /* example_idl */
  13048.  
  13049. In the previous figure, the new attribute chVar3 is added between the two 
  13050. existing attributes. The new method names, _get_chVar3 and _set_chVar3, are 
  13051. added to the end of the release order list. 
  13052.  
  13053. Without a release order list, the data and methods in the first version of the 
  13054. Example class are processed in the order in which they occur in the file, as 
  13055. shown in in the following figure: 
  13056.  
  13057. _get_szVar1, _set_szVar1, _get_ulVar2, _set_ulVar2, Show_All_Vars
  13058.  
  13059. Without a release order list, the methods in the second version of the Example 
  13060. class are processed in the order in which they occur in the file, as shown in 
  13061. in the following figure: 
  13062.  
  13063. _get_szVar1, _set_szVar1, _get_chVar3, _set_Var3, _get_ulVar2, _set_ulVar2, Show_All_Vars
  13064.  
  13065. The method information maintained by SOM in the object data structures built 
  13066. for the first version of the Example class does not match that built for the 
  13067. second version of the Example class. The second version is not compatible with 
  13068. clients of the first version. Specifying a release order list, and adding new 
  13069. data and methods at the end of the list, ensures client compatibility. 
  13070.  
  13071.  
  13072. ΓòÉΓòÉΓòÉ 17.2.3. Processing IDL Files ΓòÉΓòÉΓòÉ
  13073.  
  13074. The following figure shows how an IDL file is processed by the SOM compiler: 
  13075.  
  13076.  
  13077.      Environment Variables                               C Bindings
  13078.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13079.      ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé                           Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  13080.      ΓöéΓöé SET SMINCLUDE= Γöé  Γöé                           Γöé Γöé.IH Γöé Γöé .H Γöé Γöé
  13081.      ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ        Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  13082.      ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé        Γöé    ΓöîΓöÇΓöÇΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  13083.      ΓöéΓöé SET SMEMIT=    Γöé  Γöé         Γöé  SOM   Γöé    Γöé   Γöé Γöé .C Γöé Γöé.PDLΓöé Γöé
  13084.      ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé     ΓöîΓöÇΓöÇΓöéCompilerΓöéΓöÇΓöÇΓöÇΓöÇΓöñ   Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  13085.      ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé     Γöé   Γöé        Γöé    Γöé   Γöé        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  13086.      ΓöéΓöé SET SMTMP=     Γöé  Γöé     Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé   Γöé        Γöé.DEFΓöé Γöé
  13087.      ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé     Γöé                 Γöé   Γöé        ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  13088.      ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé     Γöé                 Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13089.      ΓöéΓöé SET SOMIR=     Γöé  Γöé     Γöé                 ΓöéOR
  13090.      ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé     Γöé                 Γöé     C++ Bindings
  13091.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé                 Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13092.                                 Γöé                 Γöé   Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  13093.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ        Γöé                 Γöé   Γöé Γöé.XIHΓöé Γöé.XH Γöé Γöé
  13094.       Γöé .IDL           ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                 ΓööΓöÇΓöÇΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  13095.       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                              Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  13096.                                                       Γöé Γöé.CPPΓöé Γöé.PDLΓöé Γöé
  13097.                                                       Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  13098.                                                       Γöé        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  13099.                                                       Γöé        Γöé.DEFΓöé Γöé
  13100.                                                       Γöé        ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  13101.                                                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13102.  
  13103. The SOM compiler processes the IDL file for a SOM class and generates a set of 
  13104. language binding files. The file name of a SOM C-language binding file 
  13105. corresponds to that of the IDL file processed by the SOM compiler, unless the 
  13106. filestem modifier was specified in the IDL file. Each SOM C-language file has a 
  13107. different extension. For example, the SOM compiler processes EXAMPLE.IDL and 
  13108. generates EXAMPLE.C, EXAMPLE.H, and so forth. The language binding files 
  13109. generated by the SOM compiler are described in the following table: 
  13110.  
  13111. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13112. ΓöéC Extension ΓöéC++         ΓöéDescription                         Γöé
  13113. Γöé            ΓöéExtension   Γöé                                    Γöé
  13114. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13115. Γöé.C          Γöé.CPP        ΓöéTemplate for C-language source      Γöé
  13116. Γöé            Γöé            Γöéprogram for the class               Γöé
  13117. Γöé            Γöé            Γöéimplementation.                     Γöé
  13118. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13119. Γöé.DEF        Γöé.DEF        ΓöéInstructions to the Linker about howΓöé
  13120. Γöé            Γöé            Γöéto build a class library.           Γöé
  13121. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13122. Γöé.H          Γöé.XH         ΓöéPublic Include file for all         Γöé
  13123. Γöé            Γöé            ΓöéC-language programs that need to    Γöé
  13124. Γöé            Γöé            Γöéaccess the SOM class.               Γöé
  13125. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13126. Γöé.IH         Γöé.XIH        ΓöéImplementation header containing    Γöé
  13127. Γöé            Γöé            Γöémost of the automatically generated Γöé
  13128. Γöé            Γöé            Γöéimplementation details about the    Γöé
  13129. Γöé            Γöé            Γöéclass.                              Γöé
  13130. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13131. Γöé.PDL        Γöé.PDL        ΓöéLanguage-neutral form and subset of Γöé
  13132. Γöé            Γöé            Γöéthe SOM IDL file with               Γöé
  13133. Γöé            Γöé            Γöéprivate-implementation detail       Γöé
  13134. Γöé            Γöé            Γöéremoved. This file should be        Γöé
  13135. Γöé            Γöé            Γöé"published" (or exported, made      Γöé
  13136. Γöé            Γöé            Γöéavailable) to users of the class.   Γöé
  13137. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13138.  
  13139. Some of these files contain the public interface for the class; others contain 
  13140. the private interface. Some files are used to implement the class and its 
  13141. subclasses, and some are used by client programs that create and manipulate 
  13142. object instances of the class. 
  13143.  
  13144. The IH and C files are the C-language source files for the class 
  13145. implementation. The IH file is included automatically in the C file. The IDL 
  13146. file is specified in the Include section of the class definition files for 
  13147. subclasses of the class. The H file must be included in client programs to 
  13148. create and manipulate object instances of the class. Separate public and 
  13149. private versions of the .H and .IDL files can be generated by the SOM tools. 
  13150.  
  13151. A set of environment variables, as shown in the following table, control the 
  13152. SOM-compiler processing. 
  13153.  
  13154. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13155. ΓöéVariable       ΓöéDescription                                  Γöé
  13156. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13157. ΓöéSMEMIT         ΓöéSpecifies which output files are to be       Γöé
  13158. Γöé               Γöégenerated.                                   Γöé
  13159. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13160. ΓöéSMINCLUDE      ΓöéSpecifies the location of the class          Γöé
  13161. Γöé               Γöédefinition files (IDL).                      Γöé
  13162. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13163. ΓöéSMTMP          ΓöéSpecifies the directory to be used for       Γöé
  13164. Γöé               Γöéintermediate files.                          Γöé
  13165. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13166. ΓöéSOMIR          ΓöéSpecifies the names of interface repository  Γöé
  13167. Γöé               Γöéfiles.                                       Γöé
  13168. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13169.  
  13170. SMTMP is optional and defaults to the root directory of the current drive. If 
  13171. the files specified in the Include section of the class definition file are 
  13172. enclosed in double quotation marks, SMINCLUDE is optional and defaults to the 
  13173. root directory of the current drive. If the files specified in the Include 
  13174. section of the class definition file are enclosed in angled brackets ( < > ), 
  13175. SMINCLUDE is required for the SOM-compiler processing. SMEMIT is used to 
  13176. indicate which bindings files are generated. 
  13177.  
  13178.  
  13179. ΓòÉΓòÉΓòÉ 17.2.4. Implementing a Simple Class ΓòÉΓòÉΓòÉ
  13180.  
  13181. The language binding files generated by the SOM compiler include a template for 
  13182. the C-language source program for the class implementation. This program 
  13183. template contains stub procedures for all new and override methods specified in 
  13184. the class definition file. You must supply the code implementation for the 
  13185. stub-method procedures. The sample codes illustrated in the following figures 
  13186. show the stages in this process: 
  13187.  
  13188. /*
  13189.  * A class defining a set of objects (dogs)
  13190. */
  13191. #ifndef dog1_idl
  13192. #define dog1_idl
  13193. #include <somobj.idl>
  13194.  
  13195. interface Dog : SOMObject
  13196. {
  13197.   void Bark();
  13198.  
  13199.   // Have the dog bark
  13200.  
  13201.   #ifdef __SOMIDL__
  13202.   implementation
  13203.   {
  13204.     releaseorder:  Bark;
  13205.  
  13206.     //# Class modifiers
  13207.  
  13208.     callstyle = oidl;    // For compatibility with SOM1
  13209.     majorversion = 1;
  13210.     minorversion = 2;
  13211.   };
  13212.   #endif /* __SOMIDL__ */
  13213. };
  13214. #endif  /* dog1_idl */
  13215.  
  13216. In the previous sample code, the Dog class is defined. According to this class 
  13217. definition file, the Dog class is derived from the SOMObject class. The 
  13218. behavior of the SOMObject class is defined in the file, SOMOBJ.IDL, which was 
  13219. generated by the SOM compiler when the SOMObject class was implemented. Object 
  13220. instances of the Dog class inherit the behavior of its parent class SOMObject 
  13221. by specifying the SOMOBJ.IDL file in the Include section of the Dog class 
  13222. definition file. This means that all methods that can act on instances of 
  13223. SOMObject can act on the Dog class objects. 
  13224.  
  13225. In the real world, dogs have many characteristics and behaviors. A 
  13226. comprehensive definition of the Dog class would include methods that relate to 
  13227. these characteristics and behaviors. In this example, the only behavior that is 
  13228. defined is barking. The behavior, "dogs can bark" corresponds to the prototype 
  13229. of the "bark" method specified in the Methods section of the class definition 
  13230. file. 
  13231.  
  13232. The SOM compiler processes the DOG.IDL file as shown in the previous sample 
  13233. code and generates the DOG.C C-language source-program template shown in the 
  13234. following figure. Notice that DOG.IH, another file generated by the SOM 
  13235. compiler, is included automatically in this program template. This file 
  13236. contains the data structures, macros, and functions for accessing data and 
  13237. methods for object instances of the Dog class. This file also provides stubs 
  13238. for all methods prototyped in the Methods section of the DOG.IDL file. 
  13239.  
  13240. /*
  13241. *  This file was generated by the SOM compiler and Emitter framework.
  13242. *  Generated using:  SOM Emitter emitctm: 2.38
  13243. */
  13244.  
  13245. #ifndef SOM_Module_dog1_Source
  13246. #define SOM_Module_dog1_Source
  13247. #endif
  13248.  
  13249. #define Dog_Class_Source
  13250.  
  13251. #include "dog1.ih"
  13252.  
  13253. /*
  13254.  * Have the dog bark
  13255. */
  13256.  
  13257. SOM_Scope void  SOMLINK Bark(Dog *somSelf)
  13258. {
  13259.     /* DogData *somThis = DogGetData(somSelf); */
  13260.     DogMethodDebug("Dog","Bark");
  13261. }
  13262.  
  13263. The general form for a method stub is shown in the following figure: 
  13264.  
  13265. SOM_Scope void SOMLINK <methodname>(<classname> *somSelf)
  13266. {
  13267.   <classname>Data *somThis = <classname>GetData(somSelf);
  13268.   <classname>MethodDebug("<classname>", "<methodname>");
  13269. }
  13270.  
  13271. SOM_Scope and SOMLINK are C macros used internally with the C-binding files. 
  13272.  
  13273.  
  13274. ΓòÉΓòÉΓòÉ 17.2.4.1. Using somSelf ΓòÉΓòÉΓòÉ
  13275.  
  13276. somSelf is a pointer to an object instance of the somSelf class <classname>. 
  13277. Because the same method can be invoked on different objects but implemented 
  13278. differently (polymorphism), a pointer to the object being operated on is 
  13279. required as a parameter in the method invocation. The first parameter in the 
  13280. method invocation always is somSelf. This means that if the method prototype in 
  13281. DOG.IDL for the "bark" method is specified as shown in the following figure, 
  13282. the SOM compiler generates the C-language source-program template file as shown 
  13283. in the next figure: 
  13284.  
  13285. void bark(long lCount);
  13286.  
  13287. SOM_Scope void SOMLINK bark(Dog *somSelf, long lCount)
  13288. {
  13289.   DogData *somThis = DogGetData(somSelf);
  13290.   DogMethodDebug("Dog", "Bark");
  13291. }
  13292.  
  13293.  
  13294. ΓòÉΓòÉΓòÉ 17.2.4.2. Using somThis ΓòÉΓòÉΓòÉ
  13295.  
  13296. The pointer somThis points to data for an object instance of the class 
  13297. <classname>. <classname>Data is a class data structure automatically generated 
  13298. by the SOM compiler and placed in the IH file. 
  13299.  
  13300.  
  13301. ΓòÉΓòÉΓòÉ 17.2.4.3. Tracing Code ΓòÉΓòÉΓòÉ
  13302.  
  13303. <classname>GetData and <classname>MethodDebug are class macros automatically 
  13304. generated by the SOM compiler and placed in the IH file. <classname>GetData 
  13305. gets the data for the object instance, somSelf, of the class. 
  13306.  
  13307. Note:  Methods that access the object's data use the <classname>GetData macro 
  13308.        to establish addressability. This macro must be one of the first 
  13309.        executable lines of code in each method, and the value it returns should 
  13310.        be assigned to a local variable named somThis. The SOM compiler 
  13311.        automatically generates the code that accomplishes this in each method 
  13312.        stub in a C file. 
  13313.  
  13314.  <classname>MethodDebug provides method-tracing capabilities. This custom macro 
  13315.  is generated as part of the method stubs produced in the C program template. 
  13316.  It takes two arguments: a class name and a method name. If SOM_TraceLevel 
  13317.  contains the value 1 or 2, the custom macro produces a message each time a 
  13318.  method is entered. Setting SOM_TraceLevel to 2 also causes the methods 
  13319.  supplied as part of the SOM run time to generate method trace output. To 
  13320.  suppress the generation of method tracing code, place lines similar to the 
  13321.  ones shown in the following figure in your C file after the #include statement 
  13322.  for <classname>.IH: 
  13323.  
  13324.   #undef  <classname>MethodDebug
  13325.   #define <classname>MethodDebug(c,m) SOM_NoTrace(c,m)
  13326.  
  13327.  
  13328. ΓòÉΓòÉΓòÉ 17.2.4.4. Completing the Class Implementation ΓòÉΓòÉΓòÉ
  13329.  
  13330. To complete the class-implementation process, you modify the C-language 
  13331. source-program template as shown in the following sample code. You must supply 
  13332. the code for each of the stubbed method procedures. In the example, "dog 
  13333. barking" is implemented as "printing the sound a dog makes," or, printing 
  13334. "Unknown dog noise." Because the C-library printf routine is used to implement 
  13335. this function, STDIO.H also must be included in the source program. 
  13336.  
  13337. /*
  13338.  *  This file was generated by the SOM compiler and Emitter framework.
  13339.  *  Generated using: SOM Emitter emitctm: 2.38
  13340.  */
  13341.  
  13342. #ifndef SOM_Module_dog3_Source
  13343. #define SOM_Module_dog3_Source
  13344. #endif
  13345.  
  13346. #define Dog_Class_Source
  13347.  
  13348. #include "dog3.ih"
  13349.  
  13350. /* This line is added because of the printf statement below */
  13351. #include <stdio.h>
  13352.  
  13353. /*
  13354.  * Have the dog bark
  13355.  */
  13356.  
  13357. SOM_Scope void  SOMLINK Bark(Dog *somSelf)
  13358. {
  13359.    /* DogData *somThis = DogGetData(somSelf); */
  13360.    DogMethodDebug("Dog","Bark");
  13361.    printf("Unknown dog noise\n");     /* The dog now speaks... */
  13362. }
  13363.  
  13364.  
  13365. ΓòÉΓòÉΓòÉ 17.2.5. Replacing SOM Functions ΓòÉΓòÉΓòÉ
  13366.  
  13367. The SOM run-time environment uses SOM functions that perform memory management, 
  13368. DLL management, character output, and error handling. These functions are 
  13369. replaceable, which means that you can override them by supplying your own 
  13370. version of the default SOM functions. 
  13371.  
  13372. The following sample code shows how a user-defined function can be substituted 
  13373. for one of the replaceable SOM functions: 
  13374.  
  13375. #define INCL_DOS
  13376. #define INCL_WINWORKPLACE
  13377.  
  13378. #include <os2.h>
  13379. #include <io.h>
  13380. #include <stdio.h>
  13381. #include <fcntl.h>
  13382. #include <sys\stat.h>
  13383. #include <string.h>
  13384. #include <som.h>
  13385.  
  13386. static FILE   *ErrorFile;     /* File to contain debugging error information */
  13387.  
  13388. /*
  13389.  * This is the replacement for the default SOMOutCharRoutine.
  13390.  * It writes the debugging information to a file on the hard drive.
  13391.  */
  13392.  
  13393. #pragma linkage(myCharacterOutputRoutine, system)
  13394.  
  13395. int  SOMLINK  myCharacterOutputRoutine (char chOut)
  13396. {
  13397.     fputc ((int) chOut, ErrorFile);
  13398.     fflush(ErrorFile);
  13399.     return 1;   /* Indicate success */
  13400. }
  13401.  
  13402. /*
  13403.  *   Enable myCharacterOutputRoutine by opening the output error
  13404.  *   file and then changing the output character routine.
  13405.  */
  13406.  
  13407. ErrorFile = fopen ("c:\\error.txt", "a" ;
  13408.  
  13409. fprintf (ErrorFile, "\nDebug information from my WPS Object\n");
  13410. fprintf (ErrorFile,   "------------------------------------\n");
  13411. setbuf (ErrorFile, NULL);
  13412.  
  13413. SOM_TraceLevel = 2;   /* Request maximum debugging information */
  13414. SOM_WarnLevel  = 2;
  13415.  
  13416. /* All output goes to my routine after the next statement */
  13417.  
  13418. SOMOutCharRoutine = myCharacterOutputRoutine;
  13419.  
  13420.  
  13421. ΓòÉΓòÉΓòÉ 17.2.6. Invoking Methods and Accessing Object Data ΓòÉΓòÉΓòÉ
  13422.  
  13423. The basic rules for invoking methods and accessing object data can be 
  13424. summarized as follows: 
  13425.  
  13426.      Object data can be referred to by preceding the name of the data element 
  13427.       with an underscore ( _ ) character. This is valid only in a method of the 
  13428.       class, and then only for the object being operated on. 
  13429.  
  13430.      Methods can be invoked by preceding the method name with an underscore 
  13431.       character. Method parameters always include a pointer to the object being 
  13432.       operated on. Invocation of instance methods requires a pointer to an 
  13433.       instance object. Invocation of class methods requires a pointer to a 
  13434.       class object. 
  13435.  
  13436.  These rules can be illustrated by introducing three new methods for the Dog 
  13437.  class that relate to more dog characteristics and getting and setting 
  13438.  behaviors. Because dogs can be characterized by their breed, a user should be 
  13439.  able to get and set the breed for a dog. It also would be desirable to display 
  13440.  the characteristics of a dog. In the following sample code, the action of 
  13441.  getting and setting a dog's breed corresponds to the prototype for the 
  13442.  getBreed and setBreed methods in the DOG.IDL file. 
  13443.  
  13444.   /*
  13445.    *   A class defining a set of objects (dogs)
  13446.    */
  13447.  
  13448.   #ifndef dog4_idl
  13449.   #define dog4_idl
  13450.  
  13451.   #include <somobj.idl>
  13452.  
  13453.   interface Dog : SOMObject
  13454.   {
  13455.     attribute string breed;
  13456.  
  13457.     // The breed for the dog
  13458.  
  13459.     void display();
  13460.  
  13461.     // Display the characteristics for this dog.
  13462.     // Show the breed and make the dog speak.
  13463.  
  13464.     void bark();
  13465.  
  13466.     // Have the dog bark
  13467.     #ifdef __SOMIDL__
  13468.     implementation
  13469.  
  13470.     {
  13471.       releaseorder:  _get_breed, _set_breed, display, bark;
  13472.  
  13473.       //# Class modifiers
  13474.  
  13475.       callstyle = oidl;    // For compatibility with SOM1
  13476.       majorversion = 1;
  13477.       minorversion = 2;
  13478.     };
  13479.     #endif /* __SOMIDL__ */
  13480.   };
  13481.   #endif  /* dog4_idl */
  13482.  
  13483.  The action of displaying a dog's characteristics corresponds to the prototype 
  13484.  for the display method. This example also introduces the use of an attribute. 
  13485.  Each dog has its own copy of the attribute associated with it. The breed of a 
  13486.  dog is stored in a string called "breed". By default, SOM provides a 
  13487.  _get_breed method to return the contents of the breed and a  _set_breed method 
  13488.  to set the contents of breed. If no set method was used, breed should be 
  13489.  defined as "readonly attribute" string breed. 
  13490.  
  13491.  From the new DOG.IDL file, the SOM compiler generates a new C-language 
  13492.  source-program template, as shown in the following sample code. This template 
  13493.  is used to complete the implementation of the new Dog class. 
  13494.  
  13495.   /*
  13496.    *  This file was generated by the SOM compiler and Emitter Framework.
  13497.    *  Generated using:  SOM Emitter emitctm: 2.38
  13498.    */
  13499.  
  13500.   #ifndef SOM_Module_dog_Source
  13501.   #define SOM_Module_dog_Source
  13502.   #endif
  13503.  
  13504.   #define Dog_Class_Source
  13505.  
  13506.   #include "dog.ih"
  13507.   #include <stdio.h>   /* Needed because of printf */
  13508.  
  13509.   /*
  13510.    * Display the characteristics for this dog.
  13511.    * Show the breed and make the dog speak.
  13512.    */
  13513.  
  13514.   SOM_Scope void  SOMLINK display(Dog *somSelf)
  13515.   {
  13516.     DogData *somThis = DogGetData(somSelf);
  13517.     DogMethodDebug("Dog","display");
  13518.  
  13519.     /* Note that there are two underscores before */
  13520.     /* the get_breed method                    */
  13521.     printf("\nMy breed is %s.\n", __get_breed(somSelf));
  13522.     printf("I say:\n");
  13523.  
  13524.     /* Prefix method name with either an underscore */
  13525.     /* ( _ ) or somThis                  */
  13526.     _bark(somSelf);
  13527.   }
  13528.  
  13529.   /*
  13530.    * Have the dog bark
  13531.    */
  13532.  
  13533.   SOM_Scope void  SOMLINK bark(Dog *somSelf)
  13534.   {
  13535.     DogData *somThis = DogGetData(somSelf);
  13536.     DogMethodDebug("Dog","bark");
  13537.  
  13538.     printf("Unknown dog noise\n");   /* Speak! */
  13539.   }
  13540.  
  13541.  The first thing that is noticeable in this sample code is that the attribute 
  13542.  declarations are not present. They have been placed in the 
  13543.  class-implementation file (DOG.IH) by the SOM compiler. As before, DOG.IH 
  13544.  contains all the definitions of the Dog class data, macros, and functions. 
  13545.  
  13546.  The _set_breed and _get_breed methods, also in the DOG.IH file, operate on the 
  13547.  string "breed" and refer to it by prefixing the string name with somThis. 
  13548.  
  13549.  The display method requires the dog's characteristics, that is, its breed and 
  13550.  its bark, to be displayed. To do this, the display method calls both the 
  13551.  _get_breed and bark methods, which are referenced by prefixing the method name 
  13552.  with the underscore ( _ ) character. 
  13553.  
  13554.  Finally, as in the previous implementation of the Dog class, the Include file, 
  13555.  STDIO.H, is added to the source program to resolve the reference to the 
  13556.  C-library routine, printf, which is used to display the dog's characteristics. 
  13557.  The SOM function, somPrintf, can be used in place of printf; no additional 
  13558.  Include file is required in this case. In fact, it is recommended that SOM 
  13559.  class implementations use the SOM functions, where appropriate, instead of the 
  13560.  C-library functions. SOM functions offer flexibility and replaceability. 
  13561.  
  13562.  
  13563. ΓòÉΓòÉΓòÉ 17.2.7. Creating and Manipulating SOM Objects ΓòÉΓòÉΓòÉ
  13564.  
  13565. So far, the examples have shown how to define and implement SOM classes but 
  13566. have only mentioned SOM client programs. SOM client programs are applications 
  13567. that create and manipulate SOM objects. A SOM client program can be a 
  13568. Presentation Manager program or a simple C or C++ program. 
  13569.  
  13570. A SOM client of the new Dog class can, for simplicity, create an instance of 
  13571. the Dog class, define its breed, and display its characteristics. This simple 
  13572. SOM client is shown in the following sample code: 
  13573.  
  13574. /*
  13575.  *  DogMain.C - A client C program to manipulate a Dog object
  13576.  */
  13577.  
  13578. #define INCL_NOPMAPI     /* Makes compile go faster */
  13579.                             /* for non-PM programs     */
  13580. #define INCL_DOSERRORS
  13581. #define INCL_DOS
  13582.  
  13583. #include <os2.h>
  13584. /* Include declarations for the Dog class */
  13585. #include "dog.h"
  13586.  
  13587. int main(int argc, char *argv[])
  13588. {
  13589.   /* Define a dog object called "Zack" */
  13590.   Dog  *Zack;
  13591.  
  13592.   /* Create an instance of the object */
  13593.   Zack = DogNew();
  13594.  
  13595.   /* Set the breed of the dog */
  13596.   __set_breed(Zack, "Yorkshire Terrier");
  13597.  
  13598.   /* Display information about it */
  13599.   _display(Zack);
  13600.  
  13601.   /* Delete the object */
  13602.   _somFree(Zack);
  13603.  
  13604.    return NO_ERROR;
  13605. }
  13606.  
  13607. To create and manipulate SOM objects, a client program must have access to the 
  13608. object's public methods. In the same way that class data, methods, and 
  13609. functions are available to class implementers through the .IH file associated 
  13610. with the class implementation, class data methods, and functions are available 
  13611. to client programs through the .H file associated with the class 
  13612. implementation. In the above example, DOG.H is included to resolve references 
  13613. to the dog object's public methods. 
  13614.  
  13615. The variable Zack is defined as a pointer to an instance (object) of the Dog 
  13616. class.  In general, a pointer to an instance of a class is declared, as shown 
  13617. in the following figure: 
  13618.  
  13619. <classname> *object;
  13620.  
  13621. The DogNew Dog class macro then is used to create an instance of the Dog class 
  13622. and return the pointer in the variable Zack. DogNew is defined in DOG.H and is 
  13623. a method inherited from the parent (SOMObject) of the Dog class and tailored 
  13624. for the Dog class. The DogNew macro expands to invoke somNew. somNew invokes 
  13625. DogNewClass, which creates the Dog class object, if it has not yet been 
  13626. created. The Dog class object must be created before its instances can be 
  13627. created. If instances of the Dog class are created through some mechanism other 
  13628. than DogNew, DogNewClass must be invoked in the client program. 
  13629.  
  13630. Because the _set_breed and display methods are public and are defined in DOG.H, 
  13631. the client program can invoke them in the same manner as the class 
  13632. implementation by prefixing the method name with the underscore ( _ ) 
  13633. character. In the client program, the pointer to the dog object (Zack) is the 
  13634. first parameter for these methods. The _set_breed method is called to set 
  13635. Zack's breed as "Yorkshire Terrier". The display method invokes the _get_breed 
  13636. and bark methods and prints the dog's breed and bark. 
  13637.  
  13638. Finally, somFree releases resources allocated when an object is created by 
  13639. somNew. As previously mentioned, somNew is invoked by the DogNew macro. 
  13640. somFree, like somNew, is a method inherited from the parent, SOMObject, of the 
  13641. Dog class. somFree must be called if somNew is used to create an object. 
  13642.  
  13643.  
  13644. ΓòÉΓòÉΓòÉ 17.2.7.1. Compiling a Program ΓòÉΓòÉΓòÉ
  13645.  
  13646. To run the DOGMAIN.C client program, it needs to be compiled and linked with 
  13647. the SOM library and the Dog class implemented in DOG.C. DOG.C is a file 
  13648. generated by the SOM compiler after processing DOG.IDL, and subsequently 
  13649. modified by the class implementor. 
  13650.  
  13651. The program can be compiled using the IBM CSet/2 compiler. The command line 
  13652. illustrated in the following command line shows how to compile the program 
  13653. assuming that the LIB and INCLUDE environment variables contain the Toolkit 
  13654. directories: 
  13655.  
  13656. icc -Fe dog dogmain.c dog.c somtk.lib
  13657.  
  13658. These environment variables are generally set appropriately after the Toolkit 
  13659. is installed. If the environment variables do not contain the correct 
  13660. libraries, the steps sequence shown in the following command lines are 
  13661. required: 
  13662.  
  13663. /* Assuming X:\TOOLKIT is the drive and directory */
  13664. /* where the toolkit and SOM are installed        */
  13665. set sombase=X:\TOOLKIT
  13666.  
  13667. set lib=%sombase%\LIB;%lib%
  13668. icc -I. -I%sombase%\INCLUDE dog domain.c dog.c somtk.lib
  13669.  
  13670. The output from the client program is shown in the following figure: 
  13671.  
  13672. My breed is Yorkshire Terrier
  13673. I say
  13674. Unknown Dog Noise
  13675.  
  13676.  
  13677. ΓòÉΓòÉΓòÉ 17.2.8. Overriding Methods: Inheritance and Polymorphism ΓòÉΓòÉΓòÉ
  13678.  
  13679. In the Dog class example, the Dog class is derived from SOMObject. Object 
  13680. instances of the Dog class inherit SOMObject behavior, that is, all SOMObject 
  13681. methods can operate on instances of the Dog class. In addition, the Dog class 
  13682. example defined methods not defined for SOMObject. The Dog class is a subclass 
  13683. of SOMObject. 
  13684.  
  13685. LittleDogs and BigDogs, subclasses of the Dog class, can be defined. These 
  13686. subclasses inherit the behavior of their parent class, Dog class, as well as 
  13687. the behavior of their parent's parent class, SOMObject. If the Dog class had 
  13688. been derived from other classes that were derived from SOMObject, the new 
  13689. subclasses would also inherit the behavior of these ancestor classes. In 
  13690. addition to adding new methods to those inherited from ancestor classes, 
  13691. subclasses can modify or override any inherited methods. 
  13692.  
  13693. The inheritance relationship between the new subclasses, LittleDog and BigDog 
  13694. and their ancestors, Dog and SOMObject, is shown in the following figure: 
  13695.  
  13696.  
  13697.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13698.     Γöé           Γöé        Γöé          ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöé LittleDogs Γöé
  13699.     Γöé           Γöé        Γöé          Γöé      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13700.     Γöé SOMObject ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé   Dogs   Γöé      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13701.     Γöé           Γöé        Γöé          ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöé BigDogs    Γöé
  13702.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13703.  
  13704. LittleDogs and BigDogs can be differentiated by the sound, or bark, they make. 
  13705. For this example, instead of making an "Unknown dog noise," little dogs "Yap" 
  13706. and big dogs "WOOF." This means that the LittleDog and BigDog classes implement 
  13707. the bark method inherited from the Dog class differently. In the class 
  13708. definition files for the LittleDog class, this is indicated as a method 
  13709. override, as shown in the following sample code: 
  13710.  
  13711. /*
  13712.  *  Define a subclass of Dog for LittleDogs
  13713.  */
  13714.  
  13715. #ifndef ldog_idl
  13716. #define ldog_idl
  13717.  
  13718. #include <dog.idl>
  13719.  
  13720. interface LittleDog : Dog
  13721. {
  13722.   #ifdef __SOMIDL__
  13723.   implementation
  13724.  
  13725.   {
  13726.     //# Class modifiers
  13727.  
  13728.     callstyle = oidl;    // For compatibility with SOM1
  13729.     majorversion = 1;
  13730.     minorversion = 2;
  13731.  
  13732.     bark: override;
  13733.     // Override the bark method
  13734.   };
  13735.   #endif /* __SOMIDL__ */
  13736. };
  13737. #endif  /* ldog_idl */
  13738.  
  13739. In the class definition files for the BigDog class, this is also indicated as a 
  13740. method override, as shown in the following sample code: 
  13741.  
  13742. /*
  13743.  *  Define a subclass of the class Dog of BigDogs
  13744.  */
  13745.  
  13746. #ifndef bdog_idl
  13747. #define bdog_idl
  13748.  
  13749. #include <dog.idl>
  13750.  
  13751. interface BigDog : Dog
  13752. {
  13753.   #ifdef __SOMIDL__
  13754.   implementation
  13755.  
  13756.   {
  13757.     //# Class modifiers
  13758.  
  13759.     callstyle = oidl;    // For compatibility with SOM1
  13760.     majorversion = 1;
  13761.     minorversion = 2;
  13762.  
  13763.     bark: override;
  13764.     // Override the bark method
  13765.   };
  13766.   #endif /* __SOMIDL__ */
  13767. };
  13768. #endif  /* bdog_idl */
  13769.  
  13770. Because the parent of the LittleDog and BigDog classes is the Dog class, 
  13771. DOG.IDL must be included in the class definition files so that methods of the 
  13772. Dog class are inherited and can be referenced. 
  13773.  
  13774. The implementations of the LittleDog and BigDog classes are similar to the 
  13775. implementation of the Dog class. In the implementation of the LittleDog class, 
  13776. as shown in the following figure, the Include file, LDOG.IH, contains the 
  13777. definitions for LittleDog class data, macros, and functions. The implementation 
  13778. of the bark method reflects the yapping of little dogs. 
  13779.  
  13780. /*
  13781.  *  This file was generated by the SOM compiler and Emitter Framework.
  13782.  *  Generated using:  SOM Emitter emitctm: 2.38
  13783.  */
  13784.  
  13785. #ifndef SOM_Module_ldog_Source
  13786. #define SOM_Module_ldog_Source
  13787. #endif
  13788.  
  13789. #define LittleDog_Class_Source
  13790.  
  13791. #include "ldog.ih"
  13792.  
  13793. /*
  13794.  * Override the bark method
  13795.  */
  13796.  
  13797. SOM_Scope void  SOMLINK bark(LittleDog *somSelf)
  13798.  
  13799. {
  13800.   /* LittleDogData *somThis = LittleDogGetData(somSelf); */
  13801.   LittleDogMethodDebug("LittleDog","bark");
  13802.  
  13803.   /*  LittleDog_parent_Dog_bark(somSelf);  don't call the parent method */
  13804.   somPrintf("yap yap\n");   /* Do small yaps instead */
  13805.   somPrintf("yap yap\n");
  13806. }
  13807.  
  13808. In the implementation of the BigDog class, as shown in the following sample 
  13809. code, the Include file, BDOG.IH, contains the definitions for BigDog class 
  13810. data, macros, and functions. The implementation of the bark method reflects the 
  13811. woofing of big dogs. 
  13812.  
  13813. /*
  13814.  *  This file was generated by the SOM compiler and Emitter Framework.
  13815.  *  Generated using:  SOM Emitter emitctm: 2.38
  13816.  */
  13817.  
  13818. #ifndef SOM_Module_bdog_Source
  13819. #define SOM_Module_bdog_Source
  13820. #endif
  13821.  
  13822. #define BigDog_Class_Source
  13823.  
  13824. #include "bdog.ih"
  13825.  
  13826. /*
  13827.  * Override the bark method
  13828.  */
  13829.  
  13830. SOM_Scope void  SOMLINK bark(BigDog *somSelf)
  13831. {
  13832.   int  i  = 0;   /* Loop index */
  13833.  
  13834.   /* BigDogData *somThis = BigDogGetData(somSelf); */
  13835.   BigDogMethodDebug("BigDog","bark");
  13836.  
  13837.   /* BigDog_parent_Dog_bark(somSelf);  don't call the parent method */
  13838.   for (i=0; i<4; i++)
  13839.   {
  13840.     somPrintf("WOOF WOOF\n");   /* Do woof woof instead */
  13841.   }   /* endfor */
  13842. }
  13843.  
  13844.  
  13845. ΓòÉΓòÉΓòÉ 17.2.8.1. Accessing Public Methods ΓòÉΓòÉΓòÉ
  13846.  
  13847. For a client program of the Dog, BigDog, and LittleDog classes to access public 
  13848. methods for these classes, the client program must include the public class 
  13849. Header (H) files for the respective classes. In the following sample code, the 
  13850. client of these classes includes DOG.H, LDOG.H, and BDOG.H files. 
  13851.  
  13852. /*
  13853.  *  DogsMain.C - A client C program to manipulate Dog, LittleDog,
  13854.  *               and BigDog objects
  13855.  */
  13856.  
  13857. #define INCL_NOPMAPI        /* Makes compilation go faster */
  13858.                             /* for non-PM programs         */
  13859. #define INCL_DOSERRORS
  13860. #define INCL_DOS
  13861.  
  13862. #include <os2.h>
  13863. /* Include declarations for the Dog class       */
  13864. #include "dog.h"
  13865. /* Include declarations for the LittleDog class */
  13866. #include "ldog.h"
  13867. /* Include declarations for the BigDog class    */
  13868. #include "bdog.h"
  13869.  
  13870. int main(VOID)
  13871. {
  13872.   Dog        *Pokey;   /* Define a Dog       */
  13873.   LittleDog  *Zack;    /* Define a LittleDog */
  13874.   BigDog     *Pepper;  /* Define a BigDog    */
  13875.  
  13876.   /* Instantiate some objects */
  13877.   Pokey  = DogNew();
  13878.   Zack   = LittleDogNew();
  13879.   Pepper = BigDogNew();
  13880.  
  13881.   /* Set their breeds */
  13882.    __set_breed(Pokey, "Basset Hound");
  13883.    __set_breed(Zack, "Yorkshire Terrier");
  13884.    __set_breed(Pepper, "Rottweiler");
  13885.  
  13886.   /* Display the dog's characteristics */
  13887.    _display(Pokey);
  13888.    _display(Zack);
  13889.    _display(Pepper);
  13890.  
  13891.   /* Free the dogs  */
  13892.    _somFree(Pokey);
  13893.    _somFree(Zack);
  13894.    _somFree(Pepper);
  13895.  
  13896.    return NO_ERROR;
  13897. }
  13898.  
  13899. The next figure shows the output from this client program. 
  13900.  
  13901. My breed is Basset Hound
  13902. I say
  13903. Unknown Dog Noise
  13904.  
  13905. My breed is Yorkshire Terrier
  13906. I say
  13907. yap yap
  13908. yap yap
  13909.  
  13910. My breed is Rottweiler
  13911. I say
  13912. WOOF WOOF
  13913. WOOF WOOF
  13914. WOOF WOOF
  13915. WOOF WOOF
  13916.  
  13917.  
  13918. ΓòÉΓòÉΓòÉ 17.2.8.2. Defining Metaclasses ΓòÉΓòÉΓòÉ
  13919.  
  13920. In the implementation of the Dog, BigDog, and LittleDog classes, a metaclass is 
  13921. not specified in the Metaclass section of the class definition files. This 
  13922. means that the metaclass of each of these classes is the metaclass of their 
  13923. parent class. The metaclass of the BigDog and LittleDog classes is the 
  13924. metaclass of its parent class, Dog. The metaclass of the Dog class is the 
  13925. metaclass of its parent class, SOMObject. The metaclass of the SOMObject class 
  13926. is SOMClass. SOMClass, then, supplies the constructors for the Dog, BigDog, and 
  13927. LittleDog classes, as well as for SOMObject. 
  13928.  
  13929. If a metaclass is specified in the Metaclass section of the IDL files, a new 
  13930. metaclass is defined for the classes. The new metaclass provides new 
  13931. constructors for the classes. As an example, a new metaclass M_Dog is defined 
  13932. for the Dog class and added to DOG.IDL. The following sample code shows the new 
  13933. DOG.IDL file, including the changes made to the original DOG.IDL file. 
  13934.  
  13935. /*
  13936.  *  Define a metaclass of the Dog class.
  13937.  *  By convention, metaclasses are the class name prefixed with M_
  13938.  */
  13939.  
  13940. #ifndef dogmeta_idl
  13941. #define dogmeta_idl
  13942.  
  13943. #include <somcls.idl>
  13944. #include <somobj.idl>
  13945.  
  13946. interface Dog;   /* Declared later in this file */
  13947. interface M_Dog : SOMClass
  13948. {
  13949.   Dog   CreateADog();
  13950.  
  13951.   // Create an instance of the Dog class and return a pointer to it
  13952.   #ifdef __SOMIDL__
  13953.   implementation
  13954.  
  13955.   {
  13956.     releaseorder:  CreateADog;
  13957.  
  13958.     //# Class modifiers
  13959.  
  13960.     callstyle = oidl;    // For compatibility with SOM1
  13961.     majorversion = 1;
  13962.     minorversion = 2;
  13963.   };
  13964.   #endif   /* __SOMIDL__ */
  13965. };
  13966.  
  13967. /*
  13968.  *   A class defining a set of objects (dogs) with metaclass M_Dog
  13969.  */
  13970.  
  13971. interface Dog : SOMObject
  13972. {
  13973.   attribute string breed;
  13974.  
  13975.   // The breed for the dog
  13976.   void display();
  13977.  
  13978.   // Display characteristics for this dog.
  13979.   // Show the breed and make the dog speak.
  13980.   void bark();
  13981.  
  13982.   // Have the dog bark
  13983.   #ifdef __SOMIDL__
  13984.   implementation
  13985.  
  13986.   {
  13987.     releaseorder:  _get_breed, _set_breed, display, bark;
  13988.  
  13989.     //# Class modifiers
  13990.  
  13991.     callstyle = oidl;    // For compatibility with SOM1
  13992.     majorversion = 1;
  13993.     minorversion = 2;
  13994.     metaclass = M_Dog;   // Explicitly specify a metaclass
  13995.   };
  13996.   #endif   /* __SOMIDL__ */
  13997. };
  13998. #endif   /* dogmeta.idl */
  13999.  
  14000.  
  14001. ΓòÉΓòÉΓòÉ 17.2.8.3. Defining Methods ΓòÉΓòÉΓòÉ
  14002.  
  14003. Because SOMClass is the root class for all metaclasses, M_Dog is derived from 
  14004. SOMClass. This is reflected in the Parent and Include sections in the class 
  14005. definition file for the M_Dog class. The only method that M_Dog defines is 
  14006. CreateADog, that is, the constructor that creates an instance of the dog class, 
  14007. as shown in the following sample code: 
  14008.  
  14009. /*
  14010.  * This file was generated by the SOM compiler and Emitter Framework.
  14011.  * Generated using:  SOM Emitter emitctm: 2.38
  14012.  */
  14013.  
  14014. #ifndef SOM_Module_dogmeta_Source
  14015. #define SOM_Module_dogmeta_Source
  14016. #endif
  14017.  
  14018. #define M_Dog_Class_Source
  14019. #define Dog_Class_Source
  14020.  
  14021. #include "dogmeta.ih"
  14022.  
  14023. /*
  14024.  * Create an instance of the Dog class and return a pointer to it
  14025.  */
  14026.  
  14027. SOM_Scope Dog*  SOMLINK CreateADog(M_Dog *somSelf)
  14028. {
  14029.   Dog   *aNewDog;
  14030.   aNewDog = _somNew(somSelf);
  14031.  
  14032.   /* M_DogData *somThis = M_DogGetData(somSelf); */
  14033.   M_DogMethodDebug("M_Dog","CreateADog");
  14034.  
  14035.   /* Return statement to be customized */
  14036.   return(aNewDog);
  14037. }
  14038.  
  14039. /*
  14040.  * Display characteristics for this dog.
  14041.  * Show the breed and make the dog speak.
  14042.  */
  14043.  
  14044. SOM_Scope void  SOMLINK display(Dog *somSelf)
  14045. {
  14046.   DogData *somThis = DogGetData(somSelf);
  14047.   DogMethodDebug("Dog","display");
  14048.  
  14049.   /* Note there are two underscores before the get_breed below */
  14050.   printf("\nMy breed is %s.\n", __get_breed(somSelf));
  14051.   printf("I say:\n");
  14052.   /* Prefix method name with either an underscore or somThis */
  14053.   _bark(somSelf);
  14054. }
  14055.  
  14056. /*
  14057.  * Have the dog bark
  14058.  */
  14059.  
  14060. SOM_Scope void  SOMLINK bark(Dog *somSelf)
  14061. {
  14062.   DogData *somThis = DogGetData(somSelf);
  14063.   DogMethodDebug("Dog","bark");
  14064.   printf("Unknown dog noise\n");   /* Speak! */
  14065. }
  14066.  
  14067.  
  14068. ΓòÉΓòÉΓòÉ 17.2.8.4. Implementing Metaclasses ΓòÉΓòÉΓòÉ
  14069.  
  14070. The implementation of the M_Dog class is similar to the implementation of the 
  14071. Dog class. However, DOGMETA.C is also a client of the Dog class; CreateADog 
  14072. returns a pointer to an instance of the Dog class. 
  14073.  
  14074. The final implementation of the new Dog class is identical to the previous 
  14075. example. However, clients of the Dog class instantiate instances of the Dog 
  14076. class differently, as shown in the following sample code: 
  14077.  
  14078. /*
  14079.  *  DogMMain.C - Another client C program to manipulate a Dog object
  14080.  */
  14081.  
  14082. /* Makes compile go faster for non-PM programs */
  14083. #define INCL_NOPMAPI
  14084. #define INCL_DOSERRORS
  14085. #define INCL_DOS
  14086.  
  14087. #include <os2.h>
  14088. /* Include declarations for Dog and M_Dog */
  14089. #include "dogmeta.h"
  14090.  
  14091. int main(VOID)
  14092. {
  14093.   Dog  *Zack;
  14094.  
  14095.   /*
  14096.    * Create the Dog class and save a pointer to it.
  14097.    */
  14098.  
  14099.   M_Dog *DogClassObj;
  14100.   DogClassObj = DogNewClass(Dog_MajorVersion, Dog_MinorVersion);
  14101.   Zack = _CreateADog(DogClassObj);
  14102.   __set_breed(Zack, "Yorkshire Terrier");
  14103.   _display(Zack);
  14104.   _somFree(Zack);
  14105.   return NO_ERROR;
  14106. }
  14107.  
  14108. The constructor method, that is, the method that creates instances of an 
  14109. object, for the Dog class is now CreateADog. In the previous examples, the 
  14110. DogNew macro was used to instantiate Dog objects. Because the DogNew macro 
  14111. invokes DogNewClass to create the Dog class object, the previous client 
  14112. programs did not have to invoke DogNewClass directly. Because the 
  14113. implementation of CreateADog does not call DogNewClass, the new client program 
  14114. is required to do so. 
  14115.  
  14116. The parameters for DogNewClass are defined by the class implementer in the 
  14117. DOGMETA.IDL file. MajorVersion and MinorVersion are attributes defined in the 
  14118. attribute section of the IDL file and used by DogNewClass to determine 
  14119. compatibility with versions of the class library. 
  14120.  
  14121.  
  14122. ΓòÉΓòÉΓòÉ 17.2.9. Building SOM Class Libraries ΓòÉΓòÉΓòÉ
  14123.  
  14124. Two basic rules explain the process of building SOM class libraries: 
  14125.  
  14126.      IDL files for a class' metaclass, parent class, or ancestor class are 
  14127.       required for the SOM compiler to process a class definition file. These 
  14128.       files establish the relationships between classes. 
  14129.  
  14130.      H files are required for C-language compiler processing and building of 
  14131.       the class library. These files resolve references to methods defined in 
  14132.       other files. 
  14133.  
  14134.  With these rules in mind, the basic process for building a SOM class library 
  14135.  can be summarized as follows: 
  14136.  
  14137.    1. Create IDL files and do SOM compilation for all parent and ancestor 
  14138.       classes and their related classes. 
  14139.  
  14140.    2. Create IDL files for a class and its metaclass (if any). 
  14141.  
  14142.    3. Compile the metaclass IDL file using SOM. 
  14143.  
  14144.    4. Compile the class IDL file using SOM. 
  14145.  
  14146.    5. Compile C implementation files, in any order, using the C compiler. 
  14147.  
  14148.  
  14149. ΓòÉΓòÉΓòÉ 17.2.10. Converting CSC Files to IDL Files ΓòÉΓòÉΓòÉ
  14150.  
  14151. Object and class definitions written in the OS/2 operating system and prior to 
  14152. OS/2 operating system Version 3, were defined in IBM object interface 
  14153. definition language (OIDL) and placed in a class definition file, also called a 
  14154. CSC file. This file was then used as input to the SOM compiler to generate 
  14155. language binding files. 
  14156.  
  14157. SOM was enhanced to conform with the Object Management Group's (OMG) Common 
  14158. Object Request Broker Architecture (CORBA**) standards. This required changing 
  14159. the syntax of the class definition language from IBM OIDL to CORBA's interface 
  14160. definition language (IDL). The bindings created by the SOM compiler were also 
  14161. changed to make them compatible with the CORBA standards. 
  14162.  
  14163. Class definitions written in OIDL and residing in CSC files should be converted 
  14164. to IDL before being used with the SOM compiler. This conversion allows the use 
  14165. of multiple inheritance, exception handling, type checking, and automatic 
  14166. descriptor support. In addition, the programs generated from IDL class 
  14167. descriptions are significantly smaller and run faster than programs generated 
  14168. from OIDL class definitions. 
  14169.  
  14170.  
  14171. ΓòÉΓòÉΓòÉ 17.2.10.1. CTOI Program ΓòÉΓòÉΓòÉ
  14172.  
  14173. The conversion from a .CSC file to an .IDL file is handled by the CTOI program. 
  14174. For example, to convert the file MYDOG.CSC to an IDL file, make sure all the 
  14175. CSC, SC, and PSC files referenced by MYDOG.CSC are accessible, and then invoke 
  14176. the program as shown in the following command line: 
  14177.  
  14178. ctoi mydog.csc
  14179.  
  14180. Note:  Converting a Workplace Shell application from a CSC file to an IDL file 
  14181.        requires the SC files from the previous OS/2 Toolkit installed on your 
  14182.        system (in the SC directory), and all the ones that you might have 
  14183.        created. The IDL subdirectory from the OS/2 Toolkit contains the IDL 
  14184.        files for the public Workplace Shell classes and objects. 
  14185.  
  14186.  In this example, the CTOI program produces a file called MYDOG.IDL containing 
  14187.  the definitions in IDL format. In many cases, you should be able to compile, 
  14188.  install and run your application without further modification. However, the 
  14189.  following situations will require manual intervention: 
  14190.  
  14191.      Any classes that use IDL reserved words as functions or variable names 
  14192.       need to be changed. For example, "string", "context", "interface". 
  14193.  
  14194.      The SOM compiler no longer generates .SC, .PSC, or .PH files. 
  14195.       Installation and make files that refer to .CSC, .SC, .PSC, or .PH files 
  14196.       need to be changed. 
  14197.  
  14198.      The data declaration changes. Public and private instance variables are 
  14199.       converted to attributes. However, structures and arrays require manual 
  14200.       changes, as shown in the following figure: 
  14201.  
  14202.             OIDL                           IDL
  14203.  
  14204.             data:
  14205.               struct info infoBuffer;      interface: ...   {
  14206.                                               typedef struct info info;
  14207.                                               ...
  14208.                                            implementation {
  14209.                                               info infoBuffer;
  14210.                                               ...
  14211.                                               };
  14212.  
  14213.             data:
  14214.               char achMyArray[20];         interface: ...   {
  14215.                                               typedef char myarraytype[20];
  14216.                                               ...
  14217.                                            implementation {
  14218.                                               attribute myarraytype achMyArray;
  14219.                                               ...
  14220.                                               };
  14221.  
  14222.             data:
  14223.               unsigned char chFlag;        attribute octet chFlag;
  14224.  
  14225.             data:
  14226.               char    *argv[];             char   **argv;
  14227.  
  14228.      IDL does not permit structures to be passed by value. Instead, methods 
  14229.       must pass a pointer to a structure. Methods can return a structure, and 
  14230.       if a method does so, it should have the modifier struct attached to it, 
  14231.       as shown in the following figure: 
  14232.  
  14233.             AStructure resolveMyIdentity(in string pszIdent), struct;
  14234.  
  14235.      The OIDL private qualifier has been removed. Private instance data and 
  14236.       methods must now be enclosed in a special #ifdef directive, as shown in 
  14237.       the following figure: 
  14238.  
  14239.             OIDL                             IDL
  14240.  
  14241.             int x, private;                  #ifdef __PRIVATE__
  14242.                                                 int x;
  14243.             VOID mymethod(), private;           VOID mymethod();
  14244.                                              #endif
  14245.  
  14246.       To include private data and methods in the processing of an IDL file, the 
  14247.       SOM compiler should be invoked with either the -P option or the 
  14248.       -D_PRIVATE_ option, as shown in the following command lines: 
  14249.  
  14250.             sc -p yourname.idl
  14251.  
  14252.             sc -d__PRIVATE__ yourname.idl
  14253.  
  14254.       Note that there are two underscore ( __ ) characters before and after the 
  14255.       word PRIVATE. 
  14256.  
  14257.      Passthru statement processing has changed. Passthru statements should 
  14258.       only be used to pass #include directives to the language binding files. 
  14259.       In addition: 
  14260.  
  14261.         -  Information can no longer be directed to the implementation (.C) 
  14262.            file 
  14263.  
  14264.         -  Most information directed to implementation Header (.IH) files 
  14265.            should be moved to the implementation (.C) file 
  14266.  
  14267.      Forward references are required in IDL. Thus, classes and objects must be 
  14268.       declared before being referenced. The following figure shows an example 
  14269.       to forward reference the M_Cat class: 
  14270.  
  14271.             interface M_Cat;
  14272.  
  14273.  Because IDL is strongly typed (unlike OIDL), data structures and constants 
  14274.  should be declared before referencing them, in order to eliminate unnecessary 
  14275.  warning messages during compilation. This is required if an interface 
  14276.  repository (.IR) file is to be created from the IDL file. 
  14277.  
  14278.  
  14279. ΓòÉΓòÉΓòÉ 18. Workplace Shell Distributed SOM ΓòÉΓòÉΓòÉ
  14280.  
  14281. Distributed SOM (DSOM) provides a framework that allows application programs to 
  14282. access objects across address spaces. That is, application programs can access 
  14283. objects in other processes, even on different machines. Both the location and 
  14284. implementation of an object are hidden from the client which accesses the 
  14285. object (using method calls) in the same manner regardless of its location. 
  14286.  
  14287.  
  14288. ΓòÉΓòÉΓòÉ 18.1. About Workplace Shell Distributed SOM ΓòÉΓòÉΓòÉ
  14289.  
  14290. DSOM currently supports two types of distribution: 
  14291.  
  14292.      Distribution among processes on the same machine, which is referred to as 
  14293.       Workstation DSOM 
  14294.  
  14295.      Distribution among a network of machines, which is referred to as 
  14296.       Workgroup DSOM. 
  14297.  
  14298.  Only Workstation DSOM is provided with the OS/2 operating system. 
  14299.  
  14300.  DSOM is initially disabled in the OS/2 operating system. There are two reasons 
  14301.  for this: 
  14302.  
  14303.      Performance 
  14304.  
  14305.      DSOM can be easily activated as required. Not all users will require DSOM 
  14306.       to be active. Therefore, they should not be penalized with the additional 
  14307.       system overhead. 
  14308.  
  14309.  DSOM packaged with the OS/2 operating system consists of two parts: 
  14310.  
  14311.      DSOM daemon which is also referred to as SOMDD 
  14312.  
  14313.      Workplace Shell DSOM server (WPDS). 
  14314.  
  14315.  The DSOM daemon (SOMDD) has a very important role and must be running at all 
  14316.  times in order to communicate between processes. 
  14317.  
  14318.  The Workplace Shell DSOM server is a generic server whose server class is 
  14319.  wpdServer and is adequate for many environments. The Workplace Shell DSOM 
  14320.  server behaves as a simple server. In that, it simply receives requests and 
  14321.  executes them synchronously. The server creates its server object from the 
  14322.  derived class SOMDServer and will load any class libraries it needs on demand. 
  14323.  For more complex environments where the default server does not provide the 
  14324.  needed functions, the SOMObjects Developer Toolkit User's Guide provides 
  14325.  details for writing your own DSOM server. 
  14326.  
  14327.  
  14328. ΓòÉΓòÉΓòÉ 18.1.1. Starting DSOM ΓòÉΓòÉΓòÉ
  14329.  
  14330. The Workplace Shell, when started, will default to the wpdServer class and load 
  14331. WPDSERV.DLL. If you create a new server class, you can tell the Workplace Shell 
  14332. to use your server by setting WPDSERVERALIAS to YourServer in the CONFIG.SYS 
  14333. file and use regimpl to change the server name from wpdServer to YourServer. 
  14334.  
  14335. There are a number of ways to start the DSOM daemon and Workplace Shell DSOM 
  14336. server. To start both SOMDD and WPDS at the time the OS/2 operating system is 
  14337. started, set WPDSERVERSTART to ON in the CONFIG.SYS file and reboot. Both the 
  14338. daemon and the server are hidden to the user when started. 
  14339.  
  14340. If during development you require to see the output of SOMDD, then set the 
  14341. environment variable SOMDD.DISPLAY to ON in the CONFIG.SYS file and reboot. 
  14342. When using the Workplace Shell DSOM server you should always allow the 
  14343. Workplace Shell to start the DSOM daemon and never start the daemon from a 
  14344. command line. In this way, the Workplace Shell is aware of its existence. 
  14345.  
  14346. In the case, when a client DSOM application is run and only the DSOM daemon is 
  14347. active, then the implementation repository, using the implementation ID passed 
  14348. to it to locate the server definition, starts an executable, WPDSACTV.EXE, 
  14349. which in-turn starts the Workplace Shell DSOM server. Once the server is 
  14350. active, then the client program will continue to process as normal. 
  14351.  
  14352. The OS/2 operating system supplies a utility called WPDSINIT.EXE which provides 
  14353. the functions to start, stop and query the current status of the DSOM daemon 
  14354. and the Workplace Shell DSOM server from the command line: 
  14355.  
  14356.  Function Name       Description 
  14357.  
  14358.  WPDSINIT /S         To start both the daemon and the server. 
  14359.  
  14360.  WPDSINIT /K         To stop both the server and the daemon. 
  14361.  
  14362.  WPDSINIT /Q         To query the current status of both the daemon and the 
  14363.                      server. 
  14364.  
  14365.  The DSOM daemon or the Workplace Shell DSOM server can be manipulated 
  14366.  independently by specifying either somdd or server as the second parameter to 
  14367.  WPDSINIT. 
  14368.  
  14369.  The last method available for manipulating both the daemon and the server is 
  14370.  programmatically through four new functions: 
  14371.  
  14372.      WinIsSOMDDReady 
  14373.      WinRestartSOMDD 
  14374.      WinIsWPDServerReady 
  14375.      WinRestartWPDServer 
  14376.  
  14377.  
  14378. ΓòÉΓòÉΓòÉ 18.1.2. Performance Using DSOM ΓòÉΓòÉΓòÉ
  14379.  
  14380. In a distributed environment, a designer needs to keep in mind the possible 
  14381. performance impacts, because IPC communications is always slower than procedure 
  14382. calls within the same process. Writing a normal Workplace Shell application 
  14383. that runs within the Workplace Shell's process always perform better than an 
  14384. application in another process using DSOM. 
  14385.  
  14386.  
  14387. ΓòÉΓòÉΓòÉ 18.1.3. Initializing a Client Workplace Shell Program ΓòÉΓòÉΓòÉ
  14388.  
  14389. A DSOM application will not execute if the underlying DSOM support is not 
  14390. active. Therefore a good client application might query and save the current 
  14391. state of the DSOM daemon and Workplace Shell DSOM server and start them, if 
  14392. required before issuing any DSOM calls. 
  14393.  
  14394. A client application must declare and initialize the DSOM run-time before 
  14395. attempting to create or access a remote object. The SOMD_Init procedure 
  14396. initializes all of the DSOM run-time. A client application must also merge the 
  14397. SOM class manager with the Workplace Shell class manager and initialize all 
  14398. application classes used by the program. For each class, the corresponding 
  14399. <classname>NewClass call should be made. When creating a Workplace Shell DSOM 
  14400. application, each class referenced in the hierarchy must be initialized. 
  14401.  
  14402.  
  14403. ΓòÉΓòÉΓòÉ 18.1.4. Exiting from a Client Workplace Shell Program ΓòÉΓòÉΓòÉ
  14404.  
  14405. At the end of a client program, the SOMD_Uninit procedure must be called to 
  14406. free DSOM run-time objects, and to release system resources such as semaphores, 
  14407. shared memory segments, and so on. No special action is required for the 
  14408. Workplace Shell. 
  14409.  
  14410.  
  14411. ΓòÉΓòÉΓòÉ 18.2. Using Workplace Shell Distributed SOM ΓòÉΓòÉΓòÉ
  14412.  
  14413. The sample creates and opens a new folder on the Desktop, and then inserts a 
  14414. number of different class objects into that folder, one of which is opened 
  14415. after it is created. It also creates and deletes an abstract object on the 
  14416. Desktop before terminating. 
  14417.  
  14418. Note:  The sample uses the four new functions that are available for 
  14419.        manipulating the daemon and the server: 
  14420.  
  14421.      WinIsSOMDDReady 
  14422.      WinRestartSOMDD 
  14423.      WinIsWPDServerReady 
  14424.      WinRestartWPDServer 
  14425.  
  14426.  This sample Workplace Shell DSOM program demonstrates the minimum Workplace 
  14427.  Shell code required to initialize a simple Workplace Shell DSOM application. 
  14428.  To ensure that it will always run, regardless of the current state of the DSOM 
  14429.  server, the sample queries and saves the state of both the DSOM daemon and the 
  14430.  Workplace Shell DSOM server. The state is saved, so that it can be reset 
  14431.  before the program terminates. 
  14432.  
  14433.  Once the server is active, a local DSOM environment is created by calling 
  14434.  SOM_CreateLocalEnvironment and then register itself with the DSOM daemon by 
  14435.  calling SOMD_Init. Before any Workplace Shell method calls can be made, the 
  14436.  Workplace Shell class manager must be merged with the SOM's class manager, and 
  14437.  then Workplace Shell classes on which method calls will be made must be 
  14438.  initialized. For instance, if you are writing an application that creates an 
  14439.  abstract object on the Desktop and then terminates, both WPObjectNewClass and 
  14440.  WPAbstractNewClass would need to be called because WPAbstract is a descendant 
  14441.  of WPObject. 
  14442.  
  14443.  Next a server must be located to execute the methods on, so 
  14444.  _somdFindServerByName is called to find the Workplace Shell DSOM server 
  14445.  wpdServer. To query the Desktop object, first the class object for WPFolder 
  14446.  must be acquired by calling _somdGetClassObj. With this pointer, finally the 
  14447.  first Workplace Shell method _wpclsQueryFolder is called to acquire a pointer 
  14448.  to the Desktop folder. Once the pointer to the Desktop folder is obtained, 
  14449.  objects are created using _wpclsNew. As soon as the folder object on the 
  14450.  Desktop is created, it uses that object pointer as the target for all the 
  14451.  other objects created. A Details view of the folder is created using _wpSetup 
  14452.  and the new created color palette is opened with a call to _wpOpen. The 
  14453.  abstract object created on the Desktop is finally destroyed with a call to 
  14454.  _wpDelete. 
  14455.  
  14456.  Before terminating, the DSOM environment should be cleaned up by calling the 
  14457.  reverse of initialization: 
  14458.  
  14459.      _somdReleaseObject is called to free the server object 
  14460.  
  14461.      SOMD_Uninit is called to free the DSOM resources 
  14462.  
  14463.      SOM_DestroyLocalEnvironment is called to free the local DSOM environment. 
  14464.  
  14465.  The sample also resets the state of the DSOM daemon and Workplace Shell DSOM 
  14466.  server before terminating. In other words, if the server was active when the 
  14467.  sample application was run, then it will remain active when it terminates. If 
  14468.  on the other hand it was not running, then it will be stopped before the 
  14469.  program terminates. This may not be the desired result in most applications. 
  14470.  If you are running a number of DSOM client applications back to back, then you 
  14471.  will not want ythe application stopping the server each time. In most cases, 
  14472.  you should leave the server active after it is started. 
  14473.  
  14474.  
  14475. ΓòÉΓòÉΓòÉ 18.2.1. Source Code for WPDS ΓòÉΓòÉΓòÉ
  14476.  
  14477. The following example shows the source modules for the sample Workplace Shell 
  14478. DSOM program: 
  14479.  
  14480. /*
  14481.  * Purpose..: To demonstrate how to call Workplace Shell
  14482.  * methods using DSOM.
  14483.  *
  14484.  * Workplace Shell methods called:
  14485.  *        _wpclsQueryFolder()
  14486.  *        _wpclsNew()
  14487.  *        _wpSetup()
  14488.  *        _wpOpen()
  14489.  *        _wpDelete()
  14490.  */
  14491.  
  14492. #pragma info(nogen)
  14493.  
  14494. #include <stdarg.h>
  14495. #include <stdlib.h>
  14496. #include <stdio.h>
  14497. #define  INCL_DOS
  14498. #define  INCL_WINWORKPLACE
  14499. #define  INCL_PM
  14500. #include <os2.h>
  14501. #include <somd.h>
  14502. #include <somtcnst.h>
  14503. #include <wpobject.h>
  14504. #include <wpdesk.h>
  14505. #include <wpabs.h>
  14506. #include <wpfolder.h>
  14507. #include <wptrans.h>
  14508. #include <wpmet.h>
  14509. #include <wpclrpal.h>
  14510. #include <wpdataf.h>
  14511. #include <wpclsmgr.h>
  14512.  
  14513. enum {STOP, START};
  14514.  
  14515. WPClassManager *vWPClassManagerObject;
  14516.  
  14517. BOOL       checkForError(Environment *, char *, ...);
  14518. SOMClass * getClassObject(SOMClass *, Environment *, string);
  14519.  
  14520. int main(int argc, char *argv[])
  14521. {
  14522.   Environment *ev;
  14523.   SOMClass   *Server;
  14524.   SOMObject  *objDesktop;
  14525.   SOMObject  *objWPAbs;
  14526.   SOMObject  *objWPFolder;
  14527.   SOMObject  *object;
  14528.   M_WPFolder *classFolder;
  14529.   APIRET     apiRtnCd;
  14530.   BOOL       fDaemonUp;
  14531.   BOOL       fServerUp;
  14532.  
  14533.   /*
  14534.    * Check if the DSOM daemon is active.
  14535.    * If not, it needs to be started before continuing.
  14536.    */
  14537.   fDaemonUp = WinIsSOMDDReady();
  14538.   if (!fDaemonUp)
  14539.   {
  14540.     apiRtnCd = WinRestartSOMDD(START);
  14541.     if (apiRtnCd)
  14542.     {
  14543.       somPrintf("Unable to start the DSOM dameon, rc=%ld\n", apiRtnCd);
  14544.       exit(apiRtnCd);
  14545.     }
  14546.   }
  14547.  
  14548.   /*
  14549.    * Check if the Workplace Shell DSOM server is up and running.
  14550.    * If not, it needs to be started before continuing.
  14551.    */
  14552.   fServerUp = WinIsWPDServerReady();
  14553.   if (!fServerUp)
  14554.   {
  14555.     apiRtnCd = WinRestartWPDServer(START);
  14556.     if (apiRtnCd)
  14557.     {
  14558.       somPrintf("Unable to start the DSOM server, rc=%ld\n", apiRtnCd ;
  14559.       exit(apiRtnCd);
  14560.     }
  14561.   }
  14562.  
  14563.   /*
  14564.    * Create the local DSOM environment
  14565.    */
  14566.   ev = SOM_CreateLocalEnvironment();
  14567.   SOMD_Init(ev);
  14568.  
  14569.   /*
  14570.    * Merge the Workplace Shell class manager with the
  14571.    * SOM class manager
  14572.    */
  14573.   vWPClassManagerObject = WPClassManagerNew();
  14574.   _somMergeInto(SOMClassMgrObject, vWPClassManagerObject);
  14575.  
  14576.   /*
  14577.    * Initialize all the Workplace Shell classes used by the program
  14578.    */
  14579.   WPObjectNewClass( 1, 1 );
  14580.   WPTransientNewClass( 1, 1 );
  14581.   WPAbstractNewClass( 1, 1 );
  14582.   WPFileSystemNewClass( 1, 1 );
  14583.   WPDataFileNewClass( 1, 1 );
  14584.   WPFolderNewClass( 1, 1 );
  14585.   WPMetNewClass( 1, 1 );
  14586.   WPDesktopNewClass( 1, 1 );
  14587.  
  14588.   /*
  14589.    * Find the Workplace Shell DSOM server by its name
  14590.    */
  14591.   Server = _somdFindServerByName(SOMD_ObjectMgr, ev, "wpdServer");
  14592.   checkForError(ev, "Could not find server 'wpdServer'\n");
  14593.  
  14594.   /*
  14595.    * Get a pointer to the WPFolder's class object
  14596.    */
  14597.   classFolder = getClassObject(Server, ev, "WPFolder");
  14598.  
  14599.   /*
  14600.    * Get the object pointer of the Desktop folder
  14601.    */
  14602.   objDesktop = _wpclsQueryFolder(classFolder, "<WP_DESKTOP>", TRUE);
  14603.   if (objDesktop)
  14604.   {
  14605.     /* Create an abstract object on the Desktop */
  14606.     somPrintf("Creating a WPAbstract object on Desktop: ");
  14607.     objWPAbs = _wpclsNew(getClassObject(Server, ev, "WPAbstract"),
  14608.                          "WPAbstract Object",   /* Title of the object */
  14609.                          "",                    /* Setup string        */
  14610.                          objDesktop,            /* Target folder       */
  14611.                          TRUE);                 /* Never dormant       */
  14612.     somPrintf("%s\n", objWPAbs ? "Succeeded" : "\aFailed");
  14613.  
  14614.     /*
  14615.      * Create a WPFolder object on the Desktop
  14616.      */
  14617.     somPrintf("Creating a opened WPFolder object on Desktop: ");
  14618.     objWPFolder = _wpclsNew(classFolder,                 /* Object's class name  */
  14619.                             "WPFolder Object",           /* Title of the object  */
  14620.                             "OPEN=ICON;ALWAYSSORT=YES",  /* Setup string         */
  14621.                             objDesktop,                  /* Target folder        */
  14622.                             TRUE );                      /* Never dormant        */
  14623.     somPrintf("%s\n", objWPFolder ? "Succeeded" : "\aFailed");
  14624.  
  14625.     /*
  14626.      * Create a WPDataFile object in the new folder on the Desktop
  14627.      */
  14628.     somPrintf("Creating a WPDataFile object in folder: ");
  14629.     object = _wpclsNew(getClassObject(Server, ev, "WPDataFile"),
  14630.                        "WPDataFile Object",   /* Title of the object */
  14631.                        "",                    /* Setup string        */
  14632.                        objWPFolder,           /* Target folder       */
  14633.                        TRUE);                 /* Never dormant       */
  14634.     somPrintf("%s\n", object ? "Succeeded" : "\aFailed");
  14635.  
  14636.     /*
  14637.      * Create a WPTransient object in the folder
  14638.      */
  14639.     somPrintf("Creating a WPTransient object in folder: ");
  14640.     object = _wpclsNew(getClassObject(Server, ev, "WPTransient"),
  14641.                        "WPTransient Object",   /* Title of the object */
  14642.                        "",                     /* setup string        */
  14643.                        objWPFolder,            /* Target folder       */
  14644.                        TRUE);                  /* Never dormant       */
  14645.     somPrintf( "%s\n", object ? "Succeeded" : "\aFailed" );
  14646.  
  14647.     /*
  14648.      * Create a metafile object in the folder
  14649.      */
  14650.     somPrintf("Creating a WPMet object in folder: ");
  14651.     object = _wpclsNew(getClassObject(Server, ev, "WPMet"),
  14652.                        "WPMet Object",   /* Title of the object */
  14653.                        "",               /* setup string        */
  14654.                        objWPFolder,      /* Target folder       */
  14655.                        TRUE);            /* Never dormant       */
  14656.     somPrintf("%s\n", object ? "Succeeded" : "\aFailed");
  14657.  
  14658.     /*
  14659.      * Open a Detail view of the folder
  14660.      */
  14661.     _wpSetup(objWPFolder, "OPEN=DETAILS");
  14662.  
  14663.     /*
  14664.      * Create a color palette in the folder and open palette
  14665.      */
  14666.     somPrintf("Creating a WPColorPalette object in folder: ");
  14667.     object = _wpclsNew(getClassObject(Server, ev, "WPColorPalette") ,
  14668.                        "WPColorPalette Object",   /* Title of the object */
  14669.                        "",                        /* Setup string        */
  14670.                        objWPFolder,               /* Target folder       */
  14671.                        TRUE);                     /* Never dormant       */
  14672.  
  14673.     somPrintf("%s\n", object ? "Succeeded" : "\aFailed");
  14674.     _wpOpen(object, NULLHANDLE, OPEN_DEFAULT, 0L);
  14675.     somPrintf("Deleting the WPAbstract object on the Desktop.\n");
  14676.     _wpDelete(objWPAbs, 0);
  14677.   }
  14678.   else
  14679.   {
  14680.     somPrintf("\aUnable to acquire the Desktop object pointer\n");
  14681.   }
  14682.  
  14683.   /*
  14684.    * Clean up the DSOM environment
  14685.    */
  14686.   _somdReleaseObject(SOMD_ObjectMgr, ev, Server);
  14687.   checkForError(ev, "_somdReleaseObject failed\n");
  14688.   SOMD_Uninit(ev);
  14689.   SOM_DestroyLocalEnvironment(ev);
  14690.  
  14691.   /*
  14692.    * If the Workplace Shell DSOM server was started
  14693.    * then, lets stop it before terminating
  14694.    */
  14695.   if (!fServerUp)
  14696.   {
  14697.     apiRtnCd = WinRestartWPDServer(STOP);
  14698.     if (apiRtnCd)
  14699.       somPrintf("Stopping the DSOM server was unsucessful, rc=%ld\n", apiRtnCd);
  14700.   }
  14701.  
  14702.   if (!fDaemonUp)
  14703.   {
  14704.     ULONG count = 0;
  14705.  
  14706.     /*
  14707.      * Loop until the server thread ends or the program times out
  14708.      */
  14709.     while(WinIsWPDServerReady())
  14710.     {
  14711.       HEV hev;
  14712.  
  14713.       /*
  14714.        * First create a private, reset, event semaphore.
  14715.        * Wait for 1 second, then try again for a maximum
  14716.        * of 30 seconds
  14717.        */
  14718.       DosCreateEventSem((PSZ) NULL, &hev, 0, FALSE);
  14719.       DosWaitEventSem(hev, 1000);
  14720.       if (count++ > 30)
  14721.         break;
  14722.     }
  14723.     apiRtnCd = WinRestartSOMDD(STOP);
  14724.     if (apiRtnCd)
  14725.       somPrintf("Stopping the DSOM daemon was unsucessful, rc=%ld\n", apiRtnCd);
  14726.   }
  14727.   return 0;
  14728. } /* End of main() */
  14729.  
  14730. /* getClassObject */
  14731. SOMClass *getClassObject(SOMClass *Server, Environment *ev, string sClassName)
  14732. {
  14733.   SOMClass *ClassObj = NULL;
  14734.   ClassObj = _somdGetClassObj(Server, ev, sClassName);
  14735.   if (checkForError(ev, NULL) || ClassObj == NULL)
  14736.   {
  14737.     somPrintf("\aCould not find class '%s'\n", sClassName);
  14738.     ClassObj = NULL;
  14739.   }
  14740.   return ClassObj;
  14741. }
  14742.  
  14743. /* Check for errors */
  14744. BOOL checkForError(Environment *ev, char *pchFmt, ...)
  14745. {
  14746.   va_list  vargs;
  14747.   char *exId;
  14748.   APIRET apiRtnCd = FALSE;
  14749.  
  14750.   switch(ev->_major)
  14751.   {
  14752.     case SYSTEM_EXCEPTION:
  14753.     {
  14754.       StExcep *params;
  14755.       exId   = somExceptionId(ev);
  14756.       params = somExceptionValue(ev);
  14757.       somPrintf("\a** Error Occurred **\n");
  14758.       somPrintf("** exception string: %s\n", exId);
  14759.       somPrintf("** minor error code: %u\n", params->minor);
  14760.       somPrintf("** completion code: %s\n",
  14761.                 (params->completed == YES ? "YES" :
  14762.                  params->completed == NO ? "NO": "MAYBE" ));
  14763.       somExceptionFree(ev);
  14764.  
  14765.       if (pchFmt)
  14766.       {
  14767.         char achBuf[1024];
  14768.         va_start(vargs, pchFmt);
  14769.         vsprintf(achBuf, pchFmt, vargs);
  14770.         somPrintf(achBuf);
  14771.         va_end(vargs);
  14772.         SOMD_Uninit(ev);
  14773.         SOM_DestroyLocalEnvironment(ev);
  14774.         exit(1);
  14775.       }
  14776.       apiRtnCd = TRUE;
  14777.       break;
  14778.     }
  14779.  
  14780.     case USER_EXCEPTION:
  14781.     {
  14782.       if (pchFmt)
  14783.       {
  14784.         char achBuf[1024];
  14785.         va_start(vargs, pchFmt);
  14786.         vsprintf(achBuf, pchFmt, vargs);
  14787.         somPrintf(achBuf);
  14788.         va_end(vargs);
  14789.       }
  14790.       apiRtnCd = TRUE;
  14791.       break;
  14792.     }
  14793.  
  14794.     default:
  14795.     case NO_EXCEPTION:
  14796.     {
  14797.       apiRtnCd = FALSE;
  14798.       break;
  14799.     }
  14800.   }
  14801.   return(apiRtnCd);
  14802. }
  14803. #pragma info(nouse)
  14804.  
  14805.  
  14806. ΓòÉΓòÉΓòÉ 18.2.2. Resource Definition File for WPDS ΓòÉΓòÉΓòÉ
  14807.  
  14808. The following example shows the resource definition file: 
  14809.  
  14810. NAME WPDS WINDOWCOMPAT
  14811. DESCRIPTION 'WPDS: Sample Workplace Shell DSOM program.'
  14812. PROTMODE
  14813. CODE LOADONCALL MOVEABLE DISCARDABLE
  14814. DATA MULTIPLE NONSHARED LOADONCALL
  14815.  
  14816.  
  14817. ΓòÉΓòÉΓòÉ 18.2.3. Make File for WPDS ΓòÉΓòÉΓòÉ
  14818.  
  14819. The following example shows the make file: 
  14820.  
  14821. app     = wpds
  14822. TOOLKIT = c:\toolkit
  14823. IBMCPP  = c:\ibmcpp
  14824.  
  14825. CC      = icc
  14826. LINKER  = link386
  14827. LIBLIST = os2386 + somtk + dde4mbs
  14828. INCLUDE = $(TOOLKIT)\h;$(IBMCPP)\include;.;$(INCLUDE)
  14829. LIB     = $(TOOLKIT)\lib;$(IBMCPP)\lib;$(LIB)
  14830. CFLAGS  = -D_OS2 -c -Q+ -Ss+ -Gd- -Gm+ -Gs+ -Sm -Kb -Ms -Ge+
  14831. LFLAGS  = /exepack /packd /packc /align:4 /stack:360000 /pm:vio /noi /nol /map
  14832.  
  14833. #
  14834. # Set the local environment here
  14835. #
  14836. !if [set INCLUDE=$(INCLUDE);.] || \
  14837.     [set LIB=$(LIB)] || \
  14838.     [set PATH=$(TOOLKIT)\bin;$(IBMCPP)\bin;%path%]
  14839. !endif
  14840.  
  14841. .SUFFIXES:  .obj .c .h
  14842.  
  14843. .c.obj:     $(CC) $(CFLAGS) $<
  14844.  
  14845. all:        $(app).exe
  14846.  
  14847. $(app).obj: $(app).c
  14848.             $(CC) $(CFLAGS) $(app).c
  14849.  
  14850. $(app).exe: $(app).obj
  14851.             $(LINKER) $(LFLAGS) $(app).obj,$(app).exe,$(app).map,$(LIBLIST),$(app);
  14852.             mapsym $(app).map
  14853.  
  14854.  
  14855. ΓòÉΓòÉΓòÉ 19. Workplace Shell Processes and Threads ΓòÉΓòÉΓòÉ
  14856.  
  14857. The Workplace Shell's current implementation exploits the multithreading 
  14858. capabilities of the OS/2 operating system. This chapter describes how the 
  14859. Workplace Shell is initialized, the relationship between its various threads, 
  14860. and ramifications on Workplace Shell method invocation. 
  14861.  
  14862.  
  14863. ΓòÉΓòÉΓòÉ 19.1. About Workplace Shell Processes and Threads ΓòÉΓòÉΓòÉ
  14864.  
  14865. The Workplace process is the one under which all the Workplace Shell classes 
  14866. are loaded and initialized. Therefore, objects representing Workplace Shell 
  14867. classes and their subclasses must run on this process. The Workplace process is 
  14868. actually launched from the Shell process, which is the process indicated in the 
  14869. SET PROTSHELL= statement in the CONFIG.SYS file. Once the Shell process is 
  14870. running, it starts the Workplace process. It is the Shell process that is 
  14871. responsible for restarting the Workplace process in the event that it is ended 
  14872. as a result of a trap. The PROTSHELL= statement in the CONFIG.SYS file 
  14873. indicates which process is to be launched as the Shell process. The SET 
  14874. RUNWORKPLACE= statement in the CONFIG.SYS file indicates which process is to be 
  14875. the Workplace process. In the default configuration, both the PROTSHELL and 
  14876. RUNWORKPLACE environment variables are set to PMSHELL.EXE. PMSHELL.EXE is 
  14877. designed to distinguish between being started as the Shell process versus being 
  14878. started as the Workplace process. The following diagram illustrates the 
  14879. initialization sequence: 
  14880.  
  14881.  
  14882.          Shell Process                         Workplace Process
  14883.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14884.       Γöé                   Γöé                    Γöé               
  14885.       ΓöéPMSHELL.EXE SessionΓöé                    Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14886.       Γöé                   Γöé                    Γöé   Γöé PMSHELL.EXE Session       Γöé
  14887.       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    Γöé   Γöé                           Γöé
  14888.               Γöé                                Γöé   Γöé If (Workplace_Process)    Γöé
  14889.               Γöé                                Γöé   Γöé     Start Workplace Shell Γöé
  14890.               Γöé                                Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14891.               Γöé                                Γöé               Γöé
  14892.                                               Γöé               
  14893.      Create Window List                        Γöé           SOM Is Initialized
  14894.      Start Starter Thread                      Γöé           Classes Are Loaded
  14895.            Γöé                                   Γöé           Desktop Is Opened
  14896.            ΓööΓöÇ Starter Thread                  Γöé           Restart List Is Processed
  14897.                {                               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Etc...
  14898.                  While (TRUE)                            Γöé
  14899.                  {                                       Γöé
  14900.                    If (Workplace Process Is Not Running) Γöé
  14901.                      Launch PMSHELL.EXE;                 Γöé
  14902.                  }                 Γöé                     Γöé
  14903.                }                   Γöé                     Γöé
  14904.                                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14905.  
  14906.  
  14907. ΓòÉΓòÉΓòÉ 19.1.1. The Shell Process ΓòÉΓòÉΓòÉ
  14908.  
  14909. While the Shell process can be any application (xxx.EXE), PMSHELL.EXE is the 
  14910. default. This section describes the behavior of PMSHELL.EXE specifically. The 
  14911. important features of the Shell process are as follows: 
  14912.  
  14913.      The Starter thread is always running on the main Shell process. 
  14914.  
  14915.      If the Starter thread detects that the Workplace process is not started 
  14916.       or has died, it will automatically restart it. 
  14917.  
  14918.  The threads in this section are initiated from the Shell process and are 
  14919.  closely tied to the functioning of the Workplace process. 
  14920.  
  14921.  
  14922. ΓòÉΓòÉΓòÉ 19.1.1.1. The Starter Thread ΓòÉΓòÉΓòÉ
  14923.  
  14924. The Starter thread runs on the Shell process and is mainly responsible for 
  14925. starting the Workplace process. It will automatically restart the Workplace 
  14926. process in the event that the: 
  14927.  
  14928.      Workplace process might trap 
  14929.  
  14930.      User code running on the Workplace process might trap. 
  14931.  
  14932.  In addition, the Starter thread is responsible for starting all applications 
  14933.  as children of the first Shell process instead of children of the Workplace 
  14934.  process. Thus, when the Workplace process needs to be restarted, all 
  14935.  applications that were run from it continue to function normally, while the 
  14936.  Workplace process is restarted. 
  14937.  
  14938.  Since applications that were initiated by a user action in the Workplace Shell 
  14939.  are really started from this thread, when such applications are terminated, 
  14940.  the Starter thread must pass a corresponding notification back to the 
  14941.  Workplace process. 
  14942.  
  14943.  
  14944. ΓòÉΓòÉΓòÉ 19.1.1.2. The Shutdown Thread ΓòÉΓòÉΓòÉ
  14945.  
  14946. When a shutdown is initiated, the Shutdown thread is created on the Shell 
  14947. process. The Shutdown thread closes all running applications in the system. The 
  14948. Shutdown thread creates a PM message queue. It broadcasts to all applications a 
  14949. message instructing them to save their data, initiates the closing of all open 
  14950. folders, and so on. 
  14951.  
  14952. Each child process of the Shell process will send a WM_APPTERMINATENOTIFY to 
  14953. the Shell process when it goes away. Unless a shutdown is in effect, when the 
  14954. Shell process receives such notification for the Workplace process, it will 
  14955. restart the Workplace process. 
  14956.  
  14957.  
  14958. ΓòÉΓòÉΓòÉ 19.1.2. The Workplace Process ΓòÉΓòÉΓòÉ
  14959.  
  14960. When started, the Workplace process' first thread becomes the User-interface 
  14961. thread. The User-interface thread is the one responsible for monitoring the 
  14962. Workplace Shell's PM message queue and dispatching the appropriate actions 
  14963. based on which messages come through. The User-interface thread is the one that 
  14964. most noticeably affects the user's perception of response time. Therefore, it 
  14965. is mandatory that only the minimum amount of processing takes place on that 
  14966. thread. There are a set of other threads that are also started at different 
  14967. times during the lifetime of the Workplace process. There are divided into two 
  14968. major categories: 
  14969.  
  14970.      Mandatory threads which are always running 
  14971.  
  14972.      Transient threads which are started and stopped over time. 
  14973.  
  14974.  The following diagram shows the Shell and Workplace process and their threads. 
  14975.  The asterisk (*) indicates the transient threads. 
  14976.  
  14977.                 Shell Process                ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Workplace Process
  14978.               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14979.               Γöé                        Γöé     Γöé       Γöé Mandatory Threads:       Γöé
  14980.               Γöé                        Γöé  Launches   Γöé  Object Thread           Γöé
  14981.               Γöé Starter Thread ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ       Γöé  Lazy Writer Thread      Γöé
  14982.               Γöé Shutdown Thread*       Γöé             Γöé  Sleepy Time Thread      Γöé
  14983.               Γöé                        Γöé             Γöé  Wheel Watcher Thread    Γöé
  14984.               Γöé                        Γöé             Γöé  Process Queue Thread    Γöé
  14985.               Γöé                        Γöé             Γöé  Ager Thread             Γöé
  14986.               Γöé                        Γöé             Γöé                          Γöé
  14987.               Γöé                        Γöé             Γöé Transient Threads:       Γöé
  14988.               Γöé                        Γöé             Γöé  Populate Thread*        Γöé
  14989.               Γöé                        Γöé             Γöé  Asynch Refresh Thread*  Γöé
  14990.               Γöé                        Γöé             Γöé  Add First Child Thread* Γöé
  14991.               Γöé                        Γöé             Γöé  Vacate Folder Thread*   Γöé
  14992.               Γöé                        Γöé             Γöé  Tasking Thread*         Γöé
  14993.               Γöé                        Γöé             Γöé  Printer Thread*         Γöé
  14994.               Γöé                        Γöé             Γöé  Finder Thread*          Γöé
  14995.               Γöé                        Γöé             Γöé                          Γöé
  14996.               Γöé Specified by           Γöé             Γöé  Specified by            Γöé
  14997.               Γöé PROTSHELL              Γöé             Γöé  RUNWORKPLACE            Γöé
  14998.               Γöé (PMSHELL.EXE)          Γöé             Γöé  (PMSHELL.EXE)           Γöé
  14999.               ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15000.                 Γöé          Γöé          Γöé
  15001.              Launches   Launches   Launches
  15002.                 Γöé          Γöé          Γöé
  15003.                                     
  15004.              Appl. 1    Appl. 2    Appl. n
  15005.              Process    Process    Process
  15006.             ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ
  15007.             ΓöéAPP1.EXEΓöé ΓöéAPP2.EXEΓöé ΓöéAPPn.EXEΓöé
  15008.             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15009.  
  15010.  
  15011. ΓòÉΓòÉΓòÉ 19.1.2.1. Mandatory Threads ΓòÉΓòÉΓòÉ
  15012.  
  15013. The mandatory threads are as follows: 
  15014.  
  15015.      Object 
  15016.  
  15017.      Lazy writer 
  15018.  
  15019.      Sleepy time 
  15020.  
  15021.      Wheel watcher 
  15022.  
  15023.      Process queue 
  15024.  
  15025.      Ager. 
  15026.  
  15027.  
  15028. ΓòÉΓòÉΓòÉ 19.1.2.1.1. The Object Thread ΓòÉΓòÉΓòÉ
  15029.  
  15030.  
  15031. The Object thread represents the Workplace object window. It is not visible. It 
  15032. is used to offload I/O intensive operations from the main user-interface 
  15033. thread. The Object thread has a PM message queue. It utilizes an event 
  15034. semaphore, which it uses to signal the Sleepy time thread when the object 
  15035. thread is idle. The Sleepy time thread uses this event semaphore to throttle 
  15036. itself so that it does not fill the Object thread's message queue with make 
  15037. dormant messages, which would implicitly keep the Object thread's priority 
  15038. higher than the main User-interface thread's priority, and cause visibly 
  15039. noticeable delays in response time. 
  15040.  
  15041. Some of the notifications received and processed by the Object thread are as 
  15042. follows: 
  15043.  
  15044.      Receives notification from PMSHAPI when program groups or their contents 
  15045.       are added or deleted 
  15046.  
  15047.      Receives notification from the Starter thread when an application that 
  15048.       the Workplace process asked to run gets terminated 
  15049.  
  15050.      Receives notification that an object needs to be made dormant 
  15051.  
  15052.      Processes messages for class loading, unloading and replacement which are 
  15053.       sent by functions such as WinRegisterObjectClass and 
  15054.       WinReplaceObjectClass 
  15055.  
  15056.      Receives notification that a file system notification needs to be 
  15057.       processed in the Workplace Shell 
  15058.  
  15059.      Processes messages sent by functions such as WinCreateObject, 
  15060.       WinDestroyObject, and WinSetObjectData 
  15061.  
  15062.      Processes some of the shutdown process. 
  15063.  
  15064.  
  15065. ΓòÉΓòÉΓòÉ 19.1.2.1.2. The Lazy Writer Thread ΓòÉΓòÉΓòÉ
  15066.  
  15067.  
  15068. The Lazy writer thread is responsible for writing objects' state in its 
  15069. persistent form. A wpSaveDeferred results in an object subsequently being 
  15070. processed by this thread. When the Lazy writer thread stores an object, it will 
  15071. call _wpSaveState. This thread does not have a PM message queue. 
  15072. Synchronization is controlled by event semaphores that are signaled from 
  15073. various other threads. The Lazy writer thread detects periods of file system 
  15074. inactivity, as well as other heuristics, and at such times performs actions 
  15075. such as: 
  15076.  
  15077.      Storing file system objects' handles to the OS2SYS.INI file 
  15078.  
  15079.      Storing abstract objects' handles to the OS2.INI file 
  15080.  
  15081.      Saving all objects on the Dirty list 
  15082.  
  15083.      Saving the restart list 
  15084.  
  15085.      Saving any updated window positions to the OS2.INI file 
  15086.  
  15087.      Updating the PM_Workplace:Locations entry in the OS2.INI file. 
  15088.  
  15089.  
  15090. ΓòÉΓòÉΓòÉ 19.1.2.1.3. The Sleepy Time Thread ΓòÉΓòÉΓòÉ
  15091.  
  15092.  
  15093. An object, in its dormant state, consists of a block of data written in a 
  15094. persistent form, for example, a series of appnames in the INI file, or a file's 
  15095. extended attributes. Conversely, when an object is awake, it is instantiated in 
  15096. memory. To reduce the number of objects that exist in memory, when objects are 
  15097. no longer visually exposed, they are added to a list of sleeping objects. The 
  15098. Sleepy time thread maintains this list of objects that may need to be made 
  15099. dormant, and progressively ages them until they are either removed from the 
  15100. sleepy object list, or until they need to be made dormant. Incidentally, when 
  15101. an object is locked it cannot be made dormant. This prevents objects that may 
  15102. not be visibly exposed to remain in memory on demand. The Sleepy time thread 
  15103. sends a notification to the Object thread, which will cause the object to be 
  15104. made dormant, when it has been on the sleepy object list for the 
  15105. OBJECTSNOOZETIME period specified in the CONFIG.SYS file. 
  15106.  
  15107.  
  15108. ΓòÉΓòÉΓòÉ 19.1.2.1.4. The Wheel Watcher Thread ΓòÉΓòÉΓòÉ
  15109.  
  15110.  
  15111. The Wheel watcher thread is responsible for catching notifications from the 
  15112. file system regarding the Move, Copy, Delete, Rename, ... commands. Only the 
  15113. Workplace process in the operating system can receive these notifications. File 
  15114. system notifications are then added to a system queue, which is monitored by 
  15115. another thread on the Workplace process, the Process queue thread. The Wheel 
  15116. watcher thread does not maintain a PM message queue. 
  15117.  
  15118.  
  15119. ΓòÉΓòÉΓòÉ 19.1.2.1.5. The Process Queue Thread ΓòÉΓòÉΓòÉ
  15120.  
  15121.  
  15122. The Process queue thread takes file system notifications from a queue and uses 
  15123. heuristics to determine if successive notifications: 
  15124.  
  15125.      Are redundant 
  15126.  
  15127.      Cancel each other out 
  15128.  
  15129.      Are necessary, for example, if the folder containing the object in 
  15130.       question is not awake. 
  15131.  
  15132.  If not, a notification is then handed off to a third thread, the Ager thread. 
  15133.  The Process queue thread does not maintain a PM message queue. 
  15134.  
  15135.  
  15136. ΓòÉΓòÉΓòÉ 19.1.2.1.6. The Ager Thread ΓòÉΓòÉΓòÉ
  15137.  
  15138.  
  15139. The Ager thread is responsible for aging notifications for an appropriate 
  15140. amount of time so that intermediate file system modifications are not 
  15141. unnecessarily processed by the Workplace Shell. For example, removing the 
  15142. possibility of a short-lived, application generated file from appearing and 
  15143. then immediately disappearing from the view of an open folder. When a 
  15144. notification has aged appropriately, the Ager thread notifies the Object thread 
  15145. that a notification is ready. The actual processing of the notification takes 
  15146. place from the Object thread, upon receiving such notification. 
  15147.  
  15148.  
  15149. ΓòÉΓòÉΓòÉ 19.1.2.2. Transient Threads ΓòÉΓòÉΓòÉ
  15150.  
  15151. Other threads' lifetimes are brief and may be started and restarted many times. 
  15152. The Transient threads are as follows: 
  15153.  
  15154.      Populate 
  15155.      Asynch refresh 
  15156.      Add first child 
  15157.      Vacate folder 
  15158.      Tasking 
  15159.      Printer 
  15160.      Finder. 
  15161.  
  15162.  
  15163. ΓòÉΓòÉΓòÉ 19.1.2.2.1. The Populate Thread ΓòÉΓòÉΓòÉ
  15164.  
  15165.  
  15166. The Populate thread is created when a folder is opened. It is from this thread 
  15167. that _wpPopulate is invoked. wpPopulate is responsible for finding and 
  15168. instantiating from their persistent state all objects that reside in a 
  15169. particular folder. Because this is very I/O intensive, this is handled 
  15170. asynchronously. The Populate thread is responsible for sending messages to the 
  15171. container instructing it to add new records representing the newly instantiated 
  15172. objects. 
  15173.  
  15174.  
  15175. ΓòÉΓòÉΓòÉ 19.1.2.2.2. The Asynch Refresh Thread ΓòÉΓòÉΓòÉ
  15176.  
  15177.  
  15178. The Asynch refresh thread may be created by wpPopulate when the folder, for 
  15179. which the populate was requested, was already previously populated, and no open 
  15180. views currently exist. The Asynch refresh thread simply invokes wpRefresh on a 
  15181. specified folder. This thread creates a PM message queue. It is also initiated 
  15182. when Refresh now is selected from an open folder's pop-up menu. 
  15183.  
  15184.  
  15185. ΓòÉΓòÉΓòÉ 19.1.2.2.3. The Add First Child Thread ΓòÉΓòÉΓòÉ
  15186.  
  15187.  
  15188. The Add first child thread is initiated when it is requested that a folder, 
  15189. opened in Tree view, be populated. Because in the open Tree view, every visible 
  15190. folder containing subfolders must have a plus (+) sign next to it, each visible 
  15191. folder must be populate one level deep to see if it contains at least one 
  15192. subfolder. Because there can be many such folders, this processing is done on a 
  15193. thread other than the main User-interface thread. 
  15194.  
  15195. The Add first child thread is also created when a folder is added to or removed 
  15196. from: 
  15197.  
  15198.      An open Tree view 
  15199.      One of the subfolders in an open Tree view, 
  15200.  
  15201.  so that its plus sign can be modified appropriately. This thread uses a round 
  15202.  robin queue to fairly service folders that need processing. This is so that if 
  15203.  several folders are opened in Tree view, visible subfolders will be processed 
  15204.  in turn, rather than one view being handled at a time. When this queue is 
  15205.  full, _wpAddFirstChild is invoked synchronously. The Add first child thread 
  15206.  creates a PM message queue. 
  15207.  
  15208.  
  15209. ΓòÉΓòÉΓòÉ 19.1.2.2.4. The Vacate Folder Thread ΓòÉΓòÉΓòÉ
  15210.  
  15211.  
  15212. The Vacate folder thread is invoked when a folder is closed. The Vacate folder 
  15213. thread saves the folder's icon positions, along with other information 
  15214. pertaining to its window position. It then sends a message to the folder's 
  15215. container causing it to invoke WinDestroyWindow on itself. 
  15216.  
  15217.  
  15218. ΓòÉΓòÉΓòÉ 19.1.2.2.5. The Tasking Thread ΓòÉΓòÉΓòÉ
  15219.  
  15220.  
  15221. The Tasking thread is invoked to perform user-initiated tasks such as Copy, 
  15222. Move, Link, and Create another operations on a separate thread, so that it does 
  15223. not interfere with the main User-interface thread's response time. Therefore, 
  15224. the methods that are associated with these actions can be executed from other 
  15225. threads. 
  15226.  
  15227.  
  15228. ΓòÉΓòÉΓòÉ 19.1.2.2.6. The Printer Thread ΓòÉΓòÉΓòÉ
  15229.  
  15230.  
  15231. The Printer thread is created to perform the actual printing of a file (as a 
  15232. result of a _wpPrintObject). It creates a PM message queue. 
  15233.  
  15234.  
  15235. ΓòÉΓòÉΓòÉ 19.1.2.2.7. The Finder Thread ΓòÉΓòÉΓòÉ
  15236.  
  15237.  
  15238. The Finder thread is created when a Find operation is initiated via the user 
  15239. interface. This thread performs the I/O intensive operation of actually finding 
  15240. objects that match specifications. The Finder thread creates a PM message 
  15241. queue. 
  15242.  
  15243.  
  15244. ΓòÉΓòÉΓòÉ 19.2. Using Workplace Shell Processes and Threads ΓòÉΓòÉΓòÉ
  15245.  
  15246. This section describes ramifications of multithreading on Workplace Shell 
  15247. method invocation and specifies notes for developers of user-defined threads. 
  15248.  
  15249.  
  15250. ΓòÉΓòÉΓòÉ 19.2.1. Multithreading on Workplace Shell Method Invocation ΓòÉΓòÉΓòÉ
  15251.  
  15252. Workplace Shell application development involves subclassing existing classes, 
  15253. introducing new methods as well as defining behavior for overridden Workplace 
  15254. Shell methods. In writing these method overrides, it is important to keep in 
  15255. mind that they may be invoked from other threads. For example, an override of 
  15256. wpPopulate will be invoked on an object of a WPFolder subclass, when wpOpen or 
  15257. wpViewObject is invoked. As described in "The Populate Thread" section, 
  15258. wpPopulate is sometimes invoked from the Populate thread. 
  15259.  
  15260.  
  15261. ΓòÉΓòÉΓòÉ 19.2.2. Developing User-Defined Threads ΓòÉΓòÉΓòÉ
  15262.  
  15263. Because Workplace Shell objects are running under the Workplace process, they 
  15264. can be accessed by any thread belonging to that process. And, as such, may have 
  15265. methods invoked upon them from any of these threads. Some Workplace Shell 
  15266. methods require the thread in which they were invoked to have a PM message 
  15267. queue. Therefore, when writing your own threads, in your subclass' 
  15268. implementation, make sure to do the following, even if your thread does not 
  15269. need a message loop: 
  15270.  
  15271. hab = WinInitialize(0);
  15272. if (hab)
  15273. {
  15274.   hmq = WinCreateMsqQueue(hab,0);
  15275.   if (hmq)
  15276.   {
  15277.     WinCancelShutdown(hmq, TRUE);
  15278.         .
  15279.         .
  15280.         .
  15281.   }
  15282. }
  15283.  
  15284. Note: 
  15285.  
  15286.      Exception handling should be added to any user-defined threads, so that 
  15287.       traps originating in that code do not end up hanging the Workplace 
  15288.       process. 
  15289.  
  15290.      Per thread and per process variables are accessible via DosGetInfoBlocks, 
  15291.       which yields a TIB structure. 
  15292.  
  15293.      Threads require a 4KB stack each. 
  15294.  
  15295.      When calling DosSetPriority, do not use idle priority threads. 
  15296.  
  15297.      DosExit on a thread does not free resources nor close files; DosExit on a 
  15298.       process does. 
  15299.  
  15300.  
  15301. ΓòÉΓòÉΓòÉ 20. Workplace Shell Programming Interface ΓòÉΓòÉΓòÉ
  15302.  
  15303. The Desktop (which also is an object), the objects that appear on the Desktop, 
  15304. and the underlying code supporting these objects constitute the OS/2 Workplace 
  15305. Shell, the default OS/2 user interface. Likewise, methods in the Workplace 
  15306. Shell are methods that were implemented for the creation of the Desktop object 
  15307. and its objects. This chapter describes Workplace Shell classes and 
  15308. characteristic behaviors of Workplace Shell objects. Because Workplace Shell 
  15309. objects are built using the IBM System Object Model (SOM), the OS/2 Workplace 
  15310. Shell Programming Interface requires a knowledge of SOM. It assumes a knowledge 
  15311. of object-oriented programming and design concepts, as well as SOM. 
  15312.  
  15313.  
  15314. ΓòÉΓòÉΓòÉ 20.1. About Workplace Shell Programming Interface ΓòÉΓòÉΓòÉ
  15315.  
  15316. To establish a base definition of an object-oriented user interface, CUA 
  15317. guidelines are highlighted. The OS/2 Workplace Shell is an object-oriented user 
  15318. environment based on these guidelines. General object-oriented user interface 
  15319. concepts are then used to explain the underlying design of the Workplace Shell 
  15320. Programming Interface. 
  15321.  
  15322.  
  15323. ΓòÉΓòÉΓòÉ 20.1.1. CUA Guidelines for an Object-Oriented User Interface ΓòÉΓòÉΓòÉ
  15324.  
  15325. CUA guidelines defined the user interface for application-oriented 
  15326. environments. In object-oriented environments, such as the OS/2 operating 
  15327. system, the user performs tasks by manipulating on-screen objects. The user 
  15328. does not start an application to perform a task.  Instead, the user can do the 
  15329. following: 
  15330.  
  15331.      Select an action or task that can be performed on an object. For example, 
  15332.       the user selects the Open action on an ASCII file object. The operating 
  15333.       system then starts an editor to work on the file. 
  15334.  
  15335.      Select the Open action on a spreadsheet file. The operating system then 
  15336.       starts a spreadsheet application to work on the file. 
  15337.  
  15338.      Drag the ASCII file object to a printer object and drop it on the printer 
  15339.       object. The file is then sent to the printer. 
  15340.  
  15341.  The concept of applications is transparent to the user. The user interacts 
  15342.  with objects rather than with the operating system or with separate 
  15343.  applications. The user focuses on the task and not on the tools used to 
  15344.  perform the task. The user interacts with objects in the same manner across 
  15345.  tasks. 
  15346.  
  15347.  
  15348. ΓòÉΓòÉΓòÉ 20.1.1.1. Objects, Classes, Hierarchies, and Inheritance ΓòÉΓòÉΓòÉ
  15349.  
  15350. An object is any visual component of the user interface with which the user can 
  15351. work, independent of other items, to perform a task. An object can be 
  15352. represented by one or more graphic images, called icons. The user can interact 
  15353. with an object (or its icon) just as the user can interact with objects in the 
  15354. real world. 
  15355.  
  15356.  
  15357. ΓòÉΓòÉΓòÉ 20.1.1.2. Views of Objects ΓòÉΓòÉΓòÉ
  15358.  
  15359. The user also can interact with an object by opening a window that displays 
  15360. more information about the object. The content of a window is a view of an 
  15361. object. A view is a way of looking at an object's information. Different views 
  15362. display information in different forms, just as information about an object is 
  15363. presented in the real world. An object can have more than one view. 
  15364.  
  15365. The appearance of a window's contents and the kinds of interaction possible in 
  15366. a window are determined, in part, by the type of view presented in the window. 
  15367. CUA guidelines describe four basic types of views: 
  15368.  
  15369.      Composed Views 
  15370.  
  15371.       A Composed view of a data object arranges the object's data in an order 
  15372.       that conveys the data's meaning. If the data is arranged differently in a 
  15373.       Composed view, the object has a different meaning. For example, a graph 
  15374.       or chart object typically is displayed in a Composed view because the 
  15375.       arrangement of the components determines the meaning of the object as a 
  15376.       whole. If the arrangement of the components changes, the meaning of the 
  15377.       object changes. 
  15378.  
  15379.      Contents Views 
  15380.  
  15381.       A Contents view lists the components of an object. The components can be 
  15382.       ordered or unordered in the view;  the order of the information displayed 
  15383.       in a Contents view does not affect the meaning of the object containing 
  15384.       the information. CUA guidelines describe two kinds of Contents views: 
  15385.  
  15386.         -  Icon view 
  15387.  
  15388.            An Icon view displays each object as an icon. Its purpose is to give 
  15389.            the user an easy way to change the position of objects or to 
  15390.            otherwise directly manipulate them. An object usually is represented 
  15391.            by only one icon. However, for some tasks, the user might find it 
  15392.            convenient to represent an object with more than one icon. For 
  15393.            example, the user might want a representation of a printer object in 
  15394.            more than one place so that the user can have easy access to the 
  15395.            printer from anywhere. The user can create an additional icon, known 
  15396.            as a shadow, to represent the same printer object. The following 
  15397.            figure shows an Icon view: 
  15398.  
  15399.         -  Details view 
  15400.  
  15401.            A Details view combines small icons with text that provides 
  15402.            additional information about objects. The type of information 
  15403.            displayed depends on the type of object and the type of tasks the 
  15404.            user wants to perform. A Details view gives the user access to some 
  15405.            of the object's more frequently used information, without requiring 
  15406.            the user to open the object. Small icons are included in a Details 
  15407.            view to provide a way for the user to easily recognize objects and 
  15408.            to directly manipulate each object. The following figure shows a 
  15409.            Details view: 
  15410.  
  15411.      Settings views 
  15412.  
  15413.       A Settings view displays information about the characteristics, 
  15414.       attributes, or properties of an object, and provides a way for the user 
  15415.       to change the settings of some characteristics or properties. A Settings 
  15416.       view typically is provided for each type of object. The following figure 
  15417.       shows a Settings view of an objects: 
  15418.  
  15419.      Help views 
  15420.  
  15421.       A Help view provides information that can assist the user in working with 
  15422.       an object. The type of information displayed in a help view depends on 
  15423.       the type of help the user requests. For example,  the user can request 
  15424.       help for an entire window or for part of a window. The following figure 
  15425.       shows a help view assisting the user in working with an object: 
  15426.  
  15427.  
  15428. ΓòÉΓòÉΓòÉ 20.1.1.3. Classes of Objects ΓòÉΓòÉΓòÉ
  15429.  
  15430. Objects can be classified by similarities in characteristics and behaviors. 
  15431. Each class of objects has a primary purpose that distinguishes it from other 
  15432. classes, and all three types of objects can contain other objects. CUA 
  15433. guidelines define three object classes: 
  15434.  
  15435.      Container objects 
  15436.  
  15437.       A Container object holds other objects. Its primary purpose is to provide 
  15438.       a way for the user to group related objects for easy access and 
  15439.       retrieval. The following figure shows a Container object: 
  15440.  
  15441.      Data objects 
  15442.  
  15443.       Data objects convey information, such as text or graphics, audio or video 
  15444.       information. The following figure shows a Data object: 
  15445.  
  15446.      Device objects 
  15447.  
  15448.       A Device object often represents a physical object in the real world. For 
  15449.       example, a mouse object can represent the user's pointing device, and a 
  15450.       modem object can represent the user's modem. Some device objects 
  15451.       represent a logical object in the user's computer system rather than a 
  15452.       physical object. For example, a shredder object can represent a logical 
  15453.       object that disposes of the user's other objects. Some device objects can 
  15454.       contain other objects. For example, a printer object can contain a queue 
  15455.       of objects to be printed. The following figure shows a Device object: 
  15456.  
  15457.  
  15458. ΓòÉΓòÉΓòÉ 20.1.1.4. Object Relationships ΓòÉΓòÉΓòÉ
  15459.  
  15460. An object class can be defined in terms of another object class. It can be 
  15461. derived from another class, inheriting the same characteristics and behaviors 
  15462. of the other class, yet having characteristics and behaviors of its own. The 
  15463. class that it is derived from is called its parent class; the class itself is 
  15464. referred to as a subclass of its parent class. 
  15465.  
  15466. The inheritance relationship between objects is hierarchical. An object that is 
  15467. lower in the inheritance hierarchy than another object has all of the 
  15468. characteristics of the object or objects above it and can have new 
  15469. characteristics of its own. 
  15470.  
  15471. Other object relationships also can be hierarchical. For example, objects can 
  15472. be arranged in a containment hierarchy that illustrates which objects can 
  15473. contain which other objects. 
  15474.  
  15475.  
  15476. ΓòÉΓòÉΓòÉ 20.1.1.5. Interaction with Objects ΓòÉΓòÉΓòÉ
  15477.  
  15478. In an object-oriented user environment, users interact with objects to perform 
  15479. tasks. The object-action paradigm is a pattern for interaction in which the 
  15480. user first selects an object, and then selects an action. When the user selects 
  15481. an object, the system can then present a list of actions that can be applied to 
  15482. that object. Some actions might require the user to respond to additional 
  15483. choices. Interaction with an object through choices and controls is known as 
  15484. indirect manipulation. 
  15485.  
  15486. At any given time an object has a set of actions that can be performed on it. 
  15487. Different objects have different actions that can be performed on them. Action 
  15488. choices for an object are displayed in pop-up menus that appear next to an 
  15489. object when the user presses the appropriate key or mouse button. The content 
  15490. of a pop-up menu is based on the object's context, which includes its current 
  15491. state, location, and contents. 
  15492.  
  15493. Users also can interact with objects by way of a pointing device. This is known 
  15494. as direct manipulation. This interaction technique closely resembles the way 
  15495. the user interacts with objects in the real world. For example,  the user can 
  15496. pick up an object and put it into a folder. This technique is also known as 
  15497. dragging an object from one place and dropping it at another place. 
  15498.  
  15499. A Drag and Drop operation often involves a source object and a target object. A 
  15500. source object usually is the object the user is working with, and a target 
  15501. object usually is an object to which the user is transferring information. For 
  15502. example, the user drags a file object to a printer object so that the file can 
  15503. be printed; the file is the source object and the printer is the target object. 
  15504.  
  15505. The result of a Drag and Drop operation can change depending on what the source 
  15506. object is and what the target object is. For example, if the user drags a file 
  15507. object from one folder object and drops it on another, the file is moved to the 
  15508. target folder. However, if the user drops the same file onto a printer, the 
  15509. operating system makes a copy of the file and puts the copy into the printer's 
  15510. queue to be printed. The original file is returned to its original location. 
  15511.  
  15512.  
  15513. ΓòÉΓòÉΓòÉ 20.1.1.6. Designing an Object-Oriented User Interface ΓòÉΓòÉΓòÉ
  15514.  
  15515. The following items are key to designing an object-oriented user interface: 
  15516.  
  15517.      Objects and their relationships 
  15518.      Visual representations of objects 
  15519.      Interaction techniques and mechanisms. 
  15520.  
  15521.  Objects and their relationships can be defined by answering the following 
  15522.  questions: 
  15523.  
  15524.      What objects does the user require? 
  15525.      How are the objects related? 
  15526.      What properties and behaviors should the objects have? 
  15527.  
  15528.  To illustrate the importance of objects and their relationships, consider the 
  15529.  example of the design of a software model of a car dealership. A salesperson 
  15530.  needs a car object to represent each car model on his lot. He also needs a 
  15531.  customer object to represent each customer that purchases a car. He needs a 
  15532.  worksheet object to track sales, profits, inventory, customers, and so on. 
  15533.  Finally, he needs container objects to group these objects. 
  15534.  
  15535.  The visual representations of objects must ensure consistency with one another 
  15536.  and with the operating system. Visual representations of objects should 
  15537.  address the functional aspects of visual representations, such as usability 
  15538.  and purpose: Does the visual convey the purpose of the object being 
  15539.  represented? Visual representations also should address the aesthetic aspects, 
  15540.  such as shape, size, and color: Is the representation visually pleasing? 
  15541.  
  15542.  Users should interact with similar objects in similar ways and in ways that 
  15543.  seem natural. Users also should have a choice of interaction mechanisms that 
  15544.  suits their tasks, level of skill, and preferred style of interaction. In the 
  15545.  car dealership example, a salesperson must be able to place information into a 
  15546.  worksheet object in any of several ways. The salesperson can: 
  15547.  
  15548.      Place a car object on top of the worksheet object, thereby transferring 
  15549.       information about the car to the worksheet 
  15550.  
  15551.      Type the information directly into the worksheet object 
  15552.  
  15553.      Select portions of information from the car object and copy them to the 
  15554.       worksheet object. 
  15555.  
  15556.  
  15557. ΓòÉΓòÉΓòÉ 20.1.1.6.1. Defining Objects for a Software Model ΓòÉΓòÉΓòÉ
  15558.  
  15559.  
  15560. To design a software model that serves the needs of the users, the car 
  15561. dealership example is translated into: 
  15562.  
  15563.      Who are the users? 
  15564.      What tasks do they perform? 
  15565.  
  15566.  In this example, the salesperson is the user. The user's tasks can include: 
  15567.  
  15568.      Determining what a customer wants, needs, and can afford 
  15569.      Determining what cars are in stock that match the customer's wants, 
  15570.       needs, and budget 
  15571.      Negotiating an agreement using a worksheet 
  15572.      Getting approval from the sales manager 
  15573.      Giving the worksheet information to the finance manager. 
  15574.  
  15575.  From this analysis, the objects that should be part of our software model can 
  15576.  be identified. These include a car object, car lot object, customer object, 
  15577.  customer list object, worksheet object, worksheet list object, salesperson 
  15578.  object, sales manager object, and finance manager object. 
  15579.  
  15580.  To simplify this explanation, consider the car object only. Each car object 
  15581.  represents a real car for sale in the car lot. A car object contains 
  15582.  descriptive information about the corresponding real car, such as its year, 
  15583.  make, model, price, factory-installed options, color, and vehicle 
  15584.  identification number. Because the primary purpose of a car object is to 
  15585.  convey information, the car object is a data object. 
  15586.  
  15587.  
  15588. ΓòÉΓòÉΓòÉ 20.1.1.6.2. Determining Object Relationships and Behaviors ΓòÉΓòÉΓòÉ
  15589.  
  15590.  
  15591. The next step in the design of a software model is to determine how each object 
  15592. interacts with other objects. In the car dealership, information contained in 
  15593. car objects must be transferable to a worksheet object. The user should have 
  15594. the option to drag a car object and drop it onto a worksheet object. The user 
  15595. also should have the option to choose an action to copy the information from a 
  15596. car object to a worksheet object. 
  15597.  
  15598.  
  15599. ΓòÉΓòÉΓòÉ 20.1.1.6.3. Determining the Necessary Views ΓòÉΓòÉΓòÉ
  15600.  
  15601.  
  15602. After identifying and defining the objects, consider what views of the car 
  15603. object will give the user (salesperson) the best access to the objects and the 
  15604. information they contain. Car information consists of a combination of text 
  15605. (model, year, and so forth) and graphic information (a picture of a car) that 
  15606. make up a single, General information view. 
  15607.  
  15608.  
  15609. ΓòÉΓòÉΓòÉ 20.1.1.6.4. Determining the Action Choices ΓòÉΓòÉΓòÉ
  15610.  
  15611.  
  15612. From a salesperson's perspective, most of the information about a car object is 
  15613. fixed, that is, the information is based on a real-world object and cannot be 
  15614. changed unless something changes about the real-world object. For example, it 
  15615. would not make sense to permit a salesperson to change the color of a car 
  15616. object to correspond to the color of the actual car he is trying to sell. 
  15617. Because a salesperson can change little about a car object, the car object has 
  15618. only a few action choices: 
  15619.  
  15620.      Open as General information view 
  15621.      Print 
  15622.      Edit 
  15623.      Copy to the clipboard 
  15624.      Find 
  15625.      Windows. 
  15626.  
  15627.  
  15628. ΓòÉΓòÉΓòÉ 20.1.2. OS/2 Object-Oriented User Interface: The Workplace Shell ΓòÉΓòÉΓòÉ
  15629.  
  15630. In the OS/2 operating system, the Desktop is a collection of objects (icons) 
  15631. and windows associated with those objects. The Desktop (which also is an 
  15632. object), the objects that appear on the Desktop, and the underlying code 
  15633. supporting these objects constitute the OS/2 Workplace Shell, the default OS/2 
  15634. user interface. 
  15635.  
  15636. The OS/2 Workplace Shell provides an object-oriented user interface. It 
  15637. provides a seamless environment, where all services are task-oriented and the 
  15638. user is shielded from the complexities of the operating system. The user can 
  15639. perform tasks faster and easier and with a shorter learning curve. 
  15640.  
  15641. In the OS/2 Workplace Shell, applications from OS/2 operating system are 
  15642. replaced by objects and collections of objects, or folders. Users do not have 
  15643. to be aware of where an object is (which drive or network) or what it is 
  15644. called. They can place an object wherever they wish and call it by any name. 
  15645. They do not have to know about EXEs, DLLs, device drivers, or how to add a 
  15646. printer or use a network. If they want to print a report on the laser printer 
  15647. down the hall, they can simply drag the icon representing the report and drop 
  15648. it onto the icon representing the laser printer that is labeled "Laser printer 
  15649. down the hall". 
  15650.  
  15651. Users act on all objects in a consistent manner. They can act on program files 
  15652. the same as program references. There is no difference in using programs on a 
  15653. network server or on a hard disk or on a CD drive. There is no difference in 
  15654. setting up or printing to a local or remote printer. 
  15655.  
  15656. In the OS/2 Workplace Shell, users are not aware of the file system. They do 
  15657. not need to know anything about disk drives or directories. They need to know 
  15658. only about folders and the objects they put into them. They can put 
  15659. applications, files, and so forth, in a folder, as shown in the following 
  15660. figure. They can arrange things, regardless of where they physically reside, to 
  15661. suit themselves and their own needs. And they can label the folders by any 
  15662. name. 
  15663.  
  15664.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15665.      Γöé      My NewsLetter Composition Folder     Γöé
  15666.      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15667.      Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ            Γöé
  15668.      Γöé       Γöé    Γöé            Γöé    Γöé            Γöé
  15669.      Γöé       ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ            ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ            Γöé
  15670.      Γöé    My Text Editor  My Graphics Editor     Γöé
  15671.      Γöé                                           Γöé
  15672.      Γöé                                           Γöé
  15673.      Γöé         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ         Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ
  15674.      Γöé         Γöé    Γöé             Γöé    Γöé         Γöé       Γöé    Γöé
  15675.      Γöé         ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ             ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé       ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ
  15676.      Γöé    My Layout Program    My Final Copy     Γöé     My Printer
  15677.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15678.  
  15679. Some of the objects that the OS/2 Workplace Shell provides are described in the 
  15680. following table. After installation, some of the objects appear directly on the 
  15681. Desktop. Some of them are contained in folders. Users can re-arrange and 
  15682. re-label objects to suit themselves. 
  15683.  
  15684. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15685. ΓöéObject         ΓöéDescription                                  Γöé
  15686. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15687. ΓöéClock          ΓöéSets and views the current date, time, and   Γöé
  15688. Γöé               Γöéalarm.                                       Γöé
  15689. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15690. ΓöéColor palette  ΓöéSets and views colors for visual elements of Γöé
  15691. Γöé               Γöéuser interface and applies color to a window.Γöé
  15692. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15693. ΓöéCountry        ΓöéSets and views international conventions for Γöé
  15694. Γöé               Γöésystem elements (country, date, time,        Γöé
  15695. Γöé               Γöénumbers).                                    Γöé
  15696. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15697. ΓöéFont palette   ΓöéSets and views fonts for textual elements of Γöé
  15698. Γöé               Γöéuser interface and apply fonts to windows.   Γöé
  15699. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15700. ΓöéKeyboard       ΓöéSets and views keyboard configuration        Γöé
  15701. Γöé               Γöé(timing, mappings, special needs).           Γöé
  15702. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15703. ΓöéMouse          ΓöéSets and views behavior of mouse device      Γöé
  15704. Γöé               Γöé(timing, setup, button mappings).            Γöé
  15705. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15706. ΓöéPrinter        ΓöéSets and views a print destination (a print  Γöé
  15707. Γöé               Γöéqueue and its associated port).              Γöé
  15708. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15709. ΓöéScheme palette ΓöéSets and views window color and font         Γöé
  15710. Γöé               Γöéattributes.                                  Γöé
  15711. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15712. ΓöéShredder       ΓöéDestroys an object.                          Γöé
  15713. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15714. ΓöéSound          ΓöéEnables/disables warning beep.               Γöé
  15715. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15716. ΓöéSpecial needs  ΓöéExplains implications of special needs mode  Γöé
  15717. Γöé               Γöéwhen activated.                              Γöé
  15718. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15719. ΓöéSpooler        ΓöéEnables/disables spooling. Sets and views    Γöé
  15720. Γöé               Γöéspool path.                                  Γöé
  15721. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15722. ΓöéSystem         ΓöéSets and views behavior of system elements   Γöé
  15723. Γöé               Γöé(confirmations, logo, windows).              Γöé
  15724. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15725.  
  15726.  
  15727. ΓòÉΓòÉΓòÉ 20.2. Using OS/2 Workplace Shell Programming Interface ΓòÉΓòÉΓòÉ
  15728.  
  15729. While object-oriented user interfaces share some concepts with object-oriented 
  15730. programming, user objects might not necessarily correspond to software objects. 
  15731. Object-oriented programming can make the development of an object-oriented user 
  15732. interface easier. However, an object-oriented user interface can be developed 
  15733. with more traditional programming languages and tools. 
  15734.  
  15735. The OS/2 Workplace Shell is an example of a user interface developed using 
  15736. object-oriented programming, specifically, the IBM System Object Model. In 
  15737. fact, every user object in the OS/2 Workplace Shell is an instance of a 
  15738. Workplace Shell software class object. There is a one to one correspondence 
  15739. between Workplace Shell (user) objects and Workplace Shell (software) classes. 
  15740. See Workplace Shell Reference for a complete class hierarchy of Workplace Shell 
  15741. objects. 
  15742.  
  15743. All Workplace Shell classes are derived from a root Workplace Shell class, 
  15744. WPObject, which is derived from the root SOM class, SOMObject. Workplace Shell 
  15745. classes are defined using the SOM's object interface definition language 
  15746. (OIDL). Workplace Shell class libraries are built using the SOM compiler. 
  15747. Workplace Shell objects are instantiated by the Workplace Shell on behalf of 
  15748. the user through the Workplace Shell class list object, installation programs, 
  15749. or batch files. The same rules that apply to SOM classes apply to Workplace 
  15750. Shell classes, with the exception that applications cannot call Workplace Shell 
  15751. methods. (SOM client applications can call SOM methods.) 
  15752.  
  15753. Some Workplace Shell classes (WPObject, WPAbstract, WPFileSystem, WPTransient) 
  15754. cannot be instantiated. These classes are provided as base classes which define 
  15755. common characteristics and behaviors for descendant classes. Object 
  15756. characteristics and behaviors are defined as methods for the object's class, as 
  15757. well as methods inherited from ancestor classes. 
  15758.  
  15759. WPObject is the root class for all Workplace Shell classes. It defines behavior 
  15760. common to all Workplace Shell objects. The immediate descendants of WPObject 
  15761. are storage classes, from which all other Workplace Shell classes are derived. 
  15762. Storage classes define methods for storing and retrieving data associated with 
  15763. instances of descendant classes. Storage classes provided with the OS/2 
  15764. Workplace Shell are shown in the following table: 
  15765.  
  15766. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15767. ΓöéClass          ΓöéStorage of Object Instance Data              Γöé
  15768. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15769. ΓöéWPAbstract     ΓöéObject instance data stored in user profile  Γöé
  15770. Γöé               Γöé(OS2.INI).                                   Γöé
  15771. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15772. ΓöéWPFileSystem   ΓöéObject instance data stored in files in the  Γöé
  15773. Γöé               Γöéfile system.                                 Γöé
  15774. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15775. ΓöéWPTransient    ΓöéObject instance data not saved.              Γöé
  15776. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15777.  
  15778. Objects whose instance data and state is preserved between system shutdown and 
  15779. system startup are called persistent objects. Objects whose instance data and 
  15780. state need not be preserved between system shutdown and system startup are 
  15781. called non-persistent objects. 
  15782.  
  15783.  
  15784. ΓòÉΓòÉΓòÉ 20.2.1. Designing Workplace Shell Classes ΓòÉΓòÉΓòÉ
  15785.  
  15786. To design a Workplace Shell class, first identify all the actions to which an 
  15787. object instance can respond. Based on this list, define the methods in the 
  15788. class definition file that correspond to the actions that were identified. To 
  15789. illustrate this process and understand how method requirements for a class are 
  15790. identified, consider the WPObject and WPAbstract classes. 
  15791.  
  15792. Based on the general description of user objects in a CUA-conforming user 
  15793. environment, objects have the following: 
  15794.  
  15795.      Properties (for example, an icon representation in the Workplace Shell) 
  15796.      Views that contain information about the object 
  15797.      Pop-up context menus that describe actions to which the object can 
  15798.       respond 
  15799.      Mobility (direct manipulation). 
  15800.  
  15801.  These characteristics and behaviors should be reflected in the methods in the 
  15802.  class definition file for the WPObject class. The following table shows the 
  15803.  mapping of characteristics and behaviors common to all Workplace Shell objects 
  15804.  defined for this class: 
  15805.  
  15806.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15807.   ΓöéMethod Group   ΓöéMethod Name                 ΓöéCharacteristic   Γöé
  15808.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15809.   ΓöéContainer      ΓöéwpCnrInsertObject           ΓöéObject containersΓöé
  15810.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15811.   Γöé               ΓöéwpCnrRemoveObject           Γöé                 Γöé
  15812.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15813.   Γöé               ΓöéwpCnrSetEmphasis            Γöé                 Γöé
  15814.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15815.   Γöé               ΓöéwpRegisterView              Γöé                 Γöé
  15816.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15817.   Γöé               ΓöéwpclsInsertMultipleObjects  Γöé                 Γöé
  15818.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15819.   ΓöéDetails        ΓöéwpIsSortAttribAvailable     ΓöéObject criteria  Γöé
  15820.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15821.   Γöé               ΓöéwpQueryDetailsData          Γöé                 Γöé
  15822.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15823.   Γöé               ΓöéwpQueryFldrDetailsClass     Γöé                 Γöé
  15824.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15825.   Γöé               ΓöéwpQueryFldrSort             Γöé                 Γöé
  15826.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15827.   Γöé               ΓöéwpQueryFldrSortClass        Γöé                 Γöé
  15828.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15829.   Γöé               ΓöéwpSetFldrDetailsClass       Γöé                 Γöé
  15830.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15831.   Γöé               ΓöéwpSetFldrSort               Γöé                 Γöé
  15832.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15833.   Γöé               ΓöéwpSetFldrSortClass          Γöé                 Γöé
  15834.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15835.   Γöé               ΓöéwpSetSortAttribAvailable    Γöé                 Γöé
  15836.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15837.   Γöé               ΓöéwpclsQueryDetails           Γöé                 Γöé
  15838.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15839.   Γöé               ΓöéwpclsQueryDetailsInfo       Γöé                 Γöé
  15840.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15841.   ΓöéDirect         ΓöéwpDragCell                  ΓöéObject mobility  Γöé
  15842.   Γöémanipulation   Γöé                            Γöé                 Γöé
  15843.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15844.   Γöé               ΓöéwpDraggedOverObject         Γöé                 Γöé
  15845.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15846.   Γöé               ΓöéwpDragOver                  Γöé                 Γöé
  15847.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15848.   Γöé               ΓöéwpDrop                      Γöé                 Γöé
  15849.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15850.   Γöé               ΓöéwpDroppedOnObject           Γöé                 Γöé
  15851.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15852.   Γöé               ΓöéwpEndConversation           Γöé                 Γöé
  15853.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15854.   Γöé               ΓöéwpFormatDragItem            Γöé                 Γöé
  15855.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15856.   Γöé               ΓöéwpRender                    Γöé                 Γöé
  15857.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15858.   Γöé               ΓöéwpRenderComplete            Γöé                 Γöé
  15859.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15860.   ΓöéError handling ΓöéwpQueryError                ΓöéObject errors    Γöé
  15861.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15862.   Γöé               ΓöéwpSetError                  Γöé                 Γöé
  15863.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15864.   Γöé               ΓöéwpclsQueryError             Γöé                 Γöé
  15865.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15866.   Γöé               ΓöéwpclsSetError               Γöé                 Γöé
  15867.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15868.   ΓöéHelp           ΓöéwpDisplayHelp               ΓöéObject aid       Γöé
  15869.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15870.   Γöé               ΓöéwpMenuItemHelpSelected      Γöé                 Γöé
  15871.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15872.   Γöé               ΓöéwpQueryDefaultHelp          Γöé                 Γöé
  15873.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15874.   Γöé               ΓöéwpSetDefaultHelp            Γöé                 Γöé
  15875.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15876.   Γöé               ΓöéwpclsQueryDefaultHelp       Γöé                 Γöé
  15877.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15878.   ΓöéMemory         ΓöéwpAllocMem                  ΓöéObject memory    Γöé
  15879.   Γöéallocation     Γöé                            Γöé                 Γöé
  15880.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15881.   Γöé               ΓöéwpFreeMem                   Γöé                 Γöé
  15882.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15883.   ΓöéNotebook       ΓöéwpAddObjectGeneralPage      ΓöéObject propertiesΓöé
  15884.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15885.   Γöé               ΓöéwpAddObjectGeneralPage2     Γöé                 Γöé
  15886.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15887.   Γöé               ΓöéwpAddObjectWindowPage       Γöé                 Γöé
  15888.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15889.   Γöé               ΓöéwpAddSettingsPages          Γöé                 Γöé
  15890.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15891.   Γöé               ΓöéwpCnrRefreshDetails         Γöé                 Γöé
  15892.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15893.   Γöé               ΓöéwpInsertSettingsPage        Γöé                 Γöé
  15894.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15895.   ΓöéPop-Up menu    ΓöéwpClose                     ΓöéObject user      Γöé
  15896.   Γöé               Γöé                            Γöéaction           Γöé
  15897.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15898.   Γöé               ΓöéwpCopyObject                Γöé                 Γöé
  15899.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15900.   Γöé               ΓöéwpCreateFromTemplate        Γöé                 Γöé
  15901.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15902.   Γöé               ΓöéwpCreateShadowObject        Γöé                 Γöé
  15903.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15904.   Γöé               ΓöéwpDelete                    Γöé                 Γöé
  15905.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15906.   Γöé               ΓöéwpFilterPopupMenu           Γöé                 Γöé
  15907.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15908.   Γöé               ΓöéwpHide                      Γöé                 Γöé
  15909.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15910.   Γöé               ΓöéwpInsertPopupMenuItems      Γöé                 Γöé
  15911.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15912.   Γöé               ΓöéwpMenuItemSelected          Γöé                 Γöé
  15913.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15914.   Γöé               ΓöéwpModifyPopupMenu           Γöé                 Γöé
  15915.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15916.   Γöé               ΓöéwpMoveObject                Γöé                 Γöé
  15917.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15918.   Γöé               ΓöéwpOpen                      Γöé                 Γöé
  15919.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15920.   Γöé               ΓöéwpPrintObject               Γöé                 Γöé
  15921.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15922.   Γöé               ΓöéwpRestore                   Γöé                 Γöé
  15923.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15924.   Γöé               ΓöéwpViewObject                Γöé                 Γöé
  15925.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15926.   ΓöéSave/Restore   ΓöéwpRestoreData               ΓöéObject           Γöé
  15927.   Γöéstate          Γöé                            Γöépersistence      Γöé
  15928.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15929.   Γöé               ΓöéwpRestoreLong               Γöé                 Γöé
  15930.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15931.   Γöé               ΓöéwpRestoreState              Γöé                 Γöé
  15932.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15933.   Γöé               ΓöéwpRestoreString             Γöé                 Γöé
  15934.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15935.   Γöé               ΓöéwpSaveData                  Γöé                 Γöé
  15936.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15937.   Γöé               ΓöéwpSaveDeferred              Γöé                 Γöé
  15938.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15939.   Γöé               ΓöéwpSaveImmediate             Γöé                 Γöé
  15940.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15941.   Γöé               ΓöéwpSaveLong                  Γöé                 Γöé
  15942.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15943.   Γöé               ΓöéwpSaveState                 Γöé                 Γöé
  15944.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15945.   Γöé               ΓöéwpSaveString                Γöé                 Γöé
  15946.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15947.   ΓöéSetup/Cleanup  ΓöéwpFree                      ΓöéObject           Γöé
  15948.   Γöé               Γöé                            Γöéinitialization   Γöé
  15949.   Γöé               Γöé                            Γöéand termination  Γöé
  15950.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15951.   Γöé               ΓöéwpInitData                  Γöé                 Γöé
  15952.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15953.   Γöé               ΓöéwpIsObjectInitialized       Γöé                 Γöé
  15954.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15955.   Γöé               ΓöéwpObjectReady               Γöé                 Γöé
  15956.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15957.   Γöé               ΓöéwpScanSetupString           Γöé                 Γöé
  15958.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15959.   Γöé               ΓöéwpSetup                     Γöé                 Γöé
  15960.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15961.   Γöé               ΓöéwpSetupOnce                 Γöé                 Γöé
  15962.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15963.   Γöé               ΓöéwpUnInitData                Γöé                 Γöé
  15964.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15965.   Γöé               ΓöéwpclsInitData               Γöé                 Γöé
  15966.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15967.   Γöé               ΓöéwpclsUnInitData             Γöé                 Γöé
  15968.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15969.   ΓöéUsage          ΓöéwpAddToObjUseList           ΓöéObject usage     Γöé
  15970.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15971.   Γöé               ΓöéwpCnrDeleteUseItem          Γöé                 Γöé
  15972.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15973.   Γöé               ΓöéwpDeleteFromObjUseList      Γöé                 Γöé
  15974.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15975.   Γöé               ΓöéwpFindUseItem               Γöé                 Γöé
  15976.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15977.   Γöé               ΓöéwpFindViewItem              Γöé                 Γöé
  15978.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15979.   Γöé               ΓöéwpIsLocked                  Γöé                 Γöé
  15980.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15981.   Γöé               ΓöéwpLockObject                Γöé                 Γöé
  15982.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15983.   Γöé               ΓöéwpUnlockObject              Γöé                 Γöé
  15984.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15985.   ΓöéSet/Query      ΓöéwpModifyStyle               ΓöéObject           Γöé
  15986.   Γöé               Γöé                            Γöéinformation      Γöé
  15987.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15988.   Γöé               ΓöéwpQueryButtonAppearance     Γöé                 Γöé
  15989.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15990.   Γöé               ΓöéwpQueryConcurrentView       Γöé                 Γöé
  15991.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15992.   Γöé               ΓöéwpQueryConfirmations        Γöé                 Γöé
  15993.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15994.   Γöé               ΓöéwpQueryContainerFlagPtr     Γöé                 Γöé
  15995.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15996.   Γöé               ΓöéwpQueryCoreRecord           Γöé                 Γöé
  15997.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15998.   Γöé               ΓöéwpQueryDefaultHelp          Γöé                 Γöé
  15999.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16000.   Γöé               ΓöéwpQueryDefaultIconPos       Γöé                 Γöé
  16001.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16002.   Γöé               ΓöéwpQueryDefaultView          Γöé                 Γöé
  16003.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16004.   Γöé               ΓöéwpQueryDetailsData          Γöé                 Γöé
  16005.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16006.   Γöé               ΓöéwpQueryError                Γöé                 Γöé
  16007.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16008.   Γöé               ΓöéwpQueryFolder               Γöé                 Γöé
  16009.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16010.   Γöé               ΓöéwpQueryHandle               Γöé                 Γöé
  16011.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16012.   Γöé               ΓöéwpQueryIcon                 Γöé                 Γöé
  16013.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16014.   Γöé               ΓöéwpQueryIconData             Γöé                 Γöé
  16015.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16016.   Γöé               ΓöéwpQueryMinWindow            Γöé                 Γöé
  16017.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16018.   Γöé               ΓöéwpQueryNameClashOptions     Γöé                 Γöé
  16019.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16020.   Γöé               ΓöéwpQueryObjectID             Γöé                 Γöé
  16021.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16022.   Γöé               ΓöéwpQueryScreenGroupID        Γöé                 Γöé
  16023.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16024.   Γöé               ΓöéwpQueryStyle                Γöé                 Γöé
  16025.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16026.   Γöé               ΓöéwpQueryTitle                Γöé                 Γöé
  16027.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16028.   Γöé               ΓöéwpSetButtonAppearance       Γöé                 Γöé
  16029.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16030.   Γöé               ΓöéwpSetConcurrentView         Γöé                 Γöé
  16031.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16032.   Γöé               ΓöéwpSetDefaultHelp            Γöé                 Γöé
  16033.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16034.   Γöé               ΓöéwpSetDefaultIconPos         Γöé                 Γöé
  16035.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16036.   Γöé               ΓöéwpSetDefaultView            Γöé                 Γöé
  16037.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16038.   Γöé               ΓöéwpSetError                  Γöé                 Γöé
  16039.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16040.   Γöé               ΓöéwpSetIcon                   Γöé                 Γöé
  16041.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16042.   Γöé               ΓöéwpSetIconData               Γöé                 Γöé
  16043.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16044.   Γöé               ΓöéwpSetMinWindow              Γöé                 Γöé
  16045.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16046.   Γöé               ΓöéwpSetObjectID               Γöé                 Γöé
  16047.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16048.   Γöé               ΓöéwpSetStyle                  Γöé                 Γöé
  16049.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16050.   Γöé               ΓöéwpSetTitle                  Γöé                 Γöé
  16051.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16052.   Γöé               ΓöéwpclsQueryButtonAppearance  Γöé                 Γöé
  16053.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16054.   Γöé               ΓöéwpclsQueryDefaultHelp       Γöé                 Γöé
  16055.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16056.   Γöé               ΓöéwpclsQueryDefaultView       Γöé                 Γöé
  16057.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16058.   Γöé               ΓöéwpclsQueryDetails           Γöé                 Γöé
  16059.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16060.   Γöé               ΓöéwpclsQueryDetailsInfo       Γöé                 Γöé
  16061.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16062.   Γöé               ΓöéwpclsQueryError             Γöé                 Γöé
  16063.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16064.   Γöé               ΓöéwpclsQueryExtendedCriteria  Γöé                 Γöé
  16065.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16066.   Γöé               ΓöéwpclsQueryFolder            Γöé                 Γöé
  16067.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16068.   Γöé               ΓöéwpclsQueryIcon              Γöé                 Γöé
  16069.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16070.   Γöé               ΓöéwpclsQueryIconData          Γöé                 Γöé
  16071.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16072.   Γöé               ΓöéwpclsQueryObject            Γöé                 Γöé
  16073.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16074.   Γöé               ΓöéwpclsQuerySettingsPageSize  Γöé                 Γöé
  16075.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16076.   Γöé               ΓöéwpclsQueryStyle             Γöé                 Γöé
  16077.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16078.   Γöé               ΓöéwpclsQueryTitle             Γöé                 Γöé
  16079.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16080.   Γöé               ΓöéwpclsSetError               Γöé                 Γöé
  16081.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16082.   Γöé               ΓöéwpclsSetIcon                Γöé                 Γöé
  16083.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16084.   Γöé               ΓöéwpclsSetIconData            Γöé                 Γöé
  16085.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16086.   Γöé               ΓöéwpclsSetSettingsPageSize    Γöé                 Γöé
  16087.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  16088.  
  16089.  
  16090. ΓòÉΓòÉΓòÉ 21. Workplace Shell Win Functions ΓòÉΓòÉΓòÉ
  16091.  
  16092. Applications cannot call Workplace Shell objects' methods directly. They are 
  16093. not clients of Workplace Shell objects, in the same sense that applications can 
  16094. be clients of SOM objects. Workplace Shell objects are derived from the 
  16095. WPObject class, which, in turn, is derived from the SOMObject class. They share 
  16096. all the features of SOM objects but only the Workplace Shell can directly 
  16097. manipulate them. Because there are times when applications might need to effect 
  16098. changes to the Desktop and objects on the Desktop, the Workplace Shell provides 
  16099. functions that permit you to proceed these changes. This chapter describes the 
  16100. Workplace Shell Win Functions. 
  16101.  
  16102.  
  16103. ΓòÉΓòÉΓòÉ 21.1. About Workplace Shell Win Functions ΓòÉΓòÉΓòÉ
  16104.  
  16105. Outside the Workplace Shell environment, objects are DLLs that consist of data 
  16106. and code that operates on that data when objects are instantiated in the 
  16107. Workplace Shell run-time environment. Workplace Shell objects have no meaning 
  16108. outside the Workplace Shell environment. Workplace Shell classes take form when 
  16109. the class is registered with the Workplace Shell and the class is instantiated. 
  16110. The Workplace Shell and SOM provide the underlying code (predefined Workplace 
  16111. Shell objects' methods) that supports an object. 
  16112.  
  16113. The Workplace Shell calls the appropriate object's methods when the user 
  16114. interacts with the object. In this sense, the Workplace Shell is the client of 
  16115. all Workplace Shell objects. The Workplace Shell manipulates the object (its 
  16116. code) on behalf of its users. 
  16117.  
  16118. On the other hand, applications cannot call Workplace Shell objects' methods 
  16119. directly. They are not clients of Workplace Shell objects, in the same sense 
  16120. that applications can be clients of SOM objects. Workplace Shell objects are 
  16121. derived from the WPObject class, which, in turn, is derived from the SOMObject 
  16122. class. They share all the features of SOM objects-encapsulation, inheritance, 
  16123. and polymorphism-but only the Workplace Shell can directly manipulate them. 
  16124.  
  16125. Because there are times when applications might need to effect changes to the 
  16126. Desktop and objects on the Desktop, the Workplace Shell provides functions that 
  16127. permit you to proceed these changes. 
  16128.  
  16129.  
  16130. ΓòÉΓòÉΓòÉ 21.1.1. Object Instance Functions ΓòÉΓòÉΓòÉ
  16131.  
  16132. Applications can create and destroy object instances of Workplace Shell classes 
  16133. by calling WinCreateObject and WinDestroyObject. To create an object, an 
  16134. application must specify the object's: 
  16135.  
  16136.      Class name 
  16137.  
  16138.      Title 
  16139.  
  16140.      Setup information 
  16141.  
  16142.      Location on the Desktop. 
  16143.  
  16144.  Each object class defines a set of keynames that can be used to control the 
  16145.  attributes and behavior of its objects. An object's setup information is 
  16146.  processed by wpSetup inherited from WPObject. The wpSetup method is called 
  16147.  when the object is created by WinCreateObject. Every Workplace Shell class 
  16148.  inherits the set of keynames defined for the WPObject class, and can define 
  16149.  additional ones that are unique to that class. Keynames and the values 
  16150.  supported by the WPObject class are listed in the "Workplace Shell Setup 
  16151.  Strings" subsection of the "Object Initialization and Termination: 
  16152.  Setup/Cleanup Methods" section. 
  16153.  
  16154.  Newly created objects need to be placed somewhere on the Desktop, either 
  16155.  directly on the Desktop or in a folder. All Workplace Shell objects have 
  16156.  object IDs associated with them. The following table shows the object IDs 
  16157.  associated with system folders. When an object is created by WinCreateObject, 
  16158.  an application can specify its location as one of the predefined system 
  16159.  folders. 
  16160.  
  16161.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16162.   ΓöéID             ΓöéSystem Folder                 Γöé
  16163.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16164.   ΓöéWP_CONFIG      ΓöéSystem setup folder.          Γöé
  16165.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16166.   ΓöéWP_DESKTOP     ΓöéDesktop.                      Γöé
  16167.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16168.   ΓöéWP_DRIVE       ΓöéDrives folder.                Γöé
  16169.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16170.   ΓöéWP_INFO        ΓöéInformation folder.           Γöé
  16171.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16172.   ΓöéWP_NOWHERE     ΓöéHidden folder.                Γöé
  16173.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16174.   ΓöéWP_START       ΓöéStartup folder.               Γöé
  16175.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16176.   ΓöéWP_SYSTEM      ΓöéSystem folder.                Γöé
  16177.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16178.   ΓöéWP_TEMPS       ΓöéTemplates folder.             Γöé
  16179.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  16180.  
  16181.  WinCreateObject returns a handle to the newly created object. This handle is 
  16182.  persistent and can be used at any time to reference the object. Applications 
  16183.  that did not create the object can get a handle to the object by calling 
  16184.  WinQueryObject. WinQueryObject requires either a full path name for a file 
  16185.  object or an object ID. 
  16186.  
  16187.  Applications that get a handle to an object can change the behavior or state 
  16188.  of that object by calling WinSetObjectData. This function results in the 
  16189.  Workplace Shell calling the object's wpSetup method. By specifying a value for 
  16190.  keyname variables defined for the object's class, an application, can effect 
  16191.  changes to objects that already exist on the Desktop. The process of effecting 
  16192.  changes to existing objects on the Desktop is summarized in the following 
  16193.  figure: 
  16194.  
  16195.   /* Use ObjectID to get the handle to the object */
  16196.   WinQueryObject(...);
  16197.  
  16198.   /* Put keyname values in a setup string */
  16199.   pszSetupString="KEYNAME1=value;...";
  16200.  
  16201.   /* Change the behavior of an existing object */
  16202.   WinSetObjectData(...);
  16203.  
  16204.  
  16205. ΓòÉΓòÉΓòÉ 21.1.2. Object Class Functions ΓòÉΓòÉΓòÉ
  16206.  
  16207. For the Workplace Shell to know how to manipulate objects on the user's behalf, 
  16208. it must know about the object class and the class definition, that is, its data 
  16209. and methods. Therefore, object classes must be registered with the Workplace 
  16210. Shell. The following functions enable applications to affect object classes 
  16211. registered with the Workplace Shell: 
  16212.  
  16213.      WinEnumObjectClasses 
  16214.  
  16215.      WinRegisterObjectClass 
  16216.  
  16217.      WinDeregisterObjectClass 
  16218.  
  16219.      WinReplaceObjectClass. 
  16220.  
  16221.  WinEnumObjectClasses enables an application to get the list of all Workplace 
  16222.  Shell object classes that have been registered with the Workplace Shell. 
  16223.  
  16224.  WinRegisterObjectClass and WinDeregisterObjectClass permit an application to 
  16225.  register and deregister Workplace Shell object classes with the Workplace 
  16226.  Shell. WinRegisterObjectClass registers the specified Workplace Shell object 
  16227.  class that is defined in the specified DLL module that was created using the 
  16228.  SOM compiler. The name of the object class must match the library name 
  16229.  specified in the DEF file used to build the DLL. Because all registered 
  16230.  classes are maintained in the OS2.INI file and are cached upon system 
  16231.  initialization, a class should be removed, if it is no longer needed. 
  16232.  
  16233.  WinReplaceObjectClass is used to replace a registered object class with 
  16234.  another class. The replacement class is a subclass of the class being 
  16235.  replaced. This type of class is useful for modifying the behavior of instances 
  16236.  of a Workplace Shell object class without the instances being aware of the new 
  16237.  class. WinReplaceObjectClass also is used to undo the replacement and restore 
  16238.  the original class that defines the behavior of its instances. 
  16239.  
  16240.  
  16241. ΓòÉΓòÉΓòÉ 21.2. Using Workplace Shell Win Functions ΓòÉΓòÉΓòÉ
  16242.  
  16243. This section describes, through the used of sample code fragments, how to use 
  16244. Workplace Shell Win functions. Specifically it includes how to: 
  16245.  
  16246.      Create objects 
  16247.  
  16248.      Obtain the directory specification of a given object's handle 
  16249.  
  16250.      Obtain the directory specification of the active Desktop 
  16251.  
  16252.      Open objects 
  16253.  
  16254.      Set objects data 
  16255.  
  16256.      Save objects 
  16257.  
  16258.      Save the current size and position of a window 
  16259.  
  16260.      Move objects 
  16261.  
  16262.      Copy objects 
  16263.  
  16264.      Create a shadow of drive A on the Desktop 
  16265.  
  16266.      Register and deregister objects 
  16267.  
  16268.      Enumerate all classes registered with the system 
  16269.  
  16270.      Replace a registered class with another 
  16271.  
  16272.      Obtain the icon associated with a file and display it 
  16273.  
  16274.      Destroy objects 
  16275.  
  16276.      Shut down the system 
  16277.  
  16278.  
  16279. ΓòÉΓòÉΓòÉ 21.2.1. Creating Objects ΓòÉΓòÉΓòÉ
  16280.  
  16281. The following sample code shows how to add a new object of class WPFolder to 
  16282. the Desktop container: 
  16283.  
  16284. #define INCL_WINWORKPLACE
  16285. #include "os2.h"
  16286.  
  16287. PSZ      pszObjTitle = "Sample Object";
  16288. HOBJECT  hobj;
  16289.  
  16290. {
  16291.   hobj = WinCreateObject("WPFolder",
  16292.                          pszObjTitle,
  16293.                          "OBJECTID=<WP_SAMPLE>",
  16294.                          <WP_DESKTOP>,
  16295.                          CO_FAILIFEXISTS);
  16296.  
  16297.   if (hobj != NULLHANDLE)
  16298.   {
  16299.     /* Object was successfully created on the Desktop */
  16300.   }
  16301.   else
  16302.   {
  16303.     /* WinCreateObject failed */
  16304.    }
  16305. }
  16306.  
  16307.  
  16308. ΓòÉΓòÉΓòÉ 21.2.2. Obtaining the Directory Specification for a Given Object's Handle ΓòÉΓòÉΓòÉ
  16309.  
  16310. The following sample code shows how to obtain the directory specification of a 
  16311. given object's handle: 
  16312.  
  16313. #define INCL_WINWORKPLACE
  16314. #include "os2.h"
  16315.  
  16316. HOBJECT hObject;
  16317. CHAR    szPath[CCHMAXPATH + 1];
  16318. BOOL    fSuccess;
  16319.  
  16320. hObject = WinQueryObject("<WP_OS2SYS>");
  16321. if (hObject != NULL)
  16322. {
  16323.   /* WinQueryObject was successful */
  16324.   fSuccess = WinQueryObjectPath(hObject,szPath,sizeof(szPath));
  16325.  
  16326.   if (fSuccess)
  16327.   {
  16328.     /* WinQueryObjectPath was successful */
  16329.   }
  16330.   else
  16331.   {
  16332.     /* WinQueryObjectPath failed */
  16333.   }
  16334. }
  16335. else
  16336. {
  16337.   /* WinQueryObject fails */
  16338. }
  16339.  
  16340.  
  16341. ΓòÉΓòÉΓòÉ 21.2.3. Obtaining the Directory Specification of the Active Desktop ΓòÉΓòÉΓòÉ
  16342.  
  16343. The following sample code shows how to obtain the directory specification of 
  16344. the active Desktop: 
  16345.  
  16346. #define INCL_WINWORKPLACE
  16347. #include "os2.h"
  16348.  
  16349. CHAR    szPath[CCHMAXPATH + 1];
  16350. BOOL    fSuccess;
  16351.  
  16352. fSuccess = WinQueryActiveDesktopPathname(szPath,sizeof(szPath));
  16353. if (fSuccess)
  16354. {
  16355.   /* WinQueryActiveDesktopPathname was successful */
  16356. }
  16357. else
  16358. {
  16359.   /* WinQueryActiveDesktopPathname failed */
  16360. }
  16361.  
  16362.  
  16363. ΓòÉΓòÉΓòÉ 21.2.4. Opening Objects ΓòÉΓòÉΓòÉ
  16364.  
  16365. The following sample code shows how to open an object in the Settings notebook: 
  16366.  
  16367. #define INCL_WINWORKPLACE
  16368. #include "os2.h"
  16369.  
  16370. HOBJECT hObject;
  16371. ULONG   ulView;
  16372. BOOL    fFlags
  16373. BOOL    fSuccess;
  16374.  
  16375. hObject = WinQueryObject("<WP_DESKTOP>");
  16376. if (hObject != NULL)
  16377. {
  16378.   /* WinQueryObject was successful */
  16379.   fSuccess = WinOpenObject(hObject,OPEN_SETTINGS,TRUE);
  16380.  
  16381.   if (fSuccess)
  16382.   {
  16383.     /* If concurrent views are off and a Settings notebook of the
  16384.      * Desktop already exists, then it was successfully resurfaced.
  16385.      *
  16386.      * If concurrent views are on, then another Settings notebook
  16387.      * of the Desktop was successfully opened.
  16388.      */
  16389.   }
  16390.   else
  16391.   {
  16392.     /* WinOpenObject failed */
  16393.   }
  16394. }
  16395.  
  16396.  
  16397. ΓòÉΓòÉΓòÉ 21.2.5. Setting Objects Data ΓòÉΓòÉΓòÉ
  16398.  
  16399. The following sample code shows how to set the object data for the object with 
  16400. an ID of WP_SAMPLE, to have the specified title and use the specified help 
  16401. panel: 
  16402.  
  16403. HOBJECT hObj;
  16404. BOOL    rc;
  16405.  
  16406. {
  16407.   hobj = WinQueryObject( "<WP_SAMPLE>" );
  16408.   if (hObj != NULLHANDLE)
  16409.   {
  16410.     /* WinQueryObject of WP_SAMPLE was successful */
  16411.     rc = WinSetObjectData(hObj,
  16412.                           "TITLE="Sample Object;
  16413.                           HELPPANEL=SAMPLEHELP_ID");
  16414.     if (rc)
  16415.     {
  16416.       /* Object data is set */
  16417.     }
  16418.     else
  16419.     {
  16420.       /* WinSetObjectData failed */
  16421.     }
  16422.   }
  16423. }
  16424.  
  16425.  
  16426. ΓòÉΓòÉΓòÉ 21.2.6. Saving Objects ΓòÉΓòÉΓòÉ
  16427.  
  16428. The following sample code shows how to save the state of an object 
  16429. asynchronously: 
  16430.  
  16431. #define INCL_WINWORKPLACE
  16432. #include "os2.h"
  16433.  
  16434. HOBJECT  Object;
  16435. BOOL     fAsync = TRUE;
  16436. BOOL     fSuccess
  16437.  
  16438. hObject = WinQueryObject("<WP_DESKTOP>");
  16439. if (hObject != NULL)
  16440. {
  16441.   /* WinQueryObject was successful */
  16442.   fSuccess = WinSaveObject(hObject,fAsync);
  16443.  
  16444.   if (fSuccess)
  16445.   {
  16446.     /* The state of the Desktop was saved asynchronously */
  16447.   }
  16448.   else
  16449.   {
  16450.     /* Asynchronous save of the Desktop failed */
  16451.   }
  16452. }
  16453.  
  16454.  
  16455. ΓòÉΓòÉΓòÉ 21.2.7. Saving the Current Size and Position of a Window ΓòÉΓòÉΓòÉ
  16456.  
  16457. Knowing the application name, keyname and window handle, the following sample 
  16458. code fragment shows how to save the current size and position of the given 
  16459. window: 
  16460.  
  16461. #define INCL_WINWORKPLACE
  16462. #include "os2.h"
  16463.  
  16464. {
  16465.   BOOL rc;
  16466.  
  16467.   rc = WinStoreWindowPos(vszAppName,szKey,hwnd);
  16468.   if (rc)
  16469.     /* Window size and position saved */
  16470.   else
  16471.     /* ERROR occurred */
  16472.  
  16473. /* Later you would use WinRestoreWindowPos to restore the window */
  16474. /* to it's previously saved size and position                    */
  16475.  
  16476.   .
  16477.   .
  16478.   .
  16479.  
  16480. rc = WinRestoreWindowPos(vszAppName,szKey,hwnd);
  16481. if (rc)
  16482.   /* Window size and position restored */
  16483. else
  16484.   /* ERROR occurred */
  16485. }
  16486.  
  16487.  
  16488. ΓòÉΓòÉΓòÉ 21.2.8. Moving Objects ΓòÉΓòÉΓòÉ
  16489.  
  16490. The following sample code shows how to move the Drives object onto the Desktop: 
  16491.  
  16492. #define INCL_WINWORKPLACE
  16493. #include "os2.h"
  16494.  
  16495. HOBJECT    hObjectofDest;
  16496. HOBJECT    hObjectofObject;
  16497. HOBJECT    hObjectofResult;
  16498.  
  16499. hObjectofObject = WinQueryObject("<WP_DRIVES>");
  16500. if (hObjectofObject != NULL)
  16501. {
  16502.   /* WinQueryObject of Drives was successful */
  16503.   hObjectofDest = WinQueryObject("<WP_DESKTOP>");
  16504.  
  16505.   if (hObjectofDest != NULL)
  16506.   {
  16507.     /* WinQueryObject of Startup was successful */
  16508.     hObjectofResult = WinMoveObject(hObjectofObject,
  16509.                                     hObjectofDest,
  16510.                                     0);
  16511.  
  16512.     if (hObjectofResult != NULL)
  16513.     {
  16514.       /* Drives object was successfully moved to the Desktop */
  16515.     }
  16516.     else
  16517.     {
  16518.       /* Move failed */
  16519.     }
  16520.   }
  16521. }
  16522.  
  16523.  
  16524. ΓòÉΓòÉΓòÉ 21.2.9. Copying Objects ΓòÉΓòÉΓòÉ
  16525.  
  16526. The following sample code shows how to copy the drives object into the Startup 
  16527. folder, so the Drives folder will be opened during system startup: 
  16528.  
  16529. #define INCL_WINWORKPLACE
  16530. #include "os2.h"
  16531.  
  16532. HOBJECT    hObjectofDest;
  16533. HOBJECT    hObjectofObject;
  16534. HOBJECT    hObjectofResult;
  16535.  
  16536. hObjectofObject = WinQueryObject("<WP_DRIVES>");
  16537. if (hObjectofObject != NULL)
  16538. {
  16539.   /* WinQueryObject of Drives was successful */
  16540.   hObjectofDest = WinQueryObject("<WP_START>");
  16541.  
  16542.   if (hObjectofDest != NULL)
  16543.   {
  16544.     /* WinQueryObject of Startup was successful */
  16545.     hObjectofResult = WinCopyObject(hObjectofObject,
  16546.                                     hObjectofDest,
  16547.                                     0);
  16548.  
  16549.     if (hObjectofResult != NULL)
  16550.     {
  16551.       /* Drives object was successfully moved to the Startup folder */
  16552.     }
  16553.     else
  16554.     {
  16555.       /* Copy failed */
  16556.     }
  16557.   }
  16558. }
  16559.  
  16560.  
  16561. ΓòÉΓòÉΓòÉ 21.2.10. Creating a Shadow of Drive A on the Desktop ΓòÉΓòÉΓòÉ
  16562.  
  16563. The following sample code fragment shows how to create a shadow of drive A on 
  16564. the desktop: 
  16565.  
  16566. #define INCL_WINWORKPLACE
  16567. #include "os2.h"
  16568.  
  16569. HOBJECT   hObjectofObject;
  16570. HOBJECT   hObjecttoDest;
  16571. HOBJECT   hObjectofResult;
  16572. {
  16573.   hObjectofObject = WinQueryObject("<WP_DOS_DRV_A>");
  16574.   if (hObjectofObject != NULL)
  16575.   {
  16576.     /* WinQueryObject of DOS from Dive A: object was successful */
  16577.     hObjecttoDest = WinQueryObject("<WP_DESKTOP>");
  16578.     if (hObjecttoDest != NULL)
  16579.     {
  16580.       /* WinQueryObject of DOS from Dive A: object was successful */
  16581.       hObjectofResult = WinCreateShadow(hObjectofObject,hObjecttoDest,NULL);
  16582.       if (hObjectofResult != NULL)
  16583.       {
  16584.         /* Shadow of DOS from Drive A: object is placed on the Desktop */
  16585.       }
  16586.       else
  16587.       {
  16588.         /* WinCreateShadow failed */
  16589.       }
  16590.     }
  16591.   }
  16592. }
  16593.  
  16594.  
  16595. ΓòÉΓòÉΓòÉ 21.2.11. Registering and Deregistering Objects ΓòÉΓòÉΓòÉ
  16596.  
  16597. The following sample code shows how to register a new class, WPSample, with the 
  16598. Workplace Shell and later shows how to deregister it: 
  16599.  
  16600. #define INCL_WINWORKPLACE
  16601. #include "os2.h"
  16602.  
  16603. PSZ  pszClassName="WPSample";
  16604. PSZ  pszModName="test.dll";
  16605. BOOL fReturn;
  16606.  
  16607. {
  16608.   fReturn = WinRegisterObjectClass(pszClassName, pszModName);
  16609.   if (fReturn)
  16610.   {
  16611.     /* WPSample class was successfully registered */
  16612.   }
  16613.   else
  16614.   {
  16615.     /* WinRegisterObjectClass failed */
  16616.    }
  16617.    .
  16618.    .
  16619.    .
  16620.  
  16621.    /* Later you would want to deregister the object */
  16622.    fReturn = WinDeregisterObjectClass(pszClassName);
  16623.    if (fReturn)
  16624.    {
  16625.      /* WPSample class was successfully deregistered */
  16626.    }
  16627.    else
  16628.    {
  16629.      /* WinDeregisterObjectClass failed */
  16630.     }
  16631. }
  16632.  
  16633.  
  16634. ΓòÉΓòÉΓòÉ 21.2.12. Enumerating All Classes Registered with the System ΓòÉΓòÉΓòÉ
  16635.  
  16636. The following sample code shows how to enumerate all classes registered with 
  16637. the system: 
  16638.  
  16639. #define INCL_WINWORKPLACE
  16640. #include "os2.h"
  16641.  
  16642. PULONG    ulSize;
  16643. POBJCLASS pObjClass;
  16644. BOOL      rc;
  16645.  
  16646. {
  16647.   /* Get the buffer size required to hold all registered classes */
  16648.   if (WinEnumObjectClasses(NULL, &ulSize)
  16649.      &&
  16650.      (pmem = (PVOID) AllocMem (ulSize, NULL)))
  16651.   {
  16652.     pObjClass = (POBJCLASS)pmem;
  16653.     rc = WinEnumObjectClasses(pObjClass, &ulSize)
  16654.     if (rc)
  16655.     {
  16656.       /* pObjClass contains all classes registered with the system */
  16657.     }
  16658.     else
  16659.     {
  16660.       /* WinEnumObjectClasses failed */
  16661.     }
  16662. }
  16663.  
  16664.  
  16665. ΓòÉΓòÉΓòÉ 21.2.13. Replacing a Registered Class with Another Registered Class ΓòÉΓòÉΓòÉ
  16666.  
  16667. The following sample code shows how to replace a WPFolder object class with a 
  16668. WPMyFolder object class at restart of the system: 
  16669.  
  16670. #define INCL_WINWORKPLACE
  16671. #include "os2.h"
  16672.  
  16673. PSZ  pszNewClassName="WPMyFolderClass";
  16674. PSZ  pszOldClassName="WPFolder";
  16675. BOOL rc;
  16676.  
  16677. {
  16678.   rc = WinReplaceObjectClass(pszOldClassName, pszNewClassName, TRUE);
  16679.   if (rc)
  16680.   {
  16681.     /* Object will be replaced at next start of the system */
  16682.   }
  16683.   else
  16684.   {
  16685.     /* WinReplaceObjectClass failed */
  16686.    }
  16687. }
  16688.  
  16689.  
  16690. ΓòÉΓòÉΓòÉ 21.2.14. Obtaining the Icon Associated with a File and Displaying it ΓòÉΓòÉΓòÉ
  16691.  
  16692. The following sample code fragment shows how to obtain the icon associated with 
  16693. the TUTORIAL.EXE file and shows how to display it as the user's tutorial 
  16694. application: 
  16695.  
  16696. #define  INCL_WINWORKPLACE
  16697. #include "os2.h"
  16698.  
  16699. PSZ pszFileName = "tutorial.exe";
  16700. PSZ pszMyTutorial = "mytutor.exe";
  16701.  
  16702. HPOINTER hptr;
  16703. ULONG    rc;
  16704.  
  16705. {
  16706.   hptr = WinLoadFileIcon(pszFileName, FALSE);
  16707.   if (hptr != NULL)
  16708.   {
  16709.     /* Obtain the icon associated with TUTORIAL.EXE for displaying purpose only */
  16710.     rc = WinSetFileIcon(pszMyTutorial, hptr);
  16711.     if (rc != NULL)
  16712.     {
  16713.       /* MYTUTOR.EXE now has the icon associated with TUTORIAL.EXE */
  16714.     }
  16715.     else
  16716.     {
  16717.       /* WinSetFileIcon failed */
  16718.     }
  16719.   }
  16720.   else
  16721.   {
  16722.      /* WinLoadFileIcon failed */
  16723.   }
  16724.  
  16725.    .
  16726.    .
  16727.    .
  16728.   /* Later free the file icon associated with the TUTORIAL.EXE file */
  16729.   rc = WinFreeFileIcon(hptr);
  16730.   if (rc != NULL)
  16731.   {
  16732.     /* Icon pointer freed */
  16733.   }
  16734.   else
  16735.   {
  16736.     /* WinFreeFileIcon failed */
  16737.   }
  16738. }
  16739.  
  16740.  
  16741. ΓòÉΓòÉΓòÉ 21.2.15. Destroying Objects ΓòÉΓòÉΓòÉ
  16742.  
  16743. The following sample code shows how to destroy the object associated with the 
  16744. OBJECTID of the WP_SAMPLE class, registered earlier: 
  16745.  
  16746. #define INCL_WINWORKPLACE
  16747. #include "os2.h"
  16748.  
  16749. HOBJECT hObj;
  16750. BOOL    rc;
  16751.  
  16752. {
  16753.   hobj = WinQueryObject( "<WP_SAMPLE>" );
  16754.   if (hObj != NULLHANDLE)
  16755.   {
  16756.     /* WinQueryObject of WP_SAMPLE was successful */
  16757.     rc = WinDestroyObject(hObj);
  16758.     if (rc)
  16759.       /* hObj was successfully destroyed */
  16760.     else
  16761.       /* WinDestroyObject failed */
  16762.   }
  16763.   else
  16764.   {
  16765.     /* WinQueryObject failed */
  16766.     return;
  16767.   }
  16768. }
  16769.  
  16770.  
  16771. ΓòÉΓòÉΓòÉ 21.2.16. Shutting Down the System ΓòÉΓòÉΓòÉ
  16772.  
  16773. Given the window handle and the message queue handle, the following code 
  16774. fragment shows how to shut down the system: 
  16775.  
  16776. BOOL rc;
  16777. HAB  hab;
  16778. HMQ  hmq;
  16779.  
  16780. {
  16781.   hab = WinQueryAnchorBlock(hwnd);
  16782.   rc = WinShutDownSystem(hab, hmq);
  16783.   if (rc)
  16784.   {
  16785.     /* System shutdown successfully */
  16786.   }
  16787.   else
  16788.   {
  16789.     /* WinShutDownSystem failed */
  16790.    }
  16791. }
  16792.  
  16793.  
  16794. ΓòÉΓòÉΓòÉ 22. Notices ΓòÉΓòÉΓòÉ
  16795.  
  16796. Second Edition (January 1996) 
  16797.  
  16798. The following paragraph does not apply to the United Kingdom or any country 
  16799. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  16800. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  16801. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  16802. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  16803. do not allow disclaimer of express or implied warranties in certain 
  16804. transactions, therefore, this statement may not apply to you. 
  16805.  
  16806. This publication could include technical inaccuracies or typographical errors. 
  16807. Changes are periodically made to the information herein; these changes will be 
  16808. incorporated in new editions of the publication. IBM may make improvements 
  16809. and/or changes in the product(s) and/or the program(s) described in this 
  16810. publication at any time. 
  16811.  
  16812. It is possible that this publication may contain reference to, or information 
  16813. about, IBM products (machines and programs), programming, or services that are 
  16814. not announced in your country.  Such references or information must not be 
  16815. construed to mean that IBM intends to announce such IBM products, programming, 
  16816. or services in your country. 
  16817.  
  16818. Requests for technical information about IBM products should be made to your 
  16819. IBM reseller or IBM marketing representative. 
  16820.  
  16821.  
  16822. ΓòÉΓòÉΓòÉ 22.1. Copyright Notices ΓòÉΓòÉΓòÉ
  16823.  
  16824. COPYRIGHT LICENSE: This publication contains printed sample application 
  16825. programs in source language, which illustrate OS/2 programming techniques. You 
  16826. may copy, modify, and distribute these sample programs in any form without 
  16827. payment to IBM, for the purposes of developing, using, marketing or 
  16828. distributing application programs conforming to the OS/2 application 
  16829. programming interface. 
  16830.  
  16831. Each copy of any portion of these sample programs or any derivative work, which 
  16832. is distributed to others, must include a copyright notice as follows: "(C) 
  16833. (your company name) (year).  All rights reserved." 
  16834.  
  16835. (C) Copyright International Business Machines Corporation 1994, 1996. All 
  16836. rights reserved. 
  16837. Note to U.S. Government Users - Documentation related to restricted rights - 
  16838. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  16839. Schedule Contract with IBM Corp. 
  16840.  
  16841.  
  16842. ΓòÉΓòÉΓòÉ 22.2. Disclaimers ΓòÉΓòÉΓòÉ
  16843.  
  16844. References in this publication to IBM products, programs, or services do not 
  16845. imply that IBM intends to make these available in all countries in which IBM 
  16846. operates. Any reference to an IBM product, program, or service is not intended 
  16847. to state or imply that only that IBM product, program, or service may be used. 
  16848. Subject to IBM's valid intellectual property or other legally protectable 
  16849. rights, any functionally equivalent product, program, or service may be used 
  16850. instead of the IBM product, program, or service. The evaluation and 
  16851. verification of operation in conjunction with other products, except those 
  16852. expressly designated by IBM, are the responsibility of the user. 
  16853.  
  16854. IBM may have patents or pending patent applications covering subject matter in 
  16855. this document. The furnishing of this document does not give you any license to 
  16856. these patents. You can send license inquiries, in writing, to: 
  16857.  
  16858.       IBM Director of Licensing 
  16859.       IBM Corporation 
  16860.       500 Columbus Avenue 
  16861.       Thornwood, NY  10594 
  16862.       U.S.A. 
  16863.  
  16864.  Asia-Pacific users can inquire, in writing, to the IBM Director of 
  16865.  Intellectual Property and Licensing, IBM World Trade Asia Corporation, 2-31 
  16866.  Roppongi 3-chome, Minato-ku, Tokyo 106, Japan. 
  16867.  
  16868.  Licensees of this program who wish to have information about it for the 
  16869.  purpose of enabling: (i) the exchange of information between independently 
  16870.  created programs and other programs (including this one) and (ii) the mutual 
  16871.  use of the information which has been exchanged, should contact IBM 
  16872.  Corporation, Department LZKS, 11400 Burnet Road, Austin, TX 78758 U.S.A.  Such 
  16873.  information may be available, subject to appropriate terms and conditions, 
  16874.  including in some cases, payment of a fee. 
  16875.  
  16876.  
  16877. ΓòÉΓòÉΓòÉ 22.3. Trademarks ΓòÉΓòÉΓòÉ
  16878.  
  16879. The following terms are trademarks of the IBM Corporation in the United States 
  16880. or other countries or both: 
  16881.  
  16882.  Common User Access       CUA 
  16883.  Operating System/2       OS/2 
  16884.  PM                       Presentation Manager 
  16885.  SAA                      Systems Application Architecture 
  16886.  SOMobjects               IBM 
  16887.  Workplace Shell 
  16888.  
  16889.  The following terms are trademarks of other companies: 
  16890.  
  16891.  C++                      American Telephone and Telegraph Company 
  16892.  CORBA                    Object Management Group, Inc. 
  16893.  
  16894.  Other company, product, and service names, which may be denoted by a double 
  16895.  asterisk (**), may be trademarks or service marks of others. 
  16896.  
  16897.  
  16898. ΓòÉΓòÉΓòÉ 23. Glossary ΓòÉΓòÉΓòÉ
  16899.  
  16900. This glossary defines many of the terms used in this book. It includes terms 
  16901. and definitions from the IBM Dictionary of Computing, as well as terms specific 
  16902. to the OS/2 operating system and the Presentation Manager. It is not a complete 
  16903. glossary for the entire OS/2 operating system; nor is it a complete dictionary 
  16904. of computer terms. 
  16905.  
  16906. Other primary sources for these definitions are: 
  16907.  
  16908.      The American National Standard Dictionary for Information Systems, ANSI 
  16909.       X3.172-1990, copyrighted 1990 by the American National Standards 
  16910.       Institute, 11 West 42nd Street, New York, New York 10036. These 
  16911.       definitions are identified by the symbol (A) after the definition. 
  16912.  
  16913.      The Information Technology Vocabulary, developed by Subcommittee 1, Joint 
  16914.       Technical Committee 1, of the International Organization for 
  16915.       Standardization and the International Electrotechnical Commission 
  16916.       (ISO/IEC JTC1/SC1). Definitions of published parts of this vocabulary are 
  16917.       identified by the symbol (I) after the definition; definitions taken from 
  16918.       draft international standards, committee drafts, and working papers being 
  16919.       developed by ISO/IEC JTC1/SC1 are identified by the symbol (T) after the 
  16920.       definition, indicating that final agreement has not yet been reached 
  16921.       among the participating National Bodies of SC1. 
  16922.  
  16923.  
  16924. ΓòÉΓòÉΓòÉ 23.1. Glossary Listing ΓòÉΓòÉΓòÉ
  16925.  
  16926. Select a starting letter of glossary terms: 
  16927.  
  16928.  A    N 
  16929.  B    O 
  16930.  C    P 
  16931.  D    Q 
  16932.  E    R 
  16933.  F    S 
  16934.  G    T 
  16935.  H    U 
  16936.  I    V 
  16937.  J    W 
  16938.  K    X 
  16939.  L    Y 
  16940.  M    Z 
  16941.  
  16942.  
  16943. ΓòÉΓòÉΓòÉ <hidden> Glossary - A ΓòÉΓòÉΓòÉ
  16944.  
  16945.  accelerator  -In SAA Common User Access architecture, a key or combination of 
  16946.    keys that invokes an application-defined function. 
  16947.  
  16948.  accelerator table  -A table used to define which key strokes are treated as 
  16949.    accelerators and the commands they are translated into. 
  16950.  
  16951.  access mode  -The manner in which an application gains access to a file it has 
  16952.    opened. Examples of access modes are read-only, write-only, and read/write. 
  16953.  
  16954.  access permission  -All access rights that a user has regarding an object. (I)
  16955.  
  16956.  action  -One of a set of defined tasks that a computer performs. Users request 
  16957.    the application to perform an action in several ways, such as typing a 
  16958.    command, pressing a function key, or selecting the action name from an 
  16959.    action bar or menu. 
  16960.  
  16961.  action bar  -In SAA Common User Access architecture, the area at the top of a 
  16962.    window that contains choices that give a user access to actions available in 
  16963.    that window. 
  16964.  
  16965.  action point  -The current position on the screen at which the pointer is 
  16966.    pointing. Contrast with hot spot and input focus. 
  16967.  
  16968.  active program  -A program currently running on the computer.  An active 
  16969.    program can be interactive (running and receiving input from the user) or 
  16970.    noninteractive (running but not receiving input from the user). See also 
  16971.    interactive program and noninteractive program. 
  16972.  
  16973.  active window  -The window with which the user is currently interacting. 
  16974.  
  16975.  address space  -(1) The range of addresses available to a program. (A)  (2) 
  16976.    The area of virtual storage available for a particular job. 
  16977.  
  16978.  alphanumeric video output  -Output to the logical video buffer when the video 
  16979.    adapter is in text mode and the logical video buffer is addressed by an 
  16980.    application as a rectangular array of character cells. 
  16981.  
  16982.  American National Standard Code for Information Interchange  -The standard 
  16983.    code, using a coded character set consisting of 7-bit coded characters (8 
  16984.    bits including parity check), that is used for information interchange among 
  16985.    data processing systems, data communication systems, and associated 
  16986.    equipment. The ASCII set consists of control characters and graphic 
  16987.    characters. (A) 
  16988.  
  16989.    Note:  IBM has defined an extension to ASCII code (characters 128-255). 
  16990.  
  16991.  anchor  -A window procedure that handles Presentation Manager message 
  16992.    conversions between an icon procedure and an application. 
  16993.  
  16994.  anchor block  -An area of Presentation-Manager-internal resources to allocated 
  16995.    process or thread that calls WinInitialize. 
  16996.  
  16997.  anchor point  -A point in a window used by a program designer or by a window 
  16998.    manager to position a subsequently appearing window. 
  16999.  
  17000.  ANSI  -American National Standards Institute. 
  17001.  
  17002.  APA  -All points addressable. 
  17003.  
  17004.  API  -Application programming interface. 
  17005.  
  17006.  application  -A collection of software components used to perform specific 
  17007.    types of work on a computer; for example, a payroll application, an airline 
  17008.    reservation application, a network application. 
  17009.  
  17010.  application object  -In SAA Advanced Common User Access architecture, a form 
  17011.    that an application provides for a user; for example, a spreadsheet form. 
  17012.    Contrast with user object. 
  17013.  
  17014.  application programming interface (API)  -A functional interface supplied by 
  17015.    the operating system or by a separately orderable licensed program that 
  17016.    allows an application program written in a high-level language to use 
  17017.    specific data or functions of the operating system or the licensed program. 
  17018.  
  17019.  application-modal  -Pertaining to a message box or dialog box for which 
  17020.    processing must be completed before further interaction with any other 
  17021.    window owned by the same application may take place. 
  17022.  
  17023.  area  -In computer graphics, a filled shape such as a solid rectangle. 
  17024.  
  17025.  ASCII  -American National Standard Code for Information Interchange. 
  17026.  
  17027.  ASCIIZ  -A string of ASCII characters that is terminated with a byte 
  17028.    containing the value 0. 
  17029.  
  17030.  aspect ratio  -In computer graphics, the width-to-height ratio of an area, 
  17031.    symbol, or shape. 
  17032.  
  17033.  asynchronous (ASYNC)  -(1) Pertaining to two or more processes that do not 
  17034.    depend upon the occurrence of specific events such as common timing 
  17035.    signals. (T)  (2) Without regular time relationship;  unexpected or 
  17036.    unpredictable with respect to the execution of program instructions. See 
  17037.    also synchronous. 
  17038.  
  17039.  atom  -A constant that represents a string. As soon as a string has been 
  17040.    defined as an atom, the atom can be used in place of the string to save 
  17041.    space. Strings are associated with their respective atoms in an atom table. 
  17042.    See also integer atom. 
  17043.  
  17044.  atom table  -A table used to relate atoms with the strings that they 
  17045.    represent. Also in the table is the mechanism by which the presence of a 
  17046.    string can be checked. 
  17047.  
  17048.  atomic operation  -An operation that completes its work on an object before 
  17049.    another operation can be performed on the same object. 
  17050.  
  17051.  attribute  -A characteristic or property that can be controlled, usually to 
  17052.    obtain a required appearance;  for example, the color of a line. See also 
  17053.    graphics attributes and segment attributes. 
  17054.  
  17055.  automatic link  -In Information Presentation Facility (IPF), a link that 
  17056.    begins a chain reaction at the primary window. When the user selects the 
  17057.    primary window, an automatic link is activated to display secondary windows. 
  17058.  
  17059.  AVIO  -Advanced Video Input/Output. 
  17060.  
  17061.  
  17062. ΓòÉΓòÉΓòÉ <hidden> Glossary - B ΓòÉΓòÉΓòÉ
  17063.  
  17064.  B╨Æzier curve  -(1) A mathematical technique of specifying smooth continuous 
  17065.    lines and surfaces, which require a starting point and a finishing point 
  17066.    with several intermediate points that influence or control the path of the 
  17067.    linking curve. Named after Dr. P. B╨Æzier. (2) (D of C) In the AIX Graphics 
  17068.    Library, a cubic spline approximation to a set of four control points that 
  17069.    passes through the first and fourth control points and that has a continuous 
  17070.    slope where two spline segments meet. Named after Dr. P. B╨Æzier. 
  17071.  
  17072.  background  -(1) In multiprogramming, the conditions under which low-priority 
  17073.    programs are executed. Contrast with foreground. (2) An active session that 
  17074.    is not currently displayed on the screen. 
  17075.  
  17076.  background color  -The color in which the background of a graphic primitive is 
  17077.    drawn. 
  17078.  
  17079.  background mix  -An attribute that determines how the background of a graphic 
  17080.    primitive is combined with the existing color of the graphics presentation 
  17081.    space. Contrast with mix. 
  17082.  
  17083.  background program  -In multiprogramming, a program that executes with a low 
  17084.    priority. Contrast with foreground program. 
  17085.  
  17086.  bit map  -A representation in memory of the data displayed on an APA device, 
  17087.    usually the screen. 
  17088.  
  17089.  block  -(1) A string of data elements recorded or transmitted as a unit. The 
  17090.    elements may be characters, words, or logical records. (T)  (2) To record 
  17091.    data in a block. (3) A collection of contiguous records recorded as a unit. 
  17092.    Blocks are separated by interblock gaps and each block may contain one or 
  17093.    more records. (A)
  17094.  
  17095.  block device  -A storage device that performs I/O operations on blocks of data 
  17096.    called sectors. Data on block devices can be randomly accessed. Block 
  17097.    devices are designated by a drive letter (for example, C:). 
  17098.  
  17099.  blocking mode  -A condition set by an application that determines when its 
  17100.    threads might block. For example, an application might set the Pipemode 
  17101.    parameter for the DosCreateNPipe function so that its threads perform I/O 
  17102.    operations to the named pipe block when no data is available. 
  17103.  
  17104.  border  -A visual indication (for example, a separator line or a background 
  17105.    color) of the boundaries of a window. 
  17106.  
  17107.  boundary determination  -An operation used to compute the size of the smallest 
  17108.    rectangle that encloses a graphics object on the screen. 
  17109.  
  17110.  breakpoint  -(1) A point in a computer program where execution may be halted. 
  17111.    A breakpoint is usually at the beginning of an instruction where halts, 
  17112.    caused by external intervention, are convenient for resuming 
  17113.    execution. (T)  (2) A place in a program, specified by a command or a 
  17114.    condition, where the system halts execution and gives control to the 
  17115.    workstation user or to a specified program. 
  17116.  
  17117.  broken pipe  -When all of the handles that access one end of a pipe have been 
  17118.    closed. 
  17119.  
  17120.  bucket  -One or more fields in which the result of an operation is kept. 
  17121.  
  17122.  buffer  -(1) A portion of storage used to hold input or output data 
  17123.    temporarily. (2) To allocate and schedule the use of buffers. (A)
  17124.  
  17125.  button  -A mechanism used to request or initiate an action. See also barrel 
  17126.    buttons, bezel buttons, mouse button, push button, and radio button. 
  17127.  
  17128.  byte pipe  -Pipes that handle data as byte streams. All unnamed pipes are byte 
  17129.    pipes. Named pipes can be byte pipes or message pipes. See byte stream. 
  17130.  
  17131.  byte stream  -Data that consists of an unbroken stream of bytes. 
  17132.  
  17133.  
  17134. ΓòÉΓòÉΓòÉ <hidden> Glossary - C ΓòÉΓòÉΓòÉ
  17135.  
  17136.  cache  -A high-speed buffer storage that contains frequently accessed 
  17137.    instructions and data; it is used to reduce access time. 
  17138.  
  17139.  cached micro presentation space  -A presentation space from a 
  17140.    Presentation-Manager-owned store of micro presentation spaces. It can be 
  17141.    used for drawing to a window only, and must be returned to the store when 
  17142.    the task is complete. 
  17143.  
  17144.  CAD  -Computer-Aided Design. 
  17145.  
  17146.  call  -(1) The action of bringing a computer program, a routine, or a 
  17147.    subroutine into effect, usually by specifying the entry conditions and 
  17148.    jumping to an entry point. (I)  (A)  (2) To transfer control to a procedure, 
  17149.    program, routine, or subroutine. 
  17150.  
  17151.  calling sequence  -A sequence of instructions together with any associated 
  17152.    data necessary to execute a call. (T)
  17153.  
  17154.  Cancel  -An action that removes the current window or menu without processing 
  17155.    it, and returns the previous window. 
  17156.  
  17157.  cascaded menu  -In the OS/2 operating system, a menu that appears when the 
  17158.    arrow to the right of a cascading choice is selected. It contains a set of 
  17159.    choices that are related to the cascading choice. Cascaded menus are used to 
  17160.    reduce the length of a menu. See also cascading choice. 
  17161.  
  17162.  cascading choice  -In SAA Common User Access architecture, a choice in a menu 
  17163.    that, when selected, produces a cascaded menu containing other choices.  An 
  17164.    arrow () appears to the right of the cascading choice. 
  17165.  
  17166.  CASE statement  -In PM programming, provides the body of a window procedure. 
  17167.    There is usually one CASE statement for each message type supported by an 
  17168.    application. 
  17169.  
  17170.  CGA  -Color graphics adapter. 
  17171.  
  17172.  chained list  -A list in which the data elements may be dispersed but in which 
  17173.    each data element contains information for locating the 
  17174.    next. (T)Synonymous with linked list. 
  17175.  
  17176.  character  -A letter, digit, or other symbol. 
  17177.  
  17178.  character box  -In computer graphics, the boundary that defines, in world 
  17179.    coordinates, the horizontal and vertical space occupied by a single 
  17180.    character from a character set. See also character mode. Contrast with 
  17181.    character cell. 
  17182.  
  17183.  character cell  -The physical, rectangular space in which any single character 
  17184.    is displayed on a screen or printer device. Position is addressed by row and 
  17185.    column coordinates. Contrast with character box. 
  17186.  
  17187.  character code  -The means of addressing a character in a character set, 
  17188.    sometimes called code point. 
  17189.  
  17190.  character device  -A device that performs I/O operations on one character at a 
  17191.    time. Because character devices view data as a stream of bytes, 
  17192.    character-device data cannot be randomly accessed. Character devices include 
  17193.    the keyboard, mouse, and printer, and are referred to by name. 
  17194.  
  17195.  character mode  -A mode that, in conjunction with the font type, determines 
  17196.    the extent to which graphics characters are affected by the character box, 
  17197.    shear, and angle attributes. 
  17198.  
  17199.  character set  -(1) An ordered set of unique representations called 
  17200.    characters; for example, the 26 letters of English alphabet, Boolean 0 and 
  17201.    1, the set of symbols in the Morse code, and the 128 ASCII 
  17202.    characters. (A)  (2) All the valid characters for a programming language or 
  17203.    for a computer system. (3) A group of characters used for a specific reason; 
  17204.    for example, the set of characters a printer can print. 
  17205.  
  17206.  check box  -In SAA Advanced Common User Access architecture, a square box with 
  17207.    associated text that represents a choice. When a user selects a choice, an X 
  17208.    appears in the check box to indicate that the choice is in effect. The user 
  17209.    can clear the check box by selecting the choice again. Contrast with radio 
  17210.    button. 
  17211.  
  17212.  check mark  - (1) (D of C) In SAA Advanced Common User Access architecture, a 
  17213.    symbol that shows that a choice is currently in effect. (2) The symbol that 
  17214.    is used to indicate a selected item on a pull-down menu. 
  17215.  
  17216.  child process  -In the OS/2 operating system, a process started by another 
  17217.    process, which is called the parent process. Contrast with parent process. 
  17218.  
  17219.  child window  -A window that appears within the border of its parent window 
  17220.    (either a primary window or another child window). When the parent window is 
  17221.    resized, moved, or destroyed, the child window also is resized, moved, or 
  17222.    destroyed; however, the child window can be moved or resized independently 
  17223.    from the parent window, within the boundaries of the parent window. Contrast 
  17224.    with parent window. 
  17225.  
  17226.  choice  -(1) An option that can be selected. The choice can be presented as 
  17227.    text, as a symbol (number or letter), or as an icon (a pictorial symbol). 
  17228.    (2) (D of C) In SAA Common User Access architecture, an item that a user can 
  17229.    select. 
  17230.  
  17231.  chord  -(1) To press more than one button on a pointing device while the 
  17232.    pointer is within the limits that the user has specified for the operating 
  17233.    environment. (2) (D of C) In graphics, a short line segment whose end points 
  17234.    lie on a circle. Chords are a means for producing a circular image from 
  17235.    straight lines. The higher the number of chords per circle, the smoother the 
  17236.    circular image. 
  17237.  
  17238.  class  -A way of categorizing objects based on their behavior and shape. A 
  17239.    class is, in effect, a definition of a generic object. In SOM, a class is a 
  17240.    special kind of object that can manufacture other objects that all have a 
  17241.    common shape and exhibit similar behavior (more precisely, all of the 
  17242.    objects manufactured by a class have the same memory layout and share a 
  17243.    common set of methods). New classes can be defined in terms of existing 
  17244.    classes through a technique known as inheritance. 
  17245.  
  17246.  class method  -A class method of class <X> is a method provided by the 
  17247.    metaclass of class <X>. Class methods are executed without requiring any 
  17248.    instances of class <X> to exist, and are frequently used to create 
  17249.    instances. In System Object Model, an action that can be performed on a 
  17250.    class object. 
  17251.  
  17252.  class object  -In System Object Model, the run-time implementation of a class. 
  17253.  
  17254.  class style  -The set of properties that apply to every window in a window 
  17255.    class. 
  17256.  
  17257.  client  -(1) A functional unit that receives shared services from a 
  17258.    server. (T)  (2) A user, as in a client process that uses a named pipe or 
  17259.    queue that is created and owned by a server process. 
  17260.  
  17261.  client area  -The part of the window, inside the border, that is below the 
  17262.    menu bar. It is the user's work space, where a user types information and 
  17263.    selects choices from selection fields.  In primary windows, it is where an 
  17264.    application programmer presents the objects that a user works on. 
  17265.  
  17266.  client program  -An application that creates and manipulates instances of 
  17267.    classes. 
  17268.  
  17269.  client window  -The window in which the application displays output and 
  17270.    receives input. This window is located inside the frame window, under the 
  17271.    window title bar and any menu bar, and within any scroll bars. 
  17272.  
  17273.  clip limits  -The area of the paper that can be reached by a printer or 
  17274.    plotter. 
  17275.  
  17276.  clipboard  -In SAA Common User Access architecture, an area of computer 
  17277.    memory, or storage, that temporarily holds data. Data in the clipboard is 
  17278.    available to other applications. 
  17279.  
  17280.  clipping  -In computer graphics, removing those parts of a display image that 
  17281.    lie outside a given boundary. (I)  (A)
  17282.  
  17283.  clipping area  -The area in which the window can paint. 
  17284.  
  17285.  clipping path  -A clipping boundary in world-coordinate space. 
  17286.  
  17287.  clock tick  -The minimum unit of time that the system tracks. If the system 
  17288.    timer currently counts at a rate of X Hz, the system tracks the time every 
  17289.    1/X of a second. Also known as time tick. 
  17290.  
  17291.  CLOCK$  -Character-device name reserved for the system clock. 
  17292.  
  17293.  code page  -An assignment of graphic characters and control-function meanings 
  17294.    to all code points. 
  17295.  
  17296.  code point  -(1) Synonym for character code. (2) (D of C) A 1-byte code 
  17297.    representing one of 256 potential characters. 
  17298.  
  17299.  code segment  -An executable section of programming code within a load module. 
  17300.  
  17301.  color dithering  -See dithering. 
  17302.  
  17303.  color graphics adapter (CGA)  -An adapter that simultaneously provides four 
  17304.    colors and is supported by all IBM Personal Computer and Personal System/2 
  17305.    models. 
  17306.  
  17307.  command  -The name and parameters associated with an action that a program can 
  17308.    perform. 
  17309.  
  17310.  command area  -An area composed of a command field prompt and a command entry 
  17311.    field. 
  17312.  
  17313.  command entry field  -An entry field in which users type commands. 
  17314.  
  17315.  command line  -On a display screen, a display line, sometimes at the bottom of 
  17316.    the screen, in which only commands can be entered. 
  17317.  
  17318.  command mode  -A state of a system or device in which the user can enter 
  17319.    commands. 
  17320.  
  17321.  command prompt  -A field prompt showing the location of the command entry 
  17322.    field in a panel. 
  17323.  
  17324.  Common Programming Interface (CPI)  -Definitions of those application 
  17325.    development languages and services that have, or are intended to have, 
  17326.    implementations on and a high degree of commonality across the SAA 
  17327.    environments. One of the three SAA architectural areas. See also Common User 
  17328.    Access architecture. 
  17329.  
  17330.  Common User Access (CUA) architecture  - Guidelines for the dialog between a 
  17331.    human and a workstation or terminal. One of the three SAA architectural 
  17332.    areas. See also Common Programming Interface. 
  17333.  
  17334.  compile  -To translate a program written in a higher-level programming 
  17335.    language into a machine language program. 
  17336.  
  17337.  composite window  -A window composed of other windows (such as a frame window, 
  17338.    frame-control windows, and a client window) that are kept together as a unit 
  17339.    and that interact with each other. 
  17340.  
  17341.  computer-aided design (CAD)  -The use of a computer to design or change a 
  17342.    product, tool, or machine, such as using a computer for drafting or 
  17343.    illustrating. 
  17344.  
  17345.  COM1, COM2, COM3  -Character-device names reserved for serial ports 1 through 
  17346.    3. 
  17347.  
  17348.  CON  -Character-device name reserved for the console keyboard and screen. 
  17349.  
  17350.  conditional cascaded menu  -A pull-down menu associated with a menu item that 
  17351.    has a cascade mini-push button beside it in an object's pop-up menu. The 
  17352.    conditional cascaded menu is displayed when the user selects the mini-push 
  17353.    button. 
  17354.  
  17355.  container  -In SAA Common User Access architecture, an object that holds other 
  17356.    objects. A folder is an example of a container object. See also folder and 
  17357.    object. 
  17358.  
  17359.  contextual help  -In SAA Common User Access Architecture, help that gives 
  17360.    specific information about the item the cursor is on. The help is contextual 
  17361.    because it provides information about a specific item as it is currently 
  17362.    being used. Contrast with extended help. 
  17363.  
  17364.  contiguous  -Touching or joining at a common edge or boundary, for example, an 
  17365.    unbroken consecutive series of storage locations. 
  17366.  
  17367.  control  -In SAA Advanced Common User Access architecture, a component of the 
  17368.    user interface that allows a user to select choices or type information; for 
  17369.    example, a check box, an entry field, a radio button. 
  17370.  
  17371.  control area  -A storage area used by a computer program to hold control information. (I)  (A)
  17372.  
  17373.  Control Panel  -In the Presentation Manager, a program used to set up user 
  17374.    preferences that act globally across the system. 
  17375.  
  17376.  Control Program  -(1) The basic functions of the operating system, including 
  17377.    DOS emulation and the support for keyboard, mouse, and video input/output. 
  17378.    (2) A computer program designed to schedule and to supervise the execution 
  17379.    of programs of a computer system. (I)  (A)
  17380.  
  17381.  control window  -A window that is used as part of a composite window to 
  17382.    perform simple input and output tasks. Radio buttons and check boxes are 
  17383.    examples. 
  17384.  
  17385.  control word  -An instruction within a document that identifies its parts or 
  17386.    indicates how to format the document. 
  17387.  
  17388.  coordinate space  -A two-dimensional set of points used to generate output on 
  17389.    a video display of printer. 
  17390.  
  17391.  Copy  -A choice that places onto the clipboard, a copy of what the user has 
  17392.    selected. See also Cut and Paste. 
  17393.  
  17394.  correlation  -The action of determining which element or object within a 
  17395.    picture is at a given position on the display. This follows a pick 
  17396.    operation. 
  17397.  
  17398.  coverpage window  -A window in which the application's help information is 
  17399.    displayed. 
  17400.  
  17401.  CPI  -Common Programming Interface. 
  17402.  
  17403.  critical extended attribute  -An extended attribute that is necessary for the 
  17404.    correct operation of the system or a particular application. 
  17405.  
  17406.  critical section  -(1) In programming languages, a part of an asynchronous 
  17407.    procedure that cannot be executed simultaneously with a certain part of 
  17408.    another asynchronous procedure. (I)
  17409.  
  17410.    Note:  Part of the other asynchronous procedure also is a critical section. 
  17411.    (2) A section of code that is not reentrant; that is, code that can be 
  17412.    executed by only one thread at a time. 
  17413.  
  17414.  CUA architecture  -Common User Access architecture. 
  17415.  
  17416.  current position  -In computer graphics, the position, in user coordinates, 
  17417.    that becomes the starting point for the next graphics routine, if that 
  17418.    routine does not explicitly specify a starting point. 
  17419.  
  17420.  cursor  -A symbol displayed on the screen and associated with an input device. 
  17421.    The cursor indicates where input from the device will be placed. Types of 
  17422.    cursors include text cursors, graphics cursors, and selection cursors. 
  17423.    Contrast with pointer and input focus. 
  17424.  
  17425.  Cut  -In SAA Common User Access architecture, a choice that removes a selected 
  17426.    object, or a part of an object, to the clipboard, usually compressing the 
  17427.    space it occupied in a window. See also Copy and Paste. 
  17428.  
  17429.  
  17430. ΓòÉΓòÉΓòÉ <hidden> Glossary - D ΓòÉΓòÉΓòÉ
  17431.  
  17432.  daisy chain  -A method of device interconnection for determining interrupt 
  17433.    priority by connecting the interrupt sources serially. 
  17434.  
  17435.  data segment  -A nonexecutable section of a program module; that is, a section 
  17436.    of a program that contains data definitions. 
  17437.  
  17438.  data structure  -The syntactic structure of symbolic expressions and their 
  17439.    storage-allocation characteristics. (T)
  17440.  
  17441.  data transfer  -The movement of data from one object to another by way of the 
  17442.    clipboard or by direct manipulation. 
  17443.  
  17444.  DBCS  -Double-byte character set. 
  17445.  
  17446.  DDE  -Dynamic data exchange. 
  17447.  
  17448.  deadlock  -(1) Unresolved contention for the use of a resource. (2) An error 
  17449.    condition in which processing cannot continue because each of two elements 
  17450.    of the process is waiting for an action by, or a response from, the other. 
  17451.    (3) An impasse that occurs when multiple processes are waiting for the 
  17452.    availability of a resource that will not become available because it is 
  17453.    being held by another process that is in a similar wait state. 
  17454.  
  17455.  debug  -To detect, diagnose, and eliminate errors in programs. (T)
  17456.  
  17457.  decipoint  -In printing, one tenth of a point.  There are 72 points in an 
  17458.    inch. 
  17459.  
  17460.  default procedure  -A function provided by the Presentation Manager Interface 
  17461.    that may be used to process standard messages from dialogs or windows. 
  17462.  
  17463.  default value  -A value assumed when no value has been specified. Synonymous 
  17464.    with assumed value. For example, in the graphics programming interface, the 
  17465.    default line-type is 'solid'. 
  17466.  
  17467.  definition list  -A type of list that pairs a term and its description. 
  17468.  
  17469.  delta  -An application-defined threshold, or number of container items, from 
  17470.    either end of the list. 
  17471.  
  17472.  descendant  -See child process. 
  17473.  
  17474.  descriptive text  -Text used in addition to a field prompt to give more 
  17475.    information about a field. 
  17476.  
  17477.  Deselect all  -A choice that cancels the selection of all of the objects that 
  17478.    have been selected in that window. 
  17479.  
  17480.  Desktop Manager  -In the Presentation Manager, a window that displays a list 
  17481.    of groups of programs, each of which can be started or stopped. 
  17482.  
  17483.  desktop window  -The window, corresponding to the physical device, against 
  17484.    which all other types of windows are established. 
  17485.  
  17486.  detached process  -A background process that runs independent of the parent 
  17487.    process. 
  17488.  
  17489.  detent  -A point on a slider that represents an exact value to which a user 
  17490.    can move the slider arm. 
  17491.  
  17492.  device context  -A logical description of a data destination such as memory, 
  17493.    metafile, display, printer, or plotter. See also direct device context, 
  17494.    information device context, memory device context, metafile device context, 
  17495.    queued device context, and screen device context. 
  17496.  
  17497.  device driver  -A file that contains the code needed to attach and use a 
  17498.    device such as a display, printer, or plotter. 
  17499.  
  17500.  device space  -(1) Coordinate space in which graphics are assembled after all 
  17501.    GPI transformations have been applied. Device space is defined in 
  17502.    device-specific units. (2) ( D of C) In computer graphics, a space defined 
  17503.    by the complete set of addressable points of a display device. (A)
  17504.  
  17505.  dialog  -The interchange of information between a computer and its user 
  17506.    through a sequence of requests by the user and the presentation of responses 
  17507.    by the computer. 
  17508.  
  17509.  dialog box  -In SAA Advanced Common User Access architecture, a movable 
  17510.    window, fixed in size, containing controls that a user uses to provide 
  17511.    information required by an application so that it can continue to process a 
  17512.    user request. See also message box, primary window, secondary window. Also 
  17513.    known as a pop-up window. 
  17514.  
  17515.  Dialog Box Editor  -A WYSIWYG editor that creates dialog boxes for 
  17516.    communicating with the application user. 
  17517.  
  17518.  dialog item  -A component (for example, a menu or a button) of a dialog box. 
  17519.    Dialog items are also used when creating dialog templates. 
  17520.  
  17521.  dialog procedure  -A dialog window that is controlled by a window procedure. 
  17522.    It is responsible for responding to all messages sent to the dialog window. 
  17523.  
  17524.  dialog tag language  -A markup language used by the DTL compiler to create 
  17525.    dialog objects. 
  17526.  
  17527.  dialog template  -The definition of a dialog box, which contains details of 
  17528.    its position, appearance, and window ID, and the window ID of each of its 
  17529.    child windows. 
  17530.  
  17531.  direct device context  -A logical description of a data destination that is a 
  17532.    device other than the screen (for example, a printer or plotter), and where 
  17533.    the output is not to go through the spooler. Its purpose is to satisfy 
  17534.    queries. See also device context. 
  17535.  
  17536.  direct manipulation  -The user's ability to interact with an object by using 
  17537.    the mouse, typically by dragging an object around on the Desktop and 
  17538.    dropping it on other objects. 
  17539.  
  17540.  direct memory access (DMA)  -A technique for moving data directly between main 
  17541.    storage and peripheral equipment without requiring processing of the data by 
  17542.    the processing unit.(T)
  17543.  
  17544.  directory  -A type of file containing the names and controlling information 
  17545.    for other files or other directories. 
  17546.  
  17547.  display point  -Synonym for pel. 
  17548.  
  17549.  dithering  -(1) The process used in color displays whereby every other pel is 
  17550.    set to one color, and the intermediate pels are set to another. Together 
  17551.    they produce the effect of a third color at normal viewing distances. This 
  17552.    process can only be used on solid areas of color; it does not work, for 
  17553.    example, on narrow lines. (2) (D of C ) In computer graphics, a technique of 
  17554.    interleaving dark and light pixels so that the resulting image looks 
  17555.    smoothly shaded when viewed from a distance. 
  17556.  
  17557.  DMA  -Direct memory access. 
  17558.  
  17559.  DOS Protect Mode Interface (DPMI)  -An interface between protect mode and real 
  17560.    mode programs. 
  17561.  
  17562.  double-byte character set (DBCS)  -A set of characters in which each character 
  17563.    is represented by two bytes.  Languages such as Japanese, Chinese, and 
  17564.    Korean, which contain more characters than can be represented by 256 code 
  17565.    points, require double-byte character sets. Since each character requires 
  17566.    two bytes, the entering, displaying, and printing of DBCS characters 
  17567.    requires hardware and software that can support DBCS. 
  17568.  
  17569.  doubleword  -A contiguous sequence of bits or characters that comprises two 
  17570.    computer words and is capable of being addressed as a unit. (A)
  17571.  
  17572.  DPMI  -DOS Protect Mode Interface. 
  17573.  
  17574.  drag  -In SAA Common User Access, to use a pointing device to move an object; 
  17575.    for example, clicking on a window border, and dragging it to make the window 
  17576.    larger. 
  17577.  
  17578.  dragging  -(1) In computer graphics, moving an object on the display screen as 
  17579.    if it were attached to the pointer. (2) (D of C) In computer graphics, 
  17580.    moving one or more segments on a display surface by translating. (I)  (A)
  17581.  
  17582.  drawing chain  -See segment chain. 
  17583.  
  17584.  drop  -To fix the position of an object that is being dragged, by releasing 
  17585.    the select button of the pointing device. See also drag. 
  17586.  
  17587.  DTL  -Dialog tag language. 
  17588.  
  17589.  dual-boot function  -A feature of the OS/2 operating system that allows the 
  17590.    user to start DOS from within the operating system, or an OS/2 session from 
  17591.    within DOS. 
  17592.  
  17593.  duplex  -Pertaining to communication in which data can be sent and received at 
  17594.    the same time. Synonymous with full duplex. 
  17595.  
  17596.  dynamic data exchange (DDE)  -A message protocol used to communicate between 
  17597.    applications that share data. The protocol uses shared memory as the means 
  17598.    of exchanging data between applications. 
  17599.  
  17600.  dynamic data formatting  -A formatting procedure that enables you to 
  17601.    incorporate text, bit maps or metafiles in an IPF window at execution time. 
  17602.  
  17603.  dynamic link library  -A collection of executable programming code and data 
  17604.    that is bound to an application at load time or run time, rather than during 
  17605.    linking. The programming code and data in a dynamic link library can be 
  17606.    shared by several applications simultaneously. 
  17607.  
  17608.  dynamic linking  -The process of resolving external references in a program 
  17609.    module at load time or run time rather than during linking. 
  17610.  
  17611.  dynamic segments  -Graphics segments drawn in exclusive-OR mix mode so that 
  17612.    they can be moved from one screen position to another without affecting the 
  17613.    rest of the displayed picture. 
  17614.  
  17615.  dynamic storage  -(1) A device that stores data in a manner that permits the 
  17616.    data to move or vary with time such that the specified data is not always 
  17617.    available for recovery. (A)  (2) A storage in which the cells require 
  17618.    repetitive application of control signals in order to retain stored data. 
  17619.    Such repetitive application of the control signals is called a refresh 
  17620.    operation. A dynamic storage may use static addressing or sensing 
  17621.    circuits. (A)  (3) See also static storage. 
  17622.  
  17623.  dynamic time slicing  -Varies the size of the time slice depending on system 
  17624.    load and paging activity. 
  17625.  
  17626.  dynamic-link module  -A module that is linked at load time or run time. 
  17627.  
  17628.  
  17629. ΓòÉΓòÉΓòÉ <hidden> Glossary - E ΓòÉΓòÉΓòÉ
  17630.  
  17631.  EBCDIC  -Extended binary-coded decimal interchange code. A coded character set 
  17632.    consisting of 8-bit coded characters (9 bits including parity check), used 
  17633.    for information interchange among data processing systems, data 
  17634.    communications systems, and associated equipment. 
  17635.  
  17636.  edge-triggered  -Pertaining to an event semaphore that is posted then reset 
  17637.    before a waiting thread gets a chance to run. The semaphore is considered to 
  17638.    be posted for the rest of that thread's waiting period; the thread does not 
  17639.    have to wait for the semaphore to be posted again. 
  17640.  
  17641.  EGA  -Extended graphics adapter. 
  17642.  
  17643.  element  -An entry in a graphics segment that comprises one or more graphics 
  17644.    orders and that is addressed by the element pointer. 
  17645.  
  17646.  EMS  -Expanded Memory Specification. 
  17647.  
  17648.  encapsulation  -Hiding an object's implementation, that is, its private, 
  17649.    internal data and methods. Private variables and methods are accessible only 
  17650.    to the object that contains them. 
  17651.  
  17652.  entry field  -In SAA Common User Access architecture, an area where a user 
  17653.    types information. Its boundaries are usually indicated. See also selection 
  17654.    field. 
  17655.  
  17656.  entry panel  -A defined panel type containing one or more entry fields and 
  17657.    protected information such as headings, prompts, and explanatory text. 
  17658.  
  17659.  entry-field control  -The component of a user interface that provides the 
  17660.    means by which the application receives data entered by the user in an entry 
  17661.    field. When it has the input focus, the entry field displays a flashing 
  17662.    pointer at the position where the next typed character will go. 
  17663.  
  17664.  environment segment  -The list of environment variables and their values for a 
  17665.    process. 
  17666.  
  17667.  environment strings  -ASCII text strings that define the value of environment 
  17668.    variables. 
  17669.  
  17670.  environment variables  -Variables that describe the execution environment of a 
  17671.    process. These variables are named by the operating system or by the 
  17672.    application. Environment variables named by the operating system are PATH, 
  17673.    DPATH, INCLUDE, INIT, LIB, PROMPT, and TEMP. The values of environment 
  17674.    variables are defined by the user in the CONFIG.SYS file, or by using the 
  17675.    SET command at the OS/2 command prompt. 
  17676.  
  17677.  error message  -An indication that an error has been detected. (A)
  17678.  
  17679.  event semaphore  -A semaphore that enables a thread to signal a waiting thread 
  17680.    or threads that an event has occurred or that a task has been completed. The 
  17681.    waiting threads can then perform an action that is dependent on the 
  17682.    completion of the signaled event. 
  17683.  
  17684.  exception  -An abnormal condition such as an I/O error encountered in 
  17685.    processing a data set or a file. 
  17686.  
  17687.  exclusive system semaphore  -A system semaphore that can be modified only by 
  17688.    threads within the same process. 
  17689.  
  17690.  executable file  -(1) A file that contains programs or commands that perform 
  17691.    operations or actions to be taken. (2) A collection of related data records 
  17692.    that execute programs. 
  17693.  
  17694.  exit  -To execute an instruction within a portion of a computer program in 
  17695.    order to terminate the execution of that portion. Such portions of computer 
  17696.    programs include loops, subroutines, modules, and so on. (T)  Repeated exit 
  17697.    requests return the user to the point from which all functions provided to 
  17698.    the system are accessible. Contrast with cancel. 
  17699.  
  17700.  expanded memory specification (EMS)  -Enables DOS applications to access 
  17701.    memory above the 1MB real mode addressing limit. 
  17702.  
  17703.  extended attribute  -An additional piece of information about a file object, 
  17704.    such as its data format or category. It consists of a name and a value. A 
  17705.    file object may have more than one extended attribute associated with it. 
  17706.  
  17707.  extended help  -In SAA Common User Access architecture, a help action that 
  17708.    provides information about the contents of the application window from which 
  17709.    a user requested help. Contrast with contextual help. 
  17710.  
  17711.  extended-choice selection  -A mode that allows the user to select more than 
  17712.    one item from a window. Not all windows allow extended choice selection. 
  17713.    Contrast with multiple-choice selection. 
  17714.  
  17715.  extent  -Continuous space on a disk or diskette that is occupied by or 
  17716.    reserved for a particular data set, data space, or file. 
  17717.  
  17718.  external link  -In Information Presentation Facility, a link that connects 
  17719.    external online document files. 
  17720.  
  17721.  
  17722. ΓòÉΓòÉΓòÉ <hidden> Glossary - F ΓòÉΓòÉΓòÉ
  17723.  
  17724.  family-mode application  -An application program that can run in the OS/2 
  17725.    environment and in the DOS environment; however, it cannot take advantage of 
  17726.    many of the OS/2-mode facilities, such as multitasking, interprocess 
  17727.    communication, and dynamic linking. 
  17728.  
  17729.  FAT  -File allocation table. 
  17730.  
  17731.  FEA  -Full extended attribute. 
  17732.  
  17733.  field-level help  -Information specific to the field on which the cursor is 
  17734.    positioned. This help function is "contextual" because it provides 
  17735.    information about a specific item as it is currently used; the information 
  17736.    is dependent upon the context within the work session. 
  17737.  
  17738.  FIFO  -First-in-first-out. (A)
  17739.  
  17740.  file  -A named set of records stored or processed as a unit. (T)
  17741.  
  17742.  file allocation table (FAT)  -In IBM personal computers, a table used by the 
  17743.    operating system to allocate space on a disk for a file, and to locate and 
  17744.    chain together parts of the file that may be scattered on different sectors 
  17745.    so that the file can be used in a random or sequential manner. 
  17746.  
  17747.  file attribute  -Any of the attributes that describe the characteristics of a 
  17748.    file. 
  17749.  
  17750.  File Manager  -In the Presentation Manager, a program that displays 
  17751.    directories and files, and allows various actions on them. 
  17752.  
  17753.  file specification  -The full identifier for a file, which includes its drive 
  17754.    designation, path, file name, and extension. 
  17755.  
  17756.  file system  -The combination of software and hardware that supports storing 
  17757.    information on a storage device. 
  17758.  
  17759.  file system driver (FSD)  -A program that manages file I\O and controls the 
  17760.    format of information on the storage media. 
  17761.  
  17762.  fillet  -A curve that is tangential to the end points of two adjoining lines. 
  17763.    See also polyfillet. 
  17764.  
  17765.  filtering  -An application process that changes the order of data in a queue. 
  17766.  
  17767.  first-in-first-out (FIFO)  -A queuing technique in which the next item to be 
  17768.    retrieved is the item that has been in the queue for the longest time. (A)
  17769.  
  17770.  flag  -(1) An indicator or parameter that shows the setting of a switch. (2) A 
  17771.    character that signals the occurrence of some condition, such as the end of 
  17772.    a word. (A)  (3) (D of C) A characteristic of a file or directory that 
  17773.    enables it to be used in certain ways. See also archive flag, hidden flag, 
  17774.    and read-only flag. 
  17775.  
  17776.  focus  -See input focus. 
  17777.  
  17778.  folder  -A container used to organize objects. 
  17779.  
  17780.  font  -A particular size and style of typeface that contains definitions of 
  17781.    character sets, marker sets, and pattern sets. 
  17782.  
  17783.  Font Editor  -A utility program provided with the IBM Developers Toolkit that 
  17784.    enables the design and creation of new fonts. 
  17785.  
  17786.  foreground program  -(1) The program with which the user is currently 
  17787.    interacting. Also known as interactive program. Contrast with background 
  17788.    program. (2) (D of C) In multiprogramming,  a high-priority program. 
  17789.  
  17790.  frame  -The part of a window that can contain several different visual 
  17791.    elements specified by the application, but drawn and controlled by the 
  17792.    Presentation Manager. The frame encloses the client area. 
  17793.  
  17794.  frame styles  -Standard window layouts provided by the Presentation Manager. 
  17795.  
  17796.  FSD  -File system driver. 
  17797.  
  17798.  full-duplex  -Synonym for duplex. 
  17799.  
  17800.  full-screen application  -An application that has complete control of the 
  17801.    screen. 
  17802.  
  17803.  function  -(1) In a programming language, a block, with or without formal 
  17804.    parameters, whose execution is invoked by means of a call. (2) A set of 
  17805.    related control statements that cause one or more programs to be performed. 
  17806.  
  17807.  function key  -A key that causes a specified sequence of operations to be 
  17808.    performed when it is pressed, for example, F1 and Alt-K. 
  17809.  
  17810.  function key area  -The area at the bottom of a window that contains function 
  17811.    key assignments such as F1=Help. 
  17812.  
  17813.  
  17814. ΓòÉΓòÉΓòÉ <hidden> Glossary - G ΓòÉΓòÉΓòÉ
  17815.  
  17816.  GDT  -Global Descriptor Table. 
  17817.  
  17818.  general protection fault  -An exception condition that occurs when a process 
  17819.    attempts to use storage or a module that has some level of protection 
  17820.    assigned to it, such as I/O privilege level. See also IOPL code segment. 
  17821.  
  17822.  Global Descriptor Table (GDT)  -A table that defines code and data segments 
  17823.    available to all tasks in an application. 
  17824.  
  17825.  global dynamic-link module  -A dynamic-link module that can be shared by all 
  17826.    processes in the system that refer to the module name. 
  17827.  
  17828.  global file-name character  -Either a question mark (?) or an asterisk (*) 
  17829.    used as a variable in a file name or file name extension when referring to a 
  17830.    particular file or group of files. 
  17831.  
  17832.  glyph  -A graphic symbol whose appearance conveys information. 
  17833.  
  17834.  GPI  -Graphics programming interface. 
  17835.  
  17836.  graphic primitive  -In computer graphics, a basic element, such as an arc or a 
  17837.    line, that is not made up of smaller parts and that is used to create 
  17838.    diagrams and pictures. See also graphics segment. 
  17839.  
  17840.  graphics  -(1) A picture defined in terms of graphic primitives and graphics 
  17841.    attributes. (2) (D of C) The making of charts and pictures. (3) Pertaining 
  17842.    to charts, tables, and their creation. (4) See computer graphics, coordinate 
  17843.    graphics, fixed-image graphics, interactive graphics, passive graphics, 
  17844.    raster graphics. 
  17845.  
  17846.  graphics attributes  -Attributes that apply to graphic primitives. Examples 
  17847.    are color, line type, and shading-pattern definition. See also segment 
  17848.    attributes. 
  17849.  
  17850.  graphics field  -The clipping boundary that defines the visible part of the 
  17851.    presentation-page contents. 
  17852.  
  17853.  graphics mode  -One of several states of a display. The mode determines the 
  17854.    resolution and color content of the screen. 
  17855.  
  17856.  graphics model space  -The conceptual coordinate space in which a picture is 
  17857.    constructed after any model transforms have been applied. Also known as 
  17858.    model space. 
  17859.  
  17860.  Graphics programming interface  -The formally defined programming language 
  17861.    that is between an IBM graphics program and the user of the program. 
  17862.  
  17863.  graphics segment  -A sequence of related graphic primitives and graphics 
  17864.    attributes. See also graphic primitive. 
  17865.  
  17866.  graying  -The indication that a choice on a pull-down is unavailable. 
  17867.  
  17868.  group  -A collection of logically connected controls. For example, the buttons 
  17869.    controlling paper size for a printer could be called a group. See also 
  17870.    program group. 
  17871.  
  17872.  
  17873. ΓòÉΓòÉΓòÉ <hidden> Glossary - H ΓòÉΓòÉΓòÉ
  17874.  
  17875.  handle  -(1) An identifier that represents an object, such as a device or 
  17876.    window, to the Presentation Interface. (2) (D of C) In the Advanced DOS and 
  17877.    OS/2 operating systems, a binary value created by the system that identifies 
  17878.    a drive, directory, and file so that the file can be found and opened. 
  17879.  
  17880.  hard error  -An error condition on a network that requires either that the 
  17881.    system be reconfigured or that the source of the error be removed before the 
  17882.    system can resume reliable operation. 
  17883.  
  17884.  header  -(1) System-defined control information that precedes user data. (2) 
  17885.    The portion of a message that contains control information for the message, 
  17886.    such as one or more destination fields, name of the originating station, 
  17887.    input sequence number, character string indicating the type of message, and 
  17888.    priority level for the message. 
  17889.  
  17890.  heading tags  -A document element that enables information to be displayed in 
  17891.    windows, and that controls entries in the contents window controls placement 
  17892.    of push buttons in a window, and defines the shape and size of windows. 
  17893.  
  17894.  heap  -An area of free storage available for dynamic allocation by an 
  17895.    application. Its size varies according to the storage requirements of the 
  17896.    application. 
  17897.  
  17898.  help function  -(1) A function that provides information about a specific 
  17899.    field, an application panel, or information about the help facility. (2) (D 
  17900.    of C) One or more display images that describe how to use application 
  17901.    software or how to do a system operation. 
  17902.  
  17903.  Help index  -In SAA Common User Access architecture, a help action that 
  17904.    provides an index of the help information available for an application. 
  17905.  
  17906.  help panel  -A panel with information to assist users that is displayed in 
  17907.    response to a help request from the user. 
  17908.  
  17909.  help window  -A Common-User-Access-defined secondary window that displays 
  17910.    information when the user requests help. 
  17911.  
  17912.  hidden file  -An operating system file that is not displayed by a directory 
  17913.    listing. 
  17914.  
  17915.  hide button  -In the OS/2 operating system, a small, square button located in 
  17916.    the right-hand corner of the title bar of a window that, when selected, 
  17917.    removes from the screen all the windows associated with that window. 
  17918.    Contrast with maximize button. See also restore button. 
  17919.  
  17920.  hierarchical inheritance  -The relationship between parent and child classes. 
  17921.    An object that is lower in the inheritance hierarchy than another object, 
  17922.    inherits all the characteristics and behaviors of the objects above it in 
  17923.    the hierarchy. 
  17924.  
  17925.  hierarchy  -A tree of segments beginning with the root segment and proceeding 
  17926.    downward to dependent segment types. 
  17927.  
  17928.  high-performance file system (HPFS)  -In the OS/2 operating system, an 
  17929.    installable file system that uses high-speed buffer storage, known as a 
  17930.    cache, to provide fast access to large disk volumes. The file system also 
  17931.    supports the coexistence of multiple, active file systems on a single 
  17932.    personal computer, with the capability of multiple and different storage 
  17933.    devices. File names used with the HPFS can have as many as 254 characters. 
  17934.  
  17935.  hit testing  -The means of identifying which window is associated with which 
  17936.    input device event. 
  17937.  
  17938.  hook  -A point in a system-defined function where an application can supply 
  17939.    additional code that the system processes as though it were part of the 
  17940.    function. 
  17941.  
  17942.  hook chain  -A sequence of hook procedures that are "chained" together so that 
  17943.    each event is passed, in turn, to each procedure in the chain. 
  17944.  
  17945.  hot spot  -The part of the pointer that must touch an object before it can be 
  17946.    selected. This is usually the tip of the pointer. Contrast with action 
  17947.    point. 
  17948.  
  17949.  HPFS  -high-performance file system. 
  17950.  
  17951.  hypergraphic link  -A connection between one piece of information and another 
  17952.    through the use of graphics. 
  17953.  
  17954.  hypertext  -A way of presenting information online with connections between 
  17955.    one piece of information and another, called hypertext links. See also 
  17956.    hypertext link. 
  17957.  
  17958.  hypertext link  -A connection between one piece of information and another. 
  17959.  
  17960.  
  17961. ΓòÉΓòÉΓòÉ <hidden> Glossary - I ΓòÉΓòÉΓòÉ
  17962.  
  17963.  I/O operation  -An input operation to, or output operation from a device 
  17964.    attached to a computer. 
  17965.  
  17966.  I-beam pointer  -A pointer that indicates an area, such as an entry field in 
  17967.    which text can be edited. 
  17968.  
  17969.  icon  -In SAA Advanced Common User Access architecture, a graphical 
  17970.    representation of an object, consisting of an image, image background, and a 
  17971.    label. Icons can represent items (such as a document file) that the user 
  17972.    wants to work on, and actions that the user wants to perform. In the 
  17973.    Presentation Manager, icons are used for data objects, system actions, and 
  17974.    minimized programs. 
  17975.  
  17976.  icon area  -In the Presentation Manager, the area at the bottom of the screen 
  17977.    that is normally used to display the icons for minimized programs. 
  17978.  
  17979.  Icon Editor  -The Presentation Manager-provided tool for creating icons. 
  17980.  
  17981.  IDL  -Interface Definition Language. 
  17982.  
  17983.  image font  -A set of symbols, each of which is described in a rectangular 
  17984.    array of pels. Some of the pels in the array are set to produce the image of 
  17985.    one of the symbols. Contrast with outline font. 
  17986.  
  17987.  implied metaclass  -Subclassing the metaclass of a parent class without a 
  17988.    separate CSC for the resultant metaclass. 
  17989.  
  17990.  indirect manipulation  -Interaction with an object through choices and 
  17991.    controls. 
  17992.  
  17993.  information device context  -A logical description of a data destination other 
  17994.    than the screen (for example, a printer or plotter), but where no output 
  17995.    will occur. Its purpose is to satisfy queries. See also device context. 
  17996.  
  17997.  information panel  -A defined panel type characterized by a body containing 
  17998.    only protected information. 
  17999.  
  18000.  Information Presentation Facility (IPF)  -A facility provided by the OS/2 
  18001.    operating system, by which application developers can produce online 
  18002.    documentation and context-sensitive online help panels for their 
  18003.    applications. 
  18004.  
  18005.  inheritance  -The technique of specifying the shape and behavior of one class 
  18006.    (called a subclass) as incremental differences from another class (called 
  18007.    the parent class or superclass). The subclass inherits the superclass' state 
  18008.    representation and methods, and can provide additional data elements and 
  18009.    methods. The subclass also can provide new functions with the same method 
  18010.    names used by the superclass. Such a subclass method is said to override the 
  18011.    superclass method, and will be selected automatically by method resolution 
  18012.    on subclass instances. An overriding method can elect to call upon the 
  18013.    superclass' method as part of its own implementation. 
  18014.  
  18015.  input focus  -(1) The area of a window where user interaction is possible 
  18016.    using an input device, such as a mouse or the keyboard. (2) The position in 
  18017.    the active window where a user's normal interaction with the keyboard will 
  18018.    appear. 
  18019.  
  18020.  input router  -An internal OS/2 process that removes messages from the system 
  18021.    queue. 
  18022.  
  18023.  input/output control  -A device-specific command that requests a function of a 
  18024.    device driver. 
  18025.  
  18026.  installable file system (IFS)  -A file system in which software is installed 
  18027.    when the operating system is started. 
  18028.  
  18029.  instance  -(Or object instance). A specific object, as distinguished from the 
  18030.    abstract definition of an object referred to as its class. 
  18031.  
  18032.  instance method  -A method valid for a particular object. 
  18033.  
  18034.  instruction pointer  -In System/38, a pointer that provides addressability for 
  18035.    a machine interface instruction in a program. 
  18036.  
  18037.  integer atom  -An atom that represents a predefined system constant and 
  18038.    carries no storage overhead. For example, names of window classes provided 
  18039.    by Presentation Manager are expressed as integer atoms. 
  18040.  
  18041.  interactive graphics  -Graphics that can be moved or manipulated by a user at 
  18042.    a terminal. 
  18043.  
  18044.  interactive program  -(1) A program that is running (active) and is ready to 
  18045.    receive (or is receiving) input from a user. (2) A running program that can 
  18046.    receive input from the keyboard or another input device. Compare with active 
  18047.    program and contrast with noninteractive program. 
  18048.  
  18049.    Also known as a foreground program. 
  18050.  
  18051.  interchange file  -A file containing data that can be sent from one 
  18052.    Presentation Manager interface application to another. 
  18053.  
  18054.  Interface Definition Language (IDL)  -Language-neutral interface specification 
  18055.    for a SOM class. 
  18056.  
  18057.  interpreter  -A program that translates and executes each instruction of a 
  18058.    high-level programming language before it translates and executes. 
  18059.  
  18060.  interprocess communication (IPC)  -In the OS/2 operating system, the exchange 
  18061.    of information between processes or threads through semaphores, pipes, 
  18062.    queues, and shared memory. 
  18063.  
  18064.  interval timer  -(1) A timer that provides program interruptions on a 
  18065.    program-controlled basis. (2) An electronic counter that counts intervals of 
  18066.    time under program control. 
  18067.  
  18068.  IOCtl  -Input/output control. 
  18069.  
  18070.  IOPL  -Input/output privilege level. 
  18071.  
  18072.  IOPL code segment  -An IOPL executable section of programming code that 
  18073.    enables an application to directly manipulate hardware interrupts and ports 
  18074.    without replacing the device driver. See also privilege level. 
  18075.  
  18076.  IPC  -Interprocess communication. 
  18077.  
  18078.  IPF  -Information Presentation Facility. 
  18079.  
  18080.  IPF compiler  -A text compiler that interpret tags in a source file and 
  18081.    converts the information into the specified format. 
  18082.  
  18083.  IPF tag language  -A markup language that provides the instructions for 
  18084.    displaying online information. 
  18085.  
  18086.  item  -A data object that can be passed in a DDE transaction. 
  18087.  
  18088.  
  18089. ΓòÉΓòÉΓòÉ <hidden> Glossary - J ΓòÉΓòÉΓòÉ
  18090.  
  18091.  journal  -A special-purpose file that is used to record changes made in the 
  18092.    system. 
  18093.  
  18094.  
  18095. ΓòÉΓòÉΓòÉ <hidden> Glossary - K ΓòÉΓòÉΓòÉ
  18096.  
  18097.  Kanji  -A graphic character set used in Japanese ideographic alphabets. 
  18098.  
  18099.  KBD$  -Character-device name reserved for the keyboard. 
  18100.  
  18101.  kernel  -The part of an operating system that performs basic functions, such 
  18102.    as allocating hardware resources. 
  18103.  
  18104.  kerning  -The design of graphics characters so that their character boxes 
  18105.    overlap. Used to space text proportionally. 
  18106.  
  18107.  keyboard accelerator  -A keystroke that generates a command message for an 
  18108.    application. 
  18109.  
  18110.  keyboard augmentation  -A function that enables a user to press a keyboard key 
  18111.    while pressing a mouse button. 
  18112.  
  18113.  keyboard focus  -A temporary attribute of a window. The window that has a 
  18114.    keyboard focus receives all keyboard input until the focus changes to a 
  18115.    different window. 
  18116.  
  18117.  Keys help  -In SAA Common User Access architecture, a help action that 
  18118.    provides a listing of the application keys and their assigned functions. 
  18119.  
  18120.  
  18121. ΓòÉΓòÉΓòÉ <hidden> Glossary - L ΓòÉΓòÉΓòÉ
  18122.  
  18123.  label  -In a graphics segment, an identifier of one or more elements that is 
  18124.    used when editing the segment. 
  18125.  
  18126.  LAN  -Local area network. 
  18127.  
  18128.  language support procedure  -A function provided by the Presentation Manager 
  18129.    Interface for applications that do not, or cannot (as in the case of COBOL 
  18130.    and FORTRAN programs), provide their own dialog or window procedures. 
  18131.  
  18132.  lazy drag  -See pickup and drop. 
  18133.  
  18134.  lazy drag set  -See pickup set. 
  18135.  
  18136.  LDT  -In the OS/2 operating system, Local Descriptor Table. 
  18137.  
  18138.  LIFO stack  -A stack from which data is retrieved in last-in, first-out order. 
  18139.  
  18140.  linear address  -A unique value that identifies the memory object. 
  18141.  
  18142.  linked list  -Synonym for chained list. 
  18143.  
  18144.  list box  -In SAA Advanced Common User Access architecture, a control that 
  18145.    contains scrollable choices from which a user can select one choice. 
  18146.  
  18147.    Note:  In CUA architecture, this is a programmer term. The end user term is 
  18148.    selection list. 
  18149.  
  18150.  list button  -A button labeled with an underlined down-arrow that presents a 
  18151.    list of valid objects or choices that can be selected for that field. 
  18152.  
  18153.  list panel  -A defined panel type that displays a list of items from which 
  18154.    users can select one or more choices and then specify one or more actions to 
  18155.    work on those choices. 
  18156.  
  18157.  load time  -The point in time at which a program module is loaded into main 
  18158.    storage for execution. 
  18159.  
  18160.  load-on-call  -A function of a linkage editor that allows selected segments of 
  18161.    the module to be disk resident while other segments are executing. Disk 
  18162.    resident segments are loaded for execution and given control when any entry 
  18163.    point that they contain is called. 
  18164.  
  18165.  local area network (LAN)  -(1) A computer network located on a user's premises 
  18166.    within a limited geographical area. Communication within a local area 
  18167.    network is not subject to external regulations;  however, communication 
  18168.    across the LAN boundary may be subject to some form of regulation. (T)
  18169.  
  18170.    Note:  A LAN does not use store and forward techniques. (2) A network in 
  18171.    which a set of devices are connected to one another for communication and 
  18172.    that can be connected to a larger network. 
  18173.  
  18174.  Local Descriptor Table (LDT)  -Defines code and data segments specific to a 
  18175.    single task. 
  18176.  
  18177.  lock  -A serialization mechanism by means of which a resource is restricted 
  18178.    for use by the holder of the lock. 
  18179.  
  18180.  logical storage device  -A device that the user can map to a physical (actual) 
  18181.    device. 
  18182.  
  18183.  LPT1, LPT2, LPT3  -Character-device names reserved for parallel printers 1 
  18184.    through 3. 
  18185.  
  18186.  
  18187. ΓòÉΓòÉΓòÉ <hidden> Glossary - M ΓòÉΓòÉΓòÉ
  18188.  
  18189.  main window  -The window that is positioned relative to the desktop window. 
  18190.  
  18191.  manipulation button  -The button on a pointing device a user presses to 
  18192.    directly manipulate an object. 
  18193.  
  18194.  map  -(1) A set of values having a defined correspondence with the quantities 
  18195.    or values of another set. (I)  (A)  (2) To establish a set of values having 
  18196.    a defined correspondence with the quantities or values of another set. (I)
  18197.  
  18198.  marker box  -In computer graphics, the boundary that defines, in world 
  18199.    coordinates, the horizontal and vertical space occupied by a single marker 
  18200.    from a marker set. 
  18201.  
  18202.  marker symbol  -A symbol centered on a point. Graphs and charts can use marker 
  18203.    symbols to indicate the plotted points. 
  18204.  
  18205.  marquee box  -The rectangle that appears during a selection technique in which 
  18206.    a user selects objects by drawing a box around them with a pointing device. 
  18207.  
  18208.  Master Help Index  -In the OS/2 operating system, an alphabetic list of help 
  18209.    topics related to using the operating system. 
  18210.  
  18211.  maximize  -To enlarge a window to its largest possible size. 
  18212.  
  18213.  media window  -The part of the physical device (display, printer, or plotter) 
  18214.    on which a picture is presented. 
  18215.  
  18216.  memory block  -Part memory within a heap. 
  18217.  
  18218.  memory device context  -A logical description of a data destination that is a 
  18219.    memory bit map. See also device context. 
  18220.  
  18221.  memory management  -A feature of the operating system for allocating, sharing, 
  18222.    and freeing main storage. 
  18223.  
  18224.  memory object  -Logical unit of memory requested by an application, which 
  18225.    forms the granular unit of memory manipulation from the application 
  18226.    viewpoint. 
  18227.  
  18228.  menu  -In SAA Advanced Common User Access architecture, an extension of the 
  18229.    menu bar that displays a list of choices available for a selected choice in 
  18230.    the menu bar. After a user selects a choice in menu bar, the corresponding 
  18231.    menu appears. Additional pop-up windows can appear from menu choices. 
  18232.  
  18233.  menu bar  -In SAA Advanced Common User Access architecture, the area near the 
  18234.    top of a window, below the title bar and above the rest of the window, that 
  18235.    contains choices that provide access to other menus. 
  18236.  
  18237.  menu button  -The button on a pointing device that a user presses to view a 
  18238.    pop-up menu associated with an object. 
  18239.  
  18240.  message  -(1) In the Presentation Manager, a packet of data used for 
  18241.    communication between the Presentation Manager interface and Presentation 
  18242.    Manager applications (2) In a user interface, information not requested by 
  18243.    users but presented to users by the computer in response to a user action or 
  18244.    internal process. 
  18245.  
  18246.  message box  -(1) A dialog window predefined by the system and used as a 
  18247.    simple interface for applications, without the necessity of creating 
  18248.    dialog-template resources or dialog procedures. (2) (D of C) In SAA Advanced 
  18249.    Common User Access architecture, a type of window that shows messages to 
  18250.    users. See also dialog box, primary window, secondary window. 
  18251.  
  18252.  message filter  -The means of selecting which messages from a specific window 
  18253.    will be handled by the application. 
  18254.  
  18255.  message queue  -A sequenced collection of messages to be read by the 
  18256.    application. 
  18257.  
  18258.  message stream mode  -A method of operation in which data is treated as a 
  18259.    stream of messages.  Contrast with  byte stream. 
  18260.  
  18261.  metacharacter  -See global file-name character. 
  18262.  
  18263.  metaclass  -A class whose instances are all classes. In SOM, any class 
  18264.    descended from SOMClass is a metaclass. The methods of a metaclass are 
  18265.    sometimes called "class" methods. 
  18266.  
  18267.  metafile  -A file containing a series of attributes that set color, shape and 
  18268.    size, usually of a picture or a drawing. Using a program that can interpret 
  18269.    these attributes, a user can view the assembled image. 
  18270.  
  18271.  metafile device context  -A logical description of a data destination that is 
  18272.    a metafile, which is used for graphics interchange. See also device context. 
  18273.  
  18274.  metalanguage  -A language used to specify another language. For example, data 
  18275.    types can be described using a metalanguage so as to make the descriptions 
  18276.    independent of any one computer language. 
  18277.  
  18278.  method  -One of the units that makes up the behavior of an object. A method is 
  18279.    a combination of a function and a name, such that many different functions 
  18280.    can have the same name. Which function the name refers to at any point in 
  18281.    time depends on the object that is to execute the method and is the subject 
  18282.    of method resolution. 
  18283.  
  18284.  method override  -The replacement, by a child class, of the implementation of 
  18285.    a method inherited from a parent and an ancestor class. 
  18286.  
  18287.  mickey  -A unit of measurement for physical mouse motion whose value depends 
  18288.    on the mouse device driver currently loaded. 
  18289.  
  18290.  micro presentation space  -A graphics presentation space in which a restricted 
  18291.    set of the GPI function calls is available. 
  18292.  
  18293.  minimize  -To remove from the screen all windows associated with an 
  18294.    application and replace them with an icon that represents the application. 
  18295.  
  18296.  mix  -An attribute that determines how the foreground of a graphic primitive 
  18297.    is combined with the existing color of graphics output. Also known as 
  18298.    foreground mix. Contrast with background mix. 
  18299.  
  18300.  mixed character string  -A string containing a mixture of one-byte and Kanji 
  18301.    or Hangeul (two-byte) characters. 
  18302.  
  18303.  mnemonic  -(1) A method of selecting an item on a pull-down by means of typing 
  18304.    the highlighted letter in the menu item. (2) (D of C) In SAA Advanced Common 
  18305.    User Access architecture, usually a single character, within the text of a 
  18306.    choice, identified by an underscore beneath the character. If all characters 
  18307.    in a choice already serve as mnemonics for other choices, another character, 
  18308.    placed in parentheses immediately following the choice, can be used. When a 
  18309.    user types the mnemonic for a choice, the choice is either selected or the 
  18310.    cursor is moved to that choice. 
  18311.  
  18312.  modal dialog box  -In SAA Advanced Common User Access architecture, a type of 
  18313.    movable window, fixed in size, that requires a user to enter information 
  18314.    before continuing to work in the application window from which it was 
  18315.    displayed. Contrast with modeless dialog box. Also known as a serial dialog 
  18316.    box. Contrast with parallel dialog box. 
  18317.  
  18318.    Note:  In CUA architecture, this is a programmer term. The end user term is 
  18319.    pop-up window. 
  18320.  
  18321.  model space  -See graphics model space. 
  18322.  
  18323.  modeless dialog box  -In SAA Advanced Common User Access architecture, a type 
  18324.    of movable window, fixed in size, that allows users to continue their dialog 
  18325.    with the application without entering information in the dialog box. Also 
  18326.    known as a parallel dialog box. Contrast with modal dialog box. 
  18327.  
  18328.    Note:  In CUA architecture, this is a programmer term. The end user term is 
  18329.    pop-up window. 
  18330.  
  18331.  module definition file  -A file that describes the code segments within a load 
  18332.    module. For example, it indicates whether a code segment is loadable before 
  18333.    module execution begins (preload), or loadable only when referred to at run 
  18334.    time (load-on-call). 
  18335.  
  18336.  mouse  -In SAA usage, a device that a user moves on a flat surface to position 
  18337.    a pointer on the screen. It allows a user to select a choice o function to 
  18338.    be performed or to perform operations on the screen, such as dragging or 
  18339.    drawing lines from one position to another. 
  18340.  
  18341.  MOUSE$  -Character-device name reserved for a mouse. 
  18342.  
  18343.  multiple-choice selection  -In SAA Basic Common User Access architecture, a 
  18344.    type of field from which a user can select one or more choices or select 
  18345.    none. See also check box. Contrast with extended-choice selection. 
  18346.  
  18347.  multiple-line entry field  -In SAA Advanced Common User Access architecture, a 
  18348.    control into which a user types more than one line of information. See also 
  18349.    single-line entry field. 
  18350.  
  18351.  multitasking  -The concurrent processing of applications or parts of 
  18352.    applications. A running application and its data are protected from other 
  18353.    concurrently running applications. 
  18354.  
  18355.  mutex semaphore  -(Mutual exclusion semaphore). A semaphore that enables 
  18356.    threads to serialize their access to resources. Only the thread that 
  18357.    currently owns the mutex semaphore can gain access to the resource, thus 
  18358.    preventing one thread from interrupting operations being performed by 
  18359.    another. 
  18360.  
  18361.  muxwait semaphore  -(Multiple wait semaphore). A semaphore that enables a 
  18362.    thread to wait either for multiple event semaphores to be posted or for 
  18363.    multiple mutex semaphores to be released. Alternatively, a muxwait semaphore 
  18364.    can be set to enable a thread to wait for any ONE of the event or mutex 
  18365.    semaphores in the muxwait semaphore's list to be posted or released. 
  18366.  
  18367.  
  18368. ΓòÉΓòÉΓòÉ <hidden> Glossary - N ΓòÉΓòÉΓòÉ
  18369.  
  18370.  named pipe  -A named buffer that provides client-to-server, server-to-client, 
  18371.    or full duplex communication between unrelated processes. Contrast with 
  18372.    unnamed pipe. 
  18373.  
  18374.  national language support (NLS)  -The modification or conversion of a United 
  18375.    States English product to conform to the requirements of another language or 
  18376.    country. This can include the enabling or retrofitting of a product and the 
  18377.    translation of nomenclature, MRI, or documentation of a product. 
  18378.  
  18379.  nested list  -A list that is contained within another list. 
  18380.  
  18381.  NLS  -national language support. 
  18382.  
  18383.  non-8.3 file-name format  -A file-naming convention in which file names can 
  18384.    consist of up to 255 characters. See also 8.3 file-name format. 
  18385.  
  18386.  noncritical extended attribute  -An extended attribute that is not necessary 
  18387.    for the function of an application. 
  18388.  
  18389.  nondestructive read  -Reading that does not erase the data in the source 
  18390.    location. (T)
  18391.  
  18392.  noninteractive program  -A running program that cannot receive input from the 
  18393.    keyboard or other input device. Compare with active program, and contrast 
  18394.    with interactive program. 
  18395.  
  18396.  nonretained graphics  -Graphic primitives that are not remembered by the 
  18397.    Presentation Manager interface when they have been drawn. Contrast with 
  18398.    retained graphics. 
  18399.  
  18400.  null character (NUL)  -(1) Character-device name reserved for a nonexistent 
  18401.    (dummy) device. (2) (D of C) A control character that is used to accomplish 
  18402.    media-fill or time-fill and that may be inserted into or removed from a 
  18403.    sequence of characters without affecting the meaning of the sequence; 
  18404.    however, the control of equipment or the format may be affected by this 
  18405.    character. (I)  (A)
  18406.  
  18407.  null-terminated string  -A string of (n+1) characters where the (n+1)th 
  18408.    character is the 'null' character (0x00) Also known as 'zero-terminated' 
  18409.    string and 'ASCIIZ' string. 
  18410.  
  18411.  
  18412. ΓòÉΓòÉΓòÉ <hidden> Glossary - O ΓòÉΓòÉΓòÉ
  18413.  
  18414.  object  -The elements of data and function that programs create, manipulate, 
  18415.    pass as arguments, and so forth. An object is a way of associating specific 
  18416.    data values with a specific set of named functions (called methods) for a 
  18417.    period of time (referred to as the lifetime of the object). The data values 
  18418.    of an object are referred to as its state. In SOM, objects are created by 
  18419.    other objects called classes. The specification of what comprises the set of 
  18420.    functions and data elements that make up an object is referred to as the 
  18421.    definition of a class. 
  18422.  
  18423.    SOM objects offer a high degree of encapsulation. This property permits many 
  18424.    aspects of the implementation of an object to change without affecting 
  18425.    client programs that depend on the object's behavior. 
  18426.  
  18427.  object definition  -See class. 
  18428.  
  18429.  object instance  -See instance. 
  18430.  
  18431.  Object Interface Definition Language (OIDL)  -Specification language used in 
  18432.    SOM Version 1 for defining classes. Replaced by Interface Definition 
  18433.    Language (IDL). 
  18434.  
  18435.  object window  -A window that does not have a parent but which might have 
  18436.    child windows. An object window cannot be presented on a device. 
  18437.  
  18438.  OIDL  -Object Interface Definition Language. 
  18439.  
  18440.  open  -To start working with a file, directory, or other object. 
  18441.  
  18442.  ordered list  -Vertical arrangements of items, with each item in the list 
  18443.    preceded by a number or letter. 
  18444.  
  18445.  outline font  -A set of symbols, each of which is created as a series of lines 
  18446.    and curves.  Synonymous with vector font. Contrast with image font. 
  18447.  
  18448.  output area  -An area of storage reserved for output. (A)
  18449.  
  18450.  owner window  -A window into which specific events that occur in another 
  18451.    (owned) window are reported. 
  18452.  
  18453.  ownership  -The determination of how windows communicate using messages. 
  18454.  
  18455.  owning process  -The process that owns the resources that might be shared with 
  18456.    other processes. 
  18457.  
  18458.  
  18459. ΓòÉΓòÉΓòÉ <hidden> Glossary - P ΓòÉΓòÉΓòÉ
  18460.  
  18461.  page  -(1) A 4KB segment of contiguous physical memory. (2) (D of C) A defined 
  18462.    unit of space on a storage medium. 
  18463.  
  18464.  page viewport  -A boundary in device coordinates that defines the area of the 
  18465.    output device in which graphics are to be displayed. The presentation-page 
  18466.    contents are transformed automatically to the page viewport in device space. 
  18467.  
  18468.  paint  -(1) The action of drawing or redrawing the contents of a window. (2) 
  18469.    In computer graphics, to shade an area of a display image;  for example, 
  18470.    with crosshatching or color. 
  18471.  
  18472.  panel  -In SAA Basic Common User Access architecture, a particular arrangement 
  18473.    of information that is presented in a window or pop-up. If some of the 
  18474.    information is not visible, a user can scroll through the information. 
  18475.  
  18476.  panel area  -An area within a panel that contains related information. The 
  18477.    three major Common User Access-defined panel areas are the action bar, the 
  18478.    function key area, and the panel body. 
  18479.  
  18480.  panel area separator  -In SAA Basic Common User Access architecture, a solid, 
  18481.    dashed, or blank line that provides a visual distinction between two 
  18482.    adjacent areas of a panel. 
  18483.  
  18484.  panel body  -The portion of a panel not occupied by the action bar, function 
  18485.    key area, title or scroll bars. The panel body can contain protected 
  18486.    information, selection fields, and entry fields. The layout and content of 
  18487.    the panel body determine the panel type. 
  18488.  
  18489.  panel body area  -See client area. 
  18490.  
  18491.  panel definition  -A description of the contents and characteristics of a 
  18492.    panel. A panel definition is the application developer's mechanism for 
  18493.    predefining the format to be presented to users in a window. 
  18494.  
  18495.  panel ID  -In SAA Basic Common User Access architecture, a panel identifier, 
  18496.    located in the upper-left corner of a panel.  A user can choose whether to 
  18497.    display the panel ID. 
  18498.  
  18499.  panel title  -In SAA Basic Common User Access architecture, a particular 
  18500.    arrangement of information that is presented in a window or pop-up. If some 
  18501.    of the information is not visible, a user can scroll through the 
  18502.    information. 
  18503.  
  18504.  paper size  -The size of paper, defined in either standard U.S. or European 
  18505.    names (for example, A, B, A4), and measured in inches or millimeters 
  18506.    respectively. 
  18507.  
  18508.  parallel dialog box  -See modeless dialog box. 
  18509.  
  18510.  parameter list  -A list of values that provides a means of associating 
  18511.    addressability of data defined in a called program with data in the calling 
  18512.    program. It contains parameter names and the order in which they are to be 
  18513.    associated in the calling and called program. 
  18514.  
  18515.  parent class  -See inheritance. 
  18516.  
  18517.  parent process  -In the OS/2 operating system, a process that creates other 
  18518.    processes. Contrast with child process. 
  18519.  
  18520.  parent window  -In the OS/2 operating system, a window that creates a child 
  18521.    window. The child window is drawn within the parent window. If the parent 
  18522.    window is moved, resized, or destroyed, the child window also will be moved, 
  18523.    resized, or destroyed. However, the child window can be moved and resized 
  18524.    independently from the parent window, within the boundaries of the parent 
  18525.    window. Contrast with child window. 
  18526.  
  18527.  partition  -(1) A fixed-size division of storage. (2) On an IBM personal 
  18528.    computer fixed disk, one of four possible storage areas of variable size; 
  18529.    one may be accessed by DOS, and each of the others may be assigned to 
  18530.    another operating system. 
  18531.  
  18532.  Paste  -A choice in the Edit pull-down that a user selects to move the 
  18533.    contents of the clipboard into a preselected location. See also Copy and 
  18534.    Cut. 
  18535.  
  18536.  path  -The route used to locate files; the storage location of a file. A fully 
  18537.    qualified path lists the drive identifier, directory name, subdirectory name 
  18538.    (if any), and file name with the associated extension. 
  18539.  
  18540.  PDD  -Physical device driver. 
  18541.  
  18542.  peeking  -An action taken by any thread in the process that owns the queue to 
  18543.    examine queue elements without removing them. 
  18544.  
  18545.  pel  -(1) The smallest area of a display screen capable of being addressed and 
  18546.    switched between visible and invisible states. Synonym for display point, 
  18547.    pixel, and picture element. (2) (D of C) Picture element. 
  18548.  
  18549.  persistent object  -An object whose instance data and state are preserved 
  18550.    between system shutdown and system startup. 
  18551.  
  18552.  physical device driver (PDD)  -A system interface that handles hardware 
  18553.    interrupts and supports a set of input and output functions. 
  18554.  
  18555.  pick  -To select part of a displayed object using the pointer. 
  18556.  
  18557.  pickup  -To add an object or set of objects to the pickup set. 
  18558.  
  18559.  pickup and drop  -A drag operation that does not require the direct 
  18560.    manipulation button to be pressed for the duration of the drag. 
  18561.  
  18562.  pickup set  -The set of objects that have been picked up as part of a pickup 
  18563.    and drop operation. 
  18564.  
  18565.  picture chain  -See segment chain. 
  18566.  
  18567.  picture element  -(1) Synonym for pel. (2) (D of C) In computer graphics, the 
  18568.    smallest element of a display surface that can be independently assigned 
  18569.    color and intensity. (T)  . (3) The area of the finest detail that can be 
  18570.    reproduced effectively on the recording medium. 
  18571.  
  18572.  PID  -Process identification. 
  18573.  
  18574.  pipe  -(1) A named or unnamed buffer used to pass data between processes. A 
  18575.    process reads from or writes to a pipe as if the pipe were a standard-input 
  18576.    or standard-output file. See also named pipe and unnamed pipe. (2) (D of C) 
  18577.    To direct data so that the output from one process becomes the input to 
  18578.    another process. The standard output of one command can be connected to the 
  18579.    standard input of another with the pipe operator (|). 
  18580.  
  18581.  pixel  -(1) Synonym for pel. (2) (D of C) Picture element. 
  18582.  
  18583.  plotter  -An output unit that directly produces a hardcopy record of data on a 
  18584.    removable medium, in the form of a two-dimensional graphic representation. (T)
  18585.  
  18586.  PM  -Presentation Manager. 
  18587.  
  18588.  pointer  -(1) The symbol displayed on the screen that is moved by a pointing 
  18589.    device, such as a mouse. The pointer is used to point at items that users 
  18590.    can select. Contrast with cursor. (2) A data element that indicates the 
  18591.    location of another data element. (T)
  18592.  
  18593.  POINTER$  -Character-device name reserved for a pointer device (mouse screen 
  18594.    support). 
  18595.  
  18596.  pointing device  -In SAA Advanced Common User Access architecture, an 
  18597.    instrument, such as a mouse, trackball, or joystick, used to move a pointer 
  18598.    on the screen. 
  18599.  
  18600.  pointings  -Pairs of x-y coordinates produced by an operator defining 
  18601.    positions on a screen with a pointing device, such as a mouse. 
  18602.  
  18603.  polyfillet  -A curve based on a sequence of lines. The curve is tangential to 
  18604.    the end points of the first and last lines, and tangential also to the 
  18605.    midpoints of all other lines. See also fillet. 
  18606.  
  18607.  polygon  -One or more closed figures that can be drawn filled, outlined, or 
  18608.    filled and outlined. 
  18609.  
  18610.  polyline  -A sequence of adjoining lines. 
  18611.  
  18612.  polymorphism  -The ability to have different implementations of the same 
  18613.    method for two or more classes of objects. 
  18614.  
  18615.  pop  -To retrieve an item from a last-in-first-out stack of items. Contrast 
  18616.    with push. 
  18617.  
  18618.  pop-up menu  -A menu that lists the actions that a user can perform on an 
  18619.    object. The contents of the pop-up menu can vary depending on the context, 
  18620.    or state, of the object. 
  18621.  
  18622.  pop-up window  -(1) A window that appears on top of another window in a 
  18623.    dialog. Each pop-up window must be completed before returning to the 
  18624.    underlying window. (2) (D of C) In SAA Advanced Common User Access 
  18625.    architecture, a movable window, fixed in size, in which a user provides 
  18626.    information required by an application so that it can continue to process a 
  18627.    user request. 
  18628.  
  18629.  presentation drivers  -Special purpose I/O routines that handle field 
  18630.    device-independent I/O requests from the PM and its applications. 
  18631.  
  18632.  Presentation Manager (PM)  -The interface of the OS/2 operating system that 
  18633.    presents, in windows a graphics-based interface to applications and files 
  18634.    installed and running under the OS/2 operating system. 
  18635.  
  18636.  presentation page  -The coordinate space in which a picture is assembled for 
  18637.    display. 
  18638.  
  18639.  presentation space (PS)  -(1) Contains the device-independent definition of a 
  18640.    picture. (2) (D of C) The display space on a display device. 
  18641.  
  18642.  primary window  -In SAA Common User Access architecture, the window in which 
  18643.    the main interaction between the user and the application takes place. In a 
  18644.    multiprogramming environment, each application starts in its own primary 
  18645.    window. The primary window remains for the duration of the application, 
  18646.    although the panel displayed will change as the user's dialog moves forward. 
  18647.    See also secondary window. 
  18648.  
  18649.  primitive  -In computer graphics, one of several simple functions for drawing 
  18650.    on the screen, including, for example, the rectangle, line, ellipse, 
  18651.    polygon, and so on. 
  18652.  
  18653.  primitive attribute  -A specifiable characteristic of a graphic primitive. See 
  18654.    graphics attributes. 
  18655.  
  18656.  print job  -The result of sending a document or picture to be printed. 
  18657.  
  18658.  Print Manager  -In the Presentation Manager, the part of the spooler that 
  18659.    manages the spooling process. It also allows users to view print queues and 
  18660.    to manipulate print jobs. 
  18661.  
  18662.  privilege level  -A protection level imposed by the hardware architecture of 
  18663.    the IBM personal computer.  There are four privilege levels (number 0 
  18664.    through 3).  Only certain types of programs are allowed to execute at each 
  18665.    privilege level.  See also IOPL code segment. 
  18666.  
  18667.  procedure call  -In programming languages, a language construct for invoking 
  18668.    execution of a procedure. 
  18669.  
  18670.  process  -An instance of an executing application and the resources it is 
  18671.    using. 
  18672.  
  18673.  program  -A sequence of instructions that a computer can interpret and 
  18674.    execute. 
  18675.  
  18676.  program details  -Information about a program that is specified in the Program 
  18677.    Manager window and is used when the program is started. 
  18678.  
  18679.  program group  -In the Presentation Manager, several programs that can be 
  18680.    acted upon as a single entity. 
  18681.  
  18682.  program name  -The full file specification of a program. Contrast with program 
  18683.    title. 
  18684.  
  18685.  program title  -The name of a program as it is listed in the Program Manager 
  18686.    window. Contrast with program name. 
  18687.  
  18688.  prompt  -A displayed symbol or message that requests input from the user or 
  18689.    gives operational information; for example, on the display screen of an IBM 
  18690.    personal computer, the DOS A> prompt. The user must respond to the prompt in 
  18691.    order to proceed. 
  18692.  
  18693.  protect mode  -A method of program operation that limits or prevents access to 
  18694.    certain instructions or areas of storage. Contrast with real mode. 
  18695.  
  18696.  protocol  -A set of semantic and syntactic rules that determines the behavior 
  18697.    of functional units in achieving communication. (I)
  18698.  
  18699.  pseudocode  -An artificial language used to describe computer program 
  18700.    algorithms without using the syntax of any particular programming language. (A)
  18701.  
  18702.  pull-down  -(1) An action bar extension that displays a list of choices 
  18703.    available for a selected action bar choice. After users select an action bar 
  18704.    choice, the pull-down appears with the list of choices. Additional pop-up 
  18705.    windows may appear from pull-down choices to further extend the actions 
  18706.    available to users. (2) (D of C) In SAA Common User Access architecture, 
  18707.    pertaining to a choice in an action bar pull-down. 
  18708.  
  18709.  push  -To add an item to a last-in-first-out stack of items. Contrast with 
  18710.    pop. 
  18711.  
  18712.  push button  -In SAA Advanced Common User Access architecture, a rectangle 
  18713.    with text inside. Push buttons are used in windows for actions that occur 
  18714.    immediately when the push button is selected. 
  18715.  
  18716.  putback  -To remove an object or set of objects from the lazy drag set. This 
  18717.    has the effect of undoing the pickup operation for those objects 
  18718.  
  18719.  putdown  -To drop the objects in the lazy drag set on the target object. 
  18720.  
  18721.  
  18722. ΓòÉΓòÉΓòÉ <hidden> Glossary - Q ΓòÉΓòÉΓòÉ
  18723.  
  18724.  queue  -(1) A linked list of elements waiting to be processed in FIFO order. 
  18725.    For example, a queue may be a list of print jobs waiting to be printed. (2) 
  18726.    (D of C) A line or list of items waiting to be processed; for example, work 
  18727.    to be performed or messages to be displayed. 
  18728.  
  18729.  queued device context  -A logical description of a data destination (for 
  18730.    example, a printer or plotter) where the output is to go through the 
  18731.    spooler. See also device context. 
  18732.  
  18733.  
  18734. ΓòÉΓòÉΓòÉ <hidden> Glossary - R ΓòÉΓòÉΓòÉ
  18735.  
  18736.  radio button  -(1) A control window, shaped like a round button on the screen, 
  18737.    that can be in a checked or unchecked state. It is used to select a single 
  18738.    item from a list. Contrast with check box. (2) In SAA Advanced Common User 
  18739.    Access architecture, a circle with text beside it. Radio buttons are 
  18740.    combined to show a user a fixed set of choices from which only one can be 
  18741.    selected. The circle is partially filled when a choice is selected. 
  18742.  
  18743.  RAS  -Reliability, availability, and serviceability. 
  18744.  
  18745.  raster  -(1) In computer graphics, a predetermined pattern of lines that 
  18746.    provides uniform coverage of a display space. (T)  (2) The coordinate grid 
  18747.    that divides the display area of a display device.  (A)
  18748.  
  18749.  read-only file  -A file that can be read from but not written to. 
  18750.  
  18751.  real mode  -A method of program operation that does not limit or prevent 
  18752.    access to any instructions or areas of storage.  The operating system loads 
  18753.    the entire program into storage and gives the program access to all system 
  18754.    resources. Contrast with protect mode. 
  18755.  
  18756.  realize  -To cause the system to ensure, wherever possible, that the physical 
  18757.    color table of a device is set to the closest possible match in the logical 
  18758.    color table. 
  18759.  
  18760.  recursive routine  -A routine that can call itself, or be called by another 
  18761.    routine that was called by the recursive routine. 
  18762.  
  18763.  reentrant  -The attribute of a program or routine that allows the same copy of 
  18764.    the program or routine to be used concurrently by two or more tasks. 
  18765.  
  18766.  reference phrase  -(1) A word or phrase that is emphasized in a 
  18767.    device-dependent manner to inform the user that additional information for 
  18768.    the word or phrase is available. (2) (D of C) In hypertext, text that is 
  18769.    highlighted and preceded by a single-character input field used to signify 
  18770.    the existence of a hypertext link. 
  18771.  
  18772.  reference phrase help  -In SAA Common User Access architecture, highlighted 
  18773.    words or phrases within help information that a user selects to get 
  18774.    additional information. 
  18775.  
  18776.  refresh  -To update a window, with changed information, to its current status. 
  18777.  
  18778.  region  -A clipping boundary in device space. 
  18779.  
  18780.  register  -A part of internal storage having a specified storage capacity and 
  18781.    usually intended for a specific purpose. (T)
  18782.  
  18783.  remote file system  -A file-system driver that gains access to a remote system 
  18784.    without a block device driver. 
  18785.  
  18786.  resource  -The means of providing extra information used in the definition of 
  18787.    a window. A resource can contain definitions of fonts, templates, 
  18788.    accelerators, and mnemonics; the definitions are held in a resource file. 
  18789.  
  18790.  resource file  -A file containing information used in the definition of a 
  18791.    window. Definitions can be of fonts, templates, accelerators, and mnemonics. 
  18792.  
  18793.  restore  -To return a window to its original size or position following a 
  18794.    sizing or moving action. 
  18795.  
  18796.  retained graphics  -Graphic primitives that are remembered by the Presentation 
  18797.    Manager interface after they have been drawn. Contrast with nonretained 
  18798.    graphics. 
  18799.  
  18800.  return code  -(1) A value returned to a program to indicate the results of an 
  18801.    operation requested by that program. (2) A code used to influence the 
  18802.    execution of succeeding instructions.(A) 
  18803.  
  18804.  reverse video  -(1) A form of highlighting a character, field, or cursor by 
  18805.    reversing the color of the character, field, or cursor with its background; 
  18806.    for example, changing a red character on a black background to a black 
  18807.    character on a red background. (2) In SAA Basic Common User Access 
  18808.    architecture, a screen emphasis feature that interchanges the foreground and 
  18809.    background colors of an item. 
  18810.  
  18811.  REXX Language  -Restructured Extended Executor. A procedural language that 
  18812.    provides batch language functions along with structured programming 
  18813.    constructs such as loops; conditional testing and subroutines. 
  18814.  
  18815.  RGB  -(1) Color coding in which the brightness of the additive primary colors 
  18816.    of light, red, green, and blue, are specified as three distinct values of 
  18817.    white light. (2) Pertaining to a color display that accepts signals 
  18818.    representing red, green, and blue. 
  18819.  
  18820.  roman  -Relating to a type style with upright characters. 
  18821.  
  18822.  root segment  -In a hierarchical database, the highest segment in the tree 
  18823.    structure. 
  18824.  
  18825.  round-robin scheduling  -A process that allows each thread to run for a 
  18826.    specified amount of time. 
  18827.  
  18828.  run time  -(1) Any instant at which the execution of a particular computer 
  18829.    program takes place. (T)  (2) The amount of time needed for the execution of 
  18830.    a particular computer program. (T)  (3) The time during which an instruction 
  18831.    in an instruction register is decoded and performed. Synonym for execution 
  18832.    time. 
  18833.  
  18834.  
  18835. ΓòÉΓòÉΓòÉ <hidden> Glossary - S ΓòÉΓòÉΓòÉ
  18836.  
  18837.  SAA  -Systems Application Architecture. 
  18838.  
  18839.  SBCS  -Single-byte character set. 
  18840.  
  18841.  scheduler  -A computer program designed to perform functions such as 
  18842.    scheduling, initiation, and termination of jobs. 
  18843.  
  18844.  screen  -In SAA Basic Common User Access architecture, the physical surface of 
  18845.    a display device upon which information is shown to a user. 
  18846.  
  18847.  screen device context  -A logical description of a data destination that is a 
  18848.    particular window on the screen. See also device context. 
  18849.  
  18850.  SCREEN$  -Character-device name reserved for the display screen. 
  18851.  
  18852.  scroll bar  -In SAA Advanced Common User Access architecture, a part of a 
  18853.    window, associated with a scrollable area, that a user interacts with to see 
  18854.    information that is not currently allows visible. 
  18855.  
  18856.  scrollable entry field  -An entry field larger than the visible field. 
  18857.  
  18858.  scrollable selection field  -A selection field that contains more choices than 
  18859.    are visible. 
  18860.  
  18861.  scrolling  -Moving a display image vertically or horizontally in a manner such 
  18862.    that new data appears at one edge, as existing data disappears at the 
  18863.    opposite edge. 
  18864.  
  18865.  secondary window  -A window that contains information that is dependent on 
  18866.    information in a primary window and is used to supplement the interaction in 
  18867.    the primary window. 
  18868.  
  18869.  sector  -On disk or diskette storage, an addressable subdivision of a track 
  18870.    used to record one block of a program or data. 
  18871.  
  18872.  segment  -See graphics segment. 
  18873.  
  18874.  segment attributes  -Attributes that apply to the segment as an entity, as 
  18875.    opposed to the individual primitives within the segment. For example, the 
  18876.    visibility or detectability of a segment. 
  18877.  
  18878.  segment chain  -All segments in a graphics presentation space that are defined 
  18879.    with the 'chained' attribute. Synonym for picture chain. 
  18880.  
  18881.  segment priority  -The order in which segments are drawn. 
  18882.  
  18883.  segment store  -An area in a normal graphics presentation space where retained 
  18884.    graphics segments are stored. 
  18885.  
  18886.  select  -To mark or choose an item. Note that select means to mark or type in 
  18887.    a choice on the screen; enter means to send all selected choices to the 
  18888.    computer for processing. 
  18889.  
  18890.  select button  -The button on a pointing device, such as a mouse, that is 
  18891.    pressed to select a menu choice.  Also known as button 1. 
  18892.  
  18893.  selection cursor  -In SAA Advanced Common User Access architecture, a visual 
  18894.    indication that a user has selected a choice. It is represented by outlining 
  18895.    the choice with a dotted box. See also text cursor. 
  18896.  
  18897.  selection field  -(1) In SAA Advanced Common User Access architecture, a set 
  18898.    of related choices. See also entry field. (2) In SAA Basic Common User 
  18899.    Access architecture, an area of a panel that cannot be scrolled and contains 
  18900.    a fixed number of choices. 
  18901.  
  18902.  semantics  -The relationships between symbols and their meanings. 
  18903.  
  18904.  semaphore  -An object used by applications for signalling purposes and for 
  18905.    controlling access to serially reusable resources. 
  18906.  
  18907.  separator  -In SAA Advanced Common User Access architecture, a line or color 
  18908.    boundary that provides a visual distinction between two adjacent areas. 
  18909.  
  18910.  serial dialog box  -See modal dialog box. 
  18911.  
  18912.  serialization  -The consecutive ordering of items. 
  18913.  
  18914.  serialize  -To ensure that one or more events occur in a specified sequence. 
  18915.  
  18916.  serially reusable resource (SRR)  -A logical resource or object that can be 
  18917.    accessed by only one task at a time. 
  18918.  
  18919.  session  -(1) A routing mechanism for user interaction via the console; a 
  18920.    complete environment that determines how an application runs and how users 
  18921.    interact with the application. OS/2 can manage more than one session at a 
  18922.    time, and more than one process can run in a session. Each session has its 
  18923.    own set of environment variables that determine where OS/2 looks for 
  18924.    dynamic-link libraries and other important files. (2) (D of C) In the OS/2 
  18925.    operating system, one instance of a started program or command prompt. Each 
  18926.    session is separate from all other sessions that might be running on the 
  18927.    computer. The operating system is responsible for coordinating the resources 
  18928.    that each session uses, such as computer memory, allocation of processor 
  18929.    time, and windows on the screen. 
  18930.  
  18931.  Settings Notebook  -A control window that is used to display the settings for 
  18932.    an object and to enable the user to change them. 
  18933.  
  18934.  shadow  -An object that refers to another object. A shadow is not a copy of 
  18935.    another object, but is another representation of the object. 
  18936.  
  18937.  shadow box  -The area on the screen that follows mouse movements and shows 
  18938.    what shape the window will take if the mouse button is released. 
  18939.  
  18940.  shared data  -Data that is used by two or more programs. 
  18941.  
  18942.  shared memory  -In the OS/2 operating system, a segment that can be used by 
  18943.    more than one program. 
  18944.  
  18945.  shear  -In computer graphics, the forward or backward slant of a graphics 
  18946.    symbol or string of such symbols relative to a line perpendicular to the 
  18947.    baseline of the symbol. 
  18948.  
  18949.  shell  -(1) A software interface between a user and the operating system of a 
  18950.    computer. Shell programs interpret commands and user interactions on devices 
  18951.    such as keyboards, pointing devices, and touch-sensitive screens, and 
  18952.    communicate them to the operating system. (2) Software that allows a kernel 
  18953.    program to run under different operating-system environments. 
  18954.  
  18955.  shutdown  -The process of ending operation of a system or a subsystem, 
  18956.    following a defined procedure. 
  18957.  
  18958.  sibling processes  -Child processes that have the same parent process. 
  18959.  
  18960.  sibling windows  -Child windows that have the same parent window. 
  18961.  
  18962.  simple list  -A list of like values; for example, a list of user names. 
  18963.    Contrast with mixed list. 
  18964.  
  18965.  single-byte character set (SBCS)  -A character set in which each character is 
  18966.    represented by a one-byte code.  Contrast with double-byte character set. 
  18967.  
  18968.  slider box  -In SAA Advanced Common User Access architecture: a part of the 
  18969.    scroll bar that shows the position and size of the visible information in a 
  18970.    window relative to the total amount of information available. Also known as 
  18971.    thumb mark. 
  18972.  
  18973.  SOM  -System Object Model. 
  18974.  
  18975.  source file  -A file that contains source statements for items such as 
  18976.    high-level language programs and data description specifications. 
  18977.  
  18978.  source statement  -A statement written in a programming language. 
  18979.  
  18980.  specific dynamic-link module  -A dynamic-link module created for the exclusive 
  18981.    use of an application. 
  18982.  
  18983.  spin button  -In SAA Advanced Common User Access architecture, a type of entry 
  18984.    field that shows a scrollable ring of choices from which a user can select a 
  18985.    choice. After the last choice is displayed, the first choice is displayed 
  18986.    again.  A user can also type a choice from the scrollable ring into the 
  18987.    entry field without interacting with the spin button. 
  18988.  
  18989.  spline  -A sequence of one or more B╨Æzier curves. 
  18990.  
  18991.  spooler  -A program that intercepts the data going to printer devices and 
  18992.    writes it to disk. The data is printed or plotted when it is complete and 
  18993.    the required device is available.  The spooler prevents output from 
  18994.    different sources from being intermixed. 
  18995.  
  18996.  stack  -A list constructed and maintained so that the next data element to be 
  18997.    retrieved is the most recently stored. This method is characterized as 
  18998.    last-in-first-out (LIFO). 
  18999.  
  19000.  standard window  -A collection of window elements that form a panel. The 
  19001.    standard window can include one or more of the following window elements: 
  19002.    sizing borders, system menu icon, title bar, maximize/minimize/restore 
  19003.    icons, action bar and pull-downs, scroll bars, and client area. 
  19004.  
  19005.  static control  -The means by which the application presents descriptive 
  19006.    information (for example, headings and descriptors) to the user. The user 
  19007.    cannot change this information. 
  19008.  
  19009.  static storage  -(1) A read/write storage unit in which data is retained in 
  19010.    the absence of control signals. (A)  Static storage may use dynamic 
  19011.    addressing or sensing circuits. (2) Storage other than dynamic storage. (A)
  19012.  
  19013.  style  -See window style. 
  19014.  
  19015.  subclass  -A class that inherits from another class. See also Inheritance. 
  19016.  
  19017.  subdirectory  -In an IBM personal computer, a file referred to in a root 
  19018.    directory that contains the names of other files stored on the diskette or 
  19019.    fixed disk. 
  19020.  
  19021.  superclass  -A class from which another class inherits. See also inheritance. 
  19022.  
  19023.  swapping  -(1) A process that interchanges the contents of an area of real 
  19024.    storage with the contents of an area in auxiliary storage. (I)  (A)  (2) In 
  19025.    a system with virtual storage, a paging technique that writes the active 
  19026.    pages of a job to auxiliary storage and reads pages of another job from 
  19027.    auxiliary storage into real storage. (3) The process of temporarily removing 
  19028.    an active job from main storage, saving it on disk, and processing another 
  19029.    job in the area of main storage formerly occupied by the first job. 
  19030.  
  19031.  switch  -(1) In SAA usage, to move the cursor from one point of interest to 
  19032.    another;  for example, to move from one screen or window to another or from 
  19033.    a place within a displayed image to another place on the same displayed 
  19034.    image. (2) In a computer program, a conditional instruction and an indicator 
  19035.    to be interrogated by that instruction. (3) A device or programming 
  19036.    technique for making a selection, for example, a toggle, a conditional jump. 
  19037.  
  19038.  switch list  -See Task List. 
  19039.  
  19040.  symbolic identifier  -A text string that equates to an integer value in an 
  19041.    include file, which is used to identify a programming object. 
  19042.  
  19043.  symbols  -In Information Presentation Facility, a document element used to 
  19044.    produce characters that cannot be entered from the keyboard. 
  19045.  
  19046.  synchronous  -Pertaining to two or more processes that depend upon the 
  19047.    occurrence of specific events such as common timing signals. (T)  See also 
  19048.    asynchronous. 
  19049.  
  19050.  System Menu  -In the Presentation Manager, the pull-down in the top left 
  19051.    corner of a window that allows it to be moved and sized with the keyboard. 
  19052.  
  19053.  System Object Model (SOM)  -A mechanism for language-neutral, object-oriented 
  19054.    programming in the OS/2 environment. 
  19055.  
  19056.  system queue  -The master queue for all pointer device or keyboard events. 
  19057.  
  19058.  system-defined messages  -Messages that control the operations of applications 
  19059.    and provides input an other information for applications to process. 
  19060.  
  19061.  Systems Application Architecture (SAA)  -A set of IBM software interfaces, 
  19062.    conventions, and protocols that provide a framework for designing and 
  19063.    developing applications that are consistent across systems. 
  19064.  
  19065.  
  19066. ΓòÉΓòÉΓòÉ <hidden> Glossary - T ΓòÉΓòÉΓòÉ
  19067.  
  19068.  table tags  -In Information Presentation Facility, a document element that 
  19069.    formats text in an arrangement of rows and columns. 
  19070.  
  19071.  tag  -(1) One or more characters attached to a set of data that contain 
  19072.    information about the set, including its identification. (I)  (A)  (2) In 
  19073.    Generalized Markup Language markup, a name for a type of document or 
  19074.    document element that is entered in the source document to identify it. 
  19075.  
  19076.  target object  -An object to which the user is transferring information. 
  19077.  
  19078.  Task List  -In the Presentation Manager, the list of programs that are active. 
  19079.    The list can be used to switch to a program and to stop programs. 
  19080.  
  19081.  terminate-and-stay-resident (TSR)  -Pertaining to an application that modifies 
  19082.    an operating system interrupt vector to point to its own location (known as 
  19083.    hooking an interrupt). 
  19084.  
  19085.  text  -Characters or symbols. 
  19086.  
  19087.  text cursor  -A symbol displayed in an entry field that indicates where typed 
  19088.    input will appear. 
  19089.  
  19090.  text window  -Also known as the VIO window. 
  19091.  
  19092.  text-windowed application  -The environment in which the operating system 
  19093.    performs advanced-video input and output operations. 
  19094.  
  19095.  thread  -A unit of execution within a process. It uses the resources of the 
  19096.    process. 
  19097.  
  19098.  thumb mark  -The portion of the scroll bar that describes the range and 
  19099.    properties of the data that is currently visible in a window. Also known as 
  19100.    a slider box. 
  19101.  
  19102.  thunk  -Term used to describe the process of address conversion, stack and 
  19103.    structure realignment, etc., necessary when passing control between 16-bit 
  19104.    and 32-bit modules. 
  19105.  
  19106.  tilde  -A mark used to denote the character that is to be used as a mnemonic 
  19107.    when selecting text items within a menu. 
  19108.  
  19109.  time slice  -(1) An interval of time on the processing unit allocated for use 
  19110.    in performing a task. After the interval has expired, processing-unit time 
  19111.    is allocated to another task, so a task cannot monopolize processing-unit 
  19112.    time beyond a fixed limit. (2) In systems with time sharing, a segment of 
  19113.    time allocated to a terminal job. 
  19114.  
  19115.  time-critical process  -A process that must be performed within a specified 
  19116.    time after an event has occurred. 
  19117.  
  19118.  timer  -A facility provided under the Presentation Manager, whereby 
  19119.    Presentation Manager will dispatch a message of class WM_TIMER to a 
  19120.    particular window at specified intervals. This capability may be used by an 
  19121.    application to perform a specific processing task at predetermined 
  19122.    intervals, without the necessity for the application to explicitly keep 
  19123.    track of the passage of time. 
  19124.  
  19125.  timer tick  -See clock tick. 
  19126.  
  19127.  title bar  -In SAA Advanced Common User Access architecture, the area at the 
  19128.    top of each window that contains the window title and system menu icon. When 
  19129.    appropriate, it also contains the minimize, maximize, and restore icons. 
  19130.    Contrast with panel title. 
  19131.  
  19132.  TLB  -Translation lookaside buffer. 
  19133.  
  19134.  transaction  -An exchange between a workstation and another device that 
  19135.    accomplishes a particular action or result. 
  19136.  
  19137.  transform  -(1) The action of modifying a picture by scaling, shearing, 
  19138.    reflecting, rotating, or translating. (2) The object that performs or 
  19139.    defines such a modification; also referred to as a transformation. 
  19140.  
  19141.  Translation lookaside buffer (TLB)  -A hardware-based address caching 
  19142.    mechanism for paging information. 
  19143.  
  19144.  Tree  -In the Presentation Manager, the window in the File Manager that shows 
  19145.    the organization of drives and directories. 
  19146.  
  19147.  truncate  -(1) To terminate a computational process in accordance with some 
  19148.    rule (A)  (2) To remove the beginning or ending elements of a string. (3) To 
  19149.    drop data that cannot be printed or displayed in the line width specified or 
  19150.    available. (4) To shorten a field or statement to a specified length. 
  19151.  
  19152.  TSR  -Terminate-and-stay-resident. 
  19153.  
  19154.  
  19155. ΓòÉΓòÉΓòÉ <hidden> Glossary - U ΓòÉΓòÉΓòÉ
  19156.  
  19157.  unnamed pipe  -A circular buffer, created in memory, used by related processes 
  19158.    to communicate with one another. Contrast with named pipe. 
  19159.  
  19160.  unordered list  -In Information Presentation Facility, a vertical arrangement 
  19161.    of items in a list, with each item in the list preceded by a special 
  19162.    character or bullet. 
  19163.  
  19164.  update region  -A system-provided area of dynamic storage containing one or 
  19165.    more (not necessarily contiguous) rectangular areas of a window that are 
  19166.    visually invalid or incorrect, and therefore are in need of repainting. 
  19167.  
  19168.  user interface  -Hardware, software, or both that allows a user to interact 
  19169.    with and perform operations on a system, program, or device. 
  19170.  
  19171.  User Shell  -A component of OS/2 that uses a graphics-based, windowed 
  19172.    interface to allow the user to manage applications and files installed and 
  19173.    running under OS/2. 
  19174.  
  19175.  utility program  -(1) A computer program in general support of computer 
  19176.    processes; for example, a diagnostic program, a trace program, a sort 
  19177.    program. (T)  (2) A program designed to perform an everyday task such as 
  19178.    copying data from one storage device to another. (A)
  19179.  
  19180.  
  19181. ΓòÉΓòÉΓòÉ <hidden> Glossary - V ΓòÉΓòÉΓòÉ
  19182.  
  19183.  value set control  -A visual component that enables a user to select one 
  19184.    choice from a group of mutually exclusive choices. 
  19185.  
  19186.  vector font  -A set of symbols, each of which is created as a series of lines 
  19187.    and curves. Synonymous with outline font. Contrast with image font. 
  19188.  
  19189.  VGA  -Video graphics array. 
  19190.  
  19191.  view  -A way of looking at an object's information. 
  19192.  
  19193.  viewing pipeline  -The series of transformations applied to a graphic object 
  19194.    to map the object to the device on which it is to be presented. 
  19195.  
  19196.  viewing window  -A clipping boundary that defines the visible part of model 
  19197.    space. 
  19198.  
  19199.  VIO  -Video Input/Output. 
  19200.  
  19201.  virtual memory (VM)  -Synonymous with virtual storage. 
  19202.  
  19203.  virtual storage  -(1) The storage space that may be regarded as addressable 
  19204.    main storage by the user of a computer system in which virtual addresses are 
  19205.    mapped into real addresses. The size of virtual storage is limited by the 
  19206.    addressing scheme of the computer system and by the amount of auxiliary 
  19207.    storage available, not by the actual number of main storage 
  19208.    locations. (I)  (A)  (2) Addressable space that is apparent to the user as 
  19209.    the processor storage space, from which the instructions and the data are 
  19210.    mapped into the processor storage locations. (3) Synonymous with virtual 
  19211.    memory. 
  19212.  
  19213.  visible region  -A window's presentation space, clipped to the boundary of the 
  19214.    window and the boundaries of any overlying window. 
  19215.  
  19216.  volume  -(1) A file-system driver that uses a block device driver for input 
  19217.    and output operations to a local or remote device. (I)  (2) A portion of 
  19218.    data, together with its data carrier, that can be handled conveniently as a 
  19219.    unit. 
  19220.  
  19221.  
  19222. ΓòÉΓòÉΓòÉ <hidden> Glossary - W ΓòÉΓòÉΓòÉ
  19223.  
  19224.  wildcard character  -Synonymous with global file-name character. 
  19225.  
  19226.  window  -(1) A portion of a display surface in which display images pertaining 
  19227.    to a particular application can be presented. Different applications can be 
  19228.    displayed simultaneously in different windows. (A)  (2) An area of the 
  19229.    screen with visible boundaries within which information is displayed. A 
  19230.    window can be smaller than or the same size as the screen. Windows can 
  19231.    appear to overlap on the screen. 
  19232.  
  19233.  window class  -The grouping of windows whose processing needs conform to the 
  19234.    services provided by one window procedure. 
  19235.  
  19236.  window coordinates  -A set of coordinates by which a window position or size 
  19237.    is defined; measured in device units, or pels. 
  19238.  
  19239.  window handle  -Unique identifier of a window, generated by Presentation 
  19240.    Manager when the window is created, and used by applications to direct 
  19241.    messages to the window. 
  19242.  
  19243.  window procedure  -Code that is activated in response to a message. The 
  19244.    procedure controls the appearance and behavior of its associated windows. 
  19245.  
  19246.  window rectangle  -The means by which the size and position of a window is 
  19247.    described in relation to the desktop window. 
  19248.  
  19249.  window resource  -A read-only data segment stored in the .EXE file of an 
  19250.    application o the .DLL file of a dynamic link library. 
  19251.  
  19252.  window style  -The set of properties that influence how events related to a 
  19253.    particular window will be processed. 
  19254.  
  19255.  window title  -In SAA Advanced Common User Access architecture, the area in 
  19256.    the title bar that contains the name of the application and the OS/2 
  19257.    operating system file name, if applicable. 
  19258.  
  19259.  Workplace Shell  -The OS/2 object-oriented, graphical user interface. 
  19260.  
  19261.  workstation  -(1) A display screen together with attachments such as a 
  19262.    keyboard, a local copy device, or a tablet. (2) (D of C) One or more 
  19263.    programmable or nonprogrammable devices that allow a user to do work. 
  19264.  
  19265.  world coordinates  -A device-independent Cartesian coordinate system used by 
  19266.    the application program for specifying graphical input and output. (I)  (A)
  19267.  
  19268.  world-coordinate space  -Coordinate space in which graphics are defined before 
  19269.    transformations are applied. 
  19270.  
  19271.  WYSIWYG  -What-You-See-Is-What-You-Get. A capability of a text editor to 
  19272.    continually display pages exactly as they will be printed. 
  19273.  
  19274.  
  19275. ΓòÉΓòÉΓòÉ <hidden> Glossary - X ΓòÉΓòÉΓòÉ
  19276.  
  19277. There are no glossary terms for this starting letter. 
  19278.  
  19279.  
  19280. ΓòÉΓòÉΓòÉ <hidden> Glossary - Y ΓòÉΓòÉΓòÉ
  19281.  
  19282. There are no glossary terms for this starting letter. 
  19283.  
  19284.  
  19285. ΓòÉΓòÉΓòÉ <hidden> Glossary - Z ΓòÉΓòÉΓòÉ
  19286.  
  19287.  z-order  -The order in which sibling windows are presented. The topmost 
  19288.    sibling window obscures any portion of the siblings that it overlaps; the 
  19289.    same effect occurs down through the order of lower sibling windows. 
  19290.  
  19291.  zooming  -The progressive scaling of an entire display image in order to give 
  19292.    the visual impression of movement of all or part of a display group toward 
  19293.    or away from an observer. (I)  (A)
  19294.  
  19295.  8.3 file-name format  -A file-naming convention in which file names are 
  19296.    limited to eight characters before and three characters after a single dot. 
  19297.    Usually pronounced "eight-dot-three." See also non-8.3 file-name format. 
  19298.