home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / iwftech.zip / iwftech.inf (.txt)
OS/2 Help File  |  1994-08-05  |  361KB  |  10,213 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Special Notices ΓòÉΓòÉΓòÉ
  3.  
  4.  Second Edition (July 1994) 
  5.  
  6.  This edition applies to Version 2.1 of IBM* WorkFrame/2* (Program number 
  7.  82G-3734). Make sure you are using the correct edition for the level of the 
  8.  product you are using. 
  9.  
  10.  Any reference to an IBM licensed program in this help is not intended to state 
  11.  or imply that only IBM's licensed program may be used.  Any functionally 
  12.  equivalent product, program, or service that does not infringe on any of IBM's 
  13.  intellectual property rights may be used instead of the IBM product, program, 
  14.  or service. 
  15.  
  16.  Evaluation and verification of operation in conjunction with other products, 
  17.  except those expressly designated by IBM, is the user's responsibility. 
  18.  
  19.  IBM may have patents or pending patent applications covering subject matter in 
  20.  this document.  The furnishing of this document does not give you any license 
  21.  to these patents. 
  22.  
  23.  This document may contain examples of data and reports used in daily business 
  24.  operations.  To illustrate them as completely as possible, the examples may 
  25.  include names of individuals, companies, brands, and products.  All of these 
  26.  names are fictitious and any similarity to the names and addresses used by an 
  27.  actual business enterprise is entirely coincidental. 
  28.  
  29.  The following terms, denoted by an asterisk (*) in this document, are 
  30.  trademarks of the IBM corporation in the United States and/or other countries: 
  31.  
  32.   WorkFrame/2 
  33.   C Set ++ 
  34.   IBM 
  35.   OS/2 
  36.   Operating System/2 
  37.   Presentation Manager 
  38.   WorkPlace Shell 
  39.  
  40.  
  41. ΓòÉΓòÉΓòÉ 1.1. Copyright Notice ΓòÉΓòÉΓòÉ
  42.  
  43. Integration Kit for IBM* WorkFrame/2* Version 2.1 
  44.  
  45. The integration kit contains an information reference and sample programs 
  46. illustrating application programming interfaces to provide assistance with 
  47. product integration into IBM's WorkFrame/2 Version 2.1. 
  48.  
  49. The information and sample programs are intended only for Version 2.1, and are 
  50. not applicable to any other IBM product or product release. 
  51.  
  52. The integration kit is provided as is, without any warranty of merchantibility 
  53. of fitness for any particular purpose. The kit includes sample code. This code 
  54. has not been tested, and IBM makes no representation of its workability or 
  55. fitness on any system. 
  56.  
  57. You are permitted to make copies of the whole of this kit, including this 
  58. notice screen. You are also permitted to copy the sample programs, and their 
  59. source, contained in the kit for the purpose of running those programs on your 
  60. system. 
  61.  
  62. You may distribute copies of the whole of this kit, or only of the sample 
  63. programs, in any country recognising the copyright of U.S. nationals. Any 
  64. copies distributed by you must include a copy of this notice screen. 
  65.  
  66. IBM will attempt to make future releases of the WorkFrame/2 product compatible, 
  67. but cannot guarantee upward compatibility. 
  68.  
  69. (c) Copyright International Business Machines Corporation 1994. 
  70.  
  71.  
  72. ΓòÉΓòÉΓòÉ 1.2. Reader's Comments ΓòÉΓòÉΓòÉ
  73.  
  74. Missing items are flagged with a "@@@" symbol. 
  75.  
  76. Please address questions and comments to: 
  77.  
  78. Angelique F. Faustino
  79. FAUSTINO AT TOROLAB4
  80. faustino@torolab4.vnet.ibm.com
  81. Tie line 778-3297
  82.  
  83. Help on using the WorkFrame/2 product is available through: 
  84.  
  85.  o External support channels: 
  86.  
  87.      1. CompuServe: OS2DF1 forum 
  88.      2. Internet: WorkFrame@vnet.ibm.com 
  89.  
  90.  o Internal support channels: 
  91.  
  92.      1. VNET: TOROLAB6(WF2SUPP) 
  93.      2. WRKFRAME FORUM and WRKFRAME CFORUM on the IBMPC disk 
  94.  
  95.  Important note:  Please do not post integration questions on the public 
  96.                   forums. Instead, e-mail to the Internet or VNET address given 
  97.                   above. 
  98.  
  99.  
  100. ΓòÉΓòÉΓòÉ 2. ------------------------------------------------------- ΓòÉΓòÉΓòÉ
  101.  
  102.  
  103. ΓòÉΓòÉΓòÉ 3. User's Guide ΓòÉΓòÉΓòÉ
  104.  
  105.  
  106. ΓòÉΓòÉΓòÉ 4. ------------------------------------------------------- ΓòÉΓòÉΓòÉ
  107.  
  108.  
  109. ΓòÉΓòÉΓòÉ 5. Introduction ΓòÉΓòÉΓòÉ
  110.  
  111. This online reference describes the WorkFrame/2* V2.1 C Integration Toolkit, a 
  112. set of application programming interfaces (API's) for integrating tools and 
  113. file systems with the WorkFrame/2 version 2.1 programming environment. 
  114.  
  115. The categories of WorkFrame/2 Integration Toolkit API's can be divided into two 
  116. groups: 
  117.  
  118.   1. WorkFrame/2-provided APIs: 
  119.  
  120.     Actions Profile 
  121.     Message Routing 
  122.     Projects 
  123.     Installation Support 
  124.  
  125.   2. APIs to be provided by tool integrators: 
  126.  
  127.     Action Support 
  128.     Project Access Method (PAM) 
  129.  
  130.  Any mention of WorkFrame/2 hereafter refers to Version 2.1 of the WorkFrame/2 
  131.  product, unless explicitly qualified. 
  132.  
  133.  
  134. ΓòÉΓòÉΓòÉ 5.1. Who Should Use This Book ΓòÉΓòÉΓòÉ
  135.  
  136. This document is a detailed technical guide and reference for application 
  137. programmers who are knowledgeable in C and Presentation Manager* (PM) 
  138. programming, and want to build applications to work seamlessly within the 
  139. WorkFrame/2*  environment. Basic knowledge of SOM is also useful. This document 
  140. assumes a good understanding of WorkFrame/2 Version 2.1 features and 
  141. terminology from a user's perspective. 
  142.  
  143. The WorkFrame/2 Integration Toolkit provides API's to: 
  144.  
  145.   1. Integrate programming tools like compilers, linkers, debuggers, and 
  146.      editors, and other general-purpose tools, into the WorkFrame/2 
  147.      environment. 
  148.  
  149.   2. Access project objects from remote file systems other than OS/2*. 
  150.  
  151.   3. Set up and interact with project objects and actions. 
  152.  
  153.  
  154. ΓòÉΓòÉΓòÉ 5.2. How to Use this Book ΓòÉΓòÉΓòÉ
  155.  
  156. This document is divided into two main parts.  The first part is a guide that 
  157. explains concepts, and describes the components of this Integration Toolkit. 
  158. The second part is a reference to the WorkFrame/2* data types, APIs, and 
  159. messages. 
  160.  
  161. Read the material under the overview and introduction headings to get an 
  162. overall view of how to integrate with the WorkFrame/2 product.  Read the 
  163. reference material to understand how each API works. 
  164.  
  165. The WorkFrame/2 Integration Toolkit APIs are divided into five categories. 
  166. These categories are reflected as first-level headings in the reference part of 
  167. this document. There is more detailed information about each category under 
  168. their headings. 
  169.  
  170. APIs are presented in the table of contents in an order that is most beneficial 
  171. to the reader who views each API in sequence. The order is not alphabetical, 
  172. but can be viewed alphabetically in the index of this document.  Callback 
  173. functions and macros are described first, and then the APIs in the order that 
  174. they will most likely be used. 
  175.  
  176.  
  177. ΓòÉΓòÉΓòÉ 5.2.1. Conventions Used in this Reference ΓòÉΓòÉΓòÉ
  178.  
  179. Fonts Used in this Reference 
  180.  
  181. In this reference, code fragments appear in a monospaced font. WorkFrame/2* API 
  182. names appear in boldface.  Publication names appear in underlined italics.  New 
  183. terms are italicized. 
  184.  
  185. Hypertext links are shown in a different colour from the rest of the text. 
  186.  
  187. Conventions Used in Function Descriptions 
  188.  
  189. The purpose of this online document is to provide information about the 
  190. WorkFrame/2* Version 2.1 Integration functions, parameters, return codes, data 
  191. types, variables, and constants.  This section provides information about the 
  192. notation conventions and function descriptions used in this reference. 
  193.  
  194. Each function is described with the following: 
  195.  
  196.  Function Syntax 
  197.       Describes the C language calling syntax of each WorkFrame/2-provided 
  198.       function. 
  199.  
  200.       Integrator-provided functions are typedef'd as pointers to functions. 
  201.       The typedef declarations are shown. 
  202.  
  203.  Parameters 
  204.       Each parameter is listed with its C language data type, parameter type, 
  205.       and a brief description. 
  206.  
  207.     o Data types 
  208.  
  209.       All OS/2* and WorkFrame/2* data types are written in uppercase. When a 
  210.       WorkFrame/2-defined data type is used, a hypertext link is provided to 
  211.       its definition. WorkFrame/2-defined data types are prefixed with "WKF". 
  212.       A data type of "Pxxxx" implicitly defines a pointer to the data type 
  213.       "xxxx". 
  214.  
  215.     o Kinds of Parameters 
  216.  
  217.       There are three kinds of parameters: 
  218.  
  219.        Input 
  220.            Specified by the caller 
  221.  
  222.        Output 
  223.            Returned by the function 
  224.  
  225.        Input/Output 
  226.            Specified by the caller and modified by the function. 
  227.  
  228.     o A brief description of each parameter is given.  Where appropriate, 
  229.       restrictions and prerequisites are also included.  In many cases, the 
  230.       parameter is a pointer to a structure or string buffer. 
  231.  
  232.  Return Values 
  233.       A list of possible return codes is provided.  A function of type ULONG 
  234.       returns a zero (NO_ERROR) or a WorkFrame/2-defined return code.  A 
  235.       function of type APIRET returns zero, or an OS/2-defined return code that 
  236.       is less than the constant ERROR_USER_DEFINED_BAS.  These return codes 
  237.       result from a call to an OS/2 API within the function.  APIRET return 
  238.       codes greater than ERROR_USER_DEFINED_BAS are WorkFrame/2-defined. 
  239.  
  240.  Example 
  241.       Each function has a C language example showing how it could be used. 
  242.  
  243.  Programming Note 
  244.                    The functions in this document are named in mixed-case for 
  245.                    readability, but are known to the WorkFrame/2 program as 
  246.                    uppercase character strings. If you are using a compiler 
  247.                    that generates a mixed-case external name, you should code 
  248.                    the functions in uppercase. 
  249.  
  250.  
  251. ΓòÉΓòÉΓòÉ 5.2.2. Related Documentation ΓòÉΓòÉΓòÉ
  252.  
  253. If you are not familiar with the WorkFrame/2* Version 2.1 product and 
  254. terminology, please refer to the following publications: 
  255.  
  256.  o Online WorkFrame/2 Tutorial 
  257.  o IBM C/C++ Tools:  WorkFrame/2 Introduction (publication number S82G-3740) 
  258.  o Online help 
  259.  
  260.  If you need information on Presentation Manager* programming, see the 
  261.  following publications: 
  262.  
  263.  o Online PM Reference from IBM Developer's Tookit 
  264.  o Publications from the OS/2 Developer's Toolkit Technical Library (number 
  265.    SBOF-1206), especially: 
  266.  
  267.     - OS/2 2.0 Application Design Guide (S10G-6260) 
  268.     - OS/2 2.0 Programming Guide Volumes I, II, and III (S10G-6261, S10G-6494, 
  269.       S10G-6495) 
  270.     - PM Programming Reference Volumes I, II, and III (S10G-6264, S10G-6265, 
  271.       S10G-6272) 
  272.     - OS/2 2.0 Control Program Programming Reference (S10G-6263) 
  273.  
  274.  o Designing OS/2 Applications by  David E. Reich (publication number 
  275.    SC28-2701) 
  276.  o Advanced OS/2 Presentation Manager Programming by T.E. Burge and J. Celi Jr. 
  277.    (publication number SR28-4646-0) 
  278.  
  279.  For information on SOM programming, refer to the following IBM* publications: 
  280.  
  281.  o Online SOM Reference from IBM Developer's Toolkit 
  282.  o OS/2 2.0 System Object Model Reference  (S10G-6309) 
  283.  
  284.  
  285. ΓòÉΓòÉΓòÉ 6. Overview of the WorkFrame/2 Integration Toolkit ΓòÉΓòÉΓòÉ
  286.  
  287. IBM* WorkFrame/2* Version 2.1 is a unique, object-oriented application 
  288. development framework that takes full advantage of the OS/2* Workplace Shell* 
  289. environment to create a highly-customizable graphical interface that simplifies 
  290. the process of organizing and building software projects. 
  291.  
  292. You can integrate any DOS, Windows*, and OS/2 16- and 32-bit tools within the 
  293. WorkFrame/2 environment in a seamless fashion using the APIs provided in the 
  294. WorkFrame/2 Integration Toolkit for Version 2.1. 
  295.  
  296. This section briefly introduces the groups of APIs that make up the WorkFrame/2 
  297. Integration Toolkit, and explains some of their key concepts. 
  298.  
  299.  Projects 
  300.       APIs for reading and writing to base project file. Creating and setting 
  301.       projects is also discussed. 
  302.  
  303.  Action Support 
  304.       APIs for providing an Options DLL to display and set tool options, 
  305.       support make file creation, and provide error handling and 
  306.       context-sensitive help for tool error messages. 
  307.  
  308.  Project Access Method (PAM) 
  309.       APIs for providing a project access method to enable one or more 
  310.       WorkFrame/2 projects to consist of parts from a remote system or from a 
  311.       file system other than OS/2. 
  312.  
  313.  Actions Profile 
  314.       APIs for querying actions, environment variables, and available types. 
  315.       Creating and setting actions profiles is also discussed. 
  316.  
  317.  Message Routing 
  318.       APIs for communicating with the router to send and receive notification 
  319.       messages from other registered tools. 
  320.  
  321.  
  322. ΓòÉΓòÉΓòÉ 6.1. What the Integration Toolkit Includes ΓòÉΓòÉΓòÉ
  323.  
  324. Included in the WorkFrame/2* Version 2.1 Integration Toolkit are: 
  325.  
  326.  Public header (.H) files 
  327.        WKF.H, WKFINS.H, WKFMSG.H, WKFOPT.H, WKFPAM.H, WKFPRF.H, WKFPRJ.H 
  328.  
  329.        Containing type definitions, variable and constant declarations 
  330.        (including WorkFrame/2-defined message classes), and function prototypes 
  331.        that define the entrypoints to dynamic link libraries (DLLs) provided 
  332.        both by this toolkit, and by tool integrators. 
  333.  
  334.  Import library (.LIB) files 
  335.        WKF21.LIB, WKFBPM21.LIB, WKFDEF21.LIB 
  336.  
  337.        Containing library code that calls the WorkFrame/2-provided APIs. These 
  338.        should be statically linked with integrating applications. 
  339.  
  340.  Dynamic Link Library (.DLL) files 
  341.        Containing library code for the WorkFrame/2-provided APIs.  These are 
  342.        shipped with the WorkFrame/2 Version 2.1 product and are not explicitly 
  343.        included with this Integration Toolkit. 
  344.  
  345.  Sample Programs 
  346.        A number of sample programs are provided to illustrate the use and 
  347.        definition of the WorkFrame/2 Integration APIs. 
  348.  
  349.  Integration Toolkit Reference (this document) 
  350.        Describes the process of integrating tools into the WorkFrame/2 Version 
  351.        2.1 environment, and the APIs required to accomplish this. 
  352.  
  353.  
  354. ΓòÉΓòÉΓòÉ 6.2. About the WorkFrame/2 Integration Toolkit APIs ΓòÉΓòÉΓòÉ
  355.  
  356. The WorkFrame/2* Integration Toolkit is a set of functions you need to fully 
  357. enable your tool for use within the WorkFrame/2 version 2.1 environment. 
  358.  
  359. Most of the APIs are provided by this Integration Kit for your use (these are 
  360. referred to as WorkFrame/2-provided APIs). These include the Project, Actions 
  361. Profile, Message Routing, and Installation Support APIs. 
  362.  
  363. Other APIs must be supplied by the tool-integrator as DLL entrypoints that 
  364. enable the WorkFrame/2 program to obtain important information about your tool. 
  365. In this document, the Action Support APIs are referred to as 
  366. integrator-provided; and the PAM entrypoints as PAM-provided. 
  367.  
  368. In particular, you must provide a defined set of action support and/or PAM APIs 
  369. in a dynamic link library (DLL) if you want to: 
  370.  
  371.   1. Present a customized graphical user-interface to the user for setting tool 
  372.      options. 
  373.  
  374.   2. Provide a project access method (PAM) to access project parts on a foreign 
  375.      (non-OS/2) or remote file system, or to customize access to project parts. 
  376.  
  377.  This document does not give you a detailed description of how you should write 
  378.  the APIs, since that depends on the nature of your tool, the file system you 
  379.  are using, and how you want to control interaction with the user.  However, 
  380.  this document does tell you: 
  381.  
  382.   1. How the WorkFrame/2 will call your API 
  383.   2. The minimum tasks your API must perform to successfully integrate with the 
  384.      WorkFrame/2. 
  385.  
  386.  
  387. ΓòÉΓòÉΓòÉ 6.2.1. Creating DLLs for Integrator-supplied APIs ΓòÉΓòÉΓòÉ
  388.  
  389. The integrator- and PAM- supplied APIs must be made available to the 
  390. WorkFrame/2* program as entrypoints in a dynamic link library (DLL). 
  391.  
  392. The following is a list of requirements for building the DLLs: 
  393.  
  394.   1. Write the code for all the required entrypoints as defined in the header 
  395.      files.  These entrypoints are described later in this document. 
  396.  
  397.   2. Compile the APIs into a DLL.  Note that actions support for multiple 
  398.      tools, including a single PAM, can be contained in the same DLL.  Suites 
  399.      of related tools that may or may not need a specialized project access 
  400.      method can provide a single WorkFrame/2-integrating DLL. 
  401.  
  402.  The name of the DLL which contains your APIs for handling tool options is 
  403.  specified in the Options page of the actions profile's Settings notebook for 
  404.  your tool's action entry. 
  405.  
  406.  The name of the DLL which contains your PAM APIs is specified in the Access 
  407.  page of the Settings notebook of the project that needs to use your PAM. 
  408.  
  409.  When the WorkFrame/2 needs to call an API for your tool, say, when the user 
  410.  wants to change the options settings, WorkFrame/2 looks in the actions profile 
  411.  for your tool to obtain the name of the DLL it needs to load.  Similarly, 
  412.  WorkFrame/2 obtains the name of the PAM DLL from the project settings when, 
  413.  for example, the user wants to edit a project object that resides on another 
  414.  file system. 
  415.  
  416.  Note that the following default options and PAM DLLs are provided with the 
  417.  WorkFrame/2 product: 
  418.  
  419.  DDE3DEF2.DLL  (Default Options DLL) 
  420.          Provides an options dialog that allows users to enter command-line 
  421.          options for any tool. 
  422.  
  423.  DDE3BPAM.DLL  (Basic Project Access Method) 
  424.          Provides basic access to local and LAN-based OS/2 file system objects 
  425.          that can exist in multiple directories for a particular project. 
  426.  
  427.  Related information: 
  428.  
  429.  o Building Actions Support and PAM DLLs 
  430.  
  431.  
  432. ΓòÉΓòÉΓòÉ 6.2.2. Using the WorkFrame/2-provided APIs ΓòÉΓòÉΓòÉ
  433.  
  434. All WorkFrame/2* version 1.x interfaces are supported in version 2.x. The 
  435. internal interface layer takes care of parameter conversions and API mappings 
  436. between version 1.x and version 2.x interfaces. An important difference with 
  437. the version 2.x interfaces is that they are consistent for all types of tools 
  438. and actions, not just for compilers. 
  439.  
  440. All version 2.x and higher APIs are 32-bit and use the _System linkage 
  441. convention.  Specify the APIENTRY linkage keyword in function declarations when 
  442. providing interfaces to the WorkFrame/2 program. 
  443.  
  444.  
  445. ΓòÉΓòÉΓòÉ 6.3. About the Sample Programs ΓòÉΓòÉΓòÉ
  446.  
  447. The WorkFrame/2* Integration Toolkit provides a collection of sample programs 
  448. to illustrate certain aspects of WorkFrame/2 integration: 
  449.  
  450.  Install 
  451.       Installs a WorkFrame/2-integrated tool called Sample. It illustrates: 
  452.  
  453.      1. Detecting the installed version of the WorkFrame/2 program. 
  454.      2. Detecting the installed WorkFrame/2 folder location 
  455.      3. Creating a tool or product folder 
  456.      4. Creating a sample actions profile 
  457.      5. Adding an entry in the actions profile 
  458.      6. Creating a project that uses the actions profile 
  459.      7. Setting project options for the tool. 
  460.  
  461.       To use this tool, run INSTALL.EXE.  It creates a folder on your desktop 
  462.       that contains a sample actions profile and project. 
  463.  
  464.  Launch 
  465.       Launches any action, by name or by class, from any other tool. It 
  466.       illustrates: 
  467.  
  468.      1. Integrating a vio (non-PM) program into the WorkFrame/2 router 
  469.      2. Launching an action, by class or by name, for a specific project from 
  470.         an external tool. 
  471.  
  472.       To use this tool, run LAUNCH.EXE with the following command line: 
  473.  
  474.       launch <project file> <action class> <source files...> 
  475.  
  476.       You can also run the TEST.CMD file, which demonstrates launching a 
  477.       COMPILE action on the Hello World WorkFrame/2 sample. 
  478.  
  479.  PeterPAM 
  480.       A project access method that displays different icons depending on 
  481.       project part file name extensions. It illustrates chaining to the default 
  482.       PAM, DDE3DEF2.DLL. 
  483.  
  484.       To use PeterPAM, copy PETERPAM.DLL to a directory on your LIBPATH, such 
  485.       as the \DLL subdirectory of your WorkFrame/2 installation directory. 
  486.       Specify "PETERPAM" as the access method for a project.  To associate 
  487.       icons with file extensions, select the Options pushbutton on the Access 
  488.       page of the project's Settings notebook.  The project's container view 
  489.       should then display the project files with the associated icons. 
  490.  
  491.  SOMOpt 
  492.       An actions support (Options) DLL for the SOM compiler.  It illustrates 
  493.       providing actions support for a tool. 
  494.  
  495.       To use this tool, create an action for the OS/2 SOM compiler, and have it 
  496.       use SOMOPT for its Options DLL.  Set SOM compiler options for a project 
  497.       and try to create a make file involving the SOM compiler action to see 
  498.       how the DLL generates dependency information for MakeMake.  The 
  499.       SOMOPT.DLL contains all the required entrypoints for an actions support 
  500.       DLL. 
  501.  
  502.  WFPeek - Router Peek and Display 
  503.       Displays WorkFrame/2 router messages. It illustrates: 
  504.  
  505.      1. Integrating a Presentation Manager* program into the WorkFrame/2 router 
  506.      2. Receiving messages from the WorkFrame/2 router 
  507.  
  508.       To use WFPeek, run WFPEEK.EXE then perform certain actions that would 
  509.       generate a router broadcast to registered clients, such as an update to a 
  510.       project or actions profile.  The notification messages are shown in the 
  511.       WFPeek window. 
  512.  
  513.  WKFInfo 
  514.       Displays public information about a project and its available actions. It 
  515.       illustrates: 
  516.  
  517.      1. Using the project APIs for reading the project file to display public 
  518.         project information 
  519.      2. Using the actions profile APIs for querying the project's available 
  520.         actions and displaying information about them. 
  521.  
  522.       To use the WKFInfo sample, run WKFINFO.EXE and select a project file. 
  523.       Information about the project is displayed on the WKFInfo window. 
  524.  
  525.  WFEdit 
  526.       A WorkFrame/2-integrated simple editor. It illustrates the editor side of 
  527.       the Dynamic Data Exchange (DDE) protocols used within WorkFrame/2 
  528.  
  529.       To run this sample editor, add it as the default EDIT-class action for a 
  530.       test project, and specifying the default Options DLL, DDE3DEF2, for the 
  531.       WFEdit action.  Ensure that the Send errors to editor checkbox is 
  532.       selected for the project's WFEdit options. Run a monitored action, such 
  533.       as a COMPILE or MAKE, on a project with a source file that contains an 
  534.       error so that an error message is output to the Monitor. Double-click on 
  535.       the error text in the Monitor window to invoke the default editor and 
  536.       begin the DDE session.  The editor displays the DDE messages as they are 
  537.       received, and the values of certain variables. 
  538.  
  539.  QStart 
  540.       Creates projects from the command line. It illustrates the ease at which 
  541.       projects can be created. 
  542.  
  543.       To use this tool, run QSTART.EXE to create a project with the default 
  544.       values on the desktop.  Use the command line options (documented in the 
  545.       QSTART.CMD file) to override default values. 
  546.  
  547.  
  548. ΓòÉΓòÉΓòÉ 6.4. Overview of the API Categories ΓòÉΓòÉΓòÉ
  549.  
  550. This section gives a brief overview of each WorkFrame/2 Integration Toolkit API 
  551. category: 
  552.  
  553.  Projects 
  554.  Action Support 
  555.  Project Access Method (PAM) 
  556.  Actions Profile 
  557.  Message Routing 
  558.  Installation Support 
  559.  
  560.  
  561. ΓòÉΓòÉΓòÉ 6.4.1. Projects ΓòÉΓòÉΓòÉ
  562.  
  563.  
  564. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  565.  
  566.  
  567. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  568.  
  569. WorkFrame/2* projects offer a way to organize the development of your software 
  570. application into different components.  For example, the components of a 
  571. software application could consist of an executable file, a dynamic link 
  572. library, and a class library. Within the WorkFrame/2 environment, these 
  573. components are referred to as base projects.  Projects are managed by the 
  574. WorkFrame/2 Project Manager. 
  575.  
  576. A project visually appears as a Workplace Shell container that holds the source 
  577. code objects for a particular component. These source code objects are called 
  578. project parts. Projects also contain important information used to build the 
  579. component, such as tool option settings and a make file. 
  580.  
  581. Composite projects are containers that can hold base projects and other 
  582. composite projects. 
  583.  
  584. The open WorkFrame/2 project interface offers minimal data integration with 
  585. WorkFrame/2 so that tool-specific project information can be saved and 
  586. retrieved without affecting other integrating tools.  Through this set of APIs, 
  587. tool integrators can enable tools to: 
  588.  
  589.  o Create projects 
  590.  o Query or modify project settings 
  591.  
  592.  Tools that ship sample code can use these APIs to create their own projects 
  593.  and project settings. 
  594.  
  595.  
  596. ΓòÉΓòÉΓòÉ 6.4.2. Actions Support ΓòÉΓòÉΓòÉ
  597.  
  598.  
  599. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  600.  
  601.  
  602. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  603.  
  604. The Action Support APIs give your tool the ability to allow a user to specify 
  605. options through customized graphical user interface, such as a dialog or 
  606. notebook, that is fully integrated with the WorkFrame/2* interface. An example 
  607. is the C Set ++* compiler options dialog provided by the DDE4ICC options DLL. 
  608. It lets you set options for the C Set ++ Compile action (in the IBM C/C++ Tools 
  609. Actions Profile) for a project via a settings notebook that divides groups of 
  610. compile options into pages. 
  611.  
  612. Options settings can be stored with a particular project, thus giving each 
  613. project its own set of options that apply each time the tool is invoked on its 
  614. behalf. 
  615.  
  616. Within the WorkFrame/2 environment, a tool is presented to the user as an 
  617. action defined in an actions profile. When the action is invoked via the 
  618. WorkFrame/2 object-action method, WorkFrame/2 automatically builds an 
  619. invocation string from the options that were set and uses it to invoke the 
  620. tool. 
  621.  
  622. To allow users to set options for your tool via a graphical user-interface, you 
  623. will need to provide the proper function entrypoints and externalize these as 
  624. APIs in a dynamic link library (DLL).  The WorkFrame/2 program calls these 
  625. functions to get information about your tool (such as its default options 
  626. settings and error handling).  When your tool is set up as a WorkFrame/2 
  627. action, the name of the Options DLL to use for querying and setting options is 
  628. specified in the Options page of the action's Change Action notebook accessed 
  629. from the actions profile. 
  630.  
  631. Because you write the code for the APIs, you can design your options-setting 
  632. interface so that the interaction with the user is best suited to the nature of 
  633. your tool. The APIs you will need to provide are defined later in the 
  634. WorkFrame/2 Integration Toolkit reference guide.  The WorkFrame/2 program calls 
  635. these APIs to: 
  636.  
  637.  o Display and set options for the action 
  638.  o Retrieve the command line to execute for the action 
  639.  o Support make file creation 
  640.  o Provide error handling and context-sensitive help. 
  641.  
  642.  The kinds of tools that might be interested in providing their own Options DLL 
  643.  are: 
  644.  
  645.  o Compilers 
  646.  o Browsers 
  647.  o Source librarians 
  648.  o Editors 
  649.  o Linkers 
  650.  o Make tools 
  651.  o Any tools with many command-line options. 
  652.  
  653.  Note that support for multiple tools can be provided in a single DLL. 
  654.  
  655.  
  656. ΓòÉΓòÉΓòÉ 6.4.3. Project Access Method (PAM) ΓòÉΓòÉΓòÉ
  657.  
  658.  
  659. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  660.  
  661.  
  662. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  663.  
  664. A Project Access Method (PAM) is the mechanism through which project parts are 
  665. accessed.  It is a pluggable layer that abstracts underlying system details 
  666. from the WorkFrame/2* Project Manager.  The functions that accomplish this are 
  667. located in a dynamic link library (DLL).  When a user wants to use a project 
  668. access method other than the one supplied with WorkFrame/2, the PAM's DLL is 
  669. specified on the Access page of the base project's Settings notebook. 
  670.  
  671. By default, the PAM for a base project is the Basic Project Access Method 
  672. (bPAM) provided with WorkFrame/2.  This PAM allows project files to exist in 
  673. multiple OS/2* directories on both local and LAN attached servers. This basic 
  674. PAM uses standard OS/2 APIs to access files. 
  675.  
  676. There are many reasons why you might want to provide your own PAM: 
  677.  
  678.   1. To allow project objects that reside on remote systems to be accessed in 
  679.      the same manner as locally defined objects.  The method of communication 
  680.      with the remote system is soley determined by the PAM. 
  681.  
  682.   2. To seamlessly launch actions on remote systems. 
  683.  
  684.   3. To mix multiple systems on one OS/2* desktop. 
  685.  
  686.   4. To mix objects from multiple systems on a single project. 
  687.  
  688.   5. To customize access to project parts. For example, if you want projects 
  689.      parts to be displayed sorted by date or name, or in a specialized view. 
  690.  
  691.   6. To seamlessly integrate source librarians for version control. 
  692.  
  693.  To create your own PAM, you will need to provide the logic for the functions 
  694.  described later in this document. 
  695.  
  696.  You can also modify the behavior of existing PAMs by chaining with one or more 
  697.  other PAMs.  Chaining your PAM with other PAMs enables any project that 
  698.  specifies your PAM to access objects from the remote systems specified by the 
  699.  other PAMs. 
  700.  
  701.  Since you can specify only one PAM for a project, all PAMs must, at minimum, 
  702.  provide the same support for OS/2 files as the basic PAM (bPAM) that comed 
  703.  with the WorkFrame/2 product.  This can be easily accomplished by chaining 
  704.  your PAM with the bBPAM DLL. See How to Create a PAM for more information on 
  705.  how to create and chain PAMs. 
  706.  
  707.  Following are some kinds of tools that could integrate with the WorkFrame/2 
  708.  program by providing their own PAMs: 
  709.  
  710.  o Source librarians 
  711.  o Client-server enablement tools 
  712.  o Tools that run on a different file system than OS/2 
  713.  o Tools that reside on a remote file system 
  714.  o Source databases 
  715.  o Project view containers 
  716.  
  717.  
  718. ΓòÉΓòÉΓòÉ 6.4.4. Actions Profile ΓòÉΓòÉΓòÉ
  719.  
  720.  
  721. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  722.  
  723.  
  724. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  725.  
  726. An actions profile defines the set of functional services that are available to 
  727. a project. It contains a set of actions that can be associated with one or more 
  728. projects.  An action is a command that is performed on an object.  An object 
  729. may be an entire project, a composite project, or a file object like a .C file. 
  730.  
  731. A special actions profile, the Default Actions Profile (DAP), defines the 
  732. actions that are available to all projects. 
  733.  
  734. The concept of an action treats all tools equally, whether they are compilers, 
  735. editors, linkers, formatters, browsers, debuggers, icon editors, or 
  736. preprocessors.  A project may have access to several languages because any 
  737. number of compilers and tools can be added to an actions profile. Any action in 
  738. an actions profile can be input to the MakeMake make file generator.  Actions 
  739. profiles make it easy to group any number of tools for use by a specific set of 
  740. projects or by all projects. 
  741.  
  742. The API set provided by WorkFrame/2 for actions profiles lets you 
  743.  
  744.  o Create a custom actions profile for your set of tools that can reside 
  745.    anywhere in the system 
  746.  
  747.  o Add your tool as an action within a profile 
  748.  
  749.  o Query and modify existing profiles 
  750.  
  751.  Some kinds of tools that could take advantage of the capabilities offered by 
  752.  the actions profiles API set are: 
  753.  
  754.  o Source librarians 
  755.  o Full-function code editors 
  756.  o Compilers 
  757.  o Program builders 
  758.  o Make tools 
  759.  o Suites of tools that work together. 
  760.  
  761.  
  762. ΓòÉΓòÉΓòÉ 6.4.5. Router ΓòÉΓòÉΓòÉ
  763.  
  764.  
  765. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  766.  
  767.  
  768. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  769.  
  770. Full integration between objects and tools (actions) within the WorkFrame/2* 
  771. environment is facilitated by the WorkFrame/2 router.  It enables tool-to-tool, 
  772. object-to-object, and tool-to-object communication. 
  773.  
  774. The WorkFrame/2 router accomplishes this by serving as a message abstraction 
  775. layer and integration point between WorkFrame/2 objects, tools, and other 
  776. messaging facilities such as BMS (Broadcast Message Services).  It also manages 
  777. communication with the WorkFrame/2* Action Log. 
  778.  
  779. The router integrates any kind of tool that OS/2* supports, including OS/2 
  780. tools that run under: 
  781.  
  782.  o VIO 
  783.  o Presentation Manager* 
  784.  o Workplace Shell* 
  785.  
  786.  DOS and WIN-OS/2 programs cannot integrate with the router. 
  787.  
  788.  Objects that are registered for communication with the WorkFrame/2 router are 
  789.  called clients. 
  790.  
  791.  The router broadcasts the messages that it receives from registered clients to 
  792.  other interested clients.  Clients specify the types of clients whose messages 
  793.  they are interested in when they register with the router using the 
  794.  WkfInitialize API.  For example, a compiler could send a WKFM_FILECHANGED 
  795.  message to the router when it creates or updates an executable file. The 
  796.  router would then broadcast this message to interested clients, among which 
  797.  would be the base project to which the changed file belongs.  The base project 
  798.  could then update its view to reflect the changes made to the file. 
  799.  
  800.  Currently, up to 320 tools can be concurrently integrated into the router. 
  801.  Some of the services the router provides are: 
  802.  
  803.   1. Sending notification messages from any router client. Examples are: 
  804.  
  805.     o Changes to a base project 
  806.     o Changes to a project file 
  807.     o Actions profile changes 
  808.  
  809.   2. Facilitating communication between tools 
  810.  
  811.   3. Launching actions within the context of a project. 
  812.  
  813.   4. Posting entries in the WorkFrame/2 Action Log.  Note that some messages 
  814.      are echoed to the Action Log at the WorkFrame/2 program's discretion, 
  815.      without explicit instructions from the sender to do so. 
  816.  
  817.  Some kinds of tools that would benefit from the router services are: 
  818.  
  819.  o Source librarians or versioning tools 
  820.  o Compilers 
  821.  o Program builders 
  822.  o Make tools 
  823.  o Make file generation tools 
  824.  o Browsers 
  825.  o Any development tools that operate against files or projects 
  826.  o Suites of tools that work together. 
  827.  
  828.  
  829. ΓòÉΓòÉΓòÉ 6.4.6. Installation Support ΓòÉΓòÉΓòÉ
  830.  
  831.  
  832. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  833.  
  834.  
  835. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  836.  
  837. The integration support APIs are provided to help tool integrators perform the 
  838. tasks necessary to install WorkFrame/2 support for their tools. 
  839.  
  840. Two APIs are provided.  One detects if the requested version of WorkFrame/2 is 
  841. installed in the system, and returns the installation path.  Tool integrators 
  842. can then choose to install WorkFrame/2 support only if WorkFrame/2 is installed 
  843. on the system. 
  844.  
  845. The other API sets the default options for tools that use the default actions 
  846. support (Options) DLL, DDE3DEF2.  This is a convenience for tool integrators 
  847. who are not providing their own actions support DLL. 
  848.  
  849.  
  850. ΓòÉΓòÉΓòÉ 7. Overview of the WorkFrame/2 Architecture ΓòÉΓòÉΓòÉ
  851.  
  852.  
  853. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  854.  
  855. The WorkFrame/2* architecture consists of independent components that interact 
  856. with each other through APIs and router messages. Below is an illustration of 
  857. the general WorkFrame/2 architecture: 
  858.  
  859.  
  860. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  861.  
  862.  
  863. ΓòÉΓòÉΓòÉ <hidden> Dummy ΓòÉΓòÉΓòÉ
  864.  
  865.  
  866.  
  867. The numerical labels on the diagram shows the important interactions between 
  868. WorkFrame/2 components: 
  869.  
  870.   1. Display and set tool options 
  871.   2. Launch action 
  872.   3. Get invocation string 
  873.   4. Start a tool or action 
  874.   5. Display tool output 
  875.  
  876.  
  877. ΓòÉΓòÉΓòÉ 8. Integration Tips ΓòÉΓòÉΓòÉ
  878.  
  879. There are a number of points to consider when integrating a tool with the 
  880. WorkFrame/2* program: 
  881.  
  882.   1. The tool should be project-aware.  This involves: 
  883.  
  884.     o Using the project interfaces to query project data and store 
  885.       tool-specific data associated with projects 
  886.     o Using the PAM interfaces to query files 
  887.     o Using the action support interfaces to query or launch actions. 
  888.  
  889.   2. The tool should register with the router when it is invoked, and 
  890.      deregister when it is closed.  The tool should send router messages 
  891.      whenever a relevant event occurs. 
  892.  
  893.   3. The actions profile should be viewed as the single point of all tool 
  894.      integration.  Your tool should be visible to the user as an action, and be 
  895.      consistent with the concept of an action in the WorkFrame/2 program. 
  896.  
  897.   4. When the tool is being installed, it is good practice to: 
  898.  
  899.     o Verify whether WorkFrame/2 has been installed on the system, and that it 
  900.       is the correct version. 
  901.     o Create actions for all the tools being installed.  You can also create a 
  902.       separate actions profile to hold all the new actions for your tools. 
  903.     o Create working sample projects for your tools that use your Project 
  904.       Access Method (PAM) or the default bPAM. 
  905.     o Provide an actions support DLL and specify the Options DLL name for each 
  906.       action you create. 
  907.     o You may wish to install some of your tools in a C Set ++* folder, or 
  908.       update a WorkFrame/2 object, such as the Default Actions Profile. See 
  909.       Persistent Object IDs for a list of WorkFrame/2 and useful object IDs. 
  910.  
  911.      See the Install sample program for a demonstration on how you might 
  912.      accomplish the tasks required for an installation of your 
  913.      WorkFrame/2-integrated tool. 
  914.  
  915.   5. If your tool resides on a remote system or a system other than OS/2*, 
  916.      provide a Project Access Method (PAM) DLL to support the remote system. 
  917.  
  918.   6. Use the WorkFrame/2-defined constants when writing integrated code to help 
  919.      ensure upwards-compatibility with future releases. 
  920.  
  921.  
  922. ΓòÉΓòÉΓòÉ 9. ------------------------------------------------------- ΓòÉΓòÉΓòÉ
  923.  
  924.  
  925. ΓòÉΓòÉΓòÉ 10. Reference ΓòÉΓòÉΓòÉ
  926.  
  927.  
  928. ΓòÉΓòÉΓòÉ 11. ------------------------------------------------------- ΓòÉΓòÉΓòÉ
  929.  
  930.  
  931. ΓòÉΓòÉΓòÉ 12. Action Support ΓòÉΓòÉΓòÉ
  932.  
  933. This section gives instructions on how to create an options DLL for your tool, 
  934. and describes, in detail, the function entrypoints you need to provide. 
  935.  
  936.  
  937. ΓòÉΓòÉΓòÉ 12.1. How to Create an Options DLL ΓòÉΓòÉΓòÉ
  938.  
  939. Provide an options DLL if you want to handle tool options in a customized 
  940. manner, and if you want to display a customized graphical user-interface to 
  941. accept options settings from the user. Below are instructions on creating an 
  942. options DLL: 
  943.  
  944.   1. Include all the following required entrypoints (prototyped in the WKFOPT.H 
  945.      header file) in a single DLL. 
  946.  
  947.     WkfQuery...Options 
  948.     WkfQuery...Target 
  949.     WkfQuery...Target 
  950.     Wkf...Terminate 
  951.     WkfQuery...ResourceID 
  952.     WkfQuery...HelpFile 
  953.     WkfQuery...ParseError 
  954.     WkfQuery...QueryDDE 
  955.  
  956.   2. Follow the Guidelines for Designing an Options Interface when designing 
  957.      your options dialog or notebook. 
  958.  
  959.   3. Provide only 32-bit interfaces that use the system linkage convention. 
  960.  
  961.   4. Use address parameters that contain flat memory addresses. 
  962.  
  963.   5. Handle errors by returning the appropriate OS/2*-defined return code from 
  964.      a call to an OS/2 Dos... API in your functions. If an error cannot be 
  965.      mapped to an equivalent OS/2 return code, return WKF_ERROR, as defined in 
  966.      the WKFOPT.H header file. 
  967.  
  968.   6. Name each entrypoint as defined in this document, replacing the ellipses 
  969.      with the tool's class name, and the entire name upper-cased. For example, 
  970.      if your tool is an editor (an action of class EDIT), define the entrypoint 
  971.      for WkfQuery...Options as WKFQUERYEDITOPTIONS().  Convert any spaces in 
  972.      the class name to underscores. 
  973.  
  974.  
  975. ΓòÉΓòÉΓòÉ 12.2. Guidelines for Designing an Options Interface ΓòÉΓòÉΓòÉ
  976.  
  977. It is often convenient to be able to set options from a graphical 
  978. user-interface.  Rather than having to remember cryptic command-line options 
  979. like /G or /T, user can input values in entry fields with meaningful prompts 
  980. and help support, and choose settings via radio buttons and check boxes.  It 
  981. might be helpful to look at the notebooks for setting options for the IBM* C 
  982. Set ++* actions, like Compile, Link, and Browse, when designing your own. 
  983.  
  984. It is recommended that the WkfQuery...Options API display such an interface as 
  985. part of its processing. 
  986.  
  987. The following are some guidelines to follow that will make the interface easy 
  988. to use: 
  989.  
  990.   1. All dialogs and controls should conform to Common User Access* (CUA*) 
  991.      guidelines.  For more information about the Common User Access guidelines, 
  992.      refer to the Common User Access: Guide to User Interface Design (order 
  993.      number SC34-4289) and the Common User Access: Advanced Interface Design 
  994.      Reference (order number SC26-4290). 
  995.  
  996.   2. If the number of options is large enough so that they cannot all fit in 
  997.      one dialog, use a notebook control to display pages of options, or a 
  998.      window containing pushbuttons corresponding to various categories of 
  999.      options. In the latter method, the user would select a pushbutton to 
  1000.      display a modeless secondary window.  By making the secondary window 
  1001.      modeless, you can let the user see different groups of options at the same 
  1002.      time.  Design the interface so that closing the main window also closes 
  1003.      all secondary windows. 
  1004.  
  1005.   3. Include the following pushbuttons: 
  1006.  
  1007.     OK 
  1008.          On a secondary window, selecting OK means the user is satisfied with 
  1009.          the settings in the window and wants to close it. On the primary 
  1010.          window, it means the user is finished setting options for the 
  1011.          integrated tool and is ready to close the interface. 
  1012.  
  1013.          If the OK pushbutton is pressed on the primary dialog but the user has 
  1014.          not closed all the secondary windows, display an information message 
  1015.          asking the user to close the secondary windows first. 
  1016.  
  1017.     Default 
  1018.          Sets the fields for all options to their default values.  On a 
  1019.          secondary window or notebook page, it sets only the options present on 
  1020.          the page.  The default values should correspond to those the tool 
  1021.          would use if it were invoked outside of WorkFrame/2*. 
  1022.  
  1023.     Reset 
  1024.          (Optional) Resets all options to the values they had when the options 
  1025.          interface was first opened.  Pressing Reset has the same effect as 
  1026.          pressing Cancel then opening the interface again. 
  1027.  
  1028.     Cancel 
  1029.          Closes the window without taking any other action.  Settings are not 
  1030.          saved. 
  1031.  
  1032.     Help 
  1033.          Provides help for the selected item or page. 
  1034.  
  1035.   4. The user may choose options that conflict with each other. Detect 
  1036.      conflicts when the OK pushbutton is selected on the primary window, then 
  1037.      display a window indicating what the conflicting options are, and let the 
  1038.      user return to the interface to clarify the choices. 
  1039.  
  1040.  
  1041. ΓòÉΓòÉΓòÉ 12.3. DDE Interaction with Editors ΓòÉΓòÉΓòÉ
  1042.  
  1043. The WorkFrame/2* program communicates errors from an invocation of a monitored 
  1044. action to integrating editors via DDE (Dynamic Data Interchange) calls. The 
  1045. following sequence of events illustrates the interaction between the invoked 
  1046. action, the WorkFrame/2 program, and the integrating editor. 
  1047.  
  1048. See the WFEdit sample program for a more complete illustration of how to 
  1049. implement the editor side of the WorkFrame/2 DDE protocols. 
  1050.  
  1051. Note:  This section assumes that you are familiar with DDE (Dynamic Data 
  1052.        Interchange) protocols. 
  1053.  
  1054.   1. In response to the user's request for a monitored action on a project or 
  1055.      its parts, such as a make, compile, link, or build, the WorkFrame/2 
  1056.      program invokes the requested tool by invoking the WkfRun project access 
  1057.      method API of the PAM DLL specified for the project. The output is then 
  1058.      displayed in a listbox in the Monitor window. 
  1059.  
  1060.   2. When the user double-clicks on an error line in the Monitor (or selects a 
  1061.      line and begins a drag operation) for the first time, WorkFrame/2 will 
  1062.      invoke the WkfParse...Error entrypoint of the tool's actions support DLL 
  1063.      to find the file in which the error occurs, and the list of displayed 
  1064.      error messages that pertain to the same file. Only the error messages that 
  1065.      occur in the current invocation of the action in the Monitor listbox are 
  1066.      parsed. 
  1067.  
  1068.   3. The WkfParse...Error interface returns the parsed error information to 
  1069.      WorkFrame/2, at which point WorkFrame/2 invokes the actions support 
  1070.      interface WkfQuery...HelpFile to determine the name of the error message 
  1071.      help file, if one exists. 
  1072.  
  1073.   4. The WorkFrame/2 program then starts the default editor (the default action 
  1074.      for class EDIT) via DosStartSession passing it the name of the source file 
  1075.      identified in the selected error message.  The WorkFrame/2 program then 
  1076.      issues a WinDDEInitiate call to establish a DDE conversation with the 
  1077.      editor. 
  1078.  
  1079.      Note that if a drag operation is in progress, WorkFrame/2 will instead 
  1080.      issue a DrgDrag request, and if a drop is accepted, enable itself for DDE 
  1081.      communication. 
  1082.  
  1083.      Note:  It is the editor's responsibility to ensure that only one edit 
  1084.             session is open for the given source file.  If an edit session is 
  1085.             already open for the given file, it should be reused or terminated. 
  1086.  
  1087.   5. The editor should register itself as a server for the identified source 
  1088.      file by likewise issuing a WinDDEInitiate call, specifying an application 
  1089.      name of "WB Editor", and using the filename as the topic name.  That is, 
  1090.  
  1091.           WinDDEInitiate (hwndEditor,     /* Editor window handle */
  1092.                   "WB Editor",    /* Application name */
  1093.                   szFiletoEdit,    /* Topic name - source file name */
  1094.                   NULL);       /* Conversation context - not used */
  1095.  
  1096.      Once the editor is initialized, it receives a connection request for the 
  1097.      file via a WM_DDE_INITIATE message.  The WorkFrame/2 window handle is sent 
  1098.      in MP1 and a pointer to a DDEINIT OS/2-defined structure in MP2. The 
  1099.      DDEINIT structure has this format: 
  1100.  
  1101.           ULONG  cb;        /* Length of this structure */
  1102.           PSZ   pszAppName;    /* Application name - "WB Editor" in this case */
  1103.           PSZ   pszTopic;     /* Topic name - "Initialize" in this case */
  1104.           ULONG  offConvContext;  /* Not used */
  1105.  
  1106.      The editor should accept the request by issuing a WinDDERespond call. That 
  1107.      is, 
  1108.  
  1109.           PDDEINIT pddei;
  1110.  
  1111.           WinDDERespond ((HWND) mp1,      /* From WM_DDE_INITIATE - WorkFrame/2 window handle */
  1112.                   hwnd,         /* Editor's (server) window handle */
  1113.                   "WB Editor",      /* Application name */
  1114.                   *(pddei->pszAppName), /* File to edit - topic name */
  1115.                   NULL);         /* Conversation context - not used */
  1116.  
  1117.   6. Once WorkFrame/2 receives the acknowledgement, it sends a WM_DDE_EXECUTE 
  1118.      "Initialize" message ("Initialize" is the topic of the message), passing 
  1119.      the editor information about all the source lines in error, and the name 
  1120.      of the error help file, if one exists.  The editor may then perform 
  1121.      preparatory tasks such as initializing variables to keep track of the 
  1122.      original line numbers, highlighting all the lines in error, and enabling a 
  1123.      help control.  The WorkFrame/2 window handle is passed in MP1. The format 
  1124.      of the message structure passed in MP2 is as follows: 
  1125.  
  1126.           typedef struct _DDESTRUCT {
  1127.             ULONG  cbData;     /* Size of structure + topic name + data */
  1128.             USHORT fsStatus;    /* Ignore */
  1129.             USHORT usFormat;    /* Ignore */
  1130.             USHORT offszItemName; /* Offset to message topic name */
  1131.             USHORT offabData;   /* Offset to beginning of data area */
  1132.           }  DDESTRUCT;
  1133.  
  1134.      The message topic name has this format: 
  1135.  
  1136.           CHAR message[];      /* Contains "Initialize" in this case */
  1137.  
  1138.      The data area has the following format: 
  1139.  
  1140.           ULONG  errorcount;   /* Number of errors in errors[] buffer */
  1141.           ERRSTR errors[];    /* List of source lines in error */
  1142.           ULONG  textlength;   /* Length of libraryname[], not including terminating NULL */
  1143.           char  libraryname[];  /* ASCIIZ name of error help file */
  1144.  
  1145.      Where ERRSTR is a structure that represents each error and consists of: 
  1146.  
  1147.           ULONG errorline;    /* Source line number containing error */
  1148.           ULONG offset;      /* Offset of error within the source line in error */
  1149.           ULONG length;      /* Highlight line starting at this offset; always zero for now */
  1150.           ULONG magic_cookie;   /* First line in Monitor window relating to error */
  1151.  
  1152.      Note:  Use the OS/2-provided helper macros, DDES_PSZITEMNAME and 
  1153.             DDES_PABDATA, to obtain pointers to the data area and message topic 
  1154.             name from their offsets, offszItemName and offabData, respectively. 
  1155.  
  1156.      The WM_DDE_EXECUTE message also implies a WM_DDE_ADVICE message, 
  1157.      confirming that the editor may send WM_DDE_DATA requests to WorkFrame/2. 
  1158.      The magic_cookie field is the first line in the Monitor window that 
  1159.      relates to the current message.  The magiccookie value serves as an index 
  1160.      to the error, and can be used in a WM_DDE_DATA "SendGoto" message from the 
  1161.      editor to WorkFrame/2. (The "SendGoto" message is discussed below).  This 
  1162.      mechanism allows the editor to implement "Next error" and "Previous error" 
  1163.      controls that allow the user to traverse through the list of errors in the 
  1164.      source file. 
  1165.  
  1166.      If the textlength field of the data area is not zero, then an error help 
  1167.      file is available and given in the libraryname[] field.  The editor should 
  1168.      associate this help file with the current help instance. 
  1169.  
  1170.   7. After it has handled the WM_DDE_EXECUTE message, the editor should then 
  1171.      send a WM_DDE_ACK message to WorkFrame/2 confirming acceptance to the 
  1172.      command. 
  1173.  
  1174.           WinDDEPostMsg (hwndWF,    /* Client (WorkFrame) window handle */
  1175.                   hwnd,     /* Editor's window handle */
  1176.                   WM_DDE_ACK,  /* Message ID */
  1177.                   pddeIn,    /* PDDESTRUCT - MP2 of WM_DDE_EXECUTE "Initialize" message */
  1178.                   TRUE);    /* Options */
  1179.  
  1180.   8. At this point, the DDE converation is established and the editor is 
  1181.      initialized for the source file. As the user continues to double-click on 
  1182.      different error messages in the Monitor listbox, WorkFrame/2 sends a 
  1183.      WM_DDE_EXECUTE "Goto" message for each selected error message.  The "Goto" 
  1184.      message tells the editor to scroll to a particular line in the source 
  1185.      file.  WorkFrame/2 also passes some information about the line. The format 
  1186.      of the "goto" message is: 
  1187.  
  1188.           ULONG  cbData;     /* Size of this structure + topic name + data */
  1189.           USHORT  fsStatus;    /* ignore */
  1190.           USHORT  usFormat;    /* ignore */
  1191.           USHORT  offszItemName; /* Offset to message topic name */
  1192.           USHORT  offabData;   /* Offset to beginning of data area */
  1193.  
  1194.      Topic name: 
  1195.  
  1196.           CHAR   message[];   /* Message topic name - "Goto" in this case */
  1197.  
  1198.      Data area: 
  1199.  
  1200.           ULONG  errorline;   /* Original source line in error */
  1201.           ULONG  erroroffset;  /* Offset of error within error line */
  1202.           ULONG  resourceid;   /* Resource ID of associated help panel in given help file */
  1203.           ULONG  magic_cookie;  /* First line in Monitor window relating to error */
  1204.           ULONG  textlength;   /* Length of errortext[], not including terminating NULL */
  1205.           char   errortext[];  /* ASCIIZ text of error message */
  1206.  
  1207.      In response to this message, the editor should scroll to the given error 
  1208.      line and place the cursor or mouse pointer at the given offset within the 
  1209.      line. (The editor should allow for any tabs expansion since the given 
  1210.      offset counts a tab as a single character). The editor is also passed the 
  1211.      text of the message so that it can optionally be displayed in an 
  1212.      information area.  The resource ID (if it is not zero) can be used to 
  1213.      display help for the error message: 
  1214.  
  1215.           WinPostMsg (hwndHelp,      /* Help window handle */
  1216.                 HM_DISPLAY_HELP,
  1217.                 ulResID,      /* MP1 - given resource ID */
  1218.                 HM_RESOURCE_ID);  /* MP2 - MP1 contains resource ID */
  1219.  
  1220.   9. The editor should then send a WM_DDE_ACK message (as above) confirming 
  1221.      acceptance of the command. 
  1222.  
  1223.  10. If the user asks to go to the next error, the editor can send a 
  1224.      WM_DDE_DATA "SendGoto" message to ask the WorkFrame/2 program to send a 
  1225.      WM_DDE_EXECUTE "Goto" message containing information about the next error. 
  1226.  
  1227.           ULONG  cbData;     /* Size of stucture + topic name + data */
  1228.           USHORT  fsStatus;    /* Ignore */
  1229.           USHORT  usFormat;    /* Ignore */
  1230.           USHORT  offszItemName; /* Offset to message topic */
  1231.           USHORT  offabData;   /* Offset to magiccookie data */
  1232.  
  1233.           CHAR   message[];   /* Message topic - "SendGoto" in this case */
  1234.  
  1235.           ULONG  magiccookie;  /* The error message for which information is required */
  1236.  
  1237.      The editor must send the "SendGoto" message with the magiccookie value of 
  1238.      the error for which information is required.  This value is given in the 
  1239.      list of errors passed with the WM_DDE_EXECUTE "Initialize" message. 
  1240.  
  1241.      See the pddeSendGoto() and pddeMakeRequest() functions of the WFEdit 
  1242.      sample program for more information on how to allocate a giveable memory 
  1243.      segment for the PDDESTRUCT structure, and how to initialize it for the 
  1244.      "SendGoto" message. 
  1245.  
  1246.  11. If the user closes the Monitor window, WorkFrame/2 sends the editor a 
  1247.      WM_DDE_TERMINATE message.  The editor should then likewise send 
  1248.      WorkFrame/2 a WM_DDE_TERMINATE message, agreeing to terminate the DDE 
  1249.      session. 
  1250.  
  1251.           WinDDEPostMsg (hwndWF,       /* WorkFrame/2 window handle */
  1252.                   hwnd,        /* Editor window handle */
  1253.                   WM_DDE_TERMINATE,  /* Message ID */
  1254.                   NULL,        /* DDE structure - not used */
  1255.                   TRUE);       /* Options - not used */
  1256.  
  1257.      If the user terminates the edit session while the DDE conversation is 
  1258.      still active, the editor should send WorkFrame/2 a WM_DDE_TERMINATE 
  1259.      message as part of its handling of the WM_CLOSE message. 
  1260.  
  1261.  12. This protocol is repeated for every new source file involved as the user 
  1262.      double-clicks on errors in the Monitor window.  As such, multiple editor 
  1263.      sessions are invoked if the errors in the Monitor window involve more than 
  1264.      one source file. 
  1265.  
  1266.  
  1267. ΓòÉΓòÉΓòÉ 12.4. Action Support APIs ΓòÉΓòÉΓòÉ
  1268.  
  1269. This section describes functions that an application would use to query options 
  1270. settings, and obtain user-defined settings via a WorkFrame/2*-integrated 
  1271. graphical user-interface. The WorkFrame/2 program calls these APIs to: 
  1272.  
  1273.  o Display and set options for the action 
  1274.  
  1275.     - WkfQuery...Options 
  1276.  
  1277.  o Retrieve the command line to execute for the action 
  1278.  
  1279.     - WkfQuery...Target 
  1280.  
  1281.  o Support make file creation 
  1282.  
  1283.     - WkfQuery...Target 
  1284.     - Wkf...Terminate 
  1285.  
  1286.  o Provide error handling and context-sensitive help. 
  1287.  
  1288.     - WkfQuery...ResourceID 
  1289.     - WkfQuery...HelpFile 
  1290.     - WkfQuery...ParseError 
  1291.     - WkfQuery...QueryDDE 
  1292.  
  1293.  These functions are defined in the WKFOPT.H header file. 
  1294.  
  1295.  
  1296. ΓòÉΓòÉΓòÉ 12.4.1. WKF_REALLOC ΓòÉΓòÉΓòÉ
  1297.  
  1298. WKF_REALLOC 
  1299.  
  1300. Select an item: 
  1301.  
  1302.  Function Syntax 
  1303.  Return Values 
  1304.  Notes 
  1305.  Examples 
  1306.  
  1307.  
  1308. ΓòÉΓòÉΓòÉ <hidden> Syntax - WKF_REALLOC ΓòÉΓòÉΓòÉ
  1309.  
  1310. This WorkFrame/2*-provided callback function reallocates space for the buffer 
  1311. that has been passed to it. 
  1312.  
  1313. #define INCL_WKFOPT
  1314. #include <wkf.h>
  1315.  
  1316. typedef PVOID APIENTRY WKF_REALLOC (
  1317.    PVOID  pvBuffer, /* Pointer to buffer to be reallocated */
  1318.    ULONG  ulNewSize /* New buffer length, in bytes */
  1319.    );
  1320.  
  1321. typedef WKF_REALLOC *PWKF_REALLOC;
  1322.  
  1323.  
  1324. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvBuffer ΓòÉΓòÉΓòÉ
  1325.  
  1326. pvBuffer (PVOID) - input 
  1327.  
  1328. Address of the buffer to be reallocated. 
  1329.  
  1330.  
  1331. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulNewSize ΓòÉΓòÉΓòÉ
  1332.  
  1333. ulNewSize (ULONG) - input 
  1334.  
  1335. New length, in bytes, of the buffer pointed to by pvBuffer . 
  1336.  
  1337.  
  1338. ΓòÉΓòÉΓòÉ <hidden> Return Values - WKF_REALLOC ΓòÉΓòÉΓòÉ
  1339.  
  1340. (PVOID) - return values 
  1341.  
  1342. WKF_REALLOC returns the following pointer values: 
  1343.  
  1344.  NULL 
  1345.      Error 
  1346.  
  1347.  Other 
  1348.      Pointer to the newly allocated buffer. 
  1349.  
  1350.  
  1351. ΓòÉΓòÉΓòÉ <hidden> Notes - WKF_REALLOC ΓòÉΓòÉΓòÉ
  1352.  
  1353. WKF_REALLOC is a WorkFrame/2-provided callback function that reallocates space 
  1354. for its argument buffer.  PWKF_REALLOC is a pointer to the WKF_REALLOC 
  1355. function. 
  1356.  
  1357. This function passed as a parameter to the integrator-provided interfaces, 
  1358. WkfQuery...Options and WkfQuery...Target, to be used in case the initial 
  1359. allocation for an output buffer is too small. 
  1360.  
  1361.  
  1362. ΓòÉΓòÉΓòÉ <hidden> Example - WKF_REALLOC ΓòÉΓòÉΓòÉ
  1363.  
  1364. The integrator-provided interface WkfQuery...Options is called by the 
  1365. WorkFrame/2* program to query the user-specified options settings of a tool for 
  1366. a given project.  A pointer to a buffer, pvOptions, containing the current 
  1367. options settings is passed to the interface (if no options settings exist yet, 
  1368. the buffer is uninitialized).  During processing of the WkfQuery...Options API, 
  1369. new options settings are stored in the pvOptions buffer.  If the buffer current 
  1370. allocation is insufficient to hold the new options settings, then the 
  1371. WKF_REALLOC API can be used to reallocate the buffer. 
  1372.  
  1373. The following pseudo-code shows how this function might be used within the 
  1374. WkfQuery...Options API (see WkfQuery...Options for its syntax): 
  1375.  
  1376. ULONG APIENTRY WkfQueryToolOptions ( ...
  1377.                    PVOID pvOptions,
  1378.                    PWKF_REALLOC pWkf_Realloc,
  1379.                    ...)
  1380.  {
  1381.   MYOPTIONSSTRUCT NewOptions;
  1382.   ULONG ulNewBufSize;
  1383.    :
  1384.   GetNewOptions (&NewOptions);        /* Get new options settings from user */
  1385.   ulNewBufSize = sizeof (NewOptions);     /* Get new size */
  1386.  
  1387.   pvOptions = pWkf_Realloc (pvOptions, ulNewBufSize);  /* Rellocate pvOptions buffer */
  1388.  
  1389.   pvOptions->option1 = NewOptions->option1;  /* Update pvOptions with new values */
  1390.   pvOptions->option2 = NewOptions->option2;
  1391.    :
  1392.  
  1393.   return rc;
  1394.  }
  1395.  
  1396.  
  1397. ΓòÉΓòÉΓòÉ 12.4.2. WKF_PRT_STATUS ΓòÉΓòÉΓòÉ
  1398.  
  1399. WKF_PRT_STATUS 
  1400.  
  1401. Select an item: 
  1402.  
  1403.  Function Syntax 
  1404.  Return Values 
  1405.  Notes 
  1406.  Examples 
  1407.  
  1408.  
  1409. ΓòÉΓòÉΓòÉ <hidden> Syntax - WKF_PRT_STATUS ΓòÉΓòÉΓòÉ
  1410.  
  1411. This WorkFrame/2*-provided callback function prints the given status message on 
  1412. a status line, and then returns. 
  1413.  
  1414. #define INCL_WKFOPT
  1415. #include <wkf.h>
  1416.  
  1417. typedef VOID APIENTRY WKF_PRT_STATUS (
  1418.    PSZ pszStatusMsg  /* String to print on message box */
  1419.    );
  1420.  
  1421. typedef WKF_PRT_STATUS *PWKF_PRT_STATUS;
  1422.  
  1423.  
  1424. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszStatusMsg ΓòÉΓòÉΓòÉ
  1425.  
  1426. pszStatusMsg (PSZ) - input 
  1427.  
  1428. Address of the string to display for the status message. 
  1429.  
  1430.  
  1431. ΓòÉΓòÉΓòÉ <hidden> Return Values - WKF_PRT_STATUS ΓòÉΓòÉΓòÉ
  1432.  
  1433. (VOID) - return values 
  1434.  
  1435. WKF_PRT_STATUS has no return values. 
  1436.  
  1437.  
  1438. ΓòÉΓòÉΓòÉ <hidden> Notes - WKF_PRT_STATUS ΓòÉΓòÉΓòÉ
  1439.  
  1440. WKF_PRT_STATUS is a WorkFrame/2*-provided callback function that prints a 
  1441. status message and then returns.  Use this function to provide on-going status 
  1442. to the user when processing takes significant time to complete.  This function 
  1443. is not to be used for reporting errors since the message is displayed for a 
  1444. short period of time, and is overwritten by the next status message. An example 
  1445. of where these messages are displayed is in the WorkFrame/2 MakeMake program, 
  1446. while it is validating dependencies and creating the make file. 
  1447.  
  1448. This function accepts only a simple text string.  No formatting is done. 
  1449.  
  1450. This function passed as a parameter to the integrator-provided 
  1451. WkfQuery...Target function. Any interface that is passed this callback function 
  1452. should check for a NULL value before attempting to use it.  The WorkFrame/2 
  1453. program passes a NULL value in its place when it determines that use of the 
  1454. callback function is not required. 
  1455.  
  1456.  
  1457. ΓòÉΓòÉΓòÉ <hidden> Example - WKF_PRT_STATUS ΓòÉΓòÉΓòÉ
  1458.  
  1459. WKF_PRT_STATUS is passed as a callback function to the integrator-provided 
  1460. WkfQuery...Target function. If processing within the WkfQuery...Target function 
  1461. takes a significant period of time, this function can be called periodically to 
  1462. provide ongoing status information to the user. 
  1463.  
  1464. The following pseudo-code shows how this function might be used within the 
  1465. WkfQuery...Target function: 
  1466.  
  1467. APIRET APIENTRY WkfQueryToolTarget ( ...
  1468.                   PWKF_PRT_STATUS pWkf_PrtStatus,
  1469.                    ... );
  1470.  {
  1471.    :
  1472.   pWkf_PrtStatus ("Generating command line parameters ...");
  1473.   < Generate command-line parameters >
  1474.    :
  1475.   pWkf_PrtStatus ("Generating list of target files ...");
  1476.   < Discard unnecessary source files >
  1477.   < Generate target files list>
  1478.    :
  1479.   pWkf_PrtStatus ("Generating list of dependencies ...");
  1480.   < Generate list of dependencies >
  1481.    :
  1482.  }
  1483.  
  1484.  
  1485. ΓòÉΓòÉΓòÉ 12.4.3. WkfQuery...Options ΓòÉΓòÉΓòÉ
  1486.  
  1487. WkfQuery...Options 
  1488.  
  1489. Select an item: 
  1490.  
  1491.  Function Syntax 
  1492.  Return Values 
  1493.  Notes 
  1494.  Examples 
  1495.  
  1496.  
  1497. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQuery...Options ΓòÉΓòÉΓòÉ
  1498.  
  1499. Write this integrator-provided function to optionally ?? display an options 
  1500. window, and return the user-selected options to be saved with the project file. 
  1501.  
  1502. #define INCL_WKFOPT
  1503. #include <wkf.h>
  1504.  
  1505. typedef ULONG APIENTRY WKF_QUERY_OPTIONS (
  1506.    HWND     hwndWorkFrame,   /* WF/2 frame handle or HWND_DESKTOP */
  1507.    HMODULE    hModHandle,    /* Options dialog DLL module handle */
  1508.    PSZ      pszProject,    /* Project file name */
  1509.    PSZ      pszTitle,     /* Title to display on dialog */
  1510.    PWKF_ACTION  pwkfAction,    /* Pointer to action information structure */
  1511.    ULONG     ulSetting,     /* Load default or previous settings */
  1512.    PULONG    pulOptionsLength, /* Initial buffer size; contains actual size on exit */
  1513.    PVOID     pvOptions,     /* Pointer to options buffer */
  1514.    PWKF_REALLOC pWkf_Realloc,   /* Pointer to buffer-reallocation function */
  1515.    BOOL     bFileScope     /* TRUE if invoked for file-scoped actions, FALSE for project-scoped */
  1516.    );
  1517.  
  1518. typedef WKF_QUERY_OPTIONS *PWKF_QUERY_OPTIONS;
  1519.  
  1520.  
  1521. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndWorkFrame ΓòÉΓòÉΓòÉ
  1522.  
  1523. hwndWorkFrame (HWND) - input 
  1524.  
  1525. Window handle of the WorkFrame/2 frame window.  Use HWND_DESKTOP if frame 
  1526. handle is not available. 
  1527.  
  1528.  
  1529. ΓòÉΓòÉΓòÉ <hidden> Parameter - hModHandle ΓòÉΓòÉΓòÉ
  1530.  
  1531. hModHandle (HMODULE) - input 
  1532.  
  1533. The handle of the dynamic link module containing this API.  Use this parameter 
  1534. to access any resources bound to the DLL, such as string tables and dialog 
  1535. templates. 
  1536.  
  1537.  
  1538. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProject ΓòÉΓòÉΓòÉ
  1539.  
  1540. pszProject (PSZ) - input 
  1541.  
  1542. Address of the ASCIIZ project file name. 
  1543.  
  1544.  
  1545. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszTitle ΓòÉΓòÉΓòÉ
  1546.  
  1547. pszTitle (PSZ) - input 
  1548.  
  1549. Address of the ASCIIZ project title.  This is the title displayed with the 
  1550. project's Desktop icon.  You can display this title on the options dialog to 
  1551. identify the project. 
  1552.  
  1553.  
  1554. ΓòÉΓòÉΓòÉ <hidden> Parameter - pwkfAction ΓòÉΓòÉΓòÉ
  1555.  
  1556. pwkfAction (PWKF_ACTION) - input 
  1557.  
  1558. Pointer to a PWKF_ACTION structure containing information about the action 
  1559. whose options to query. 
  1560.  
  1561.  
  1562. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulSetting ΓòÉΓòÉΓòÉ
  1563.  
  1564. ulSetting (ULONG) - input 
  1565.  
  1566. Set this parameter to WKF_QO_SETTING_USE_OPTIONS (0x00) to initially display 
  1567. the options dialog with the settings as stored in the pvOptions buffer. 
  1568.  
  1569. Set this parameter to WKF_QO_SETTING_USE_DEFAULT (0X01) to display the default 
  1570. options settings. 
  1571.  
  1572.  
  1573. ΓòÉΓòÉΓòÉ <hidden> Parameter - pulOptionsLength ΓòÉΓòÉΓòÉ
  1574.  
  1575. pulOptionsLength (PULONG) - input/output 
  1576.  
  1577. Initial size, in bytes, of the buffer pointed to by pvOptions. On exit, this 
  1578. field points to the actual number of bytes used. 
  1579.  
  1580.  
  1581. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvOptions ΓòÉΓòÉΓòÉ
  1582.  
  1583. pvOptions (PVOID) - input/output 
  1584.  
  1585. On entry, this pointer contains the address of an integrator-defined area 
  1586. containing the initial options settings.  On exit, the area contains the 
  1587. user-specified settings. 
  1588.  
  1589. Note:  This function should attempt to minimize the size of the area that 
  1590.        contains the options settings since this area is written to a project 
  1591.        file. 
  1592.  
  1593.  
  1594. ΓòÉΓòÉΓòÉ <hidden> Parameter - pWkf_Realloc ΓòÉΓòÉΓòÉ
  1595.  
  1596. pWkf_Realloc (PWKF_REALLOC) - input 
  1597.  
  1598. Pointer to the callback function for buffer reallocation. Call this function 
  1599. with WKF_REALLOC_OPTIONS as the first parameter if the pvOptions buffer gets 
  1600. too small to hold the new options settings information. 
  1601.  
  1602.  
  1603. ΓòÉΓòÉΓòÉ <hidden> Parameter - bFileScope ΓòÉΓòÉΓòÉ
  1604.  
  1605. bFileScope (BOOL) - input 
  1606.  
  1607. Specify TRUE for this parameter if the function is being invoked for a 
  1608. file-scoped action.  Specify FALSE for project-scoped. 
  1609.  
  1610.  
  1611. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQuery...Options ΓòÉΓòÉΓòÉ
  1612.  
  1613. (ULONG) - return values 
  1614.  
  1615. WkfQuery...Options should return the following values: 
  1616.  
  1617.  0  WKF_NOERROR 
  1618.        No error occurred so save the options with the project file.  This 
  1619.        indicates that the user closed the options dialog by selecting the OK 
  1620.        pushbutton. 
  1621.  
  1622.  2  WKF_CANCEL 
  1623.        Do not save any changed options with the project file.  This indicates 
  1624.        that the user closed the options dialog by selecting the Cancel 
  1625.        pushbutton. 
  1626.  
  1627.  8  WKF_ERROR 
  1628.        An error occurred, that is, the DLL displayed an error message. 
  1629.  
  1630.  
  1631. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQuery...Options ΓòÉΓòÉΓòÉ
  1632.  
  1633. Write this function to optionally display an options dialog that enables the 
  1634. user to set options for the tool within a graphical user interface. Return the 
  1635. user-selected options in the integrator-defined buffer pointed to by pvOptions. 
  1636.  
  1637. If the current allocation for the pvOptions buffer is too small to hold the new 
  1638. options settings, call the pWkf_Realloc function with pvOptions and the new 
  1639. buffer size required. 
  1640.  
  1641. The return values from this function determine whether the user-selected 
  1642. options settings should be saved with the project file. 
  1643.  
  1644. Define this function so that the actual entry point is named as above, with the 
  1645. ellipses replaced by the tool's class name, and the entire name upper-cased. 
  1646. For example, when WorkFrame/2* needs to call this function for an action of 
  1647. class COMPILE, it calls WKFQUERYCOMPILEOPTIONS(). Any spaces in the class name 
  1648. are converted to underscores. 
  1649.  
  1650. Related Information: 
  1651.  
  1652.  o Guidelines for Designing an Options Interface 
  1653.  
  1654.  
  1655. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQuery...Options ΓòÉΓòÉΓòÉ
  1656.  
  1657. The following pseudo-code illustrates how this interface could work: 
  1658.  
  1659. First, check whether the TOOLOPTIONS area pointed to by pvOptions contains the 
  1660. current options settings, then show the options dialog with the options set 
  1661. accordingly: 
  1662.  
  1663. struct TOOLOPTIONS CurrentOptions;
  1664. ULONG *pulCurrentOptionsSize;
  1665.  
  1666. if (ulSetting == WKF_QO_SETTING_USE_OPTIONS) /* pvOptions area is initialized */
  1667.  {
  1668.  copy (CurrentOptions, pvOptions);    /* Copy pvOptions area */
  1669.  rc = GetNewOptions (hwndWorkFrame,    /* Allow user to set options via */
  1670.            hModHandle,     /* a graphical user interface   */
  1671.            &CurrentOptions,   /* Show options set to current settings */
  1672.            pulOptionsLength,  /* when user opens the options dialog */
  1673.            pszTitle);
  1674.  }
  1675. else if (ulSetting == WKF_QO_SETTING_USE_DEFAULT  /* pvOptions area is uninitialized */
  1676.  {
  1677.  GetDefaultSettings (&CurrentOptions);
  1678.  pulDefaultSize = sizeof (CurrentOptions);
  1679.  rc = GetNewOptions (hwndWorkFrame,
  1680.            hModHandle,
  1681.            &CurrentOptions,   /* Show options set to default settings */
  1682.            pulCurrentOptionsSize,
  1683.            pszTitle);
  1684.  }
  1685.  
  1686. Now check to see how the user finished and return. 
  1687.  
  1688. if (rc == USER_CHANGED_OPTIONS)
  1689.  {
  1690.   pvOptions = pWkf_Realloc (pvOptions, *pulCurrentOptionsSize);
  1691.   copy (pvOptions, CurrentOptions);  /* Update pvOptions area with current options */
  1692.   return NO_ERROR;
  1693.  }
  1694. else if (rc == USER_CANCELLED)
  1695.  {
  1696.   return WKF_CANCEL;
  1697.  }
  1698.  
  1699.  
  1700. ΓòÉΓòÉΓòÉ 12.4.4. WkfQuery...Target ΓòÉΓòÉΓòÉ
  1701.  
  1702. WkfQuery...Target 
  1703.  
  1704. Select an item: 
  1705.  
  1706.  Function Syntax 
  1707.  Return Values 
  1708.  Notes 
  1709.  Examples 
  1710.  
  1711.  
  1712. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQuery...Target ΓòÉΓòÉΓòÉ
  1713.  
  1714. Write this function to return information required by the WorkFrame/2* program 
  1715. to invoke the requested action on the selected project objects, or when 
  1716. building a make file. 
  1717.  
  1718. #define INCL_WKFOPT
  1719. #include <wkf.h>
  1720.  
  1721. typedef APIRET APIENTRY WKF_QUERY_TARGET (
  1722.    PVOID      *ppvToolBuffer,   /* Buffer created by actions support DLL */
  1723.    HWND       hwndWorkFrame,   /* WF/2 frame handle or HWND_DESKTOP */
  1724.    HMODULE     hModHandle,     /* Tool options DLL module handle */
  1725.    PSZ       pszProject,     /* Project file name */
  1726.    PSZ       pszTitle,      /* Project title */
  1727.    PWKF_ACTION   pwkfAction,     /* Pointer to action information structure */
  1728.    ULONG      ulOptionsLength,  /* Initial options buffer size; contains actual size on exit */
  1729.    PVOID      pvOptions,     /* Pointer to options buffer */
  1730.    ULONG      ulCmdLineLength,  /* Initial size of command line buffer */
  1731.    PSZ       pszCmdLine,     /* Output command line buffer */
  1732.    ULONG      ulSearchPath,    /* Initial size of search path buffer */
  1733.    PSZ       pszSearchPath,   /* Buffer containing the search path */
  1734.    LIST_OF_SOURCE  *pstSourceObjects, /* List of selected source files */
  1735.    LIST_OF_TARGET  *pstTargetObjects, /* List of target file masks */
  1736.    LIST_OF_DEPEND  *pstDependObjects, /* List of dependencies */
  1737.    PWKF_REALLOC   pWkf_Realloc,    /* Pointer to buffer-reallocation function */
  1738.    PWKF_PRT_STATUS pWkf_PrtStatus,   /* Pointer to print status function */
  1739.    BOOL       bFileScope     /* TRUE if action is file-scoped; FALSE is project-scoped */
  1740.    );
  1741.  
  1742. typedef WKF_QUERY_TARGET *PWKF_QUERY_TARGET;
  1743.  
  1744.  
  1745. ΓòÉΓòÉΓòÉ <hidden> Parameter - *ppvToolBuffer ΓòÉΓòÉΓòÉ
  1746.  
  1747. *ppvToolBuffer (PVOID) - input 
  1748.  
  1749. Use this pvoid pointer to store tool-specific information so that it is 
  1750. available across subsequent calls to this function. 
  1751.  
  1752. For instance, information about imbedded dependency files can be saved here so 
  1753. that they would not have to be re-created on each call.  Subsequent calls to 
  1754. this function for the same action class and name will then be passed this 
  1755. pointer value. 
  1756.  
  1757. After calling this function (e.g. during the creation of a make file), the 
  1758. WorkFrame/2* program checks the value of this pointer.  If it is not NULL, 
  1759. WorkFrame/2 calls the integrator-provided function Wkf...Terminate to free any 
  1760. memory used. 
  1761.  
  1762.  
  1763. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndWorkFrame ΓòÉΓòÉΓòÉ
  1764.  
  1765. hwndWorkFrame (HWND) - input 
  1766.  
  1767. Window handle of the WorkFrame/2 frame window.  Use HWND_DESKTOP if frame 
  1768. handle is not available. 
  1769.  
  1770.  
  1771. ΓòÉΓòÉΓòÉ <hidden> Parameter - hModHandle ΓòÉΓòÉΓòÉ
  1772.  
  1773. hModHandle (HMODULE) - input 
  1774.  
  1775. The handle of the dynamic link module containing this API.  Use this parameter 
  1776. to access any resources bound to the DLL, such as string tables and dialog 
  1777. templates. 
  1778.  
  1779.  
  1780. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProject ΓòÉΓòÉΓòÉ
  1781.  
  1782. pszProject (PSZ) - input 
  1783.  
  1784. Address of the ASCIIZ project file name, which should not contain a path name 
  1785. or drive specification. 
  1786.  
  1787.  
  1788. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszTitle ΓòÉΓòÉΓòÉ
  1789.  
  1790. pszTitle (PSZ) - input 
  1791.  
  1792. Address of the ASCIIZ project title.  This is the title that is displayed with 
  1793. the project's Desktop icon. 
  1794.  
  1795.  
  1796. ΓòÉΓòÉΓòÉ <hidden> Parameter - pwkfAction ΓòÉΓòÉΓòÉ
  1797.  
  1798. pwkfAction (PWKF_ACTION) - input 
  1799.  
  1800. Pointer to a PWKF_ACTION structure containing information about the action to 
  1801. query. 
  1802.  
  1803.  
  1804. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulOptionsLength ΓòÉΓòÉΓòÉ
  1805.  
  1806. ulOptionsLength (ULONG) - input 
  1807.  
  1808. Size, in bytes, of the buffer pointed to by pvOptions. 
  1809.  
  1810.  
  1811. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvOptions ΓòÉΓòÉΓòÉ
  1812.  
  1813. pvOptions (PVOID) - input 
  1814.  
  1815. The address of an integrator-defined structure containing the options settings 
  1816. for the action given in the pwkfAction structure, and the project named in 
  1817. pszProject. 
  1818.  
  1819.  
  1820. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulCmdLineLength ΓòÉΓòÉΓòÉ
  1821.  
  1822. ulCmdLineLength (ULONG) - input 
  1823.  
  1824. Initial size, in bytes, of the pszCmdLine buffer. 
  1825.  
  1826.  
  1827. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszCmdLine ΓòÉΓòÉΓòÉ
  1828.  
  1829. pszCmdLine (PSZ) - input/output 
  1830.  
  1831. On exit, this pointer should contain the address of a buffer containing the 
  1832. command-line parameters to be used by this action, given the list of valid 
  1833. source-files selected by the user (*pstSourceObjects) and options set by the 
  1834. user (pvOptions). 
  1835.  
  1836. This buffer may contain *wkft. substitution variables where applicable. 
  1837.  
  1838. This buffer may also contain the special character WKF_CMDLINE_INLINEFILE as 
  1839. described below. It provides extra flexibility where necessary, but should be 
  1840. avoided if possible. 
  1841.  
  1842.  WKF_CMDLINE_INLINEFILE 
  1843.        WKF_CMDLINE_INLINEFILE must always be included in the command string in 
  1844.        pairs.  The characters are removed and replaced by a temporary file 
  1845.        name, and all the characters in between placed in this file, verbatim 
  1846.        (no processing will be done on these characters).  The temporary file is 
  1847.        deleted after the command has completed execution. 
  1848.  
  1849.        This can be used to execute a command via a response file, which should 
  1850.        be used if the output length exceeds 1024 characters (which is the most 
  1851.        cmd.exe will accept, and thus the longest that can be placed in a 
  1852.        makefile). 
  1853.  
  1854.  
  1855. ΓòÉΓòÉΓòÉ <hidden> Substitution Variables ΓòÉΓòÉΓòÉ
  1856.  
  1857. Substitution variables are place holders for items like file names and option 
  1858. strings. They are used when one wants to define a string without being too 
  1859. specific. 
  1860.  
  1861. For example, you could write the command string 
  1862.  
  1863. icc /Ti /C c:\dog\terrier.cpp
  1864.  
  1865. as 
  1866.  
  1867. icc /Ti /C %f
  1868.  
  1869. where %f is the selected file c:\dog\terrier.cpp. 
  1870.  
  1871. The substitution variables that you can use with the WorkFrame/2 product are: 
  1872.  
  1873.  %a...%z     Replaced by the names of all the selected files, separated by a 
  1874.              space.  If the ellipses between the 'a' and the '%' is replaced by 
  1875.              a character, then the names are separated by the specified 
  1876.              character. For example, if the selected files are d:\cat.obj, 
  1877.              d:\dog.obj and d:\bird.obj , the substitution variable %a+%z will 
  1878.              produce the string d:\cat.obj+d:\dog.obj+d:\bird.obj . The only 
  1879.              substitution variables allowed within the %a...%z substitution 
  1880.              variables are %% and %d. 
  1881.  
  1882.  %d          Is replaced with the project's working directory. 
  1883.  
  1884.  %e          Is replaced by the extension (including the period) of the first 
  1885.              selected file. 
  1886.  
  1887.  %f          Is replaced with the fully-qualified name of the first selected 
  1888.              file. Specifying %f is the same as specifying %q%n%e. 
  1889.  
  1890.  %m          Is replaced by the make file name specified for the project in its 
  1891.              Settings notebook. 
  1892.  
  1893.  %n          Is replaced by the file name (without an extension and path) of 
  1894.              the first selected file. 
  1895.  
  1896.  %o          Is replaced by the target file name specified for the project in 
  1897.              its Settings notebook. 
  1898.  
  1899.  %p          Is replaced by the fully-qualified project file name. 
  1900.  
  1901.  %q          Is replaced by the path of the first selected file. 
  1902.  
  1903.  %r          Is replaced by the run options set for the project target file in 
  1904.              the project's Settings notebook. 
  1905.  
  1906.  %TOPIC%     Is replaced by the contents of the Help Topic field in the 
  1907.              action's Settings notebook.  This field specified the help topic 
  1908.              to be displayed when the user requests for help on the action. 
  1909.  
  1910.  %%          Is replaced by the % symbol. 
  1911.  
  1912.  Example 
  1913.  
  1914.  If the first selected file is d:\dogs\hounds\beagle.h , then: 
  1915.  
  1916.  %e is .h 
  1917.  
  1918.  %f is d:\dogs\hounds\beagle.h 
  1919.  
  1920.  %n is beagle 
  1921.  
  1922.  %q is d:\dogs\hounds\ 
  1923.  
  1924.  Note:  If the file name includes spaces, such as toy terrier.h , then the file 
  1925.         name part of the substituted string will have quotation marks 
  1926.         surrounding it.  For example, %f would be replace by "toy terrier.h" . 
  1927.  
  1928.  
  1929. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulSearchPath ΓòÉΓòÉΓòÉ
  1930.  
  1931. ulSearchPath (ULONG) - input 
  1932.  
  1933. Initial size, in bytes, of the pszSearchPath buffer. 
  1934.  
  1935.  
  1936. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszSearchPath ΓòÉΓòÉΓòÉ
  1937.  
  1938. pszSearchPath (PVOID) - input/output 
  1939.  
  1940. On entry, this buffer contains a list of the project's source directories, each 
  1941. delimited by a WKF_LIST_DELIM character. 
  1942.  
  1943. On exit, this buffer should contain the list of paths in which to search for 
  1944. the required source files and dependency files. The paths should be separated 
  1945. by a semi-colon. 
  1946.  
  1947. If necessary, this buffer may be reallocated using the pWkf_Realloc callback 
  1948. function. 
  1949.  
  1950.  
  1951. ΓòÉΓòÉΓòÉ <hidden> Parameter - *pstSourceObjects ΓòÉΓòÉΓòÉ
  1952.  
  1953. *pstSourceObjects (LIST_OF_SOURCE) - input/output 
  1954.  
  1955. On entry, this buffer contains a list of input source files selected by the 
  1956. user.  On exit, each entry in the list is marked to indicate whether or not the 
  1957. file is used by the action, or whether it is to be used and then discarded. 
  1958.  
  1959. This field contains a list of SOURCE_ENTRY structures, each containing the 
  1960. filename and use-code for each source file.  Write this function to update the 
  1961. SOURCE_ENTRY structure's fUsed member to contain one of the following values 
  1962. for each source file on exit: 
  1963.  
  1964.  0  WKF_QT_FILE_NOTUSED 
  1965.        File is not processed by selected action. 
  1966.  
  1967.  1  WKF_QT_FILE_USED 
  1968.        File is processed and required by action. 
  1969.  
  1970.  2  WKF_QT_FILE_DISCARD 
  1971.        File is processed and to be discarded. 
  1972.  
  1973.  
  1974. ΓòÉΓòÉΓòÉ <hidden> Parameter - *pstTargetObjects ΓòÉΓòÉΓòÉ
  1975.  
  1976. *pstTargetObjects (LIST_OF_TARGET) - input/output 
  1977.  
  1978. This parameter may be NULL on entry.  If it is NULL, do nothing with this 
  1979. pointer. 
  1980.  
  1981. If it is not NULL, then on exit, this pointer should contain the list of output 
  1982. files that will be generated upon successful completion of the specified 
  1983. action. 
  1984.  
  1985. Note:  This list should only include files generated by a single invocation of 
  1986.        the action.  For example, a LINK action may create .EXE and .MAP files. 
  1987.  
  1988.  
  1989. ΓòÉΓòÉΓòÉ <hidden> Parameter - *pstDependObjects ΓòÉΓòÉΓòÉ
  1990.  
  1991. *pstDependObjects (LIST_OF_DEPEND) - input/output 
  1992.  
  1993. This parameter may be NULL on entry.  If it is NULL, do nothing with this list. 
  1994.  
  1995. If it is not NULL, then on exit, this pointer should contain the list of 
  1996. dependencies (that is, the files on which the action of building the files in 
  1997. the pstTargetObjects list depends on), excluding those marked in the 
  1998. pstSourceObjects list. 
  1999.  
  2000. This list should be complete -- the files returned in this list will not be 
  2001. parsed further by the WorkFrame/2* program for nested includes. 
  2002.  
  2003. Note:  You can use the *ppvToolBuffer field to save any information needed to 
  2004.        eliminate the need to reparse files. 
  2005.  
  2006.  
  2007. ΓòÉΓòÉΓòÉ <hidden> Parameter - pWkf_Realloc ΓòÉΓòÉΓòÉ
  2008.  
  2009. pWkf_Realloc (PWKF_REALLOC) - input 
  2010.  
  2011. Pointer to the callback function for buffer reallocation. If one of the output 
  2012. buffers is too small, call this function with the field to be adjusted, and the 
  2013. new buffer size required, in bytes. 
  2014.  
  2015. The following output buffers can be reallocated using this callback function: 
  2016.  
  2017.  o pstTargetObjects 
  2018.  o pstDependObjects 
  2019.  o pszCmdLine 
  2020.  o pszSearchPath. 
  2021.  
  2022.  Note:  For the pstTargetObjects and pstDependObjects fields, you do not need 
  2023.         to account for the two ULONG fields in their structures.  The bytes 
  2024.         required should be for the buffer itself only. 
  2025.  
  2026.  
  2027. ΓòÉΓòÉΓòÉ <hidden> Parameter - pWkf_PrtStatus ΓòÉΓòÉΓòÉ
  2028.  
  2029. pWkf_PrtStatus (PWKF_PRT_STATUS) - input 
  2030.  
  2031. Pointer to the WorkFrame/2*-provided callback function for printing a status 
  2032. message. 
  2033.  
  2034. If processing takes a significant period of time, call this function 
  2035. periodically to provide ongoing status information to the user.  If processing 
  2036. time is very small, use of this function is not necessary.  Do not use it to 
  2037. report errors as the message is only displayed temporarily in a status area on 
  2038. the screen. 
  2039.  
  2040. This pointer can be NULL on entry.  This means that the callback function is 
  2041. not available (that is, the WorkFrame/2 program will not display any status 
  2042. messages for the current invocation of this function). 
  2043.  
  2044.  
  2045. ΓòÉΓòÉΓòÉ <hidden> Parameter - bFileScope ΓòÉΓòÉΓòÉ
  2046.  
  2047. bFileScope (BOOL) - input 
  2048.  
  2049. Specify TRUE for this parameter if the function is being invoked for a 
  2050. file-scoped action; FALSE for project-scoped. 
  2051.  
  2052.  
  2053. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQuery...Target ΓòÉΓòÉΓòÉ
  2054.  
  2055. (APIENTRY) - return values 
  2056.  
  2057. WkfQuery...Target should return the following values: 
  2058.  
  2059.  0     No error. 
  2060.  
  2061.  !0    An error occurred (options DLL displayed an error message). Processing 
  2062.        aborted. 
  2063.  
  2064.  
  2065. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQuery...Target ΓòÉΓòÉΓòÉ
  2066.  
  2067. Given a list of valid source files selected by the user, and options set by the 
  2068. user, write this integrator-provided function to return the following: 
  2069.  
  2070.   1. The command-line parameters to be used by this action (in the pszCmdLine 
  2071.      field) 
  2072.  
  2073.   2. From the list of input files, mark those which will apply to this action, 
  2074.      and those which should be discarded (in the pstSourceObjects field).  If 
  2075.      this field is NULL on entry, do nothing with it. 
  2076.  
  2077.      Any unmarked files will result in this function being called again for the 
  2078.      same action, with the unmarked files listed in the pstSourceObjects field. 
  2079.      You can use this mechanism to control the way an action is invoked on a 
  2080.      set of files. 
  2081.  
  2082.      For example, if the action was a compile, you could parse the source files 
  2083.      to determine if templates are being used, and then mark only the files 
  2084.      that use templates to apply to the action, and then include the correct 
  2085.      options to compile the template files in the command-line parameters 
  2086.      returned by this function. Any unmarked files will be passed to this 
  2087.      function on a subsequent call for the same action, so you can continue 
  2088.      processing for these files. 
  2089.  
  2090.   3. If the target objects list pointer is not NULL, then return a list of 
  2091.      output files to be generated by this action (in the pstTargetObjects 
  2092.      field). 
  2093.  
  2094.      Note:  This list should only include files created by a single invocation 
  2095.             of the action.  For example, a LINK action may create .EXE and .MAP 
  2096.             files. 
  2097.  
  2098.   4. If the dependency objects list pointer is not NULL, then return the list 
  2099.      of files on which the action of building the TARGET file depends 
  2100.      (excluding those marked in the list of input files) in the 
  2101.      pstDependObjects field.  This list should be complete -- files returned 
  2102.      will not be parsed further by WorkFrame/2* for nested includes. 
  2103.  
  2104.  This function may be called as many times as necessary to complete processing, 
  2105.  for example, during make file creation. Make file creation usually requires 
  2106.  calling this function for a number of different actions.  This function is 
  2107.  called at least once for every action involved in the make. 
  2108.  
  2109.  Store any error or warning messages you wish to display to the user after all 
  2110.  processing has been completed in the *ppvToolBuffer buffer. You can display 
  2111.  these error messages as part of the processing of the Wkf...Terminate function 
  2112.  when the WorkFrame/2 program calls it with this buffer. 
  2113.  
  2114.  Define this function so that the actual entry point is named as above, with 
  2115.  the ellipses replaced by the tool's class name, and the entire name 
  2116.  upper-cased.  For example, when WorkFrame/2 needs to call this function for an 
  2117.  action of class COMPILE, it calls WKFQUERYCOMPILETARGET(). Any spaces in the 
  2118.  class name are converted to underscores. 
  2119.  
  2120.  
  2121. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQuery...Target ΓòÉΓòÉΓòÉ
  2122.  
  2123. @@@@@@@@@@ 
  2124.  
  2125.  
  2126. ΓòÉΓòÉΓòÉ 12.4.5. Wkf...Terminate ΓòÉΓòÉΓòÉ
  2127.  
  2128. Wkf...Terminate 
  2129.  
  2130. Select an item: 
  2131.  
  2132.  Function Syntax 
  2133.  Return Values 
  2134.  Notes 
  2135.  Examples 
  2136.  
  2137.  
  2138. ΓòÉΓòÉΓòÉ <hidden> Syntax - Wkf...Terminate ΓòÉΓòÉΓòÉ
  2139.  
  2140. Write this function to free any memory allocated by *ppvToolBuffer (parameter 
  2141. to the WkfQuery...Target API), and to display any saved error or warning 
  2142. messages. 
  2143.  
  2144. #define INCL_WKFOPT
  2145. #include <wkf.h>
  2146.  
  2147. typedef APIRET APIENTRY WKF_TERMINATE (
  2148.    PVOID     pvToolBuffer,    /* Buffer created by tool options DLL */
  2149.    BOOL      fDisplayMessages,  /* Indicates whether messages should be displayed */
  2150.    HWND      hwndWorkFrame,   /* WF/2 frame handle or HWND_DESKTOP */
  2151.    HMODULE    hModHandle,     /* Tool options DLL module handle */
  2152.    PSZ      pszTitle,      /* Project title */
  2153.    PWKF_ACTION  pwkfAction     /* Pointer to action information structure */
  2154.    );
  2155.  
  2156. typedef WKF_TERMINATE *PWKF_TERMINATE;
  2157.  
  2158.  
  2159. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvToolBuffer ΓòÉΓòÉΓòÉ
  2160.  
  2161. pvToolBuffer (PVOID) - input 
  2162.  
  2163. Use this pointer to free all memory allocated to it points to. 
  2164.  
  2165. Storage for this buffer is allocated and initialized in the WkfQuery...Target 
  2166. function. After the every call to the WkfQuery...Target function, the 
  2167. WorkFrame/2* program checks the returned value of the *ppvToolBuffer output 
  2168. parameter.  If it is not NULL, the WorkFrame/2 program saves the pointer value 
  2169. in its own allocated storage and then calls this function with the saved 
  2170. pointer value in this parameter. 
  2171.  
  2172.  
  2173. ΓòÉΓòÉΓòÉ <hidden> Parameter - fDisplayMessages ΓòÉΓòÉΓòÉ
  2174.  
  2175. fDisplayMessages (BOOL) - input 
  2176.  
  2177. The WorkFrame/2* program sets this parameter to indicate whether or not any 
  2178. saved error or warning messages should be displayed in a message box or similar 
  2179. mechanism supplied by this function. 
  2180.  
  2181. The WorkFrame/2 program allows the WkfQuery...Target function to save error or 
  2182. warning messages in its *ppvToolBuffer You can then use this function to 
  2183. display saved warning messages that the user does not need to see until 
  2184. processing has finished. 
  2185.  
  2186. Display messages only if this parameter is set to TRUE. 
  2187.  
  2188.  
  2189. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndWorkFrame ΓòÉΓòÉΓòÉ
  2190.  
  2191. hwndWorkFrame (HWND) - input 
  2192.  
  2193. Window handle of the WorkFrame/2 frame window.  Use HWND_DESKTOP if frame 
  2194. handle is not available. 
  2195.  
  2196.  
  2197. ΓòÉΓòÉΓòÉ <hidden> Parameter - hModHandle ΓòÉΓòÉΓòÉ
  2198.  
  2199. hModHandle (HMODULE) - input 
  2200.  
  2201. The handle of the dynamic link module containing this API.  Use this parameter 
  2202. to access any resources bound to the DLL, such as string tables and dialog 
  2203. templates. 
  2204.  
  2205.  
  2206. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszTitle ΓòÉΓòÉΓòÉ
  2207.  
  2208. pszTitle (PSZ) - input 
  2209.  
  2210. Address of the ASCIIZ project title.  This is the title shown with project's 
  2211. desktop icon. 
  2212.  
  2213.  
  2214. ΓòÉΓòÉΓòÉ <hidden> Parameter - pwkfAction ΓòÉΓòÉΓòÉ
  2215.  
  2216. pwkfAction (PWKF_ACTION) - input 
  2217.  
  2218. Pointer to a PWKF_ACTION structure containing information about the action to 
  2219. query. 
  2220.  
  2221.  
  2222. ΓòÉΓòÉΓòÉ <hidden> Return Values - Wkf...Terminate ΓòÉΓòÉΓòÉ
  2223.  
  2224. (APIRET) - return values 
  2225.  
  2226. Wkf...Terminate should return the following values: 
  2227.  
  2228.  0     No error. 
  2229.  
  2230.  !0    An error occurred (an error message was displayed). Processing aborted. 
  2231.  
  2232.  
  2233. ΓòÉΓòÉΓòÉ <hidden> Notes - Wkf...Terminate ΓòÉΓòÉΓòÉ
  2234.  
  2235. This function is called when the WorkFrame/2* program is finished with the 
  2236. Options DLL and is about to unload it. 
  2237.  
  2238. After the WorkFrame/2* program has called the WkfQuery...Target function one or 
  2239. more times, it checks the saved returned value of the *ppvToolBuffer output 
  2240. parameter.  If it is not NULL, the WorkFrame/2 program saves the pointer value 
  2241. in its own allocated memory, and this function will be called with the saved 
  2242. pointer value as the first parameter. 
  2243.  
  2244. This function is expected to free any allocated memory that it has allocated 
  2245. for the *ppvToolBuffer buffer and display any saved error or warning messages. 
  2246. This function may also perform any necessary final processing tasks. 
  2247.  
  2248. The WkfQuery...Target may have stored one or more error or warning messages in 
  2249. the *ppvToolBuffer area for display when all processing has completed (for 
  2250. example, after the creation of a make file). Error messages should only be 
  2251. displayed if the fDisplayMessages flag is set to TRUE. 
  2252.  
  2253. Define this function so that the actual entry point is named as above, with the 
  2254. ellipses replaced by the tool's class name, and the entire name upper-cased. 
  2255. For example, when WorkFrame/2 needs to call this function for an action of 
  2256. class COMPILE, calls WKFCOMPILETERMINATE().  Any spaces in the class name are 
  2257. converted to underscores. 
  2258.  
  2259.  
  2260. ΓòÉΓòÉΓòÉ <hidden> Example - Wkf...Terminate ΓòÉΓòÉΓòÉ
  2261.  
  2262. @@@@@@@@@@ 
  2263.  
  2264.  
  2265. ΓòÉΓòÉΓòÉ 12.4.6. Wkf...ParseError ΓòÉΓòÉΓòÉ
  2266.  
  2267. Wkf...ParseError 
  2268.  
  2269. Select an item: 
  2270.  
  2271.  Function Syntax 
  2272.  Return Values 
  2273.  Notes 
  2274.  Examples 
  2275.  
  2276.  
  2277. ΓòÉΓòÉΓòÉ <hidden> Syntax - Wkf...ParseError ΓòÉΓòÉΓòÉ
  2278.  
  2279. Write this function to parse one or more selected output lines from an 
  2280. invocation of the integrated tool in the Monitor window. This function is 
  2281. expected to return information such as the filename, line number, and column 
  2282. number, for every valid error message within a range of output lines. 
  2283.  
  2284. #define INCL_WKFOPT
  2285. #include <wkf.h>
  2286.  
  2287. typedef ULONG APIENTRY WKF_PARSEERROR (
  2288.    HWND   hwndErrorBox,   /* Window handle of error message listbox in Monitor window */
  2289.    PSZ    pszProject,    /* Project file name */
  2290.    PUSHORT  pusStartLine,   /* Index of first line in range of parsed lines in hwndErrorBox listbox */
  2291.    PUSHORT  pusEndLine,    /* Index of last line in range of parsed lines */
  2292.    HWND   hwndFilenames,  /* Window handle of listbox to insert filenames into */
  2293.    PUSHORT  pusCurrentFile,  /* Index into hwndFilename listbox of file where selected error occurred */
  2294.    PVOID   pvOptions,    /* Pointer to area containing tool options */
  2295.    PULONG  pulSetting    /* Validity of options, indicates if initialized */
  2296.    );
  2297.  
  2298. typedef WKF_PARSEERROR *PWKF_PARSEERROR;
  2299.  
  2300.  
  2301. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndErrorBox ΓòÉΓòÉΓòÉ
  2302.  
  2303. hwndErrorBox (HWND) - input 
  2304.  
  2305. The handle of the listbox in the Monitor window that contains output from an 
  2306. invocation of the integrated tool.  Use this handle to obtain the line selected 
  2307. by the user (send a LM_QUERYSELECTION message to this listbox), and to read 
  2308. output text (send a LM_QUERYITEMTEXT message). 
  2309.  
  2310. This function is also expected to store additional information about each error 
  2311. within the range of parsed lines specified by the pusStartLine and pusEndLine 
  2312. fields.  This information is stored in the item handle of each valid error line 
  2313. in this listbox.  To set the item handle for a valid error line, declare and 
  2314. initialize a WKF_TAGPARAM variable, and then send a LM_SETITEMHANDLE message to 
  2315. the hwndError listbox with a pointer to the initialized WKF_TAGPARAM structure 
  2316. in MP2, and the index of the associated item in MP1. 
  2317.  
  2318.  
  2319. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProject ΓòÉΓòÉΓòÉ
  2320.  
  2321. pszProject (PSZ) - input 
  2322.  
  2323. The name of the project file of the project for which the action was invoked. 
  2324.  
  2325.  
  2326. ΓòÉΓòÉΓòÉ <hidden> Parameter - pusStartLine ΓòÉΓòÉΓòÉ
  2327.  
  2328. pusStartLine (PUSHORT) - output 
  2329.  
  2330. Update this parameter to contain the index of the first line in the range of 
  2331. lines within the hwndErrorBox listbox that have been parsed by this function. 
  2332.  
  2333.  
  2334. ΓòÉΓòÉΓòÉ <hidden> Parameter - pusEndLine ΓòÉΓòÉΓòÉ
  2335.  
  2336. pusEndLine (PUSHORT) - output 
  2337.  
  2338. Update this parameter to contain the index of the last line in the range of 
  2339. lines within the hwndErrorBox listbox that have been parsed by this function. 
  2340.  
  2341.  
  2342. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndFilenames ΓòÉΓòÉΓòÉ
  2343.  
  2344. hwndFilenames (HWND) - input 
  2345.  
  2346. Handle of the hidden listbox into which this function must insert the name of 
  2347. each source file that contains the errors within the range specified by the 
  2348. pusStartLine and pusEndLine fields.  The contents of this listbox persist 
  2349. between calls to the this API. 
  2350.  
  2351. If a line in the parsed range of lines contains a valid error message, this 
  2352. function should use this listbox handle to insert the name of the source file 
  2353. in which the error occurred. The index of the inserted filename should be 
  2354. encoded into a WKF_TAGPARAM structure which is stored in the item handle of the 
  2355. associated hwndErrorBox message line. 
  2356.  
  2357. Note:  This listbox may already contain file names in it from a previous call 
  2358.        to this function.  Before adding a file name to this listbox, this 
  2359.        function should first ensure that the file name has not already been 
  2360.        inserted into the listbox by sending the listbox a LM_SEARCHSTRING 
  2361.        message.  If the file name is already present in the listbox, just use 
  2362.        the existing index for encoding into the WKF_TAGPARAM structure 
  2363.  
  2364.  
  2365. ΓòÉΓòÉΓòÉ <hidden> Parameter - pusCurrentFile ΓòÉΓòÉΓòÉ
  2366.  
  2367. pusCurrentFile (PUSHORT) - output 
  2368.  
  2369. Set this parameter to the index of the filename in the hwndFilenames listbox 
  2370. that contains the error in the line selected by the user. 
  2371.  
  2372. The WorkFrame/2* program will invoke the editor for this file. 
  2373.  
  2374.  
  2375. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvOptions ΓòÉΓòÉΓòÉ
  2376.  
  2377. pvOptions (PVOID) - input 
  2378.  
  2379. The address of an integrator-defined buffer containing the existing options 
  2380. settings for the invoked action. 
  2381.  
  2382. Note:  This buffer is unitialized if the pulSetting flag is set to 
  2383.        WKF_SETTING_USE_DEFAULT. 
  2384.  
  2385.  
  2386. ΓòÉΓòÉΓòÉ <hidden> Parameter - pulSetting ΓòÉΓòÉΓòÉ
  2387.  
  2388. pulSetting (PULONG) - input 
  2389.  
  2390. Flag to indicate whether options settings exist for the invoked action.  It can 
  2391. contain one of the following values: 
  2392.  
  2393.  0x00  WKF_SETTING_USE_OPTIONS 
  2394.            Options settings exist for the invoked action; the pvOptions buffer 
  2395.            is initialized with the current settings. 
  2396.  
  2397.  0x01  WKF_SETTING_USE_DEFAULT 
  2398.            Options have not previously existed for the invoked action. The 
  2399.            pvOptions buffer is uninitialized. 
  2400.  
  2401.  
  2402. ΓòÉΓòÉΓòÉ <hidden> Return Values - Wkf...ParseError ΓòÉΓòÉΓòÉ
  2403.  
  2404. (ULONG) - return values 
  2405.  
  2406. Wkf...ParseError should return the following values: 
  2407.  
  2408.  0  WKF_PARSEERROR_SUCCESS 
  2409.        No error. 
  2410.  
  2411.  1  WKF_PARSEERROR_ERROR 
  2412.        An error occurred (options DLL displayed an error message). Processing 
  2413.        aborted. 
  2414.  
  2415.  2  WKF_PARSEERROR_INVALID 
  2416.        Line invalid or not recognized 
  2417.  
  2418.  
  2419. ΓòÉΓòÉΓòÉ <hidden> Notes - Wkf...ParseError ΓòÉΓòÉΓòÉ
  2420.  
  2421. A tool, such as a compiler, that writes its output to one of the standard 
  2422. output handles ( stdout or stderr ) can have its output redirected back to the 
  2423. WorkFrame/2* program so that the output is displayed in a listbox in the 
  2424. Monitor window. When an action runs in the Monitor window, the user can 
  2425. double-click on a line of output to invoke the default editor for a valid error 
  2426. message. Wkf...ParseError is invoked by the WorkFrame/2 program each time the 
  2427. user double-clicks on a line of output in the Monitor window. Similar 
  2428. processing occurs when the user begins to drag a selected error message from 
  2429. the Monitor window to the editor. This interface is expected to parse the 
  2430. selected line, and usually, a range of lines above and below it, to return 
  2431. information about each valid error line, such as the file name, line number, 
  2432. and offset where the error occurred. 
  2433.  
  2434. You can choose to parse only the selected line, a range of lines, or all the 
  2435. lines in the monitor window for errors within a single invocation of this 
  2436. function.  Return the range of parsed lines to the WorkFrame/2 program by 
  2437. updating the pusStartLine and pusEndLine. fields.  For example, if this 
  2438. function parses the entire listbox, pusStartLine should contain zero and 
  2439. pusEndLine should contain the index of the last item in the hwndErrorBox 
  2440. listbox. This function is invoked each time the user selects a line that has 
  2441. not been parsed. 
  2442.  
  2443. Choosing how many lines to parse within one invocation of this function is a 
  2444. design choice that the tool integrator must make.  Parsing only one line at a 
  2445. time is the simplest to code, however, the editor will only have information 
  2446. about one error at a time, and the interface will have to be called each time 
  2447. the user selects another error line. Parsing all the lines at once gives the 
  2448. editor all the information up front, however, if the number of errors is large, 
  2449. there may be a noticeable delay when the editor is first started. 
  2450.  
  2451. The name of each file that contains an error within the parsed range of lines 
  2452. should be inserted into the hwndFilenames listbox. 
  2453.  
  2454. For each valid error message line within the parsed range of lines in the 
  2455. hwndErrorBox listbox, information about the error should be encoded and placed 
  2456. into a WKF_TAGPARAM structure. The WKF_TAGPARAM structure encodes the following 
  2457. information: the index into the hwndFilenames listbox that points to the name 
  2458. of the file containing the associated error, the line number where the error 
  2459. occurs within the file, and the offset of the error within the line.  A pointer 
  2460. to the WKF_TAGPARAM structure should be placed in the item handle of the 
  2461. associated hwndErrorBox item. 
  2462.  
  2463. In the pusCurrentFile field, return the index into the hwndFilenames listbox of 
  2464. the first file that contains errors within the selected line. The editor will 
  2465. be invoked for this file initially.  If the EPM editor is invoked for the file, 
  2466. each line that contains an error is highlighted. 
  2467.  
  2468. Define this function so that the actual entry point is named as above, with the 
  2469. ellipses replaced by the tool's class name, and the entire name upper-cased. 
  2470. For example, when WorkFrame/2 needs to call this function for an action of 
  2471. class COMPILE, it calls WKFCOMPILEPARSEERROR().  Any spaces in the class name 
  2472. are converted to underscores. 
  2473.  
  2474. Related information: 
  2475.  
  2476.  o DDE Interaction with Editors 
  2477.  
  2478.  
  2479. ΓòÉΓòÉΓòÉ <hidden> Example - Wkf...ParseError ΓòÉΓòÉΓòÉ
  2480.  
  2481. The following pseudo-code illustrates how processing for this function might 
  2482. proceed. 
  2483.  
  2484. First, obtain the line selected by the user: 
  2485.  
  2486. if ((sIndex = SHORT1FROMMR( WinSendMsg(hwndErrorBox,
  2487.                    LM_QUERYSELECTION,
  2488.                    (MPARAM)NULL,
  2489.                    (MPARAM)NULL)))
  2490.       ==LIT_NONE)     /* No line was selected */
  2491.   return WKFRC_PARSEERROR_ERROR;
  2492.  
  2493. Next, get the text of the line and determine whether it contains a valid error 
  2494. message: 
  2495.  
  2496. PSZ textbuffer;    /* Buffer into which the item text is to be copied */
  2497.  
  2498. WinSendMsg (hwndErrorBox,
  2499.       LM_QUERYITEMTEXT,
  2500.       MPFROM2SHORT (sIndex, sizeof(textbuffer)),
  2501.       MPFROMP (textbuffer));
  2502.  
  2503. If ((rc = Parsetheline (textbuffer, ...)) == INVALID_ERROR)
  2504.  return WKFRC_PARSEERROR_INVALID;
  2505.  
  2506. If the line contains a valid error message, the function must specify the range 
  2507. of lines it intends to parse.  (In this example, we will parse only the 
  2508. selected line.  However, we can choose to parse a range of lines, in which case 
  2509. further processing will apply to each line within the specified range of lines 
  2510. that contains a valid error message.) 
  2511.  
  2512. pusStartline = pusEndline = sIndex;
  2513.  
  2514. Next, this function must insert the name of the file in which the error 
  2515. occurred in the hwndFilenames listbox.  First, however, ensure that an index 
  2516. was not previously assigned for this file: 
  2517.  
  2518. insertIndex = SHORT1FROMMR (WinSendMsg(hwndFilenames,
  2519.                     LM_SEARCHSTRING,
  2520.                     MPFROM2SHORT (LSS_CASESENSITIVE, LIT_FIRST),
  2521.                     MPFROMP (pszSourceFile)));
  2522.  
  2523. if (insertIndex == LIT_ERROR)    /* Index already assigned, no further processing required */
  2524.   return WKF_PARSEERROR_ERROR;
  2525.  
  2526. if (insertIndex == LIT_NONE)     /* No index previously assigned, so insert file name */
  2527.   insertIndex = SHORT1FROMMR (WinSendMsg(hwndFilenames,
  2528.                       LM_INSERTITEM,
  2529.                       MPFROMSHORT (LIT_END),
  2530.                       (MPARAM) pszSourceFile));
  2531.  
  2532. If the current line being processed is the line that the user selected (in this 
  2533. case, it is), then the index into the hwndFilename listbox that corresponds to 
  2534. the name of the file where the error occurred should be returned in the 
  2535. pusCurrentFile field.  Note that this only applies to the line that was 
  2536. actually selected by the user. 
  2537.  
  2538. pusCurrentFile = insertIndex;
  2539.  
  2540. Lastly, information about the error is encoded and placed in the item handle of 
  2541. the associated hwndErrorBox item. 
  2542.  
  2543. WKF_TAGPARAM mpParam;
  2544.  
  2545. mpParam.sub.errorLine  = lineNumber;  /* Line where error occurred */
  2546. mpParam.sub.offset   = 0;       /* Offset is optional */
  2547. mpParam.sub.fileNumber = sIndex;    /* hwndFilenames listbox index to the name of the file where the error occurred */
  2548.  
  2549. WinSendMsg (hwndErrorBox,
  2550.       LM_SETITEMHANDLE,
  2551.       MPFROMSHORT (sIndex),
  2552.       (MPARAM)(ULONG)(mpParam.tagParam));
  2553.  
  2554.  
  2555. ΓòÉΓòÉΓòÉ 12.4.7. WkfQuery...HelpFile ΓòÉΓòÉΓòÉ
  2556.  
  2557. WkfQuery...HelpFile 
  2558.  
  2559. Select an item: 
  2560.  
  2561.  Function Syntax 
  2562.  Return Values 
  2563.  Notes 
  2564.  Examples 
  2565.  
  2566.  
  2567. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQuery...HelpFile ΓòÉΓòÉΓòÉ
  2568.  
  2569. Write this function to return the name of the help file that provides help for 
  2570. the integrated tool's error messages. 
  2571.  
  2572. #define INCL_WKFOPT
  2573. #include <wkf.h>
  2574.  
  2575. typedef ULONG APIENTRY WKF_QUERYHELPFILE2 (
  2576.    HWND   hwndErrorBox, /* Window handle of error message listbox in Monitor window */
  2577.    PSZ    pszProject,  /* Project file name */
  2578.    PSZ    pszHelpFile  /* Pointer to name of help file */
  2579.    );
  2580.  
  2581. typedef WKF_QUERYHELPFILE2 *PWKF_QUERYHELPFILE2;
  2582.  
  2583.  
  2584. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndErrorBox ΓòÉΓòÉΓòÉ
  2585.  
  2586. hwndErrorBox (HWND) - input 
  2587.  
  2588. The handle of the listbox in the Monitor window that contains output from an 
  2589. invocation of the integrated tool. 
  2590.  
  2591. If all the error messages for the tool are contained in a single help file, you 
  2592. may not need to use this handle.  However, you may want to return a different 
  2593. help file depending on the error message if more than one help file exists. 
  2594.  
  2595.  
  2596. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProject ΓòÉΓòÉΓòÉ
  2597.  
  2598. pszProject (PSZ) - input 
  2599.  
  2600. The name of the project file of the project for which the action was invoked. 
  2601.  
  2602.  
  2603. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszHelpFile ΓòÉΓòÉΓòÉ
  2604.  
  2605. pszHelpFile (PSZ) - output 
  2606.  
  2607. Update this field to contain the name of the IPF help (.HLP) file containing 
  2608. the help for the tool's error messages. 
  2609.  
  2610.  
  2611. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQuery...HelpFile ΓòÉΓòÉΓòÉ
  2612.  
  2613. (ULONG) - return values 
  2614.  
  2615. WkfQuery...HelpFile should return the following values: 
  2616.  
  2617.  FALSE 
  2618.        No error message help file support exists for the tool. 
  2619.  
  2620.  TRUE 
  2621.        Help file returned in pszHelpFile field. 
  2622.  
  2623.  
  2624. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQuery...HelpFile ΓòÉΓòÉΓòÉ
  2625.  
  2626. When the user clicks on an error message from an invocation of the integrated 
  2627. tool in the Monitor window, the WorkFrame/2* program calls the Wkf...ParseError 
  2628. API to obtain information about the error.  It then calls this function to 
  2629. obtain the name of the IPF help (.HLP) file that provides help for the 
  2630. integrated tool's error messages, if one exists. 
  2631.  
  2632. The WorkFrame/2 program then starts an edit session to display the source file 
  2633. in which the selected error occurs, and begins a dynamic data exchange (DDE) 
  2634. with the editor. If the editor invoked is the EPM editor, the user can request 
  2635. help for a selected error by selecting the Describe error menu item from the 
  2636. Compile pull-down. When the user requests help for an error, the WorkFrame/2 
  2637. program calls the WkfQuery...ResourceID API to obtain the resource number of 
  2638. the appropriate help panel to display. 
  2639.  
  2640. If help for error messages is supported, write this function to set the 
  2641. pszHelpFile field to the name of the IPF help (.HLP) file that contains the 
  2642. help, and return TRUE.  If help is not supported, return FALSE. 
  2643.  
  2644. Define this function so that the actual entry point is named as above, with the 
  2645. ellipses replaced by the tool's class name, and the entire name upper-cased. 
  2646. For example, when WorkFrame/2 needs to call this function for an action of 
  2647. class COMPILE, it calls WKFQUERYCOMPILEHELPFILE().  Any spaces in the class 
  2648. name are converted to underscores. 
  2649.  
  2650.  
  2651. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQuery...HelpFile ΓòÉΓòÉΓòÉ
  2652.  
  2653. The following pseudo-code illustrates how processing for this function might 
  2654. proceed. 
  2655.  
  2656. If help is supported for the tool's error messages, return the name of the help 
  2657. file in the pszHelpFile field: 
  2658.  
  2659. strcpy (pszHelpFile, "TOOLHELP.HLP");
  2660. return TRUE;
  2661.  
  2662. If no help for error messages exists: 
  2663.  
  2664. return FALSE;
  2665.  
  2666.  
  2667. ΓòÉΓòÉΓòÉ 12.4.8. WkfQuery...ResourceID ΓòÉΓòÉΓòÉ
  2668.  
  2669. WkfQuery...ResourceID 
  2670.  
  2671. Select an item: 
  2672.  
  2673.  Function Syntax 
  2674.  Return Values 
  2675.  Notes 
  2676.  Examples 
  2677.  
  2678.  
  2679. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQuery...ResourceID ΓòÉΓòÉΓòÉ
  2680.  
  2681. Given the text of a particular error message, write this function to return the 
  2682. resource number (or res id) of the corresponding panel in the help file 
  2683. identified by the WkfQuery...HelpFile API. 
  2684.  
  2685. #define INCL_WKFOPT
  2686. #include <wkf.h>
  2687.  
  2688. typedef ULONG APIENTRY WKF_QUERYRESOURCEID2 (
  2689.    HWND   hwndErrorBox, /* Window handle of error message listbox in Monitor window */
  2690.    PSZ    pszProject,  /* Project file name */
  2691.    PSZ    pszErrorLine  /* Pointer to the selected error message string */
  2692.    );
  2693.  
  2694. typedef WKF_QUERYRESOURCEID2 *PWKF_QUERYRESOURCEID2;
  2695.  
  2696.  
  2697. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndErrorBox ΓòÉΓòÉΓòÉ
  2698.  
  2699. hwndErrorBox (HWND) - input 
  2700.  
  2701. The handle of the listbox in the Monitor window that contains output from an 
  2702. invocation of the integrated tool.  The string pointed to by the pszErrorLine 
  2703. field contains the text of a selected error message in this listbox. 
  2704.  
  2705.  
  2706. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProject ΓòÉΓòÉΓòÉ
  2707.  
  2708. pszProject (PSZ) - input 
  2709.  
  2710. The name of the project file of the project for which the action was invoked. 
  2711.  
  2712.  
  2713. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszErrorLine ΓòÉΓòÉΓòÉ
  2714.  
  2715. pszErrorLine (PSZ) - input 
  2716.  
  2717. The text of the selected error message.  The contents of this field correspond 
  2718. to a single line of output in the hwndErrorBox listbox. 
  2719.  
  2720.  
  2721. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQuery...ResourceID ΓòÉΓòÉΓòÉ
  2722.  
  2723. (ULONG) - return values 
  2724.  
  2725. WkfQuery...ResourceID should return the following values: 
  2726.  
  2727.  0 
  2728.        There is no corresponding help panel for the given error message 
  2729.  
  2730.  >20000 
  2731.        Help file resource ID corresponding to the given error message 
  2732.  
  2733.  
  2734. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQuery...ResourceID ΓòÉΓòÉΓòÉ
  2735.  
  2736. When the user clicks on an error message from an invocation of the integrated 
  2737. tool in the Monitor window, the WorkFrame/2* program calls the Wkf...ParseError 
  2738. API to obtain information about the error.  It then calls this function to 
  2739. obtain the name of the IPF help (.HLP) file that provides help for the 
  2740. integrated tool's error messages, if one exists. 
  2741.  
  2742. The WorkFrame/2 program then starts an edit session to display the source file 
  2743. in which the selected error occurs, and begins a dynamic data exchange (DDE) 
  2744. with the editor. If the editor invoked is the EPM editor, the user can request 
  2745. help for a selected error by selecting the Describe error menu item from the 
  2746. Compile pull-down. When the user requests help for an error, the WorkFrame/2 
  2747. program calls the WkfQuery...ResourceID API to obtain the resource number of 
  2748. the appropriate help panel to display. 
  2749.  
  2750. If help for the error message exists, write this function to return the 
  2751. resource number of the help panel that contains help for the error message 
  2752. given in the pszErrorLine field.  Return a resource ID greater than 20000 since 
  2753. values from 0 through 20000 are reserved for use by the editor. 
  2754.  
  2755. If there is no help for the error message, return 0. 
  2756.  
  2757. Define this function so that the actual entry point is named as above, with the 
  2758. ellipses replaced by the tool's class name, and the entire name upper-cased. 
  2759. For example, when WorkFrame/2 needs to call this function for an action of 
  2760. class COMPILE, it calls WKFQUERYCOMPILERESOURCEID().  Any spaces in the class 
  2761. name are converted to underscores. 
  2762.  
  2763.  
  2764. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQuery...ResourceID ΓòÉΓòÉΓòÉ
  2765.  
  2766. The following pseudo-code illustrates how processing for this function might 
  2767. proceed. 
  2768.  
  2769. If help is supported for the error message passed in the pszErrorLine field, 
  2770. return the resource number of the corresponding panel in the help file returned 
  2771. by the WkfQuery...HelpFile API. 
  2772.  
  2773. For example, if the error message text is: 
  2774.  
  2775. PMLINES.C(176) XXX4023W Error: syntax error
  2776.  
  2777. The task of the GetErrorMessageCode() function is to get the identifier XXX4023 
  2778. from the message line. 
  2779.  
  2780. ErrorMessageCode = GetErrorMessageCode(pszErrorLine);
  2781.  
  2782. Next, look up the corresponding resource number for the error message code and 
  2783. return it: 
  2784.  
  2785. ResourceID = LookupResourceID (ErrorMessageCode);
  2786. if ResourceID > 20000 then
  2787.  return ResourceID
  2788. else
  2789.  return 0;
  2790.  
  2791. If no help exists for the passed error message: 
  2792.  
  2793. return 0;
  2794.  
  2795.  
  2796. ΓòÉΓòÉΓòÉ 12.4.9. WkfQuery...DDE ΓòÉΓòÉΓòÉ
  2797.  
  2798. WkfQuery...DDE 
  2799.  
  2800. Select an item: 
  2801.  
  2802.  Function Syntax 
  2803.  Return Values 
  2804.  Notes 
  2805.  Examples 
  2806.  
  2807.  
  2808. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQuery...DDE ΓòÉΓòÉΓòÉ
  2809.  
  2810. Write this function to inform the WorkFrame/2* program whether or not a Dynamic 
  2811. Data Exchange (DDE) session can be started with the integrated tool. 
  2812. Currently, this interface is supported only for EDIT class tools. 
  2813.  
  2814. #define INCL_WKFOPT
  2815. #include <wkf.h>
  2816.  
  2817. typedef BOOL APIENTRY WKF_QUERYDDE (
  2818.    PVOID   pvOptions  /* Pointer to area containing the tool options */
  2819.    );
  2820.  
  2821. typedef WKF_QUERYDDE *PWKF_QUERYDDE;
  2822.  
  2823.  
  2824. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvOptions ΓòÉΓòÉΓòÉ
  2825.  
  2826. pvOptions (PVOID) - input 
  2827.  
  2828. The address of an integrator-defined structure containing the options settings 
  2829. for the tool. 
  2830.  
  2831.  
  2832. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQuery...DDE ΓòÉΓòÉΓòÉ
  2833.  
  2834. (BOOL) - return values 
  2835.  
  2836. WkfQuery...DDE should return the following values: 
  2837.  
  2838.  TRUE 
  2839.        A DDE session can be started with the integrated tool. 
  2840.  
  2841.  FALSE 
  2842.        DDE is not supported. 
  2843.  
  2844.  
  2845. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQuery...DDE ΓòÉΓòÉΓòÉ
  2846.  
  2847. This interface is invoked to determine whether or not a Dynamic Data Exchange 
  2848. (DDE) session can be started with the integrated tool. Currently, this 
  2849. interface is supported only for EDIT class tools. 
  2850.  
  2851. The WorkFrame/2* Monitor window starts a DDE session with a specified 
  2852. DDE-enabled editor when the user double-clicks on an error message in the 
  2853. Monitor window to edit the file in which the error occurred. 
  2854.  
  2855. Define this function so that the actual entry point is named as above, with the 
  2856. ellipses replaced by the tool's class name, and the entire name upper-cased. 
  2857. For example, when WorkFrame/2 needs to call this function for an action of 
  2858. class COMPILE, it calls WKFQUERYCOMPILEDDE().  Any spaces in the class name are 
  2859. converted to underscores. 
  2860.  
  2861.  
  2862. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQuery...DDE ΓòÉΓòÉΓòÉ
  2863.  
  2864. The following pseudo-code illustrates how processing for this function might 
  2865. proceed. 
  2866.  
  2867. @@@@@ 
  2868.  
  2869.  
  2870. ΓòÉΓòÉΓòÉ 13. Project Access Method ΓòÉΓòÉΓòÉ
  2871.  
  2872. This section provides instructions on how to create a PAM, and describes, in 
  2873. detail, the function entrypoints you need to provide. 
  2874.  
  2875.  
  2876. ΓòÉΓòÉΓòÉ 13.1. How to Create a PAM ΓòÉΓòÉΓòÉ
  2877.  
  2878. A PAM is an integrator-provided DLL containing all the required entrypoints for 
  2879. the functions described in this section. Follow these instructions to create a 
  2880. PAM DLL: 
  2881.  
  2882.   1. Include all the required entrypoints (described here and in the WKFPAM.H 
  2883.      header file) in a single DLL.  Include optional entry points as needed. 
  2884.  
  2885.   2. Since only one PAM can be specified for a base project, any new PAM you 
  2886.      write must provide at least the same OS/2* support as the Basic PAM 
  2887.      (DDE3BPAM.DLL) shipped with the WorkFrame/2* program. You can do this by 
  2888.      providing the code to do this yourself or simply by chaining to the Basic 
  2889.      PAM DLL. 
  2890.  
  2891.      To chain to the Basic PAM DLL, call the corresponding Basic PAM 
  2892.      entrypoints as part of the processing of your own PAM's entrypoints.  See 
  2893.      the PeterPAM sample program for a demonstration on how to chain PAMs. 
  2894.  
  2895.   3. Provide only 32-bit interfaces that use the system linkage convention. 
  2896.  
  2897.   4. Use address parameters that contain flat memory addresses. 
  2898.  
  2899.   5. Handle errors by returning the appropriate OS/2-defined return code from a 
  2900.      call to an OS/2 API in your functions. If an error cannot be mapped to an 
  2901.      equivalent OS/2 return code, return WKFPAM_ERROR, as defined in the 
  2902.      WKFPAM.H header file.  In this case, you will need to return an error 
  2903.      message to be displayed to the user, as described in the next item. 
  2904.  
  2905.   6. Most PAM API's have two parameters that provide convenient error message 
  2906.      handling capabilities: cbMessage and pszMessage . On entry, cbMessage 
  2907.      contains the number of bytes allocated for the message buffer pszMessage . 
  2908.      Before exiting, store a NULL-delimited string containing the message you 
  2909.      want displayed to the user in the pszMessage buffer.  The WorkFrame/2 
  2910.      program will display the message in an error message box.  If an OS/2 
  2911.      error occurred, it will append the pszMessage string to the OS/2 message. 
  2912.  
  2913.   7. The first argument to nearly all the PAM functions is a PAM handle (HAM) 
  2914.      that is associated with a specific project.  This unique handle is 
  2915.      generated by the PAM-provided WkfQueryHAM function. This HAM value is 
  2916.      typically a pointer to a PAM-defined structure that holds any PAM-specific 
  2917.      information that needs to be kept between PAM function calls for the 
  2918.      associated project. For example, the session ID for an action being 
  2919.      started for a project by WkfRun should be stored in the HAM so that 
  2920.      WkfStop can identify the session to be halted. 
  2921.  
  2922.  
  2923. ΓòÉΓòÉΓòÉ 13.2. Project Access Method APIs ΓòÉΓòÉΓòÉ
  2924.  
  2925. This section descibes: 
  2926.  
  2927.   1. WorkFrame/2*-supplied macros for use in writing a Project Access Method 
  2928.      (PAM) 
  2929.  
  2930.     - WKFPAM_NEXTPART 
  2931.  
  2932.     - WKF_ADDFILES 
  2933.  
  2934.     - WKF_ADDMONITOR 
  2935.  
  2936.   2. Functions that must be supplied by the PAM writer, such as: 
  2937.  
  2938.     o A query method for retrieving the list of project parts for a project 
  2939.     o A run method for invoking actions on the target system 
  2940.     o Methods for direct manipulation of files 
  2941.  
  2942.  The required PAM interfaces can be categorized into 4 general groups: 
  2943.  
  2944.  o Setup 
  2945.  
  2946.     - WkfQueryHAM 
  2947.     - WkfQueryPathInfo 
  2948.     - WkfQueryTitle 
  2949.     - WkfCreatePath 
  2950.     - WkfDefaultName 
  2951.     - WkfSettings 
  2952.  
  2953.  o Parts list querying 
  2954.  
  2955.     - WkfQueryFiles 
  2956.  
  2957.  o Direct manipulation 
  2958.  
  2959.     - WkfQueryCopy 
  2960.     - WkfCopyFile 
  2961.     - WkfDelete 
  2962.  
  2963.  o Action support 
  2964.  
  2965.     - WkfQueryRunnable 
  2966.     - WkfRun 
  2967.     - WkfStop 
  2968.  
  2969.  The function prototypes and the macro definitions for Project Access Method 
  2970.  APIs are in the WKFPAM.H C header file. 
  2971.  
  2972.  
  2973. ΓòÉΓòÉΓòÉ 13.2.1. WKFPAM_NEXTPART ΓòÉΓòÉΓòÉ
  2974.  
  2975. WKFPAM_NEXTPART 
  2976.  
  2977. Select an item: 
  2978.  
  2979.  Macro Definition 
  2980.  Notes 
  2981.  Examples 
  2982.  
  2983.  
  2984. ΓòÉΓòÉΓòÉ <hidden> Definition - WKFPAM_NEXTPART ΓòÉΓòÉΓòÉ
  2985.  
  2986. Use this macro to move from one project part to the next. 
  2987.  
  2988. #define WKFPAM_NEXTPART(p) (PWKFPAM_PART)((PCHAR)p+p->cb)
  2989.  
  2990.  
  2991. ΓòÉΓòÉΓòÉ <hidden> Parameter - p ΓòÉΓòÉΓòÉ
  2992.  
  2993. p (WKFPAM_PART) 
  2994.  
  2995. A single element in the list of project parts passed back to the WKF_ADDFILES 
  2996. callback function. 
  2997.  
  2998.  
  2999. ΓòÉΓòÉΓòÉ <hidden> Notes - WKFPAM_NEXTPART ΓòÉΓòÉΓòÉ
  3000.  
  3001. WKFPAM_NEXTPART is a WorkFrame/2-provided macro that returns the next part in a 
  3002. list of project parts. 
  3003.  
  3004. The WKF_ADDFILES callback function expects a list of project parts.  This macro 
  3005. can be used to traverse the list. 
  3006.  
  3007.  
  3008. ΓòÉΓòÉΓòÉ <hidden> Example - WKFPAM_NEXTPART ΓòÉΓòÉΓòÉ
  3009.  
  3010. The following pseudo-code illustrates the use of this macro: 
  3011.  
  3012. @@@@@ 
  3013.  
  3014.  
  3015. ΓòÉΓòÉΓòÉ 13.2.2. WKF_ADDFILES ΓòÉΓòÉΓòÉ
  3016.  
  3017. WKF_ADDFILES 
  3018.  
  3019. Select an item: 
  3020.  
  3021.  Function Syntax 
  3022.  Return Values 
  3023.  Notes 
  3024.  Examples 
  3025.  
  3026.  
  3027. ΓòÉΓòÉΓòÉ <hidden> Syntax - WKF_ADDFILES ΓòÉΓòÉΓòÉ
  3028.  
  3029. This WorkFrame/2*-provided callback function adds a file to the files container 
  3030. view of a base project. 
  3031.  
  3032. #define INCL_WKFPAM
  3033. #include <wkf.h>
  3034.  
  3035. typedef APIRET APIENTRY WKF_ADDFILES (
  3036.    PVOID     pvPrivateData, /* Pointer to caller-specific data */
  3037.    PSZ      pszContainer,  /* Path name of directory to store files into */
  3038.    ULONG     ulCount,    /* Number of WKFPAM_PART entries pointed to by pwppData */
  3039.    PWKFPAM_PART pwppData    /* Start of data block containing WKFPAM_PART list */
  3040.    );
  3041.  
  3042. typedef WKF_ADDFILES *PWKF_ADDFILES;
  3043.  
  3044.  
  3045. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvPrivateData ΓòÉΓòÉΓòÉ
  3046.  
  3047. pvPrivateData (PVOID) - input 
  3048.  
  3049. A pointer to WorkFrame/2*-private information used in the processing of this 
  3050. callback function.  This pointer is passed by the WorkFrame/2 program to the 
  3051. PAM-provided API, WkfQueryFiles, which uses this callback function.  The 
  3052. WkfQueryFiles should pass this pointer to the callback function when calling 
  3053. it. 
  3054.  
  3055. The information addressed by this pointer is private to WorkFrame/2 processing 
  3056. and is not to be used by PAM-provided functions. 
  3057.  
  3058.  
  3059. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszContainer ΓòÉΓòÉΓòÉ
  3060.  
  3061. pszContainer (PSZ) - input 
  3062.  
  3063. Path name of the directory in which to store the project parts in the list 
  3064. pointed to by the pwppData field. 
  3065.  
  3066.  
  3067. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulCount ΓòÉΓòÉΓòÉ
  3068.  
  3069. ulCount (ULONG) - input 
  3070.  
  3071. The number of WKFPAM_PART entries in the list pointed to by the pwppData field. 
  3072.  
  3073.  
  3074. ΓòÉΓòÉΓòÉ <hidden> Parameter - pwppData ΓòÉΓòÉΓòÉ
  3075.  
  3076. pwppData (PWKFPAM_PART) - input 
  3077.  
  3078. Address of the start of the data block containing the list of WKFPAM_PART 
  3079. structures. Each WKFPAM_PART structure describes a project part in the list of 
  3080. parts to add to a project. 
  3081.  
  3082. The PAM-provider must ensure that the WKFPAM_PART entries are stored 
  3083. contiguously in memory by allocating a large chunk of memory at once, and then 
  3084. sub-allocating memory for each WKFPAM_PART entry as needed. 
  3085.  
  3086.  
  3087. ΓòÉΓòÉΓòÉ <hidden> Return Values - WKF_ADDFILES ΓòÉΓòÉΓòÉ
  3088.  
  3089. (APIRET) - return values 
  3090.  
  3091. WKF_ADDFILES returns the following values: 
  3092.  
  3093.  0  NOERROR 
  3094.        Items were added successfully. 
  3095.  
  3096.  Other 
  3097.        OS/2*-defined return code. 
  3098.  
  3099.  
  3100. ΓòÉΓòÉΓòÉ <hidden> Notes - WKF_ADDFILES ΓòÉΓòÉΓòÉ
  3101.  
  3102. This callback function is passed to the WkfQueryFiles API to add one or more 
  3103. parts (e.g. files) to the caller's base project parts list. 
  3104.  
  3105. The list of project parts is addressed by the pwppData field, which points to a 
  3106. list of WKFPAM_PART structures, each structure representing a single project 
  3107. part entry in the list. 
  3108.  
  3109. Project parts can only be added to one directory or container (specified by the 
  3110. pszContainer field) for a single invocation of this function. 
  3111.  
  3112.  
  3113. ΓòÉΓòÉΓòÉ <hidden> Example - WKF_ADDFILES ΓòÉΓòÉΓòÉ
  3114.  
  3115. The following pseudo-code illustrates how this interface could work: 
  3116.  
  3117. @@@@@ 
  3118.  
  3119.  
  3120. ΓòÉΓòÉΓòÉ 13.2.3. WKF_ADDMONITOR ΓòÉΓòÉΓòÉ
  3121.  
  3122. WKF_ADDMONITOR 
  3123.  
  3124. Select an item: 
  3125.  
  3126.  Function Syntax 
  3127.  Return Values 
  3128.  Notes 
  3129.  Examples 
  3130.  
  3131.  
  3132. ΓòÉΓòÉΓòÉ <hidden> Syntax - WKF_ADDMONITOR ΓòÉΓòÉΓòÉ
  3133.  
  3134. This WorkFrame/2*-provided callback function adds output lines to the Monitor 
  3135. listbox. 
  3136.  
  3137. #define INCL_WKFPAM
  3138. #include <wkf.h>
  3139.  
  3140. typedef APIRET APIENTRY WKF_ADDMONITOR (
  3141.    PVOID  pvPrivateData, /* Pointer to caller-specific data */
  3142.    PSZ   pszLine     /* String to be displayed */
  3143.    );
  3144.  
  3145. typedef WKF_ADDMONITOR *PWKF_ADDMONITOR;
  3146.  
  3147.  
  3148. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvPrivateData ΓòÉΓòÉΓòÉ
  3149.  
  3150. pvPrivateData (PVOID) - input 
  3151.  
  3152. A pointer to WorkFrame/2* private information used in the processing of this 
  3153. callback function.  This pointer is passed by the WorkFrame/2 program to the 
  3154. PAM-provided API, WkfRun, which uses this callback function.  The caller should 
  3155. pass this pointer on to this callback function when calling it. 
  3156.  
  3157. The information addressed by this pointer is private to WorkFrame/2 processing 
  3158. and is not to be used by PAM-provided functions. 
  3159.  
  3160.  
  3161. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszLine ΓòÉΓòÉΓòÉ
  3162.  
  3163. pszLine (PSZ) - input 
  3164.  
  3165. Address of the string buffer containing the data to be echoed to the Monitor 
  3166. listbox. 
  3167.  
  3168. A newline character ('\n') within the string starts a new line in the Monitor 
  3169. listbox. 
  3170.  
  3171.  
  3172. ΓòÉΓòÉΓòÉ <hidden> Return Values - WKF_ADDMONITOR ΓòÉΓòÉΓòÉ
  3173.  
  3174. (APIRET) - return values 
  3175.  
  3176. WKF_ADDMONITOR returns the following values: 
  3177.  
  3178.  0  NOERROR 
  3179.        Line was displayed successfully. 
  3180.  
  3181.  Other 
  3182.        OS/2*-defined return code. 
  3183.  
  3184.  
  3185. ΓòÉΓòÉΓòÉ <hidden> Notes - WKF_ADDMONITOR ΓòÉΓòÉΓòÉ
  3186.  
  3187. This callback function writes output lines to the Monitor window. It is passed 
  3188. to the WkfRun API so that it can echo stream output to the Monitor window 
  3189. listbox. WkfRun is expected to capture all STDOUT and STDERR stream output and 
  3190. pass it on to this callback function. 
  3191.  
  3192.  
  3193. ΓòÉΓòÉΓòÉ <hidden> Example - WKF_ADDMONITOR ΓòÉΓòÉΓòÉ
  3194.  
  3195. The following pseudo-code illustrates how this interface could work: 
  3196.  
  3197. @@@@@ 
  3198.  
  3199.  
  3200. ΓòÉΓòÉΓòÉ 13.2.4. WkfQueryHAM ΓòÉΓòÉΓòÉ
  3201.  
  3202. WkfQueryHAM 
  3203.  
  3204. Select an item: 
  3205.  
  3206.  Function Syntax 
  3207.  Return Values 
  3208.  Notes 
  3209.  Examples 
  3210.  
  3211.  
  3212. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryHAM ΓòÉΓòÉΓòÉ
  3213.  
  3214. This PAM-provided function is expected to return a caller-unique HAM value to 
  3215. initialize the PAM for the given project.  This function is also called to free 
  3216. a HAM value. 
  3217.  
  3218. #define INCL_WKFPAM
  3219. #include <wkf.h>
  3220.  
  3221. typedef HAM APIENTRY WKF_QUERYHAM (
  3222.    HAM   hamOld,     /* Previously set HAM value or NULL */
  3223.    PSZ   pszProjectName /* New project name to assign HAM to, or NULL */
  3224.    );
  3225.  
  3226. typedef WKF_QUERYHAM *PWKF_QUERYHAM;
  3227.  
  3228.  
  3229. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOld ΓòÉΓòÉΓòÉ
  3230.  
  3231. hamOld (HAM) - input 
  3232.  
  3233. If this field is not NULL, it contains the previously set HAM value. 
  3234.  
  3235. If this field is NULL on entry, then there was no previously assigned HAM value 
  3236. for this project. The returned HAM will then be assigned. 
  3237.  
  3238.  
  3239. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProjectName ΓòÉΓòÉΓòÉ
  3240.  
  3241. pszProjectName (PSZ) - input 
  3242.  
  3243. Name of project to assign new HAM to, or NULL. 
  3244.  
  3245. If this pointer is NULL, and hamOld is not NULL, then the previously set HAM 
  3246. should be freed. 
  3247.  
  3248.  
  3249. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryHAM ΓòÉΓòÉΓòÉ
  3250.  
  3251. (HAM) - return values 
  3252.  
  3253. WkfQueryHAM returns the following values: 
  3254.  
  3255.  NULL 
  3256.        If, on entry, pszProjectName was NULL, then a NULL return value 
  3257.        indicates that all data associated with the hamOld handle was reset, and 
  3258.        the hamOld handle freed. 
  3259.  
  3260.        If the pszProjectName was not NULL, then the PAM failed. 
  3261.  
  3262.  Other 
  3263.        Unique PAM-defined HAM value assigned to all data associated with the 
  3264.        pszProjectName project. 
  3265.  
  3266.        If, on entry, hamOld was NULL, this return value indicates that a new 
  3267.        HAM value was assigned to the pszProjectName project. 
  3268.  
  3269.        If hamOld was not NULL then any data associated with hamOld was reset, 
  3270.        the hamOld handle freed, and a new HAM assigned to the pszProjectName 
  3271.        project. 
  3272.  
  3273.  
  3274. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryHAM ΓòÉΓòÉΓòÉ
  3275.  
  3276. This PAM-provided function is expected to return a caller-unique HAM value 
  3277. assigned by the PAM.  The returned HAM value associates an instance of the PAM 
  3278. with the caller.  It must be unique to each caller of this function. 
  3279.  
  3280. Typically, the returned HAM is a pointer to an initialized structure holding 
  3281. PAM-specific information.  Since the returned HAM is subsequently passed to 
  3282. other PAM functions, the WorkFrame/2* program first calls this function for a 
  3283. project before it calls any other PAM functions. 
  3284.  
  3285. This function is called each time a project is created and when a new PAM is 
  3286. assigned to a project. The purpose of this function is to allow the PAM to 
  3287. allocate and store any data that it needs to keep between PAM calls, and 
  3288. perform any processing required to initialize itself for the project (such as 
  3289. establishing a connection to a remote file server).  Storage for information 
  3290. necessary for further processing within the PAM should be allocated in the HAM. 
  3291. For example, the session ID from WkfRun can be stored in the HAM so that when 
  3292. WkfStop is invoked, it can access the HAM to identify the session to be 
  3293. stopped.  In this case, the WkfQueryHAM should allocate a field in the HAM 
  3294. structure to hold this information so that when WkfRun is invoked, it can store 
  3295. the session ID in the HAM area.  All PAM APIs are called with the HAM value to 
  3296. allow the API's to modify the HAM value as required. 
  3297.  
  3298. This function can also be called (with a NULL pszProjectName field) to 
  3299. de-initialize the PAM for a project.  In this case, this function should free 
  3300. the old HAM value, and peform any processing required to de-initialize the PAM 
  3301. for the project (such as disconnecting from the remote server and saving any 
  3302. PAM-specific state data in the project file). 
  3303.  
  3304. The following table summarizes the expected behavior of this function: 
  3305.  
  3306. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3307. ΓöéHamOld   ΓöépszProjectNameΓöé     Result         ΓöéReturns     Γöé
  3308. Γöé(input)  Γöé(input)       Γöé                    Γöé            Γöé
  3309. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3310. ΓöéNULL     Γöéproject_name  ΓöéAssign new HAM      ΓöéUnique HAM  Γöé
  3311. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3312. Γöéham_valueΓöéNULL          ΓöéFree old HAM        ΓöéNULL        Γöé
  3313. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3314. Γöéham_valueΓöéproject_name  ΓöéFree old HAM; assignΓöéUnique HAM  Γöé
  3315. Γöé         Γöé              Γöénew HAM             Γöé            Γöé
  3316. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3317.  
  3318.  
  3319. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryHAM ΓòÉΓòÉΓòÉ
  3320.  
  3321. The following pseudo-code illustrates how this interface could work for an 
  3322. OS/2* file system: 
  3323.  
  3324.  
  3325.   /* Check pszProjectName */
  3326.  
  3327.   if (pszProjectName == NULL)    /* Free hamOld value and exit */
  3328.   {
  3329.    if (hamOld!=NULLHANDLE)
  3330.    {
  3331.      if ( ((BPAM*)hamOld)->fLockedFileIconCopied )
  3332.       WinDestroyPointer( ((BPAM*)hamOld)->hptrLockedFile );
  3333.  
  3334.      free( (PVOID)hamOld );
  3335.    }
  3336.  
  3337.    return( NULLHANDLE );
  3338.   }
  3339.   else
  3340.   {
  3341.    if (hamOld!=NULLHANDLE)   /* Old ham freed, hew ham assigned */
  3342.    {
  3343.      /* Existing ham changing project name -- nothing to do */
  3344.      return( hamOld );
  3345.    }
  3346.    else       /* New ham. Allocate memory to store session info for WkfRun() */
  3347.    {
  3348.  
  3349.      MYPAM   *pMypam;      /* Structure to hold session information */
  3350.  
  3351.      pMypam = malloc( sizeof( MYPAM ) );
  3352.  
  3353.      if (pMypam)
  3354.      {
  3355.       pMypam->ulSessionID = 0;     /* No session started yet */
  3356.       pMypam->hfWritePipe = 0;     /* No session started yet */
  3357.          :
  3358.       <Set other HAM values >
  3359.      }
  3360.      return( (HAM)pMypam );   /* If the malloc failed, this will correctly return NULL */
  3361.    }
  3362.   }
  3363.  
  3364.  
  3365. ΓòÉΓòÉΓòÉ 13.2.5. WkfQueryTitle ΓòÉΓòÉΓòÉ
  3366.  
  3367. WkfQueryTitle 
  3368.  
  3369. Select an item: 
  3370.  
  3371.  Function Syntax 
  3372.  Return Values 
  3373.  Notes 
  3374.  Examples 
  3375.  
  3376.  
  3377. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryTitle ΓòÉΓòÉΓòÉ
  3378.  
  3379. This PAM-provided function is expected to provide the PAM title or description. 
  3380. value. 
  3381.  
  3382. #define INCL_WKFPAM
  3383. #include <wkf.h>
  3384.  
  3385. typedef APIRET APIENTRY WKF_QUERYTITLE (
  3386.    HAM   hamOwner,   /* PAM handle */
  3387.    ULONG  ulTitleMax,  /* Size, in bytes, of the pszTitle buffer */
  3388.    PSZ   pszTitle   /* Address of the buffer to contain the title string */
  3389.    );
  3390.  
  3391. typedef WKF_QUERYTITLE *PWKF_QUERYTITLE;
  3392.  
  3393.  
  3394. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  3395.  
  3396. hamOwner (HAM) - input 
  3397.  
  3398. PAM handle of project whose access method title to query. 
  3399.  
  3400. This HAM value is created by the WkfQueryHAM API. 
  3401.  
  3402.  
  3403. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulTitleMax ΓòÉΓòÉΓòÉ
  3404.  
  3405. ulTitleMax (ULONG) - input 
  3406.  
  3407. Maximum size, in bytes, of the buffer pointed to by pszTitle. 
  3408.  
  3409.  
  3410. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszTitle ΓòÉΓòÉΓòÉ
  3411.  
  3412. pszTitle (PSZ) - output 
  3413.  
  3414. Address of the buffer to contain the null-delimited title string.  On error, a 
  3415. zero-length string should be returned. 
  3416.  
  3417.  
  3418. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryTitle ΓòÉΓòÉΓòÉ
  3419.  
  3420. (APIRET) - return values 
  3421.  
  3422. WkfQueryTitle returns the following values: 
  3423.  
  3424.  0  NO_ERROR 
  3425.        Title successfully provided. 
  3426.  
  3427.  Other 
  3428.        Failure 
  3429.  
  3430.  
  3431. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryTitle ΓòÉΓòÉΓòÉ
  3432.  
  3433. This PAM-provided function is expected to return the title or description of 
  3434. this access method. 
  3435.  
  3436. The .DLL filename and description (returned by this function) of the access 
  3437. method for a base project is specified on the Access page of the base project's 
  3438. Settings notebook. 
  3439.  
  3440.  
  3441. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryTitle ΓòÉΓòÉΓòÉ
  3442.  
  3443. The following pseudo-code illustrates how this interface could work: 
  3444.  
  3445. /* Update pszTitle with the PAM title */
  3446.  
  3447. PSZ pszPAMTitle = "IBM WorkFrame/2 ^ Advanced Project Access Method\0";
  3448.  
  3449. if (strlen(pszPAMTitle) <= ulTitleMax)
  3450.   strcpy (pszTitle, pszPAMTitle);
  3451. else
  3452.   /* PAM title longer than allowed so copy */
  3453.   /* only until maximum allowed length   */
  3454.   strncpy (pszTitle, pszPAMTitle, ulTitleMax);
  3455.  
  3456.  
  3457. ΓòÉΓòÉΓòÉ 13.2.6. WkfSettings ΓòÉΓòÉΓòÉ
  3458.  
  3459. WkfSettings 
  3460.  
  3461. Select an item: 
  3462.  
  3463.  Function Syntax 
  3464.  Return Values 
  3465.  Notes 
  3466.  Examples 
  3467.  
  3468.  
  3469. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfSettings ΓòÉΓòÉΓòÉ
  3470.  
  3471. This optional PAM-provided function is to provide an options dialog to obtain 
  3472. user-specified PAM settings that can be stored in the project file. 
  3473.  
  3474. #define INCL_WKFPAM
  3475. #include <wkf.h>
  3476.  
  3477. typedef APIRET APIENTRY WKF_SETTINGS  (
  3478.    HAM   hamOwner,    /* PAM handle */
  3479.    PSZ   pszProjectFile, /* Project file name */
  3480.    HWND  hwndParent    /* Parent window handle of PAM options dialog */
  3481.    HWND  hwndOwner,    /* Owner window handle of PAM options dialog */
  3482.    ULONG  cbMessage,    /* Size, in bytes, of the pszMessage buffer */
  3483.    PSZ   pszMessage    /* Address of the buffer to contain a returned message */
  3484.    );
  3485.  
  3486. typedef WKF_SETTINGS *PWKF_SETTINGS;
  3487.  
  3488.  
  3489. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  3490.  
  3491. hamOwner (HAM) - input 
  3492.  
  3493. PAM handle of project for whose access method this function is to show a PAM 
  3494. options dialog. 
  3495.  
  3496. This HAM value is created by the WkfQueryHAM API. 
  3497.  
  3498.  
  3499. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProjectFile ΓòÉΓòÉΓòÉ
  3500.  
  3501. pszProjectFile (PSZ) - input 
  3502.  
  3503. Address of the ASCIIZ project file name. 
  3504.  
  3505.  
  3506. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndParent ΓòÉΓòÉΓòÉ
  3507.  
  3508. hwndParent (HWND) - input 
  3509.  
  3510. Set the parent of the PAM options dialog to this window handle. 
  3511.  
  3512.  
  3513. ΓòÉΓòÉΓòÉ <hidden> Parameter - hwndOwner ΓòÉΓòÉΓòÉ
  3514.  
  3515. hwndOwner (HWND) - input 
  3516.  
  3517. Set the owner of the PAM options dialog to this window handle. 
  3518.  
  3519.  
  3520. ΓòÉΓòÉΓòÉ <hidden> Parameter - cbMessage ΓòÉΓòÉΓòÉ
  3521.  
  3522. cbMessage (ULONG) - input 
  3523.  
  3524. This pointer contains the number of bytes allocated for the pszMessage buffer, 
  3525. and thus represents its maximum allowed size. 
  3526.  
  3527. This field is set to the WKFPAM_CCHMAXERROR constant. 
  3528.  
  3529.  
  3530. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszMessage ΓòÉΓòÉΓòÉ
  3531.  
  3532. pszMessage (PSZ) - output 
  3533.  
  3534. Address of the buffer to contain an optional null-delimited message string to 
  3535. be displayed to the user. 
  3536.  
  3537. If the return code is not NO_ERROR, then a PAM-specific message may be returned 
  3538. through this string buffer. If this pointer is not NULL on output, the message 
  3539. string is displayed in an error message box by itself. If an OS/2*-defined 
  3540. error occurs, the message will be appended to the OS/2 error message in an 
  3541. error message box. 
  3542.  
  3543. Set this pointer to NULL if no PAM-specific message is to be displayed. 
  3544.  
  3545. Note:  Write this PAM function to check the cbMessage length field prior to 
  3546.        writing any data to this string pointer.  A a count of zero indicates 
  3547.        that the WorkFrame/2 program will not process an output message string. 
  3548.  
  3549.  
  3550. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfSettings ΓòÉΓòÉΓòÉ
  3551.  
  3552. (APIRET) - return values 
  3553.  
  3554. WkfSettings returns the following values: 
  3555.  
  3556.  0  NO_ERROR 
  3557.        Settings dialog successfully displayed. 
  3558.  
  3559.  Other 
  3560.        Failure. 
  3561.  
  3562.  
  3563. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfSettings ΓòÉΓòÉΓòÉ
  3564.  
  3565. This entry point is optional.  If it is present, the base project Settings 
  3566. notebook will enable the Options pushbutton on its Access page.  When the user 
  3567. clicks on this pushbutton, this function should display a dialog to acquire and 
  3568. store any user-specified, PAM-specific information. 
  3569.  
  3570. The parent and owner of the PAM options dialog should be set to the hwndParent 
  3571. and hwndOwner window handles, respectively.  The dialog itself should be modal, 
  3572. and loaded using the WinDlgBox OS/2* API.  For more information on the 
  3573. WinDlgBox API, please refer to the IBM* Developer's Toolkit online PM 
  3574. Reference. 
  3575.  
  3576. Use the Project APIs to write the PAM-specific information to the project file. 
  3577. It is suggested that the PAM DLL module name be used for the application name 
  3578. key when writing information to the project file to reduce the likelihood that 
  3579. another PAM or tool-integrator will use the same key name. 
  3580.  
  3581.  
  3582. ΓòÉΓòÉΓòÉ <hidden> Example - WkfSettings ΓòÉΓòÉΓòÉ
  3583.  
  3584. The following pseudo-code illustrates how this interface could work: 
  3585.  
  3586. @@@@@@ 
  3587.  
  3588.  
  3589. ΓòÉΓòÉΓòÉ 13.2.7. WkfQueryFiles ΓòÉΓòÉΓòÉ
  3590.  
  3591. WkfQueryFiles 
  3592.  
  3593. Select an item: 
  3594.  
  3595.  Function Syntax 
  3596.  Return Values 
  3597.  Notes 
  3598.  Examples 
  3599.  
  3600.  
  3601. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryFiles ΓòÉΓòÉΓòÉ
  3602.  
  3603. This PAM-provided function is expected to provide the list of parts that belong 
  3604. to a project. 
  3605.  
  3606. #define INCL_WKFPAM
  3607. #include <wkf.h>
  3608.  
  3609. typedef APIRET APIENTRY WKF_QUERYFILES  (
  3610.    HAM      hamOwner,    /* PAM handle */
  3611.    PSZ      pszMasks,    /* Project file masks */
  3612.    PSZ      pszContainers  /* Path names to be searched for project parts */
  3613.    PWKF_ADDFILES pfnAddFiles,  /* Callback function for inserting project parts into a project container */
  3614.    PVOID     pvPrivateData, /* Parameter to be passed to the pfnAddFiles callback function */
  3615.    ULONG     cbMessage,   /* Size, in bytes, of the pszMessage buffer */
  3616.    PSZ      pszMessage   /* Address of the buffer to contain a returned message */
  3617.    );
  3618.  
  3619. typedef WKF_QUERYFILES *PWKF_QUERYFILES;
  3620.  
  3621.  
  3622. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  3623.  
  3624. hamOwner (HAM) - input 
  3625.  
  3626. Handle of the project whose parts to query. 
  3627.  
  3628. This HAM value is created by the WkfQueryHAM API. 
  3629.  
  3630.  
  3631. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszMasks ΓòÉΓòÉΓòÉ
  3632.  
  3633. pszMasks (PSZ) - input 
  3634.  
  3635. Pointer to an ASCIIZ list of project file masks for the project specified by 
  3636. the hamOwner handle.  Each file mask in the list string is delimited by a 
  3637. WKF_LIST_DELIM character constant. 
  3638.  
  3639. This list of project file masks is specified in the base project's Settings 
  3640. notebook, on the Source page. 
  3641.  
  3642.  
  3643. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszContainers ΓòÉΓòÉΓòÉ
  3644.  
  3645. pszContainers (PSZ) - input 
  3646.  
  3647. Pointer to an ASCIIZ list of directory path names to be searched for the parts 
  3648. (or files) of the project specified by the hamOwner handle.  Each path name in 
  3649. the list string is delimited by a WKF_LIST_DELIM character constant. 
  3650.  
  3651. This list of project containers (or source directories) is specified in the 
  3652. base project's Settings notebook, on the Source page. 
  3653.  
  3654.  
  3655. ΓòÉΓòÉΓòÉ <hidden> Parameter - pfnAddFiles ΓòÉΓòÉΓòÉ
  3656.  
  3657. pfnAddFiles (PWKF_ADDFILES) - input 
  3658.  
  3659. Pointer to a WKF_ADDFILES callback function for inserting file objects into a 
  3660. project container. 
  3661.  
  3662. Call this function as many times as necessary to pass the list of files 
  3663. belonging to the project specified by the hamOwner handle field to the 
  3664. WorkFrame/2* program.  Each time this interface calls the pfnAddFiles callback 
  3665. function, the WorkFrame/2 program stores the returned file names in its own 
  3666. allocated storage area. 
  3667.  
  3668. Each time this callback function is invoked, the base project folder does a 
  3669. refresh on its contents. 
  3670.  
  3671.  
  3672. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvPrivateData ΓòÉΓòÉΓòÉ
  3673.  
  3674. pvPrivateData (PVOID) - input 
  3675.  
  3676. A pointer to WorkFrame/2* private information used in the processing of the 
  3677. WKF_ADDFILES callback function.  Pass this pointer to the pfnAddFiles function 
  3678. when calling it. 
  3679.  
  3680. The information addressed by this pointer is private to WorkFrame/2 processing 
  3681. and is not to be used by any PAM-provided functions. 
  3682.  
  3683.  
  3684. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryFiles ΓòÉΓòÉΓòÉ
  3685.  
  3686. (APIRET) - return values 
  3687.  
  3688. WkfQueryFiles returns the following values: 
  3689.  
  3690.  0  NO_ERROR 
  3691.        Files successfully passed. 
  3692.  
  3693.  Other 
  3694.        Failure. 
  3695.  
  3696.  
  3697. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryFiles ΓòÉΓòÉΓòÉ
  3698.  
  3699. The WorkFrame/2* program calls this PAM-provided function to obtain the list of 
  3700. project parts or files that belong to a project.  The caller provides a list of 
  3701. containers (paths) to search, and a list of file masks.  All the files in the 
  3702. given containers that match any one of the file masks should be returned. 
  3703.  
  3704. Return the list of files to the WorkFrame/2* program by creating a list of 
  3705. WKFPAM_PART elements and passing it to the pfnAddFiles callback function. One 
  3706. list per container (or subdirectory) in the project should be created and 
  3707. passed to the pfnAddFiles callback function. As many calls to pfnAddFiles can 
  3708. be made as necessary to complete the list of parts, however, for performance 
  3709. reasons, the number of call backs should be as small as possible since the base 
  3710. project container view is refreshed each time a call to pfnAddFiles is made. 
  3711.  
  3712. It is the responsibility of this function to allocate and free any storage it 
  3713. uses for the parts list. 
  3714.  
  3715.  
  3716. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryFiles ΓòÉΓòÉΓòÉ
  3717.  
  3718. The following pseudo-code illustrates how this interface could work: 
  3719.  
  3720. @@@@@@ 
  3721.  
  3722.  
  3723. ΓòÉΓòÉΓòÉ 13.2.8. WkfRun ΓòÉΓòÉΓòÉ
  3724.  
  3725. WkfRun 
  3726.  
  3727. Select an item: 
  3728.  
  3729.  Function Syntax 
  3730.  Return Values 
  3731.  Notes 
  3732.  Examples 
  3733.  
  3734.  
  3735. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfRun ΓòÉΓòÉΓòÉ
  3736.  
  3737. Write this PAM-provided function to execute the given action. 
  3738.  
  3739. #define INCL_WKFPAM
  3740. #include <wkf.h>
  3741.  
  3742. typedef APIRET APIENTRY WKF_RUN (
  3743.  HAM       hamOwner,     /* PAM handle */
  3744.  PSZ       pszTitle,     /* Program title to be used */
  3745.  PSZ       pszProgram,    /* Name of executable */
  3746.  PSZ       pszParameters,   /* Program parameter string */
  3747.  char       *pcEnvironment,  /* Environment block */
  3748.  PSZ       pszStartDir,    /* Startup directory */
  3749.  PSZ       pszTermQueueName, /* Termination queue name for returning result codes */
  3750.  ULONG      ulRunMode,     /* Mode in which to run action */
  3751.  PWKF_ADDMONITOR pfnAddMonitor,   /* Callback function for inserting output lines into the Monitor window */
  3752.  PVOID      pvPrivateData,   /* Parameter to be passed to pfnAddFiles callback function */
  3753.  ULONG      cbMessage,     /* Size, in bytes, of pszMessage buffer */
  3754.  PSZ       pszMessage     /* Pointer to output message buffer */
  3755.  );
  3756.  
  3757. typedef WKF_RUN *PWKF_RUN;
  3758.  
  3759.  
  3760. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  3761.  
  3762. hamOwner (HAM) - input 
  3763.  
  3764. PAM handle of the project for which the action is to be executed. 
  3765.  
  3766. This HAM value is created by the WkfQueryHAM API, and can be updated to store 
  3767. relevant information, such as the session ID, about the action to be executed 
  3768. for future reference by other PAM API's (such as WkfStop). 
  3769.  
  3770.  
  3771. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszTitle ΓòÉΓòÉΓòÉ
  3772.  
  3773. pszTitle (PSZ) - input 
  3774.  
  3775. The field is either NULL or the address of the buffer containing the 
  3776. null-delimited program title string. 
  3777.  
  3778.  
  3779. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszProgram ΓòÉΓòÉΓòÉ
  3780.  
  3781. pszProgram (PSZ) - input 
  3782.  
  3783. Pointer to an ASCIIZ string containing the name of the program to be executed, 
  3784. for example, "TOOL.EXE" or "TOOL.CMD". 
  3785.  
  3786.  
  3787. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszParameters ΓòÉΓòÉΓòÉ
  3788.  
  3789. pszParameters (PSZ) - input 
  3790.  
  3791. Address of the ASCIIZ string buffer that contains the command-line parameters 
  3792. for the program to be executed by this interface. 
  3793.  
  3794.  
  3795. ΓòÉΓòÉΓòÉ <hidden> Parameter - *pcEnvironment ΓòÉΓòÉΓòÉ
  3796.  
  3797. *pcEnvironment (char) - input 
  3798.  
  3799. This field is either NULL or the address of an environment string that can be 
  3800. passed to the DosStartSession OS/2* API when starting the program in a new 
  3801. session. The DosStartSession passes this string to the program started in the 
  3802. new session.  Non-OS/2 PAMs can use this field as relevant in their own file 
  3803. system. 
  3804.  
  3805. When this field is NULL, the program in the new session should inherit the 
  3806. default environment (e.g. the Shell environment, or its parent's environment). 
  3807.  
  3808. This field is of the same format as the environment field required by the 
  3809. DosExecPgm and DosStartSession OS/2 APIs.  That is, each environment string is 
  3810. of the form <variable>=<value> . The environment strings are delimited by a 
  3811. null character ('\0'), and the last environment string is followed by two null 
  3812. characters. 
  3813.  
  3814.  
  3815. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszStartDir ΓòÉΓòÉΓòÉ
  3816.  
  3817. pszStartDir (PSZ) - input 
  3818.  
  3819. Address of the buffer that contains the directory in which to start the 
  3820. program. 
  3821.  
  3822. This directory is the project's working directory that is specified on the 
  3823. Target page of the base project's Settings notebook. 
  3824.  
  3825.  
  3826. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszTermQueueName ΓòÉΓòÉΓòÉ
  3827.  
  3828. pszTermQueueName (PSZ) - input 
  3829.  
  3830. Termination queue name to be used for returning result messages as required by 
  3831. the DosStartSession OS/2* API. 
  3832.  
  3833. This field is the address of an ASCIIZ string that contains the fully qualified 
  3834. path and file name of a system queue.  Once an OS/2* session is started with 
  3835. the DosStartSession API, specifying this queue, the OS/2 Session Manager will 
  3836. use the queue to send termination notification messages to the parent session. 
  3837.  
  3838. For more information, consult the online publication from the IBM* Developer's 
  3839. Toolkit, Control Program Guide and Reference 
  3840.  
  3841.  
  3842. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulRunMode ΓòÉΓòÉΓòÉ
  3843.  
  3844. ulRunMode (ULONG) - input 
  3845.  
  3846. This field indicates the mode in which to run the specified action. It can 
  3847. contain any one of the following values: 
  3848.  
  3849.  1   WKF_RUNMODE_FULLSCREEN 
  3850.        Start the action in a full-screen session. 
  3851.  
  3852.  2   WKF_RUNMODE_WINDOW 
  3853.        Start the program in a windowed (vio) session for programs using the 
  3854.        Base Video Subsystem. 
  3855.  
  3856.  3   WKF_RUNMODE_MONITOR 
  3857.        Start the program in a WorkFrame/2* Monitor window.  Use the 
  3858.        WKF_ADDMONITOR callback function to write lines of output to the Monitor 
  3859.        window. 
  3860.  
  3861.  255  WKF_RUNMODE_DEFAULT 
  3862.        Start the program in default run mode. Within the OS/2* system, default 
  3863.        mode allows the Shell to establish the session type. 
  3864.  
  3865.  The WorkFrame/2* program uses DosStartSession to start programs within the 
  3866.  OS/2 system. 
  3867.  
  3868.  
  3869. ΓòÉΓòÉΓòÉ <hidden> Parameter - pfnAddMonitor ΓòÉΓòÉΓòÉ
  3870.  
  3871. pfnAddMonitor (PWKF_ADDMONITOR) - input 
  3872.  
  3873. Use this callback function to write lines of output to the WorkFrame/2* Monitor 
  3874. window if the action is to be started in the Monitor window.  This callback 
  3875. function is used only if the ulRunMode field has the value WKF_RUN_MONITOR. 
  3876.  
  3877. If the action is to run in the Monitor window, this interface should capture 
  3878. all stream output (e.g. STDOUT and STDERR ) and pass it on to this callback 
  3879. function. 
  3880.  
  3881. Programs that output in line mode (for example, OS/2* programs that do not use 
  3882. Presentation Manager* services and run in windowed or full-screen mode) are 
  3883. viable candidates to run in the Monitor window.  Ideally, these programs should 
  3884. run invisibly in the background, and their output displayed in the Monitor 
  3885. window. 
  3886.  
  3887.  
  3888. ΓòÉΓòÉΓòÉ <hidden> Parameter - pvPrivateData ΓòÉΓòÉΓòÉ
  3889.  
  3890. pvPrivateData (PVOID) - input 
  3891.  
  3892. A pointer to WorkFrame/2*-private information used in the processing of the 
  3893. WKF_ADDMONITOR callback function.  Pass this pointer to the pfnAddMonitor 
  3894. function when calling it. 
  3895.  
  3896. The information addressed by this pointer is private to WorkFrame/2 processing 
  3897. and is not to be used by any PAM-provided functions. 
  3898.  
  3899.  
  3900. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfRun ΓòÉΓòÉΓòÉ
  3901.  
  3902. (APIRET) - return values 
  3903.  
  3904. WkfRun returns the following values: 
  3905.  
  3906.  0  NO_ERROR 
  3907.        Action successfully invoked without errors. 
  3908.  
  3909.  Other 
  3910.        OS/2*-defined return code. 
  3911.  
  3912.  
  3913. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfRun ΓòÉΓòÉΓòÉ
  3914.  
  3915. The WorkFrame/2* program calls this PAM-provided function to execute an action. 
  3916. The name of the program executable, parameters to use, environment block, 
  3917. startup directory, and run mode are passed into this interface by the 
  3918. WorkFrame/2 program.  The program to run may be an OS/2*-native program, or a 
  3919. remote command.  This interface should check that the given program is a valid 
  3920. executable within the file system that this PAM provides access for. 
  3921.  
  3922. The specified program should be run from the startup directory identified by 
  3923. the pszStartDir field. 
  3924.  
  3925. If the program is to run in the Monitor window (that is, if the ulRunMode field 
  3926. is set to WKF_RUNMODE_MONITOR), this interface should not return until the 
  3927. started process has completed.  By contrast, if the program is not to run in 
  3928. the Monitor window, this interface should return immediately after the process 
  3929. has been launched. 
  3930.  
  3931. OS/2 PAMs should use the DosStartSession system API to start the program.  The 
  3932. Basic Project Access Method (bPAM) shipped with the WorkFrame/2 program 
  3933. contains methods for running OS/2, DOS, and WINOS2 programs within any OS/2 
  3934. native environments, or from within the monitor. 
  3935.  
  3936.  
  3937. ΓòÉΓòÉΓòÉ <hidden> Example - WkfRun ΓòÉΓòÉΓòÉ
  3938.  
  3939. The following pseudo-code illustrates how this interface could work: 
  3940.  
  3941. @@@@@@ 
  3942.  
  3943.  
  3944. ΓòÉΓòÉΓòÉ 13.2.9. WkfStop ΓòÉΓòÉΓòÉ
  3945.  
  3946. WkfStop 
  3947.  
  3948. Select an item: 
  3949.  
  3950.  Function Syntax 
  3951.  Return Values 
  3952.  Notes 
  3953.  Examples 
  3954.  
  3955.  
  3956. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfStop ΓòÉΓòÉΓòÉ
  3957.  
  3958. Write this PAM-provided function to stop a running process started through 
  3959. WkfRun. 
  3960.  
  3961. #define INCL_WKFPAM
  3962. #include <wkf.h>
  3963.  
  3964. typedef APIRET APIENTRY WKF_STOP (
  3965.  HAM   hamOwner,  /* PAM handle */
  3966.  ULONG  cbMessage,  /* Size of message buffer */
  3967.  PSZ   pszMessage  /* Pointer to message buffer */
  3968.  );
  3969.  
  3970. typedef WKF_STOP *PWKF_STOP;
  3971.  
  3972.  
  3973. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  3974.  
  3975. hamOwner (HAM) - input 
  3976.  
  3977. PAM handle of the project for which the action was started. 
  3978.  
  3979. This HAM value is created by the WkfQueryHAM API, and contains information that 
  3980. identifies the running session to be aborted. 
  3981.  
  3982.  
  3983. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfStop ΓòÉΓòÉΓòÉ
  3984.  
  3985. (APIRET) - return values 
  3986.  
  3987. WkfStop returns the following values: 
  3988.  
  3989.  0  NO_ERROR 
  3990.        Process successfully halted. 
  3991.  
  3992.  Other 
  3993.        OS/2*-defined return code. 
  3994.  
  3995.  
  3996. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfStop ΓòÉΓòÉΓòÉ
  3997.  
  3998. The WorkFrame/2* program calls this PAM-provided function to stop the running 
  3999. process started through the WkfRun API. 
  4000.  
  4001. The hamOwner field contains PAM-specific information that uniquely identifies 
  4002. the process to be aborted.  The hamOwner field is the unique HAM value that is 
  4003. returned by the WkfQueryHAM API. 
  4004.  
  4005. OS/2* processes can be stopped using the DosStopSession system API.  For more 
  4006. information, consult the online publication from the IBM* Developer's Toolkit, 
  4007. Control Program Guide and Reference 
  4008.  
  4009.  
  4010. ΓòÉΓòÉΓòÉ <hidden> Example - WkfStop ΓòÉΓòÉΓòÉ
  4011.  
  4012. The following pseudo-code illustrates how this interface could work: 
  4013.  
  4014. @@@@@@ 
  4015.  
  4016.  
  4017. ΓòÉΓòÉΓòÉ 13.2.10. WkfQueryPathInfo ΓòÉΓòÉΓòÉ
  4018.  
  4019. WkfQueryPathInfo 
  4020.  
  4021. Select an item: 
  4022.  
  4023.  Function Syntax 
  4024.  Return Values 
  4025.  Notes 
  4026.  Examples 
  4027.  
  4028.  
  4029. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryPathInfo ΓòÉΓòÉΓòÉ
  4030.  
  4031. Write this PAM-provided function to indicate whether or not a given path is 
  4032. valid for this PAM's file system. 
  4033.  
  4034. #define INCL_WKFPAM
  4035. #include <wkf.h>
  4036. #define WKF_PFS_QPATHINFO "WKFQUERYPATHINFO"
  4037.  
  4038. typedef APIRET APIENTRY WKF_QPATHINFO (
  4039.  HAM   hamOwner,      /* PAM handle */
  4040.  PSZ   pszPathName,    /* Path name to be validated */
  4041.  ULONG  ulFullPathBufSize, /* Size of pszFullPathName buffer */
  4042.  PSZ   pszFullPathName,  /* Pointer to output buffer to contain fully qualified path name, if valid */
  4043.  BOOL  *pfExists,     /* Path exists flag */
  4044.  ULONG  cbMessage,     /* Size of message buffer */
  4045.  PSZ   pszMessage     /* Pointer to message buffer */
  4046.  );
  4047.  
  4048. typedef WKF_QPATHINFO *PWKF_QPATHINFO;
  4049.  
  4050.  
  4051. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  4052.  
  4053. hamOwner (HAM) - input 
  4054.  
  4055. Project PAM handle created by the WkfQueryHAM API. 
  4056.  
  4057.  
  4058. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPathName ΓòÉΓòÉΓòÉ
  4059.  
  4060. pszPathName (PSZ) - input 
  4061.  
  4062. Address of the ASCIIZ buffer containing the path name to be validated. 
  4063.  
  4064. This path may or may not contain a file name, and may contain characters that 
  4065. this PAM's file system can recognize.  For example, the ".." characters in 
  4066. OS/2* refer to the parent directory of the current subdirectory; "\" refers to 
  4067. the root directory. 
  4068.  
  4069.  
  4070. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulFullPathBufSize ΓòÉΓòÉΓòÉ
  4071.  
  4072. ulFullPathBufSize (ULONG) - input 
  4073.  
  4074. This pointer contains the number of bytes allocated for the pszFullPathName 
  4075. buffer, and thus represents its maximum allowed size. 
  4076.  
  4077. Currently, this field is set to the OS/2*-defined constant, CCHMAXPATH. 
  4078.  
  4079.  
  4080. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFullPathName ΓòÉΓòÉΓòÉ
  4081.  
  4082. pszFullPathName (PSZ) - output 
  4083.  
  4084. On exit, this field should contain the fully specified name of the path 
  4085. specified by the pszPathName field, if it is a valid path name this PAM's file 
  4086. system. 
  4087.  
  4088.  
  4089. ΓòÉΓòÉΓòÉ <hidden> Parameter - *pfExists ΓòÉΓòÉΓòÉ
  4090.  
  4091. *pfExists (PSZ) - output 
  4092.  
  4093. On exit, this field should be set to TRUE if the file identified by the 
  4094. pszPathName field actually exists, FALSE if it does not. 
  4095.  
  4096.  
  4097. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryPathInfo ΓòÉΓòÉΓòÉ
  4098.  
  4099. (APIRET) - return values 
  4100.  
  4101. WkfQueryPathInfo returns the following values: 
  4102.  
  4103.  0  NO_ERROR 
  4104.        Path name successfully validated 
  4105.  
  4106.  Other 
  4107.        OS/2*-defined return code. 
  4108.  
  4109.  
  4110. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryPathInfo ΓòÉΓòÉΓòÉ
  4111.  
  4112. The WorkFrame/2* program calls this PAM-provided function to test whether the 
  4113. path name identified by the pszPathName field is valid within this PAM's file 
  4114. system. 
  4115.  
  4116. The pszPathName field can contain any part of a path name. This function is 
  4117. expected to update the pszFullPathName field with the fully qualified path 
  4118. name, if the given path is valid.  Note that the path does not have to exist 
  4119. for it to be valid. 
  4120.  
  4121. For example, if one of this project's source directories is C:\MYPROJ\DLL\MAK , 
  4122. and pszPathName contains the partial path \DLL\MAK\MAKEFILE.MAK , this function 
  4123. should update the pszFullPathName field with the fully qualified path string 
  4124. (which, in this case is "C:\PROJ\DLL\MAK\MAKEFILE.MAK" ) if the pszPathName 
  4125. path is a valid path name in this PAM's file system. If the path actually 
  4126. exists, the *pfExists field should be set to TRUE, otherwise, it should be set 
  4127. to FALSE. 
  4128.  
  4129.  
  4130. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryPathInfo ΓòÉΓòÉΓòÉ
  4131.  
  4132. The following pseudo-code illustrates how this interface could work: 
  4133.  
  4134. @@@@@@ 
  4135.  
  4136.  
  4137. ΓòÉΓòÉΓòÉ 13.2.11. WkfCreatePath ΓòÉΓòÉΓòÉ
  4138.  
  4139. WkfCreatePath 
  4140.  
  4141. Select an item: 
  4142.  
  4143.  Function Syntax 
  4144.  Return Values 
  4145.  Notes 
  4146.  Examples 
  4147.  
  4148.  
  4149. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfCreatePath ΓòÉΓòÉΓòÉ
  4150.  
  4151. Write this PAM-provided function to create all nodes (or subdirectories) along 
  4152. the specified path. 
  4153.  
  4154. #define INCL_WKFPAM
  4155. #include <wkf.h>
  4156. #define WKF_PFS_CREATEPATH "WKFCREATEPATH"
  4157.  
  4158. typedef APIRET APIENTRY WKF_CREATEPATH (
  4159.  HAM   hamOwner,  /* PAM handle */
  4160.  PSZ   pszPath,   /* Path to be created */
  4161.  ULONG  cbMessage,  /* Size of message buffer */
  4162.  PSZ   pszMessage  /* Pointer to message buffer */
  4163.  );
  4164.  
  4165. typedef WKF_CREATEPATH *PWKF_CREATEPATH;
  4166.  
  4167.  
  4168. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  4169.  
  4170. hamOwner (HAM) - input 
  4171.  
  4172. Project PAM handle created by the WkfQueryHAM API. 
  4173.  
  4174.  
  4175. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPath ΓòÉΓòÉΓòÉ
  4176.  
  4177. pszPath (PSZ) - input 
  4178.  
  4179. Address of the ASCIIZ buffer containing the path to create. 
  4180.  
  4181.  
  4182. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfCreatePath ΓòÉΓòÉΓòÉ
  4183.  
  4184. (APIRET) - return values 
  4185.  
  4186. WkfCreatePath returns the following values: 
  4187.  
  4188.  0  NO_ERROR 
  4189.        All nodes along the specified path successfully created 
  4190.  
  4191.  Other 
  4192.        OS/2*-defined return code. 
  4193.  
  4194.  
  4195. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfCreatePath ΓòÉΓòÉΓòÉ
  4196.  
  4197. The WorkFrame/2* program calls this PAM-provided function to create all nodes 
  4198. along the path specified by the pszPath field. 
  4199.  
  4200. In the OS/2* file system, a node is a subdirectory.  For example, if the 
  4201. pszPath field contained the string "C:\MYPROJ\HEADERS\GENERAL", this function 
  4202. should create the subdirectories \MYPROJ , \MYPROJ\HEADERS , and 
  4203. \MYPROJ\HEADERS\GENERAL on the C:\ drive. 
  4204.  
  4205. If one or more nodes along the given path already exists, ignore them.  Create 
  4206. only those nodes that do not already exist.  If the given path is not fully 
  4207. qualified (for example, if it is missing a drive letter), create the nodes 
  4208. beneath the current directory. 
  4209.  
  4210.  
  4211. ΓòÉΓòÉΓòÉ <hidden> Example - WkfCreatePath ΓòÉΓòÉΓòÉ
  4212.  
  4213. The following pseudo-code illustrates how this interface could work: 
  4214.  
  4215. @@@@@ 
  4216.  
  4217.  
  4218. ΓòÉΓòÉΓòÉ 13.2.12. WkfQueryCopy ΓòÉΓòÉΓòÉ
  4219.  
  4220. WkfQueryCopy 
  4221.  
  4222. Select an item: 
  4223.  
  4224.  Function Syntax 
  4225.  Return Values 
  4226.  Notes 
  4227.  Examples 
  4228.  
  4229.  
  4230. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryCopy ΓòÉΓòÉΓòÉ
  4231.  
  4232. Write this PAM-provided function to indicate whether files can be copied into 
  4233. the current container. 
  4234.  
  4235. #define INCL_WKFPAM
  4236. #include <wkf.h>
  4237. #define WKF_PFS_QCOPY "WKFQUERYCOPY"
  4238.  
  4239. typedef APIRET APIENTRY WKF_QCOPY (
  4240.  HAM   hamOwner,    /* PAM handle */
  4241.  PSZ   pszFile,     /* Object to be copied */
  4242.  PSZ   pszTargetPath,  /* Proposed path to copy object to */
  4243.  PULONG  pulMove,     /* Indicates whether object can be moved, copied, either, or neither */
  4244.  ULONG  cbMessage,    /* Size of message buffer */
  4245.  PSZ   pszMessage    /* Pointer to message buffer */
  4246.  );
  4247.  
  4248. typedef WKF_QCOPY *PWKF_QCOPY;
  4249.  
  4250.  
  4251. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  4252.  
  4253. hamOwner (HAM) - input 
  4254.  
  4255. Project PAM handle created by the WkfQueryHAM API. 
  4256.  
  4257.  
  4258. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFile ΓòÉΓòÉΓòÉ
  4259.  
  4260. pszFile (PSZ) - input 
  4261.  
  4262. Address of the ASCIIZ buffer containing the fully qualified path of the file to 
  4263. be copied. 
  4264.  
  4265.  
  4266. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszTargetPath ΓòÉΓòÉΓòÉ
  4267.  
  4268. pszTargetPath (PSZ) - input 
  4269.  
  4270. Address of the ASCIIZ buffer containing the fully qualified target path to 
  4271. which the object identified by the pszFile field is to be copied to. 
  4272.  
  4273.  
  4274. ΓòÉΓòÉΓòÉ <hidden> Parameter - pulMove ΓòÉΓòÉΓòÉ
  4275.  
  4276. pulMove (PULONG) - output 
  4277.  
  4278. On exit, this field should contain one of the following values: 
  4279.  
  4280.  WKF_NOCOPY 
  4281.       Copy or move not allowed. 
  4282.  
  4283.  WKF_MOVEFILES 
  4284.       Only move allowed.  Copy file and delete original. 
  4285.  
  4286.  WKF_COPYFILES 
  4287.       Only copy allowed.  Original file must be kept. 
  4288.  
  4289.  WKF_CREATEFILES 
  4290.       Create file from template. 
  4291.  
  4292.  WKF_MOVEFILESREPL 
  4293.       Move file and replace duplicate at target container without checking. 
  4294.  
  4295.  WKF_COPYFILESREPL 
  4296.       Copy file and replace duplicate at target container without checking. 
  4297.  
  4298.  WKF_CREATEFILESREPL 
  4299.       Create file from template and replace duplicate at target container 
  4300.       without checking. 
  4301.  
  4302.  
  4303. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryCopy ΓòÉΓòÉΓòÉ
  4304.  
  4305. (APIRET) - return values 
  4306.  
  4307. WkfQueryCopy returns the following values: 
  4308.  
  4309.  0  NO_ERROR 
  4310.        Copy operation verified successfully. 
  4311.  
  4312.  Other 
  4313.        OS/2*-defined return code. 
  4314.  
  4315.  
  4316. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryCopy ΓòÉΓòÉΓòÉ
  4317.  
  4318. The WorkFrame/2* program calls this function to determine whether the requested 
  4319. file can be copied or moved into the project.  Typically, this interface is 
  4320. called prior to performing the actual copy or move to ensure that there is 
  4321. sufficient permission to perform such an operation. If NO_ERROR is returned, 
  4322. then it is assumed that the copy or move function can proceed. 
  4323.  
  4324. This function may be called as part of the processing of a DM_DRAGOVER OS/2* 
  4325. message across a base project container view. 
  4326.  
  4327.  
  4328. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryCopy ΓòÉΓòÉΓòÉ
  4329.  
  4330. The following pseudo-code illustrates how this interface could work: 
  4331.  
  4332. @@@@@ 
  4333.  
  4334.  
  4335. ΓòÉΓòÉΓòÉ 13.2.13. WkfCopyFile ΓòÉΓòÉΓòÉ
  4336.  
  4337. WkfCopyFile 
  4338.  
  4339. Select an item: 
  4340.  
  4341.  Function Syntax 
  4342.  Return Values 
  4343.  Notes 
  4344.  Examples 
  4345.  
  4346.  
  4347. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfCopyFile ΓòÉΓòÉΓòÉ
  4348.  
  4349. Write this PAM-provided function to copy or move a file between containers that 
  4350. use the same PAM. 
  4351.  
  4352. #define INCL_WKFPAM
  4353. #include <wkf.h>
  4354. #define WKF_PFS_COPYFILE "WKFCOPYFILE"
  4355.  
  4356. typedef APIRET APIENTRY WKF_COPYFILE (
  4357.  HAM   hamOwner,   /* PAM handle */
  4358.  PSZ   pszPathFrom,  /* Source path from which file is to be copied */
  4359.  PSZ   pszFileFrom,  /* Name of object to be copied */
  4360.  PSZ   pszPathTo,   /* Target path to which file it so be copied */
  4361.  PSZ   pszFileTo,   /* Target file name */
  4362.  ULONG  ulMove,    /* Indicates whether object is to be moved or copied */
  4363.  ULONG  cbMessage,   /* Size of message buffer */
  4364.  PSZ   pszMessage   /* Pointer to message buffer */
  4365.  );
  4366.  
  4367. typedef WKF_COPYFILE *PWKF_COPYFILE;
  4368.  
  4369.  
  4370. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  4371.  
  4372. hamOwner (HAM) - input 
  4373.  
  4374. Project PAM handle created by the WkfQueryHAM API. 
  4375.  
  4376.  
  4377. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPathFrom ΓòÉΓòÉΓòÉ
  4378.  
  4379. pszPathFrom (PSZ) - input 
  4380.  
  4381. Address of the ASCIIZ buffer that may contain the source path from which to 
  4382. copy the file identified by the pszFileFrom field. 
  4383.  
  4384. Note:  This field is not guaranteed to contain only the source path name. It 
  4385.        could be NULL (in which case pszFileFrom contains the fully-qualified 
  4386.        name of the file to be copied), or it could contain the fully-qualified 
  4387.        path name of the file to be copied (in which case pszFileFrom is NULL). 
  4388.  
  4389. Append the pszFileFrom field to this field to obtain the fully-qualified path 
  4390. name of the file to be copied. 
  4391.  
  4392.  
  4393. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFileFrom ΓòÉΓòÉΓòÉ
  4394.  
  4395. pszFileFrom (PSZ) - input 
  4396.  
  4397. Address of the ASCIIZ buffer that may contain the name of the file to be 
  4398. copied. 
  4399.  
  4400. Note:  This field is not guaranteed to contain only the source file name. It 
  4401.        could be NULL (in which case pszPathFrom contains the fully-qualified 
  4402.        name of the file to be copied), or it could contain the fully-qualified 
  4403.        path name of the file to be copied (in which case pszPathFrom is NULL). 
  4404.  
  4405. Append this field to the pszPathFrom field to obtain the fully-qualified path 
  4406. name of the file to be copied. 
  4407.  
  4408.  
  4409. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPathTo ΓòÉΓòÉΓòÉ
  4410.  
  4411. pszPathTo (PSZ) - input 
  4412.  
  4413. Address of the ASCIIZ buffer that may contain the target path to which to copy 
  4414. the file. 
  4415.  
  4416. Note:  This field is not guaranteed to contain only the target path name.  It 
  4417.        could be NULL (in which case pszFileTo contains the fully-qualified name 
  4418.        of the file to copy to), or it could contain the fully-qualified path 
  4419.        name of the file to copy to (in which case pszFileTo is NULL). 
  4420.  
  4421. Append the pszFileTo field to this field to obtain the fully-qualified path 
  4422. name of the target file to copy to. 
  4423.  
  4424.  
  4425. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFileTo ΓòÉΓòÉΓòÉ
  4426.  
  4427. pszFileTo (PSZ) - input 
  4428.  
  4429. Address of the ASCIIZ buffer that may contain the name that the file is to be 
  4430. given after it is copied to the identified by the pszPathTo destination 
  4431. container. 
  4432.  
  4433. Note:  This field is not guaranteed to contain only the unqualified target file 
  4434.        name. It could be NULL (in which case pszPathTo contains the 
  4435.        fully-qualified name of the file to copy to), or it could contain the 
  4436.        fully-qualified path name of the file to copy to (in which case 
  4437.        pszPathTo is NULL). 
  4438.  
  4439. Append this field to the pszPathTo field to obtain the fully-qualified path 
  4440. name of the target file to copy to. 
  4441.  
  4442.  
  4443. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulMove ΓòÉΓòÉΓòÉ
  4444.  
  4445. ulMove (ULONG) - input 
  4446.  
  4447. This field indicates whether the file is to be moved or copied. It can contain 
  4448. any one of the following values: 
  4449.  
  4450.  WKF_MOVEFILES 
  4451.       Move the specified file; copy file and delete original. 
  4452.  
  4453.  WKF_COPYFILES 
  4454.       Copy the specified file; keep original file. 
  4455.  
  4456.  WKF_MOVEFILESREPL 
  4457.       Move file and replace duplicate at target container without checking. 
  4458.  
  4459.  WKF_COPYFILESREPL 
  4460.       Copy file and replace duplicate at target container without checking. 
  4461.  
  4462.  
  4463. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfCopyFile ΓòÉΓòÉΓòÉ
  4464.  
  4465. (APIRET) - return values 
  4466.  
  4467. WkfCopyFile returns the following values: 
  4468.  
  4469.  0  NO_ERROR 
  4470.        Copy operation performed successfully. 
  4471.  
  4472.  Other 
  4473.        OS/2*-defined return code. 
  4474.  
  4475.  
  4476. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfCopyFile ΓòÉΓòÉΓòÉ
  4477.  
  4478. The WorkFrame/2* program calls this function to copy or move a file from one 
  4479. container (or directory) to another.  The source and target containers can 
  4480. belong to different projects, but the WorkFrame/2 program verifies that they 
  4481. use the same PAM. 
  4482.  
  4483. This function can also be called to create a file from a template, such as the 
  4484. OS/2* Data File template in the Templates folder. 
  4485.  
  4486.  
  4487. ΓòÉΓòÉΓòÉ <hidden> Example - WkfCopyFile ΓòÉΓòÉΓòÉ
  4488.  
  4489. The following pseudo-code illustrates how this interface could work: 
  4490.  
  4491. @@@@@ 
  4492.  
  4493.  
  4494. ΓòÉΓòÉΓòÉ 13.2.14. WkfDelete ΓòÉΓòÉΓòÉ
  4495.  
  4496. WkfDelete 
  4497.  
  4498. Select an item: 
  4499.  
  4500.  Function Syntax 
  4501.  Return Values 
  4502.  Notes 
  4503.  Examples 
  4504.  
  4505.  
  4506. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfDelete ΓòÉΓòÉΓòÉ
  4507.  
  4508. Write this PAM-provided function to delete a specified file. 
  4509.  
  4510. #define INCL_WKFPAM
  4511. #include <wkf.h>
  4512. #define WKF_PFS_DELETE "WKFDELETE"
  4513.  
  4514. typedef APIRET APIENTRY WKF_DELETE (
  4515.  HAM   hamOwner,  /* PAM handle */
  4516.  PSZ   pszPath,   /* Source path from which file is to be deleted */
  4517.  PSZ   pszFile,   /* Name of object to be deleted */
  4518.  ULONG  cbMessage,  /* Size of message buffer */
  4519.  PSZ   pszMessage  /* Pointer to message buffer */
  4520.  );
  4521.  
  4522. typedef WKF_DELETE *PWKF_DELETE;
  4523.  
  4524.  
  4525. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  4526.  
  4527. hamOwner (HAM) - input 
  4528.  
  4529. Project PAM handle created by the WkfQueryHAM API. 
  4530.  
  4531.  
  4532. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPath ΓòÉΓòÉΓòÉ
  4533.  
  4534. pszPath (PSZ) - input 
  4535.  
  4536. Address of the ASCIIZ buffer that may contain the container (or subdirectory) 
  4537. from which to delete the file. 
  4538.  
  4539. Note:  This field is not guaranteed to contain only the path name of the 
  4540.        directory from which the file is to be deleted. It could be NULL (in 
  4541.        which case pszFile contains the fully-qualified name of the file to be 
  4542.        deleted), or it could contain the fully-qualified path name of the file 
  4543.        to be deleted (in which case pszFile is NULL). 
  4544.  
  4545. Append the pszFile field to this field to obtain the fully-qualified path name 
  4546. of the file to be deleted. 
  4547.  
  4548.  
  4549. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFile ΓòÉΓòÉΓòÉ
  4550.  
  4551. pszFile (PSZ) - input 
  4552.  
  4553. Address of the ASCIIZ buffer that may contain the unqualified name of the file 
  4554. to be deleted. 
  4555.  
  4556. Note:  This field is not guaranteed to contain only the unqualified file name 
  4557.        of the file to be deleted.  It could be NULL (in which case pszPath 
  4558.        contains the fully-qualified name of the file to be deleted), or it 
  4559.        could contain the fully-qualified path name of the file to be deleted 
  4560.        (in which case pszPath is NULL). 
  4561.  
  4562. Append this field to the pszPath field to obtain the fully-qualified path name 
  4563. of the file to be deleted. 
  4564.  
  4565.  
  4566. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfDelete ΓòÉΓòÉΓòÉ
  4567.  
  4568. (APIRET) - return values 
  4569.  
  4570. WkfDelete returns the following values: 
  4571.  
  4572.  0  NO_ERROR 
  4573.        Deletion performed successfully. 
  4574.  
  4575.  Other 
  4576.        OS/2*-defined return code. 
  4577.  
  4578.  
  4579. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfDelete ΓòÉΓòÉΓòÉ
  4580.  
  4581. The WorkFrame/2* program calls this function to delete a specified file. 
  4582.  
  4583.  
  4584. ΓòÉΓòÉΓòÉ <hidden> Example - WkfDelete ΓòÉΓòÉΓòÉ
  4585.  
  4586. The following pseudo-code illustrates how this interface could work: 
  4587.  
  4588. @@@@@ 
  4589.  
  4590.  
  4591. ΓòÉΓòÉΓòÉ 13.2.15. WkfDefaultName ΓòÉΓòÉΓòÉ
  4592.  
  4593. WkfDefaultName 
  4594.  
  4595. Select an item: 
  4596.  
  4597.  Function Syntax 
  4598.  Return Values 
  4599.  Notes 
  4600.  Examples 
  4601.  
  4602.  
  4603. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfDefaultName ΓòÉΓòÉΓòÉ
  4604.  
  4605. Write this PAM-provided function to return the default make file or target file 
  4606. name. 
  4607.  
  4608. #define INCL_WKFPAM
  4609. #include <wkf.h>
  4610. #define WKF_PFS_DEFAULTNAME "WKFDEFAULTNAME"
  4611.  
  4612. typedef APIRET APIENTRY WKF_DEFAULTNAME (
  4613.  HAM   hamOwner,    /* PAM handle */
  4614.  PSZ   pszPrjFileName, /* Project file name */
  4615.  ULONG  ulRequestFlag,  /* Indicates which default name to return */
  4616.  ULONG  cbDefault,    /* Size of pszDefault buffer */
  4617.  PSZ   pszDefault,   /* Address of buffer to contain default name requested */
  4618.  ULONG  cbMessage,    /* Size of message buffer */
  4619.  PSZ   pszMessage    /* Pointer to message buffer */
  4620.  );
  4621.  
  4622. typedef WKF_DEFAULTNAME *PWKF_DEFAULTNAME;
  4623.  
  4624.  
  4625. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  4626.  
  4627. hamOwner (HAM) - input 
  4628.  
  4629. Project PAM handle created by the WkfQueryHAM API. 
  4630.  
  4631.  
  4632. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPrjFileName ΓòÉΓòÉΓòÉ
  4633.  
  4634. pszProjectFileName (PSZ) - input 
  4635.  
  4636. Address of the ASCIIZ buffer containing the project file name associated with 
  4637. the HAM value specified by the hamOwner field. 
  4638.  
  4639.  
  4640. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulRequestFlag ΓòÉΓòÉΓòÉ
  4641.  
  4642. ulRequestFlag (ULONG) - input 
  4643.  
  4644. This field indicates which default file name to return.  It can any one of the 
  4645. following values: 
  4646.  
  4647.  WKF_DNAME_MAKE 
  4648.       Return the default makefile name in the pszDefault field. 
  4649.  
  4650.  WKF_DNAME_TARGET 
  4651.       Return the default target file name in the pszDefault field. 
  4652.  
  4653.  
  4654. ΓòÉΓòÉΓòÉ <hidden> Parameter - cbDefault ΓòÉΓòÉΓòÉ
  4655.  
  4656. cbDefault (ULONG) - input 
  4657.  
  4658. This pointer contains the number of bytes allocated for the pszDefault buffer, 
  4659. and thus represents its maximum allowed size. 
  4660.  
  4661.  
  4662. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszDefault ΓòÉΓòÉΓòÉ
  4663.  
  4664. pszDefault (PSZ) - output 
  4665.  
  4666. On exit, this buffer should contain the default makefile name if the 
  4667. ulRequestFlag is set to WKF_DNAME_MAKE.  If ulRequestFlag is set to 
  4668. WKF_DNAME_TARGET, this buffer should contain the default target name. 
  4669.  
  4670.  
  4671. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfDefaultName ΓòÉΓòÉΓòÉ
  4672.  
  4673. (APIRET) - return values 
  4674.  
  4675. WkfDefaultName returns the following values: 
  4676.  
  4677.  0  NO_ERROR 
  4678.        Default name returned with no error. 
  4679.  
  4680.  Other 
  4681.        OS/2*-defined return code. 
  4682.  
  4683.  
  4684. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfDefaultName ΓòÉΓòÉΓòÉ
  4685.  
  4686. The WorkFrame/2* program calls this function to determine the default makefile 
  4687. name or the default target file name for the project identified by the 
  4688. pszPrjFileName field. The ulRequestFlag field indicates which default file name 
  4689. to return. 
  4690.  
  4691. For example, the make file and target file names could be obtained from the 
  4692. project name.  For example, if the project name is "Hello World", the default 
  4693. make file name could be "HELLOWOR.MAK", and the default target file name could 
  4694. be "HELLOWOR.EXE". 
  4695.  
  4696.  
  4697. ΓòÉΓòÉΓòÉ <hidden> Example - WkfDefaultName ΓòÉΓòÉΓòÉ
  4698.  
  4699. The following pseudo-code illustrates how this interface could work: 
  4700.  
  4701. @@@@@@ 
  4702.  
  4703.  
  4704. ΓòÉΓòÉΓòÉ 13.2.16. WkfQueryRunnable ΓòÉΓòÉΓòÉ
  4705.  
  4706. WkfQueryRunnable 
  4707.  
  4708. Select an item: 
  4709.  
  4710.  Function Syntax 
  4711.  Return Values 
  4712.  Notes 
  4713.  Examples 
  4714.  
  4715.  
  4716. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryRunnable ΓòÉΓòÉΓòÉ
  4717.  
  4718. Write this PAM-provided function to indicate whether or not a given file is a 
  4719. valid executable. 
  4720.  
  4721. #define INCL_WKFPAM
  4722. #include <wkf.h>
  4723. #define WKF_PFS_QRUNNABLE "WKFQUERYRUNNABLE"
  4724.  
  4725. typedef BOOL APIENTRY WKF_QRUNNABLE (
  4726.  HAM  hamOwner,    /* PAM handle */
  4727.  PSZ  pszContainer,  /* Source path of file to verify */
  4728.  PSZ  pszFilename   /* Name of file to verify */
  4729.  );
  4730.  
  4731. typedef WKF_QRUNNABLE *PWKF_QRUNNABLE;
  4732.  
  4733.  
  4734. ΓòÉΓòÉΓòÉ <hidden> Parameter - hamOwner ΓòÉΓòÉΓòÉ
  4735.  
  4736. hamOwner (HAM) - input 
  4737.  
  4738. Project PAM handle created by the WkfQueryHAM API. 
  4739.  
  4740.  
  4741. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszContainer ΓòÉΓòÉΓòÉ
  4742.  
  4743. pszContainer (PSZ) - input 
  4744.  
  4745. Address of the ASCIIZ buffer that may contain the path containing the file to 
  4746. be verified. 
  4747.  
  4748. Note:  This field is not guaranteed to contain only the path name of the 
  4749.        directory of the file to be verified.  It could be NULL (in which case 
  4750.        pszFilename contains the fully-qualified name of the file to be 
  4751.        verified), or it could contain the fully-qualified path name of the file 
  4752.        to be verified (in which case pszFilename is NULL). 
  4753.  
  4754. Append the pszFilename field to this one to obtain the fully-qualified path 
  4755. name of the file to be verified. 
  4756.  
  4757.  
  4758. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFilename ΓòÉΓòÉΓòÉ
  4759.  
  4760. pszFilename (PSZ) - input 
  4761.  
  4762. Address of the ASCIIZ buffer that may contain the name of the file to be 
  4763. verified. 
  4764.  
  4765. Note:  This field is not guaranteed to contain only the unqualified name of the 
  4766.        file to be verified.  It could be NULL (in which case pszContainer 
  4767.        contains the fully-qualified name of the file to be verified), or it 
  4768.        could contain the fully-qualified path name of the file to be verified 
  4769.        (in which case pszContainer is NULL). 
  4770.  
  4771. Append the this field to the pszCOntainer field to obtain the fully-qualified 
  4772. path name of the file to be verified. 
  4773.  
  4774.  
  4775. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryRunnable ΓòÉΓòÉΓòÉ
  4776.  
  4777. (BOOL) - return values 
  4778.  
  4779. WkfQueryRunnable returns the following values: 
  4780.  
  4781.  TRUE 
  4782.        Specified file is a valid executable. 
  4783.  
  4784.  FALSE 
  4785.        Specified file is not a valid executable and cannot be run. 
  4786.  
  4787.  
  4788. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryRunnable ΓòÉΓòÉΓòÉ
  4789.  
  4790. The WorkFrame/2* program calls this function to determine whether a file is a 
  4791. valid executable in the file system this PAM provides access to. 
  4792.  
  4793. For example, in the OS/2* system, files ending with the extensions .BAT, .CMD, 
  4794. .EXE, and .BAT are runnable.  Files ending with the extensions .DLL and .OBJ 
  4795. are not. 
  4796.  
  4797.  
  4798. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryRunnable ΓòÉΓòÉΓòÉ
  4799.  
  4800. The following pseudo-code illustrates how this interface could work: 
  4801.  
  4802. @@@@@@ 
  4803.  
  4804.  
  4805. ΓòÉΓòÉΓòÉ 14. Projects ΓòÉΓòÉΓòÉ
  4806.  
  4807. This section discusses: 
  4808.  
  4809.   1. The use of OS/2* APIs to create, set, and query project objects 
  4810.  
  4811.   2. The WorkFrame/2-provided functions that facilitate reading and writing to 
  4812.      a base project file. 
  4813.  
  4814.  
  4815. ΓòÉΓòÉΓòÉ 14.1. Using the Project APIs ΓòÉΓòÉΓòÉ
  4816.  
  4817. The WorkFrame/2* project interfaces facilitate reading and writing to a base 
  4818. project file.  Currently there are no such interfaces for composite projects. 
  4819. Composite project settings can only be queried and changed through OS/2* APIs. 
  4820.  
  4821. Composite and base project objects are created, set, and deleted using the 
  4822. OS/2* APIs WinCreateObject, WinSetObjectData, and WinDestroyObject. See 
  4823. Managing Project Objects for more information. 
  4824.  
  4825. Call the WkfOpenProjectFile interface before using any of the other project 
  4826. file APIs.  This interface prepares the project file for writing or querying. 
  4827.  
  4828. The base project file contains two kinds of information: 
  4829.  
  4830.   1. Public information that is common to all projects.  This information is 
  4831.      present in the base project's Settings notebook and can be set using the 
  4832.      WinSetObjectData OS/2* API, and read using the WkfReadProject interface. 
  4833.  
  4834.   2. Private, tool-specific information.  The WkfWriteProjectData and 
  4835.      WkfQueryProjectData interfaces enable tools to store and retrieve 
  4836.      project-related information specific to a tool. 
  4837.  
  4838.      Access to tool-specific project file data is provided using a two-level 
  4839.      key framework.  A single piece of data is indexed on two keys, an 
  4840.      application name key and a data key.  Thus, any piece of project data can 
  4841.      be accessed using the key-name pair, <application name, data name>. 
  4842.  
  4843.      Application and data key names are arbitrary strings chosen by the tool 
  4844.      integrator.  When choosing key names for project data, follow these 
  4845.      guidelines: 
  4846.  
  4847.     o The application and data key names should not start with the prefixes 
  4848.       DDE3, WKF, or PM_ as these are reserved for WorkFrame/2 and OS/2 system 
  4849.       data. 
  4850.  
  4851.     o Choose the application name to uniquely identify the tool that owns the 
  4852.       data.  To minimize the chances of another tool using the same key name, 
  4853.       the application name should include a unique company identifier, the tool 
  4854.       name, and perhaps the tool's version number.  For example, IBM_CSET_V2 
  4855.       could identify the IBM* C Set ++ Version 2.0 product. 
  4856.  
  4857.     o The application and data key names should not be longer than CCHMAXPATH. 
  4858.  
  4859.     o The application key name should also be specified in upper-case when 
  4860.       querying project data since it is automatically converted to upper-case 
  4861.       before being written to the project file. 
  4862.  
  4863.  
  4864. ΓòÉΓòÉΓòÉ 14.2. Managing Project Objects ΓòÉΓòÉΓòÉ
  4865.  
  4866. This section discusses the use of the OS/2* APIs WinCreateObject, 
  4867. WinSetObjectData, and WinDestroyObject to create and delete WorkFrame/2* 
  4868. project desktop objects. 
  4869.  
  4870. These topics are covered: 
  4871.  
  4872.  o Creating projects 
  4873.  o Setting project data 
  4874.  o Deleting projects. 
  4875.  
  4876.  Note:  Any operations performed on WorkFrame/2* objects (such as projects and 
  4877.         actions profiles) that are not accomplished using the WorkFrame/2 
  4878.         integration APIs, are not guaranteed to be compatible in future 
  4879.         versions of WorkFrame/2.  APIs to set, create, and delete projects will 
  4880.         be made available in future versions.  See the Copyright Notice for 
  4881.         more information. 
  4882.  
  4883.  
  4884. ΓòÉΓòÉΓòÉ 14.2.1. Creating Projects ΓòÉΓòÉΓòÉ
  4885.  
  4886. WorkFrame/2* Version 2.1 base and composite project objects are created using 
  4887. the WinCreateObject OS/2* API.  This section covers the following topics: 
  4888.  
  4889.   1. Creating a base project 
  4890.   2. Creating a composite project. 
  4891.  
  4892.  
  4893. ΓòÉΓòÉΓòÉ 14.2.1.1. Creating a Base Project ΓòÉΓòÉΓòÉ
  4894.  
  4895. To create a base project, call WinCreateObject specifying "DDE3Project" for the 
  4896. object's SOM class, and the correct keyname-value pairs in the setup string. 
  4897.  
  4898. Following is an example of how to create a base project: 
  4899.  
  4900. hProject = WinCreateObject ( "DDE3Project",       /* Base project class name */
  4901.                "Sample Base Project",   /* Base project title */
  4902.                pszSetupString,      /* Setup string */
  4903.                "C:\\Desktop\\Projects",  /* Create object in this folder */
  4904.                CO_REPLACEIFEXISTS);    /* Creation flags */
  4905.  
  4906. The above call to WinCreateObject creates a base project with the title "Sample 
  4907. Base Project", in the folder called "Projects". The creation flag indicates 
  4908. that the base project should be replaced if it already exists.  The project's 
  4909. object handle is returned. 
  4910.  
  4911. If you wanted to create the project in the WorkFrame/2 Samples folder, you 
  4912. could have specified its persistent object ID <WKF_COMPPROJ> as the fourth 
  4913. parameter of WinCreateObject See Persistent Object IDs for a list of 
  4914. WorkFrame/2 object IDs. 
  4915.  
  4916. The required setup string consists of a series ofkeyname-value pairs, defined 
  4917. for the class, that initialize the object.  Keynames are separated by 
  4918. semicolons, and values are separated by commas, as in: 
  4919.  
  4920. "key=value; key2=value1,value2;" 
  4921.  
  4922. For example, you could build a base project set up string like this: 
  4923.  
  4924. pszSrcDirs = "C:\\TOOL\nC:\\UTILS";
  4925. pszProfile = "C:\\DESKTOP\\IBMWFV21\\ACTIONSP\\SAMPLEAC.PRF";
  4926.  
  4927. j = sprintf (pszSetupString, WKF_PJIOKEY_DIR"=%s;"WKF_PJIOKEY_PROFILE"=%s", pszSrcDirs, pszProfile);
  4928.  
  4929. The following table shows the keyname-value pairs supported by the 
  4930. "DDE3Project" class: 
  4931.  
  4932. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4933. ΓöéKeyname (string constant)ΓöéValue (string constant or        ΓöéDescription                                 Γöé
  4934. Γöé                         Γöéliteral)                         Γöé                                            Γöé
  4935. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4936. ΓöéWKF_PJIOKEY_DIR          ΓöéList of project directory path   ΓöéThis sets the project directories, and is   Γöé
  4937. Γöé                         Γöénames, each separated by a       Γöéequivalent to specifying the project        Γöé
  4938. Γöé                         Γöénewline (\n) character.          Γöédirectories in the Source page of the       Γöé
  4939. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  4940. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4941. ΓöéWKF_PJIOKEY_EXECACTION   ΓöéAction class name                ΓöéThis sets the default open behavior for     Γöé
  4942. Γöé                         Γöé                                 Γöéexecutable files, and is equivalent to      Γöé
  4943. Γöé                         Γöé                                 Γöéspecifying it on the Actions pages of the   Γöé
  4944. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  4945. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4946. ΓöéWKF_PJIOKEY_FILEMENU     ΓöéWKF_PJIOMENU_SHORT               ΓöéThis sets the project's file-scoped actions Γöé
  4947. Γöé                         Γöé                                 Γöémenu to include only the actions that belongΓöé
  4948. Γöé                         Γöé                                 Γöéon a Regular menu.  This is equivalent to   Γöé
  4949. Γöé                         Γöé                                 Γöéselecting the Regular menu type option on   Γöé
  4950. Γöé                         Γöé                                 Γöéthe file-scoped Actions page of the         Γöé
  4951. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  4952. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4953. Γöé                         ΓöéWKF_PJIOMENU_DETAILED            ΓöéThis sets the project's file-scoped actions Γöé
  4954. Γöé                         Γöé                                 Γöémenu to include only the actions that belongΓöé
  4955. Γöé                         Γöé                                 Γöéon an Extended menu.                        Γöé
  4956. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4957. ΓöéWKF_PJIOKEY_MAKEFILE     ΓöéDefault make file name           ΓöéThis sets the default make file name that isΓöé
  4958. Γöé                         Γöé                                 Γöéused when an action of the MAKE class is    Γöé
  4959. Γöé                         Γöé                                 Γöéinvoked on the project or its parts.  This  Γöé
  4960. Γöé                         Γöé                                 Γöéis equivalent to specifying the make file   Γöé
  4961. Γöé                         Γöé                                 Γöéname on the Target page of the project's    Γöé
  4962. Γöé                         Γöé                                 ΓöéSettings notebook.                          Γöé
  4963. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4964. ΓöéWKF_PJIOKEY_MASK         ΓöéList of file masks, each         ΓöéThis sets the file masks for the project,   Γöé
  4965. Γöé                         Γöéseparated by a newline (\n)      Γöéand is equivalent to specifying the file    Γöé
  4966. Γöé                         Γöécharacter.                       Γöémasks on the Source page of the project's   Γöé
  4967. Γöé                         Γöé                                 ΓöéSettings notebook.                          Γöé
  4968. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4969. ΓöéWKF_PJIOKEY_MONITOR      ΓöéWKF_PJIOMON_AUTOCLOSE            ΓöéThis sets the Monitor window to close itselfΓöé
  4970. Γöé                         Γöé                                 Γöéif the associated action ends with a return Γöé
  4971. Γöé                         Γöé                                 Γöécode of zero.  This is equivalent to        Γöé
  4972. Γöé                         Γöé                                 Γöéselecting the Multiple concurrent monitors  Γöé
  4973. Γöé                         Γöé                                 Γöéoption on the Monitor page of the base      Γöé
  4974. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  4975. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4976. Γöé                         ΓöéWKF_PJIOMON_MINIMIZE             ΓöéThis sets the Monitor window to start       Γöé
  4977. Γöé                         Γöé                                 Γöéactions for the project in a minimized      Γöé
  4978. Γöé                         Γöé                                 Γöéstate.                                      Γöé
  4979. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4980. Γöé                         ΓöéWKF_PJIOMON_NOMULTIPLE           ΓöéThis resets the Monitor window to run       Γöé
  4981. Γöé                         Γöé                                 Γöéactions for the project one after another,  Γöé
  4982. Γöé                         Γöé                                 Γöéinstead of in multiple, concurrent Monitor  Γöé
  4983. Γöé                         Γöé                                 Γöéwindows.                                    Γöé
  4984. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4985. ΓöéWKF_PJIOKEY_OPENACTION   ΓöéAction class name                ΓöéThis sets the default open behavior for     Γöé
  4986. Γöé                         Γöé                                 Γöénon-executable files, and is is equivalent  Γöé
  4987. Γöé                         Γöé                                 Γöéto specifying it on the Actions pages of theΓöé
  4988. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  4989. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4990. ΓöéWKF_PJIOKEY_PAM          ΓöéProject access method            ΓöéThis sets the project access method, and is Γöé
  4991. Γöé                         Γöé                                 Γöéequivalent to specifying the PAM in the     Γöé
  4992. Γöé                         Γöé                                 ΓöéAccess page of the project's Settings       Γöé
  4993. Γöé                         Γöé                                 Γöénotebook.                                   Γöé
  4994. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4995. ΓöéWKF_PJIOKEY_PATHNAME_ADDRΓöéAddress of an allocated          ΓöéOn a successful return from a call to       Γöé
  4996. Γöé                         Γöéshared-memory buffer to hold the ΓöéWinCreateObject to create the project, the  Γöé
  4997. Γöé                         Γöéreturned project file name.      Γöébuffer is updated to contain the            Γöé
  4998. Γöé                         Γöé                                 Γöéfully-qualified project file name.  You willΓöé
  4999. Γöé                         Γöé                                 Γöéneed the project filename to store          Γöé
  5000. Γöé                         Γöé                                 Γöétool-specific data in the project file (see Γöé
  5001. Γöé                         Γöé                                 ΓöéWkfWriteProjectData for more information).  Γöé
  5002. Γöé                         Γöé                                 ΓöéThe buffer needs to be allocated using      Γöé
  5003. Γöé                         Γöé                                 ΓöéDosAllocSharedMem, with a size of CCHMAXPATHΓöé
  5004. Γöé                         Γöé                                 Γöéand the following flags set: PAG_COMMIT |   Γöé
  5005. Γöé                         Γöé                                 ΓöéOBJ_GETTABLE | PAG_READ | PAG_WRITE         Γöé
  5006. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5007. ΓöéWKF_PJIOKEY_PROFILE      ΓöéFully qualified file name of an  ΓöéThis sets the actions profile to use for theΓöé
  5008. Γöé                         Γöéactions profile, upper-cased.    Γöéproject.  This is equivalent to specifying  Γöé
  5009. Γöé                         Γöé                                 Γöéthe profile in the Profile page of the      Γöé
  5010. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  5011. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5012. ΓöéWKF_PJIOKEY_PROJECTMENU  ΓöéWKF_PJIOMENU_SHORT               ΓöéThis sets the project's project-scoped      Γöé
  5013. Γöé                         Γöé                                 Γöéactions menu to include only the actions    Γöé
  5014. Γöé                         Γöé                                 Γöéthat belong on a Regular menu.  This is     Γöé
  5015. Γöé                         Γöé                                 Γöéequivalent to selecting the Regular menu    Γöé
  5016. Γöé                         Γöé                                 Γöétype option on the project-scoped Actions   Γöé
  5017. Γöé                         Γöé                                 Γöépage of the project's Settings notebook.    Γöé
  5018. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5019. Γöé                         ΓöéWKF_PJIOMENU_DETAILED            ΓöéThis sets the project's project-scoped      Γöé
  5020. Γöé                         Γöé                                 Γöéactions menu to include only the actions    Γöé
  5021. Γöé                         Γöé                                 Γöéthat belong on an Extended menu.            Γöé
  5022. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5023. ΓöéWKF_PJIOKEY_TARGETNAME   ΓöéTarget program file name         ΓöéThis sets the target program file name, and Γöé
  5024. Γöé                         Γöé                                 Γöéis equivalent to specifying it in the TargetΓöé
  5025. Γöé                         Γöé                                 Γöépage of the project's Settings notebook.    Γöé
  5026. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5027. ΓöéWKF_PJIOKEY_TARGETPARM   ΓöéTarget program parameters        ΓöéThis sets the target program parameters to  Γöé
  5028. Γöé                         Γöé                                 Γöérun the target program with when it is      Γöé
  5029. Γöé                         Γöé                                 Γöéinvoked.  This is equivalent to specifying  Γöé
  5030. Γöé                         Γöé                                 Γöéthe parameters in the Target page of the    Γöé
  5031. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  5032. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5033. ΓöéWKF_PJIOKEY_TARGETPATH   ΓöéWorking directory                ΓöéThis sets the working directory for the     Γöé
  5034. Γöé                         Γöé                                 Γöéproject.  This directory is used (1) to     Γöé
  5035. Γöé                         Γöé                                 Γöéstore the make file created by MakeMake, (2)Γöé
  5036. Γöé                         Γöé                                 Γöéto store files copied from other Workplace  Γöé
  5037. Γöé                         Γöé                                 ΓöéShell objects, and (3) as the current       Γöé
  5038. Γöé                         Γöé                                 Γöédirectory when actions are selected on      Γöé
  5039. Γöé                         Γöé                                 Γöébehalf of the project or any of its parts.  Γöé
  5040. Γöé                         Γöé                                 ΓöéThis is equivalent to specifying the workingΓöé
  5041. Γöé                         Γöé                                 Γöédirectory in the Target page of the         Γöé
  5042. Γöé                         Γöé                                 Γöéproject's Settings notebook.                Γöé
  5043. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5044. ΓöéWKF_PJIOKEY_TARGETPROMPT ΓöéWKF_PJIOVALUE_TRUE               ΓöéThis sets the project to display a prompt   Γöé
  5045. Γöé                         Γöé                                 Γöéfor entering parameters when its target     Γöé
  5046. Γöé                         Γöé                                 Γöéprogram is run.  This is equivalent to      Γöé
  5047. Γöé                         Γöé                                 Γöéselecting the Prompt required checkbox on   Γöé
  5048. Γöé                         Γöé                                 Γöéthe Target page of the project's Settings   Γöé
  5049. Γöé                         Γöé                                 Γöénotebook.                                   Γöé
  5050. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5051. Γöé                         ΓöéWKF_PJIOVALUE_FALSE              ΓöéThis resets the prompt required flag for theΓöé
  5052. Γöé                         Γöé                                 Γöéproject's target program.                   Γöé
  5053. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5054. ΓöéWKF_PJIOKEY_TARGETTYPE   ΓöéWKF_PJIOPROG_WINDOW              ΓöéThis sets the target program to run in a    Γöé
  5055. Γöé                         Γöé                                 Γöéwindowed (vio) session, and is equivalent toΓöé
  5056. Γöé                         Γöé                                 Γöésetting the run mode to Window on the TargetΓöé
  5057. Γöé                         Γöé                                 Γöépage of the project's Settings notebook.    Γöé
  5058. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5059. Γöé                         ΓöéWKF_PJIOPROG_MONITOR             ΓöéThis sets the target program to run in a    Γöé
  5060. Γöé                         Γöé                                 ΓöéWorkFrame/2 Monitor window.                 Γöé
  5061. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5062. Γöé                         ΓöéWKF_PJIOPROG_FULLSCREEN          ΓöéThis sets the target program to run in a    Γöé
  5063. Γöé                         Γöé                                 Γöéfull screen session.                        Γöé
  5064. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5065.  
  5066. Notes 
  5067.  
  5068.   1. All keynames, except for that represented by WKF_PJIOKEY_DIR, have safe 
  5069.      default values so it is never required to include all the possible 
  5070.      keyname-value pairs in the setup string. 
  5071.  
  5072.   2. The project creator is responsible for keeping track of the project file 
  5073.      name, as it is a required parameter for the base project APIs. 
  5074.  
  5075.   3. Since the "DDE3Project" class is subclassed from the "WPFileSystem" 
  5076.      Workplace Shell class, keyname=values pairs defined for "WPFileSystem" are 
  5077.      also valid for "DDE3Project".  See the online PM Reference from IBM* 
  5078.      Developer's Toolkit for more information on Workplace Shell classes and 
  5079.      the WinCreateObject API. 
  5080.  
  5081.  
  5082. ΓòÉΓòÉΓòÉ 14.2.1.2. Creating a Composite Project ΓòÉΓòÉΓòÉ
  5083.  
  5084. To create a composite project, call WinCreateObject specifying "DDE3Folder" for 
  5085. the object's SOM class, and the correct keyname-value pairs in the setup 
  5086. string. 
  5087.  
  5088. Following is an example of how to create a composite project: 
  5089.  
  5090. hCompositePrj = WinCreateObject ("DDE3Folder",         /* Composite project class Name */
  5091.                  "Sample Composite Project",  /* Composite project title */
  5092.                  pszSetupString,        /* Setup string */
  5093.                  <WKF_COMPPROJ>,        /* Create object in WF Samples folder*/
  5094.                  CO_REPLACEIFEXISTS);     /* Creation flags */
  5095.  
  5096. The above call to WinCreateObject creates a base project with the title "Sample 
  5097. Composite Project" in the WorkFrame/2 Samples folder. The project's object 
  5098. handle is returned. 
  5099.  
  5100. Since the "DDE3Folder" class is subclassed from "WPFolder", it inherits the 
  5101. defined setup string keyname-value pairs from "WPFolder", and adds two of its 
  5102. own: 
  5103.  
  5104. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5105. ΓöéKeyname (string       ΓöéValue                                   ΓöéDescription                             Γöé
  5106. Γöéconstant)             Γöé                                        Γöé                                        Γöé
  5107. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5108. ΓöéWKF_PRJF_SEQUENCE     ΓöéList of project titles, each separated  ΓöéThis sets the composite project's       Γöé
  5109. Γöé                      Γöéby a newline (\n) character. For        Γöéproject sequence, which determines the  Γöé
  5110. Γöé                      Γöéexample:                                Γöésequence in which an action that is     Γöé
  5111. Γöé                      Γöé"My Project\nMy Utilities"              Γöéinvoked on the composite project is     Γöé
  5112. Γöé                      Γöé                                        Γöéapplied to each sub-project.  This is   Γöé
  5113. Γöé                      Γöé                                        Γöéequivalent to specifying the project    Γöé
  5114. Γöé                      Γöé                                        Γöésequence on the Sequence page of the    Γöé
  5115. Γöé                      Γöé                                        Γöécomposite project's Settings notebook.  Γöé
  5116. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5117. ΓöéWKF_PRJF_TARGET       ΓöéTarget project title.  For example:     ΓöéThis sets the composite project's targetΓöé
  5118. Γöé                      Γöé"My Very Own Project"                   Γöéproject.  The target project specifies  Γöé
  5119. Γöé                      Γöé                                        Γöé(1) the project to which files are      Γöé
  5120. Γöé                      Γöé                                        Γöécopied or moved to, and (2) the project Γöé
  5121. Γöé                      Γöé                                        Γöéthat contains the executable file to be Γöé
  5122. Γöé                      Γöé                                        Γöéstarted when Open  Target project is   Γöé
  5123. Γöé                      Γöé                                        Γöéselected from the composite project's   Γöé
  5124. Γöé                      Γöé                                        Γöésystem menu.  This is equivalent to     Γöé
  5125. Γöé                      Γöé                                        Γöéspecifying the target project on the    Γöé
  5126. Γöé                      Γöé                                        ΓöéTarget page of the composite project's  Γöé
  5127. Γöé                      Γöé                                        ΓöéSetting's notebook.                     Γöé
  5128. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5129.  
  5130. See the online PM Reference from IBM* Developer's Toolkit for more information 
  5131. on the "DDE3Folder" Workplace Shell class and the WinCreateObject API. 
  5132.  
  5133.  
  5134. ΓòÉΓòÉΓòÉ 14.2.2. Setting and Querying Project Data ΓòÉΓòÉΓòÉ
  5135.  
  5136. Base Projects 
  5137.  
  5138. There are two kinds of data stored in a base project file: 
  5139.  
  5140.   1. Public data that is common to all base projects, such as source 
  5141.      directories, masks, and project access method. 
  5142.  
  5143.      You can retrieve public base project data with the WkfReadProject API. 
  5144.  
  5145.      Set public project data by invoking the WinSetObjectData OS/2* API with 
  5146.      the project handle returned by WinCreateObject when the object was 
  5147.      created, or the project handle obtained via WinQueryObject. 
  5148.      WinSetObjectData expects a setup string containing the keyword-value pairs 
  5149.      that you want to change. 
  5150.  
  5151.      For example, to change the actions profile for a base project, you might 
  5152.      issue this function call: 
  5153.  
  5154.           pszProfile = "C:\\DESKTOP\\MYFOLDER\\MYPROFIL.PRF";
  5155.           j = sprintf (pszSetupString, WKF_PJIOKEY_PROFILE"=%s", pszProfile);
  5156.  
  5157.           fSuccess = WinSetObjectData (hProject,     /* Project handle from WinCreateObject or WinQueryObject */
  5158.                          pszSetupString); /* Setup string */
  5159.  
  5160.   2. Project data that is private to a tool. 
  5161.  
  5162.      This data is stored and retrieved using the WkfWriteProjectData and 
  5163.      WkfQueryProjectData APIs. 
  5164.  
  5165.  
  5166.  Composite Projects 
  5167.  
  5168.  Composite projects have public data as well, (namely, target project and 
  5169.  project sequence), but they cannot contain tool-specific data. Composite 
  5170.  project data is set using the WinSetObjectData OS/2* API, as with base 
  5171.  projects.  Currently, there is no means to query composite project data. 
  5172.  
  5173.  The notion of a composite project will not be supported in future releases of 
  5174.  WorkFrame/2  See the Copyright Notice for more information. 
  5175.  
  5176.  See the online PM Reference from IBM* Developer's Toolkit for more information 
  5177.  on OS/2 APIs and Workplace Shell methods. 
  5178.  
  5179.  
  5180. ΓòÉΓòÉΓòÉ 14.2.3. Deleting Projects ΓòÉΓòÉΓòÉ
  5181.  
  5182. Both base and composite projects can be permanently deleted using the OS/2* 
  5183. WinDestroyObject API.  For example: 
  5184.  
  5185. fSuccess = WinDestroyObject (hProject);  /* Project's object handle */
  5186.  
  5187. See the online PM Reference from IBM* Developer's Toolkit for more information 
  5188. on the WinDestroyObject API. 
  5189.  
  5190.  
  5191. ΓòÉΓòÉΓòÉ 14.3. Base Project APIs ΓòÉΓòÉΓòÉ
  5192.  
  5193. This section describes the WorkFrame/2*-supplied functions for querying and 
  5194. setting base project information. 
  5195.  
  5196. The function prototypes and message definitions for the router APIs are in the 
  5197. WKFPRJ.H C header file. 
  5198.  
  5199.  
  5200. ΓòÉΓòÉΓòÉ 14.3.1. WkfOpenProjectFile ΓòÉΓòÉΓòÉ
  5201.  
  5202. WkfOpenProjectFile 
  5203.  
  5204. Select an item: 
  5205.  
  5206.  Function Syntax 
  5207.  Return Values 
  5208.  Notes 
  5209.  Examples 
  5210.  
  5211.  
  5212. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfOpenProjectFile ΓòÉΓòÉΓòÉ
  5213.  
  5214. This WorkFrame/2*-provided function opens a base project file for read or write 
  5215. access. 
  5216.  
  5217. #define INCL_WKFPRJ
  5218. #include <wkf.h>
  5219.  
  5220. LHANDLE APIENTRY WkfOpenProjectFile (
  5221.    HAB    hab,      /* Caller's anchor block handle */
  5222.    PSZ    pszFileName,  /* Project's fully qualified file name */
  5223.    ULONG   ulMode     /* Access and share modes */
  5224.    );
  5225.  
  5226.  
  5227. ΓòÉΓòÉΓòÉ <hidden> Parameter - hab ΓòÉΓòÉΓòÉ
  5228.  
  5229. hab (HAB) - input 
  5230.  
  5231. The caller's anchor block handle (optional).  If a NULLHANDLE is passed, then 
  5232. the desktop's anchor block is used. 
  5233.  
  5234.  
  5235. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFileName ΓòÉΓòÉΓòÉ
  5236.  
  5237. pszFileName (PSZ) - input 
  5238.  
  5239. The fully qualified name of the project file to open. 
  5240.  
  5241. If the project file does not exist, it will be created.  Ensure that the 
  5242. project file is correctly associated with the intended project object. See 
  5243. Setting and Querying Project Data for more information. 
  5244.  
  5245.  
  5246. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulMode ΓòÉΓòÉΓòÉ
  5247.  
  5248. ulMode (ULONG) - input 
  5249.  
  5250. Access and share modes.  This field us currently ignored in WorkFrame/2* 
  5251. version 2.x, however, it is recommended that these modes be set for future 
  5252. compatibility. 
  5253.  
  5254. Set this field to one or more of the following flags combined using the 
  5255. bitwise-OR (|) operator: 
  5256.  
  5257.  WKF_ACCESS_READ 
  5258.       Open project file with read-only access 
  5259.  
  5260.  WKF_ACCESS_ALL 
  5261.       Open project file with read and write access 
  5262.  
  5263.  WKF_SHARE_DENYNONE 
  5264.       Allow others to open project file while caller has access 
  5265.  
  5266.  WKF_SHARE_DENYWRITE 
  5267.       Allow only read access to others while caller has access 
  5268.  
  5269.  WKF_SHARE_DENYALL 
  5270.       Request exclusive access to project file. 
  5271.  
  5272.  
  5273. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfOpenProjectFile ΓòÉΓòÉΓòÉ
  5274.  
  5275. (LHANDLE) - return values 
  5276.  
  5277. WkfOpenProjectFile returns the following values: 
  5278.  
  5279.  NULLHANDLE 
  5280.        Unable to open project file.  The specified project file may already be 
  5281.        accessed by another process, or there may not be enough disk space. 
  5282.  
  5283.  Other 
  5284.        Project file successfully opened.  Project handle is returned. Use this 
  5285.        handle to close the project using WkfCloseProjectFile. 
  5286.  
  5287.  
  5288. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfOpenProjectFile ΓòÉΓòÉΓòÉ
  5289.  
  5290. This WorkFrame/2-provided function opens a project file for read or write 
  5291. access.  It must be called before any other project interface. 
  5292.  
  5293. This function returns a project handle that uniquely identifies the caller's 
  5294. access to the project file.  The project handle is required as input to other 
  5295. project APIs, such as WkfCloseProjectFile. 
  5296.  
  5297.  
  5298. ΓòÉΓòÉΓòÉ <hidden> Example - WkfOpenProjectFile ΓòÉΓòÉΓòÉ
  5299.  
  5300. The following pseudo-code illustrates how this interface could be used: 
  5301.  
  5302. /* Open project file for reading */
  5303.  
  5304. pszPrjFilename = "C:\\DESKTOP\\PROJECTS\\MY PROJECT";
  5305.  
  5306. hProject = WkfOpenProjectFile ( NULLHANDLE,   /* Just use desktop's hab */
  5307.                 pszPrjFilename,
  5308.                 WKF_ACCESS_READ);
  5309.  
  5310.  
  5311. ΓòÉΓòÉΓòÉ 14.3.2. WkfReadProject ΓòÉΓòÉΓòÉ
  5312.  
  5313. WkfReadProject 
  5314.  
  5315. Select an item: 
  5316.  
  5317.  Function Syntax 
  5318.  Return Values 
  5319.  Notes 
  5320.  Examples 
  5321.  
  5322.  
  5323. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfReadProject ΓòÉΓòÉΓòÉ
  5324.  
  5325. This WorkFrame/2*-provided function reads base project information from an open 
  5326. project file. 
  5327.  
  5328. #define INCL_WKFPRJ
  5329. #include <wkf.h>
  5330.  
  5331. APIRET APIENTRY WkfReadProject (
  5332.    PSZ        pszFileName,  /* Project's fully qualified file name */
  5333.    PWKFBASEPROJECT  pPrjInfo    /* Pointer to project info structure */
  5334.    );
  5335.  
  5336.  
  5337. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszFileName ΓòÉΓòÉΓòÉ
  5338.  
  5339. pszFileName (PSZ) - input 
  5340.  
  5341. The fully qualified name of the project file to read information from. 
  5342.  
  5343.  
  5344. ΓòÉΓòÉΓòÉ <hidden> Parameter - pPrjInfo ΓòÉΓòÉΓòÉ
  5345.  
  5346. pPrjInfo (PWKFBASEPROJECT) - output 
  5347.  
  5348. Pointer to the base project information data structure in which to return the 
  5349. retrieved project information. 
  5350.  
  5351.  
  5352. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfReadProject ΓòÉΓòÉΓòÉ
  5353.  
  5354. (APIRET) - return values 
  5355.  
  5356. WkfReadProject returns the following values: 
  5357.  
  5358.  NOERROR 
  5359.        Project information successfully returned. 
  5360.  
  5361.  Other 
  5362.        An error occurred. 
  5363.  
  5364.  
  5365. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfReadProject ΓòÉΓòÉΓòÉ
  5366.  
  5367. This WorkFrame/2-provided function reads project information from a base 
  5368. project file and returns an initialized PWKFBASEPROJECT structure. 
  5369.  
  5370. The information returned reflects that in the base project's Settings notebook. 
  5371.  
  5372. Before you can use this function, you will need to issue a WkfOpenProjectFile 
  5373. call to prepare the project file for reading. 
  5374.  
  5375.  
  5376. ΓòÉΓòÉΓòÉ <hidden> Example - WkfReadProject ΓòÉΓòÉΓòÉ
  5377.  
  5378. The following pseudo-code illustrates how this interface could be used: 
  5379.  
  5380. /* Open project file for reading */
  5381.  
  5382. pszPrjFilename = "C:\\DESKTOP\\PROJECTS\\MY PROJECT";
  5383.  
  5384. hProject = WkfOpenProjectFile ( NULLHANDLE,   /* Just use desktop's anchor block handle */
  5385.                 pszPrjFilename,
  5386.                 WKF_ACCESS_READ);
  5387.  
  5388. /* Read project data info bpProject buffer */
  5389.  
  5390. WKFBASEPROJECT bpProject;
  5391.  
  5392. if (hProject != NULLHANDLE)        /* Project opened successfully */
  5393.  rc = WkfReadProject ( pszPrjFilename,
  5394.             &bpProject );
  5395. else
  5396.  return;
  5397.  
  5398.  
  5399. ΓòÉΓòÉΓòÉ 14.3.3. WkfQueryProjectData ΓòÉΓòÉΓòÉ
  5400.  
  5401. WkfQueryProjectData 
  5402.  
  5403. Select an item: 
  5404.  
  5405.  Function Syntax 
  5406.  Return Values 
  5407.  Notes 
  5408.  Examples 
  5409.  
  5410.  
  5411. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryProjectData ΓòÉΓòÉΓòÉ
  5412.  
  5413. This WorkFrame/2*-provided function queries a base project file to retrieve 
  5414. tool-specific information stored using WkfWriteProjectData. 
  5415.  
  5416. #define INCL_WKFPRJ
  5417. #include <wkf.h>
  5418.  
  5419. BOOL APIENTRY WkfQueryProjectData (
  5420.    LHANDLE  hProject,  /* Project handle */
  5421.    PSZ    pszApp,   /* Application key name */
  5422.    PSZ    pszKey,   /* Data key name */
  5423.    PVOID   pBuffer,   /* Pointer to buffer to contain returned value */
  5424.    PULONG  pulBufLen  /* Size of the pBuffer field */
  5425.    );
  5426.  
  5427.  
  5428. ΓòÉΓòÉΓòÉ <hidden> Parameter - hProject ΓòÉΓòÉΓòÉ
  5429.  
  5430. hProject (LHANDLE) - input 
  5431.  
  5432. The project handle returned from the WkfOpenProjectFile function. 
  5433.  
  5434.  
  5435. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszApp ΓòÉΓòÉΓòÉ
  5436.  
  5437. pszApp (PSZ) - input 
  5438.  
  5439. Application key name of data to retrieve.  The name must be specified in 
  5440. upper-case. 
  5441.  
  5442. See Using the Project APIs for more information on using key names to store and 
  5443. access data in project files. 
  5444.  
  5445.  
  5446. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszKey ΓòÉΓòÉΓòÉ
  5447.  
  5448. pszKey (PSZ) - input 
  5449.  
  5450. Data key name of the data to retrieve.  See Using the Project APIs for more 
  5451. information on using key names to store and access data in project files. 
  5452.  
  5453.  
  5454. ΓòÉΓòÉΓòÉ <hidden> Parameter - pBuffer ΓòÉΓòÉΓòÉ
  5455.  
  5456. pBuffer (PVOID) - input/output 
  5457.  
  5458. Pointer to a buffer to contain the return value.  The buffer should be of a 
  5459. compatible type with the value to be returned. 
  5460.  
  5461.  
  5462. ΓòÉΓòÉΓòÉ <hidden> Parameter - pulBufLen ΓòÉΓòÉΓòÉ
  5463.  
  5464. pulBufLen (ULONG) - input/output 
  5465.  
  5466. Pointer to a ULONG field.  On entry, this field should contain the maximum 
  5467. length, in bytes, of the buffer pointed to by pBuffer. On exit, this field 
  5468. contains the number of bytes returned. 
  5469.  
  5470.  
  5471. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryProjectData ΓòÉΓòÉΓòÉ
  5472.  
  5473. (BOOL) - return values 
  5474.  
  5475. WkfQueryProjectData returns the following values: 
  5476.  
  5477.  TRUE 
  5478.        Data successfully returned. 
  5479.  
  5480.  FALSE 
  5481.        Unable to read requested data. 
  5482.  
  5483.  
  5484. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryProjectData ΓòÉΓòÉΓòÉ
  5485.  
  5486. This WorkFrame/2-provided function queries tool-specific project data from a 
  5487. base project file and returns the data in the pbuffer buffer. 
  5488.  
  5489. The information is retrieved using the key names specified by pszApp and 
  5490. pszKey. The requested data must have been previously stored using the 
  5491. WkfWriteProjectData interface. 
  5492.  
  5493. Before you can use this function, you will need to issue a WkfOpenProjectFile 
  5494. call to prepare the project file for reading. 
  5495.  
  5496.  
  5497. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryProjectData ΓòÉΓòÉΓòÉ
  5498.  
  5499. The following pseudo-code illustrates how this interface could be used to 
  5500. retrieve previously-stored tool options from the project file: 
  5501.  
  5502. POPTIONS pOptions;
  5503. PULONG pulBufLen;
  5504.  
  5505. *pulBufLen = 2 * sizeof(OPTIONS) + OPTIONS_DATA_LENGTH;
  5506.  
  5507. /* Open project file */
  5508.  
  5509. hProject = WkfOpenProjectFile ( NULLHANDLE,
  5510.                 pszPrjFilename,
  5511.                 WKF_ACCESS_READ);
  5512.  
  5513. /* Now read options from project file */
  5514.  
  5515. WkfQueryProjectData ( hProject,
  5516.            "IBMTheTool",   /* Application name key */
  5517.            "TheToolOptions", /* Data name key */
  5518.            (PVOID)&pOptions, /* Pointer to options buffer */
  5519.            &pulBufLen);    /* Pointer to length buffer */
  5520.  
  5521. /* Process options */
  5522.        :
  5523.  
  5524. /* Close the project file and release access */
  5525.  
  5526. WkfCloseProjectFile ( hProject );
  5527. free ( pOptions );
  5528.  
  5529.  
  5530. ΓòÉΓòÉΓòÉ 14.3.4. WkfWriteProjectData ΓòÉΓòÉΓòÉ
  5531.  
  5532. WkfWriteProjectData 
  5533.  
  5534. Select an item: 
  5535.  
  5536.  Function Syntax 
  5537.  Return Values 
  5538.  Notes 
  5539.  Examples 
  5540.  
  5541.  
  5542. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfWriteProjectData ΓòÉΓòÉΓòÉ
  5543.  
  5544. This WorkFrame/2*-provided function write tool-specific data to a base project 
  5545. file.  The stored information can be retrieved using using the 
  5546. WkfQueryProjectData interface. 
  5547.  
  5548. #define INCL_WKFPRJ
  5549. #include <wkf.h>
  5550.  
  5551. BOOL APIENTRY WkfWriteProjectData (
  5552.    LHANDLE  hProject,  /* Project handle */
  5553.    PSZ    pszApp,   /* Application key name */
  5554.    PSZ    pszKey,   /* Data key name */
  5555.    PVOID   pBuffer,   /* Pointer to buffer containing data to store */
  5556.    ULONG   ulBufLen   /* Size of the pBuffer field */
  5557.    );
  5558.  
  5559.  
  5560. ΓòÉΓòÉΓòÉ <hidden> Parameter - hProject ΓòÉΓòÉΓòÉ
  5561.  
  5562. hProject (LHANDLE) - input 
  5563.  
  5564. The project handle returned from the WkfOpenProjectFile function. 
  5565.  
  5566.  
  5567. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszApp ΓòÉΓòÉΓòÉ
  5568.  
  5569. pszApp (PSZ) - input 
  5570.  
  5571. Application key name of data to store.  See Using the Project APIs for more 
  5572. information on using key names to store and access data in project files. 
  5573.  
  5574.  
  5575. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszKey ΓòÉΓòÉΓòÉ
  5576.  
  5577. pszKey (PSZ) - input 
  5578.  
  5579. Data key name of the data to store.  If this parameter is NULL, all the data 
  5580. associated with the application key specified in pszApp is deleted. 
  5581.  
  5582. See Using the Project APIs for more information on using key names to store and 
  5583. access data in project files. 
  5584.  
  5585.  
  5586. ΓòÉΓòÉΓòÉ <hidden> Parameter - pBuffer ΓòÉΓòÉΓòÉ
  5587.  
  5588. pBuffer (PVOID) - input 
  5589.  
  5590. Pointer to the buffer containing the data to store. 
  5591.  
  5592. If this parameter is NULL, the data associated with the data key specified in 
  5593. pszKey is deleted. 
  5594.  
  5595.  
  5596. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulBufLen ΓòÉΓòÉΓòÉ
  5597.  
  5598. ulBufLen (ULONG) - input 
  5599.  
  5600. The length, in bytes, of the input buffer pointed to by pBuffer. 
  5601.  
  5602.  
  5603. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfWriteProjectData ΓòÉΓòÉΓòÉ
  5604.  
  5605. (BOOL) - return values 
  5606.  
  5607. WkfWriteProjectData returns the following values: 
  5608.  
  5609.  TRUE 
  5610.        Data written successfully. 
  5611.  
  5612.  FALSE 
  5613.        Unable to write data. 
  5614.  
  5615.  
  5616. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfWriteProjectData ΓòÉΓòÉΓòÉ
  5617.  
  5618. This WorkFrame/2-provided function writes tool-specific project data to a base 
  5619. project file.  This function is particularly useful for storing tool options 
  5620. for the project. 
  5621.  
  5622. The information is written using the key names specified by pszApp and pszKey 
  5623. and retrieved with the same keys. The stored data can be retrieved using the 
  5624. WkfQueryProjectData interface. 
  5625.  
  5626. Before you can use this function, you will need to issue a WkfOpenProjectFile 
  5627. call to prepare the project file for writing. 
  5628.  
  5629.  
  5630. ΓòÉΓòÉΓòÉ <hidden> Example - WkfWriteProjectData ΓòÉΓòÉΓòÉ
  5631.  
  5632. The following pseudo-code illustrates how this interface could be used to store 
  5633. tool options for the project: 
  5634.  
  5635. /* Store tool options for the project */
  5636.  
  5637. typedef struct _OPTIONS      /* Structure to hold options data */
  5638.  {
  5639.   ULONG  cb;
  5640.   BOOL  fPrompt;
  5641.   PSZ   pszCommandLine;
  5642.   PSZ   pszErrTemplate;
  5643.   CHAR  szData[1];
  5644.  }  OPTIONS, *POPTIONS;
  5645.  
  5646. size = 2 * sizeof(OPTIONS) + OPTIONS_DATA_LENGTH;
  5647.  
  5648. POPTIONS pOptions;
  5649. pOptions = calloc ( 1, size);
  5650.  
  5651. /* Initialize OPTIONS structure */
  5652. pOptions->cb = size;
  5653. pOptions->fPrompt = FALSE;
  5654. strcpy( pOptions->pszCommandLine, SOME_CMD_LINE );
  5655. strcpy( pOptions->pszErrTemplate, SOME_ERR_TEMPLATE );
  5656. strcpy( pOptions->szData, SOME_DATA );
  5657.  
  5658. /* Open project file */
  5659.  
  5660. hProject = WkfOpenProjectFile ( NULLHANDLE,
  5661.                 pszPrjFilename,
  5662.                 WKF_ACCESS_ALL | WKF_SHARE_DENYWRITE );
  5663.  
  5664. /* Now write options to project file */
  5665.  
  5666. WkfWriteProjectData ( hProject,      /* Project handle */
  5667.            "IBMTheTool",    /* Application name key */
  5668.            "TheToolOptions",  /* Data name key */
  5669.            (PVOID)pOptions,  /* Pointer to buffer */
  5670.            pOptions->cb));   /* Buffer length */
  5671.  
  5672. free ( pOptions );
  5673.  
  5674. /* Close the project file and release access */
  5675.  
  5676. WkfCloseProjectFile ( hProject );
  5677.  
  5678.  
  5679. ΓòÉΓòÉΓòÉ 14.3.5. WkfCloseProjectFile ΓòÉΓòÉΓòÉ
  5680.  
  5681. WkfCloseProjectFile 
  5682.  
  5683. Select an item: 
  5684.  
  5685.  Function Syntax 
  5686.  Return Values 
  5687.  Notes 
  5688.  Examples 
  5689.  
  5690.  
  5691. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfCloseProjectFile ΓòÉΓòÉΓòÉ
  5692.  
  5693. This WorkFrame/2*-provided function closes an open base project file. 
  5694.  
  5695. #define INCL_WKFPRJ
  5696. #include <wkf.h>
  5697.  
  5698. BOOL APIENTRY WkfCloseProjectFile (
  5699.    LHANDLE  hProject  /* Project handle */
  5700.    );
  5701.  
  5702.  
  5703. ΓòÉΓòÉΓòÉ <hidden> Parameter - hProject ΓòÉΓòÉΓòÉ
  5704.  
  5705. hProject (LHANDLE) - input 
  5706.  
  5707. The project handle returned from the WkfOpenProjectFile function. 
  5708.  
  5709.  
  5710. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfCloseProjectFile ΓòÉΓòÉΓòÉ
  5711.  
  5712. (BOOL) - return values 
  5713.  
  5714. WkfCloseProjectFile returns the following values: 
  5715.  
  5716.  TRUE 
  5717.        File closed successfully. 
  5718.  
  5719.  FALSE 
  5720.        Unable to close file. 
  5721.  
  5722.  
  5723. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfCloseProjectFile ΓòÉΓòÉΓòÉ
  5724.  
  5725. This WorkFrame/2-provided function closes the base project file opened with the 
  5726. WkfOpenProjectFile interface. Call this interface when you are finished 
  5727. querying the project file. 
  5728.  
  5729.  
  5730. ΓòÉΓòÉΓòÉ <hidden> Example - WkfCloseProjectFile ΓòÉΓòÉΓòÉ
  5731.  
  5732. The following pseudo-code illustrates how this interface could be used: 
  5733.  
  5734. /* Finished with project file */
  5735.  
  5736. WkfCloseProjectFile ( hProject );
  5737.  
  5738.  
  5739. ΓòÉΓòÉΓòÉ 15. Actions Profiles ΓòÉΓòÉΓòÉ
  5740.  
  5741. This section describes the WorkFrame/2*-provided APIs that can be used to 
  5742. obtain information about actions profiles. 
  5743.  
  5744.  
  5745. ΓòÉΓòÉΓòÉ 15.1. Using the Actions Profile APIs ΓòÉΓòÉΓòÉ
  5746.  
  5747. The Actions Profile API's provide a way to list the actions, environment 
  5748. variables, and types, that are defined in a given actions profile. 
  5749.  
  5750. The actions profile APIs query a given actions profile and the Default Actions 
  5751. Profile (DAP) to return an initialized structure with the requested 
  5752. information. For example, WkfQueryActions returns a pointer to a WKF_ACTIONS 
  5753. structure that contains a list of WKF_ACTION structures that describe each 
  5754. action. 
  5755.  
  5756. Similarly, WkfQueryEnvirons returns a pointer to an initialized WKF_ENVIRONS 
  5757. list of WKF_ENVIRON structures that describe each environment variable. 
  5758.  
  5759. After calling an actions profile API, you must free the returned structure or 
  5760. list of structures using the appropriate WkfFree... API. 
  5761.  
  5762. Actions profile desktop objects are created and set using the OS/2* APIs, 
  5763. WinCreateObject and WinSetObjectData. This is discussed in Managing Actions 
  5764. Profiles. 
  5765.  
  5766.  
  5767. ΓòÉΓòÉΓòÉ 15.2. Managing Actions Profiles ΓòÉΓòÉΓòÉ
  5768.  
  5769. This section discusses the use of the OS/2 APIs, WinCreateObjectData, 
  5770. WinSetObjectData, and WinDestroyObject to create and delete WorkFrame/2* 
  5771. actions profile desktop objects. 
  5772.  
  5773. Note:  Any operations performed on WorkFrame/2* objects (such as projects and 
  5774.        actions profiles) that are not accomplished using the WorkFrame/2 
  5775.        integration APIs, are not guaranteed to be compatible in future versions 
  5776.        of WorkFrame/2.  APIs to set, create, and delete actions profiles will 
  5777.        be made available in future versions.  See the Copyright Notice for more 
  5778.        information. 
  5779.  
  5780.  
  5781. ΓòÉΓòÉΓòÉ 15.2.1. Creating Actions Profiles ΓòÉΓòÉΓòÉ
  5782.  
  5783. To create an actions profile object, call WinCreateObject specifying 
  5784. "DDE3Profile" for the object's SOM class, and the correct keyname-value pairs 
  5785. in the setup string. 
  5786.  
  5787. Following is an example of how to create an actions profile: 
  5788.  
  5789. hProfile = WinCreateObject ( "DDE3Profile",        /* Actions profile class name */
  5790.                "Sample Actions Profile",  /* Actions profile title */
  5791.                pszSetupString,       /* Setup string */
  5792.                "C:\\Desktop\\My Profiles", /* Create object in this folder */
  5793.                CO_REPLACEIFEXISTS);     /* Creation flags */
  5794.  
  5795. The above call to WinCreateObject creates an actions profile with the title 
  5796. "Sample Actions Profile", in a folder on the Desktop called "My Profiles". The 
  5797. creation flag indicates that the actions profile should be replaced if it 
  5798. already exists.  The profile's object handle is returned. 
  5799.  
  5800. If you wanted to create an actions profile in the WorkFrame/2 Actions Profiles 
  5801. folder, you could have specified its persistent object ID in the fourth 
  5802. parameter of WinCreateObject  See Persistent Object IDs for a list of 
  5803. WorkFrame/2 object IDs. 
  5804.  
  5805. The required setup string consists of a series of keyname-value pairs, defined 
  5806. for the class, that initialize the object.  Keynames are separated by 
  5807. semicolons, and values are separated by commas, as in: 
  5808.  
  5809. "key=value; key2=value1,value2;" 
  5810.  
  5811. For example, an actions profile setup string could look like this (note that 
  5812. the caret "^" must precede semi-colons and commas that that are to be 
  5813. interpreted as literals in the setup string): 
  5814.  
  5815. pszInclude = "C:\\INCLUDES^;%INCLUDE%"
  5816.  
  5817. j = sprintf (pszSetupString, WKF_ENVIRON_KEY"=INCLUDE,%s", pszInclude);
  5818.  
  5819. fSuccess = WinSetObjectData (hProject,     /* Project handle from WinCreateObject */
  5820.                pszSetupString);  /* Setup string */
  5821.  
  5822. The following table shows the keyname-value pairs supported by the 
  5823. "DDE3Profile" class: 
  5824.  
  5825. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5826. ΓöéKeyname (string constant)ΓöéValue                              ΓöéDescription                             Γöé
  5827. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5828. ΓöéWKF_ACTION_KEY           ΓöéSee WKF_ACTION_KEY values          ΓöéThis adds an action to the actions      Γöé
  5829. Γöé                         Γöé                                   Γöéprofile.                                Γöé
  5830. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5831. ΓöéWKF_IFFOUND_KEY          ΓöéProgram name, for example "epm.exe"ΓöéWhen followed by a WKF_ACTION_KEY       Γöé
  5832. Γöé                         Γöé                                   Γöékeyword, it is interpreted to mean that Γöé
  5833. Γöé                         Γöé                                   Γöéif the program name is found along the  Γöé
  5834. Γöé                         Γöé                                   Γöécurrent path, then the action should be Γöé
  5835. Γöé                         Γöé                                   Γöéadded according to the immediately      Γöé
  5836. Γöé                         Γöé                                   Γöéfollowing WKF_ACTION_KEY keyname-value  Γöé
  5837. Γöé                         Γöé                                   Γöépair.                                   Γöé
  5838. Γöé                         Γöé                                   ΓöéNote that this keyword must always be   Γöé
  5839. Γöé                         Γöé                                   Γöéfollowed by WKF_ACTION_KEY.             Γöé
  5840. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5841. ΓöéWKF_ENVIRON_KEY          Γöé<Environment variable name,value>, ΓöéThis adds an environment variable to theΓöé
  5842. Γöé                         Γöéfor example                        Γöéactions profile, and is equivalent to   Γöé
  5843. Γöé                         Γöé"INCLUDE,C:\\PRJ\\HEADERS^;%IΓöésetting environment variable values on  Γöé
  5844. Γöé                         Γöé                                   Γöéthe Environments page of the actions    Γöé
  5845. Γöé                         Γöé                                   Γöéprofile's Settings notebook.            Γöé
  5846. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5847.  
  5848. Notes 
  5849.  
  5850.   1. All keynames, except the Action name and Program name values of the 
  5851.      WKF_ACTION_KEY fields, have safe default values, so it is never required 
  5852.      to include all the possible keyname-value pairs in the setup string. 
  5853.      Specify a NULL setup string to use the default values. 
  5854.  
  5855.   2. You can only add or change one action and one environment variable per 
  5856.      call to WinSetObjectData. 
  5857.  
  5858.   3. Since the "DDE3Profile" class is subclassed from the "WPFileSystem" 
  5859.      Workplace Shell class, keyname=values pairs defined for "WPFileSystem" are 
  5860.      also valid for "DDE3Profile".  See the online PM Reference from IBM* 
  5861.      Developer's Toolkit for more information on Workplace Shell classes and 
  5862.      the WinCreateObject API. 
  5863.  
  5864.  
  5865. ΓòÉΓòÉΓòÉ <hidden> WKF_ACTION_KEY Values ΓòÉΓòÉΓòÉ
  5866.  
  5867. The WKF_ACTION_KEY contains the following value fields which correspond to 
  5868. fields in an action's Change action or Add action notebook.  The value fields 
  5869. must be enumerated in the order that they are given here.  With the exception 
  5870. of the rightmost fields, fields that are to contain the default value must be 
  5871. specified with a blank and delimited by a comma. 
  5872.  
  5873. All the following value fields, except for Action name and Program name, have 
  5874. safe default values, so it is not required to specify all the possible value 
  5875. fields for WKF_ACTION_KEY. 
  5876.  
  5877.  Action name 
  5878.       Name of the action, for example, "IBM C Set ++" . This value must be 
  5879.       specified. 
  5880.  
  5881.  Action class 
  5882.       The action's class name, for example, "COMPILE" . 
  5883.  
  5884.  Program name 
  5885.       Name of the action's executable, for example, "icc.exe" . This value must 
  5886.       be specified. 
  5887.  
  5888.  Source type 
  5889.       Source file masks and predefined named types, each separated by a newline 
  5890.       (\n) character.  For example, "*.c\n*.cpp\nCSOURCE\nCPPSOURCE" . 
  5891.  
  5892.  Target type 
  5893.       Target file masks and predefined named types, each separated by a newline 
  5894.       (\n) character.  For example, "*.obj\n*.exe\n*.dll\nMAPFILES" . 
  5895.  
  5896.  Options DLL name 
  5897.       The unqualified name of the options DLL for the action, for example, 
  5898.       "DDE3DEF2" . 
  5899.  
  5900.  Options DLL entrypoint 
  5901.       Name of the entrypoint in the options DLL that contains the action 
  5902.       integration support function.  For example, "COMPILE" . 
  5903.  
  5904.  Action type 
  5905.       Currently, WKF_ACTIONTYPE_CMD is the only action type supported. 
  5906.  
  5907.  Actions scope 
  5908.       The scope of the action, one of: WKF_ACTIONSCOPE_PROJECT (applies to 
  5909.       projects only), WKF_ACTIONSCOPE_FILE (applies to files only), or 
  5910.       WKF_ACTIONSCOPE_BOTH (can apply to both files and projects). 
  5911.  
  5912.  Menu options 
  5913.       The kind of menu the action is to appear on, one of: WKF_MENUSCOPE_DETAIL 
  5914.       (action is shown only if the extended menu option is selected for the 
  5915.       project), or WKF_MENUSCOPE_SHORT (action appears on all menus). 
  5916.  
  5917.  Run mode 
  5918.       Session the action should be started in, one of: WKF_RUNMODE_FULLSCREEN 
  5919.       (action is to be started in a full-screen session), WKF_RUNMODE_WINDOW 
  5920.       (action is to be started in an AVIO window), or WKF_RUNMODE_MONITOR 
  5921.       (action should be run in a WorkFrame/2* Monitor window). 
  5922.  
  5923.  Help command 
  5924.       Command that displays any customized help for the action, for example 
  5925.       "VIEW ToolHelp" or "VIEW %TOPIC% ". 
  5926.  
  5927.  Help topic 
  5928.       If the help topic was specified with the substitution variable %TOPIC% in 
  5929.       the previous field, you can specify the help topic here, for example 
  5930.       "ToolHelp" . 
  5931.  
  5932.  For example: 
  5933.  
  5934.   pszAction = "IBM C Set ++,COMPILE,icc.exe,*.cpp,*.obj,DDE4ICC2,COMPILE, \
  5935.          WKF_ACTIONTYPE_CMD,WKF_ACTIONSCOPE_FILE,WKF_MENUSCOPE_SHORT, \
  5936.          WKF_RUNMODE_MONITOR";
  5937.  
  5938.   j = sprintf (pszSetupString, WKF_ACTION_KEY"=%s", pszAction);
  5939.  
  5940.  
  5941. ΓòÉΓòÉΓòÉ 15.2.2. Setting Actions Profiles Data ΓòÉΓòÉΓòÉ
  5942.  
  5943. Set actions profile data by invoking the WinSetObjectData OS/2* API with the 
  5944. actions profile handle returned by WinCreateObject when the object was created. 
  5945. WinSetObjectData expects a setup string containing the keyword-value pairs that 
  5946. you want to change.  Use WinQueryObject to obtain the name of any actions 
  5947. profile you want to change. 
  5948.  
  5949.  
  5950. Adding an Action 
  5951.  
  5952. For example, to add an action to the Default Actions Profile (DAP), you might 
  5953. issue these function calls: 
  5954.  
  5955. /* Get DAP's object handle */
  5956. hDAP = WinQueryObject (<WKF_PROFILE_DFLT>);
  5957.  
  5958. /* Build setup string */
  5959. pszIfFound = "iconedit.exe";
  5960. pszAction = "Icon Edit,EDIT,iconedit.exe,*.ico,,DDE3DEF2,DEFAULT,WKF_ACTIONTYPE_CMD,WKF_ACTIONSCOPE_FILE, \
  5961.        WKF_MENUSCOPE_SHORT,WKF_RUNMODE_DEFAULT,view toolinfo %TOPIC%,Icon Editor";
  5962.  
  5963. j = sprintf (pszSetupString, WKF_IFFOUND_KEY"=%s;"WKF_ACTION_KEY"=%s", pszIfFound, pszAction);
  5964.  
  5965. /* Add action */
  5966. fSuccess = WinSetObjectData ( hDAP,       /* DAP object handle */
  5967.                pszSetupString);  /* Setup string */
  5968.  
  5969.  
  5970. Changing an Action 
  5971.  
  5972. To change the settings for an existing action, you must specify all the value 
  5973. fields of the WKF_ACTION_KEY keyword in the setup string. A WKF_ACTION_KEY 
  5974. value is interpreted as a replacement of the existing action.  Specifying a 
  5975. blank value for a field will delete the previous value of the field. 
  5976.  
  5977. For example, to change the options DLL for the action added in the example 
  5978. shown above from DDE3DEF2.DLL to IEDITOPT.DLL, do the following: 
  5979.  
  5980. /* Build setup string */
  5981. pszAction = Icon Edit,EDIT,iconedit.exe,*.ico,,IEDITOPT,ICONEDIT,WKF_ACTIONTYPE_CMD, \
  5982.       WKF_ACTIONSCOPE_FILE,WKF_MENUSCOPE_SHORT,WKF_RUNMODE_DEFAULT, \
  5983.       view toolinfo %TOPIC%,Icon Editor";
  5984.  
  5985. j = sprintf (pszSetupString, WKF_ACTION_KEY"=%s", pszAction);
  5986.  
  5987. /* Change action */
  5988. fSuccess = WinSetObjectData ( hDAP,       /* DAP object handle */
  5989.                pszSetupString); /* Setup string */
  5990.  
  5991.  
  5992. Deleting an Action 
  5993.  
  5994. To delete an action, specify only the class name and action name with blanks 
  5995. for the rest of the WKF_ACTION_KEY fields in the setup string. For example, 
  5996.  
  5997. /* Build setup string */
  5998. pszAction = "WKF_ACTION_KEY=Icon Edit, EDIT, , , , , , , , , , , ";
  5999.  
  6000. j = sprintf (pszSetupString, WKF_ACTION_KEY"=%s", pszAction);
  6001.  
  6002. /* Delete action */
  6003. fSuccess = WinSetObjectData ( hAP,       /* Actions profile's object handle */
  6004.                pszSetupString); /* Setup string */
  6005.  
  6006.  
  6007. Querying Actions Profiles 
  6008.  
  6009. Actions profiles can be queried using the WorkFrame/2*-provided actions 
  6010. profiles APIs. 
  6011.  
  6012. See the online PM Reference from IBM* Developer's Toolkit for more information 
  6013. on OS/2 APIs and Workplace Shell methods. 
  6014.  
  6015.  
  6016. ΓòÉΓòÉΓòÉ 15.2.3. Deleting Actions Profiles ΓòÉΓòÉΓòÉ
  6017.  
  6018. Actions profiles can be permanently deleted using the OS/2* WinDestroyObject 
  6019. API.  For example: 
  6020.  
  6021. fSuccess = WinDestroyObject (hProfile);  /* Actions profile object handle */
  6022.  
  6023. See the online PM Reference from IBM* Developer's Toolkit for more information 
  6024. on the WinDestroyObject API. 
  6025.  
  6026.  
  6027. ΓòÉΓòÉΓòÉ 15.3. Actions Profile APIs ΓòÉΓòÉΓòÉ
  6028.  
  6029. This section descibes the WorkFrame/2*-provided APIs for obtaining information 
  6030. about an actions profile. 
  6031.  
  6032. The function prototypes and constant declarations for the actions profile APIs 
  6033. are in the WKFPRF.H C header file. 
  6034.  
  6035.  
  6036. ΓòÉΓòÉΓòÉ 15.3.1. WkfQueryActionList ΓòÉΓòÉΓòÉ
  6037.  
  6038. WkfQueryActionList 
  6039.  
  6040. Select an item: 
  6041.  
  6042.  Function Syntax 
  6043.  Return Values 
  6044.  Notes 
  6045.  Examples 
  6046.  
  6047.  
  6048. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryActionList ΓòÉΓòÉΓòÉ
  6049.  
  6050. This WorkFrame/2*-provided function returns the list of actions present in the 
  6051. specified actions profile and the Default Actions Profile. 
  6052.  
  6053. #define INCL_WKFPRF
  6054. #include <wkf.h>
  6055.  
  6056. APIRET APIENTRY WkfQueryActionList (
  6057.    PSZ      pszPrfFileName,  /* File name of the actions profile */
  6058.    PWKF_ACTIONS  *ppwkfActions   /* List of actions - returned */
  6059.    );
  6060.  
  6061.  
  6062. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPrfFilename ΓòÉΓòÉΓòÉ
  6063.  
  6064. pszPrfFilename (PSZ) - input 
  6065.  
  6066. The fully qualified ASCIIZ file name of the actions profile whose actions to 
  6067. query along with those in the Default Actions Profile 
  6068.  
  6069. If this field is NULL, then the actions are queried from the Default Actions 
  6070. Profile only. 
  6071.  
  6072.  
  6073. ΓòÉΓòÉΓòÉ <hidden> Parameter - *ppwkfActions ΓòÉΓòÉΓòÉ
  6074.  
  6075. *ppwkfActions (PWKF_ACTIONS) - input/output 
  6076.  
  6077. On entry, this field should contain the address that contains the pointer to 
  6078. the PWKF_ACTIONS return structure. 
  6079.  
  6080. On exit, this field is updated with one of the following values: 
  6081.  
  6082.   1. A pointer to the WKF_ACTIONS structure containing the list of actions 
  6083.   2. A pointer to the WKF_ACTIONS structure containing a NULL list of actions 
  6084.      and a ulCount field set to zero, if there are no actions in the Default 
  6085.      Actions Profile, and the actions profile specified by pszPrfFilename 
  6086.   3. A NULL pointer, if there were errors reading one or both profiles. 
  6087.  
  6088.  
  6089. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryActionList ΓòÉΓòÉΓòÉ
  6090.  
  6091. (APIRET) - return values 
  6092.  
  6093. WkfQueryActionList returns the following values in addition to standard OS/2* 
  6094. return codes: 
  6095.  
  6096.  NO_ERROR 
  6097.        No errors occurred.  The list of actions from the specified actions 
  6098.        profile and the Default Actions Profile is returned. 
  6099.  
  6100.  WKF_INVALID_PROFILES 
  6101.        Both the specified actions profile and Default Actions Profile were 
  6102.        invalid.  No list is returned. 
  6103.  
  6104.  WKF_PROFILES_NOT_FOUND 
  6105.        Both the specified actions profile and Default Actions Profile were not 
  6106.        found.  No list is returned. 
  6107.  
  6108.  WKF_DFLTPROFILE_NOTFOUND 
  6109.        Default Actions Profile was not found.  If the specified actions profile 
  6110.        was found and was valid, then the list of actions in that profile is 
  6111.        returned. 
  6112.  
  6113.  WKF_INVALID_ACTIONSPROFILE 
  6114.        The specified actions profile was invalid.  If the Default Actions 
  6115.        Profile was valid, then the list of actions from that profile is 
  6116.        returned. 
  6117.  
  6118.  WKF_ACTIONSPROFILE_NOTFOUND 
  6119.        The specified actions profile was not found.  If the Default Actions 
  6120.        Profile was found and was valid, then the list of actions from that 
  6121.        profile is returned. 
  6122.  
  6123.  
  6124. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryActionList ΓòÉΓòÉΓòÉ
  6125.  
  6126. This WorkFrame/2*-provided function queries the list of actions from the 
  6127. actions profile identified by the pszPrfFilename field. It also appends the 
  6128. actions from the Default Actions Profile (DAP). If there are duplicate actions 
  6129. defined in the actions profile and the DAP, the action found in the DAP is 
  6130. discarded.  Actions are returned sorted by class name. 
  6131.  
  6132. To obtain the list of actions only from the DAP, specify NULL for the 
  6133. pszPrfFileName field. 
  6134.  
  6135. After calling this function, you must call WkfFreeActions to free the returned 
  6136. *ppfwkfActions list if it is not NULL on exit. 
  6137.  
  6138. Note that some error return codes may result in a partially filled action list. 
  6139.  
  6140. If there were errors reading either profile, then *ppwkfActions is set to NULL. 
  6141. Check for a NULL *ppwkfActions value before using it. 
  6142.  
  6143.  
  6144. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryActionList ΓòÉΓòÉΓòÉ
  6145.  
  6146. The following pseudo-code illustrates how this interface might be used: 
  6147.  
  6148. /* Query the list of actions in the CLC Sample Actions Profile */
  6149.  
  6150. PSZ pszType = "*.c";
  6151. PSZ pszProfile = "C:\\Desktop\\IBM WorkFrame!2 V2.1\\CLC Actions Profile";
  6152.  
  6153. PWKF_ACTIONS actions;
  6154. int i, ulActCount;
  6155.  
  6156. if (NO_ERROR == WkfQueryActionList (pszProfile, &actions))
  6157. {
  6158.  /* Process returned list of actions */
  6159.  if ( (ulActCount = actions->ulCount) > 0)
  6160.   for (i=0; i<ulActCount ; i++)
  6161.     {
  6162.      StoreAction (actions->apActions[i]->pszActionName,
  6163.            actions->apActions[i]->pszActionClass,
  6164.            actions->apActions[i]->pszCommand,
  6165.            actions->apActions[i]->pszSrcMask,
  6166.            actions->apActions[i]->pszTgtMask,
  6167.            actions->apActions[i]->pszDllName,
  6168.            actions->apActions[i]->pszDllEntryName,
  6169.            actions->apActions[i]->ucActionType,
  6170.            actions->apActions[i]->ucRunMode,
  6171.            actions->apActions[i]->pszHelpCmd,
  6172.                 :
  6173.            );
  6174.     }
  6175.  
  6176. WkfFreeActions(actions);
  6177.  
  6178.  
  6179. ΓòÉΓòÉΓòÉ 15.3.2. WkfQueryActions ΓòÉΓòÉΓòÉ
  6180.  
  6181. WkfQueryActions 
  6182.  
  6183. Select an item: 
  6184.  
  6185.  Function Syntax 
  6186.  Return Values 
  6187.  Notes 
  6188.  Examples 
  6189.  
  6190.  
  6191. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryActions ΓòÉΓòÉΓòÉ
  6192.  
  6193. This WorkFrame/2*-provided function returns the list of actions in the 
  6194. specified actions profile and the Default Actions Profile, that apply to the 
  6195. specified object type. 
  6196.  
  6197. #define INCL_WKFPRF
  6198. #include <wkf.h>
  6199.  
  6200. APIRET APIENTRY WkfQueryActions (
  6201.    PSZ      pszPrfFileName,  /* File name of the actions profile */
  6202.    PSZ      pszObjectType,   /* Object types to which the returned actions can be applied */
  6203.    PWKF_ACTIONS  *ppwkfActions   /* List of actions - returned */
  6204.    );
  6205.  
  6206.  
  6207. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPrfFilename ΓòÉΓòÉΓòÉ
  6208.  
  6209. pszPrfFilename (PSZ) - input 
  6210.  
  6211. The fully qualified file name of the actions profile whose actions to query 
  6212. along with those in the Default Actions Profile. 
  6213.  
  6214. If this field is NULL, then the actions are queried from the Default Actions 
  6215. Profile only. 
  6216.  
  6217.  
  6218. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszObjectType ΓòÉΓòÉΓòÉ
  6219.  
  6220. pszObjectType (PSZ) - input 
  6221.  
  6222. If this field is NULL, all the actions from the Default Actions Profile and the 
  6223. profile identified by the pszPrfFilename field are returned.  Otherwise, only 
  6224. the actions matching the object type (or mask) specified in this field are 
  6225. returned. 
  6226.  
  6227.  
  6228. ΓòÉΓòÉΓòÉ <hidden> Parameter - *ppwkfActions ΓòÉΓòÉΓòÉ
  6229.  
  6230. *ppwkfActions (PWKF_ACTIONS) - input/output 
  6231.  
  6232. On entry, this field should contain the address that contains the pointer to 
  6233. the PWKF_ACTIONS return structure. 
  6234.  
  6235. On exit, this field is updated with one of the following values: 
  6236.  
  6237.   1. A pointer to the WKF_ACTIONS structure containing the list of actions 
  6238.   2. A pointer to the WKF_ACTIONS structure containing a NULL list of actions 
  6239.      and a ulCount field set to zero, if there are no actions in either profile 
  6240.      that apply to the type specified by pszObjectType 
  6241.   3. A NULL pointer, if there were errors. 
  6242.  
  6243.  
  6244. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryActions ΓòÉΓòÉΓòÉ
  6245.  
  6246. (APIRET) - return values 
  6247.  
  6248. WkfQueryActions returns the following values in addition to standard OS/2* 
  6249. return codes: 
  6250.  
  6251.  NO_ERROR 
  6252.        No errors occurred.  The list of actions from the specified actions 
  6253.        profile and the Default Actions Profile is returned. 
  6254.  
  6255.  WKF_UNRESOLVED_TYPE 
  6256.        The specified file mask could not be resolved by the OS/2 system. If the 
  6257.        specified object type is not a valid WorkFrame/2* type, then it is 
  6258.        assumed to be a file mask. 
  6259.  
  6260.  WKF_INVALID_PROFILES 
  6261.        Both the specified actions profile and Default Actions Profile were 
  6262.        invalid.  No list is returned. 
  6263.  
  6264.  WKF_PROFILES_NOT_FOUND 
  6265.        Both the specified actions profile and Default Actions Profile were not 
  6266.        found.  No list is returned. 
  6267.  
  6268.  WKF_DFLTPROFILE_NOTFOUND 
  6269.        Default Actions Profile was not found.  If the specified actions profile 
  6270.        was found and was valid, then the list of actions in that profile is 
  6271.        returned. 
  6272.  
  6273.  WKF_INVALID_ACTIONSPROFILE 
  6274.        The specified actions profile was invalid.  If the Default Actions 
  6275.        Profile was valid, then the list of actions from that profile is 
  6276.        returned. 
  6277.  
  6278.  WKF_ACTIONSPROFILE_NOTFOUND 
  6279.        The specified actions profile was not found.  If the Default Actions 
  6280.        Profile was found and was valid, then the list of actions from that 
  6281.        profile is returned. 
  6282.  
  6283.  
  6284. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryActions ΓòÉΓòÉΓòÉ
  6285.  
  6286. This WorkFrame/2*-provided function queries the list of actions from the 
  6287. pszPrfFilename actions profile, and the Default Actions Profile, that can be 
  6288. applied to the object type given in the pszObjectType field. If the specified 
  6289. object type is not a valid WorkFrame/2* type, then it is assumed to be a file 
  6290. mask. 
  6291.  
  6292. If there are duplicate actions defined in the actions profile and the DAP, the 
  6293. action found in the DAP is discarded.  Actions are returned sorted by class 
  6294. name. 
  6295.  
  6296. To obtain the list of actions only from the DAP, specify NULL for the 
  6297. pszPrfFileName field. 
  6298.  
  6299. After calling this function, you must call WkfFreeActions to free the returned 
  6300. *ppfwkfActions list if it is not NULL on exit. 
  6301.  
  6302. Note that some error return codes may result in a partially filled action list. 
  6303.  
  6304. If there were errors reading either profile or resolving the specified type, 
  6305. then *ppwkfActions is set to NULL.  Check for a NULL *ppwkfActions value before 
  6306. using it. 
  6307.  
  6308.  
  6309. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryActions ΓòÉΓòÉΓòÉ
  6310.  
  6311. The following pseudo-code illustrates how this interface might be used: 
  6312.  
  6313. /* Query the list of actions in the C/C++ Tools Actions Profile that */
  6314. /* apply to C files                          */
  6315.  
  6316. PSZ pszType = "*.c";
  6317. PSZ pszProfile = "C:\\Desktop\\IBM C!C++ Tools 2.01\\IBM C!C++ Tools^Actions Profile";
  6318.  
  6319. PWKF_ACTIONS actions;
  6320. int i, ulActCount;
  6321.  
  6322. if (NO_ERROR == WkfQueryActions (pszProfile, pszType, &actions))
  6323. {
  6324.  /* Process returned list of actions */
  6325.  if ( (ulActCount = actions->ulCount) > 0)
  6326.   for (i=0; i<ulActCount ; i++)
  6327.     {
  6328.      StoreAction (actions->apActions[i]->pszActionName,
  6329.            actions->apActions[i]->pszActionClass,
  6330.            actions->apActions[i]->pszCommand,
  6331.            actions->apActions[i]->pszSrcMask,
  6332.            actions->apActions[i]->pszTgtMask,
  6333.            actions->apActions[i]->pszDllName,
  6334.            actions->apActions[i]->pszDllEntryName,
  6335.            actions->apActions[i]->ucActionType,
  6336.            actions->apActions[i]->ucRunMode,
  6337.            actions->apActions[i]->pszHelpCmd,
  6338.                 :
  6339.            );
  6340.     }
  6341.                 :
  6342. }
  6343.  
  6344. WkfFreeActions(actions);
  6345.  
  6346.  
  6347. ΓòÉΓòÉΓòÉ 15.3.3. WkfFreeActions ΓòÉΓòÉΓòÉ
  6348.  
  6349. WkfFreeActions 
  6350.  
  6351. Select an item: 
  6352.  
  6353.  Function Syntax 
  6354.  Return Values 
  6355.  Notes 
  6356.  Examples 
  6357.  
  6358.  
  6359. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfFreeActions ΓòÉΓòÉΓòÉ
  6360.  
  6361. This WorkFrame/2*-provided function frees the list of actions returned by 
  6362. WkfQueryActionList and WkfQueryActions. 
  6363.  
  6364. #define INCL_WKFPRF
  6365. #include <wkf.h>
  6366.  
  6367. VOID APIENTRY WkfFreeActions (
  6368.    PWKF_ACTIONS  *ppwkfActions   /* Pointer to action list structure to free */
  6369.    );
  6370.  
  6371.  
  6372. ΓòÉΓòÉΓòÉ <hidden> Parameter - *ppwkfActions ΓòÉΓòÉΓòÉ
  6373.  
  6374. *ppwkfAction (PWKF_ACTIONS) - input 
  6375.  
  6376. This function frees the memory allocated to this pointer. 
  6377.  
  6378. This is the pointer to the PWKF_ACTIONS structure returned by 
  6379. WkfQueryActionList and WkfQueryActions. 
  6380.  
  6381.  
  6382. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfFreeActions ΓòÉΓòÉΓòÉ
  6383.  
  6384. (VOID) - return values 
  6385.  
  6386. WkfFreeActions has no return values. 
  6387.  
  6388.  
  6389. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfFreeActions ΓòÉΓòÉΓòÉ
  6390.  
  6391. This WorkFrame/2*-provided function frees the memory allocated by 
  6392. WkfQueryActionList and WkfQueryActions to hold the returned list of actions. 
  6393.  
  6394.  
  6395. ΓòÉΓòÉΓòÉ <hidden> Example - WkfFreeActions ΓòÉΓòÉΓòÉ
  6396.  
  6397. The following pseudo-code illustrates how this interface might be used: 
  6398.  
  6399. PSZ pszType = "*.c";
  6400. PSZ pszProfile = "C:\\Desktop\\IBM C!C++ Tools 2.01\\IBM C!C++ Tools^Actions Profile";
  6401.  
  6402. PWKF_ACTIONS actions;
  6403. int i, ulActCount;
  6404.  
  6405. if (NO_ERROR == WkfQueryActions (pszFilename, pszType, &actions))
  6406. {
  6407.  /* Process returned list of actions */
  6408.  if ( (ulActCount = actions->ulCount) > 0)
  6409.   for (i=0; i<ulActCount ; i++)
  6410.     {
  6411.      StoreAction (actions->apActions[i]->pszActionName,
  6412.            actions->apActions[i]->pszActionClass,
  6413.            actions->apActions[i]->pszCommand,
  6414.            actions->apActions[i]->pszSrcMask,
  6415.            actions->apActions[i]->pszTgtMask,
  6416.            actions->apActions[i]->pszDllName,
  6417.            actions->apActions[i]->pszDllEntryName,
  6418.            actions->apActions[i]->ucActionType,
  6419.            actions->apActions[i]->ucRunMode,
  6420.            actions->apActions[i]->pszHelpCmd,
  6421.                 :
  6422.            );
  6423.     }
  6424.  
  6425.           :
  6426. }
  6427.  
  6428. /* Finished with list of actions */
  6429. WkfFreeActions(actions);
  6430.  
  6431.  
  6432. ΓòÉΓòÉΓòÉ 15.3.4. WkfQueryEnvirons ΓòÉΓòÉΓòÉ
  6433.  
  6434. WkfQueryEnvirons 
  6435.  
  6436. Select an item: 
  6437.  
  6438.  Function Syntax 
  6439.  Return Values 
  6440.  Notes 
  6441.  Examples 
  6442.  
  6443.  
  6444. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryEnvirons ΓòÉΓòÉΓòÉ
  6445.  
  6446. This WorkFrame/2*-provided function returns the list of environment variables, 
  6447. and their values, from the specified actions profile and the Default Actions 
  6448. Profile. 
  6449.  
  6450. #define INCL_WKFPRF
  6451. #include <wkf.h>
  6452.  
  6453. APIRET APIENTRY WkfQueryEnvirons (
  6454.    PSZ       pszPrfFileName,   /* Actions profile file name */
  6455.    PWKF_ENVIRONS  *ppwkfEnvirons   /* List of environments - returned */
  6456.    );
  6457.  
  6458.  
  6459. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPrfFilename ΓòÉΓòÉΓòÉ
  6460.  
  6461. pszPrfFilename (PSZ) - input 
  6462.  
  6463. The fully-qualified ASCIIZ file name of the actions profile whose environments 
  6464. to query along with those in the Default Actions Profile. 
  6465.  
  6466. If this field is NULL, then the environments are queried from the Default 
  6467. Actions Profile only. 
  6468.  
  6469.  
  6470. ΓòÉΓòÉΓòÉ <hidden> Parameter - *ppwkfEnvirons ΓòÉΓòÉΓòÉ
  6471.  
  6472. *ppwkfEnvirons (PWKF_ENVIRONS) - input/output 
  6473.  
  6474. On entry, this field should contain the address to contain the pointer to the 
  6475. PWKF_ENVIRONS return structure. 
  6476.  
  6477. On exit, this field is updated with the pointer to the WKF_ENVIRONS structure 
  6478. containing the list of environments. 
  6479.  
  6480.  
  6481. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryEnvirons ΓòÉΓòÉΓòÉ
  6482.  
  6483. (APIRET) - return values 
  6484.  
  6485. WkfQueryEnvirons returns the following values in addition to standard OS/2* 
  6486. return codes: 
  6487.  
  6488.  NO_ERROR 
  6489.        No errors occurred.  The list of environs from the specified actions 
  6490.        profile and the Default Actions Profile is returned. 
  6491.  
  6492.  WKF_INVALID_PROFILES 
  6493.        Both the specified actions profile and Default Actions Profile were 
  6494.        invalid.  No list is returned. 
  6495.  
  6496.  WKF_PROFILES_NOT_FOUND 
  6497.        Both the specified actions profile and Default Actions Profile were not 
  6498.        found.  No list is returned. 
  6499.  
  6500.  WKF_DFLTPROFILE_NOTFOUND 
  6501.        Default Actions Profile was not found.  If the specified actions profile 
  6502.        was found and was valid, then the list of environments from that profile 
  6503.        is returned. 
  6504.  
  6505.  WKF_INVALID_ACTIONSPROFILE 
  6506.        The specified actions profile was invalid.  If the Default Actions 
  6507.        Profile was valid, then the list of environments from that profile is 
  6508.        returned. 
  6509.  
  6510.  WKF_ACTIONSPROFILE_NOTFOUND 
  6511.        The specified actions profile was not found.  If the Default Actions 
  6512.        Profile was found and was valid, then the list of environments from that 
  6513.        profile is returned. 
  6514.  
  6515.  
  6516. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryEnvirons ΓòÉΓòÉΓòÉ
  6517.  
  6518. This WorkFrame/2*-provided function queries the merged list of environment 
  6519. variables from the pszPrfFilename actions profile, and the Default Actions 
  6520. Profile. If there are duplicate environment variables defined in the actions 
  6521. profile and the DAP, the environment variable found in the DAP is discarded. 
  6522.  
  6523. To obtain the list of environment variables only from the DAP, specify NULL for 
  6524. the pszPrfFileName field. 
  6525.  
  6526. After calling this function, you must call WkfFreeEnvirons to free the returned 
  6527. *ppfwkfEnvirons list if it is not NULL on exit. 
  6528.  
  6529. Note that some error return codes may result in a partially filled environments 
  6530. list. 
  6531.  
  6532. If no environments are present in either profile, then *ppwkfEnvirons is set to 
  6533. NULL even if NO_ERROR is returned.  Check for a NULL *ppwkfEnvirons value 
  6534. before using it. 
  6535.  
  6536.  
  6537. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryEnvirons ΓòÉΓòÉΓòÉ
  6538.  
  6539. The following pseudo-code illustrates how this interface might be used: 
  6540.  
  6541. PWKF_ENVIRONS Environs;
  6542. int ulEnvCount;
  6543. int i;
  6544.  
  6545. if (NO_ERROR == WkfQueryEnvirons("C:\\DESKTOP\\MY ACTIONS PROFILE", &Environs))
  6546.   {
  6547.    /* Process returned list of environment variables */
  6548.    if ( (ulEnvCount = Environs->ulCount) > 0)
  6549.     for (i=0; i<ulEnvCount ; i++)
  6550.     {
  6551.      StoreEnviron (Environs->apEnvirons[i]->pszEnvName,
  6552.             Environs->apEnvirons[i]->pszEnvStr);
  6553.           :
  6554.     }
  6555.           :
  6556.  
  6557.   } /* endif */
  6558.  
  6559.           :
  6560.  
  6561. /* Finished working with Environs pointer */
  6562. WkfFreeEnvirons(Environs);
  6563.  
  6564.  
  6565. ΓòÉΓòÉΓòÉ 15.3.5. WkfFreeEnvirons ΓòÉΓòÉΓòÉ
  6566.  
  6567. WkfFreeEnvirons 
  6568.  
  6569. Select an item: 
  6570.  
  6571.  Function Syntax 
  6572.  Return Values 
  6573.  Notes 
  6574.  Examples 
  6575.  
  6576.  
  6577. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfFreeEnvirons ΓòÉΓòÉΓòÉ
  6578.  
  6579. This WorkFrame/2*-provided function frees the list of environments returned by 
  6580. WkfQueryEnvirons. 
  6581.  
  6582. #define INCL_WKFPRF
  6583. #include <wkf.h>
  6584.  
  6585. VOID APIENTRY WkfFreeEnvirons (
  6586.    PWKF_ENVIRONS  *ppwkfEnvirons   /* Pointer to environments list structure to free */
  6587.    );
  6588.  
  6589.  
  6590. ΓòÉΓòÉΓòÉ <hidden> Parameter - *ppwkfEnvirons ΓòÉΓòÉΓòÉ
  6591.  
  6592. *ppwkfEnvirons (PWKF_ENVIRONS) - input 
  6593.  
  6594. A pointer to the PWKF_ENVIRONS structure returned by WkfQueryEnvirons. 
  6595.  
  6596. The memory allocated to this pointer will be freed. 
  6597.  
  6598.  
  6599. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfFreeEnvirons ΓòÉΓòÉΓòÉ
  6600.  
  6601. (VOID) - return values 
  6602.  
  6603. WkfFreeEnvirons has no return values. 
  6604.  
  6605.  
  6606. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfFreeEnvirons ΓòÉΓòÉΓòÉ
  6607.  
  6608. This WorkFrame/2*-provided function frees the memory allocated by the 
  6609. WkfQueryEnvirons function to hold the returned list of environments. 
  6610.  
  6611.  
  6612. ΓòÉΓòÉΓòÉ <hidden> Example - WkfFreeEnvirons ΓòÉΓòÉΓòÉ
  6613.  
  6614. The following pseudo-code illustrates how this interface might be used: 
  6615.  
  6616. PWKF_ENVIRONS Environs;
  6617. int ulEnvCount;
  6618. int i;
  6619.  
  6620. if (NO_ERROR == WkfQueryEnvirons("C:\\DESKTOP\\MY ACTIONS PROFILE", &Environs))
  6621.   {
  6622.    /* Process returned list of environment variables */
  6623.    if ( (ulEnvCount = Environs->ulCount) > 0)
  6624.     for (i=0; i<ulEnvCount ; i++)
  6625.     {
  6626.      StoreEnviron (Environs->apEnvirons[i]->pszEnvName,
  6627.             Environs->apEnvirons[i]->pszEnvStr);
  6628.           :
  6629.     }
  6630.           :
  6631.  
  6632.   } /* endif */
  6633.  
  6634.           :
  6635.  
  6636. /* Finished working with Environs pointer */
  6637. WkfFreeEnvirons(Environs);
  6638.  
  6639.  
  6640. ΓòÉΓòÉΓòÉ 15.3.6. WkfQueryTypes ΓòÉΓòÉΓòÉ
  6641.  
  6642. WkfQueryTypes 
  6643.  
  6644. Select an item: 
  6645.  
  6646.  Function Syntax 
  6647.  Return Values 
  6648.  Notes 
  6649.  Examples 
  6650.  
  6651.  
  6652. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryTypes ΓòÉΓòÉΓòÉ
  6653.  
  6654. This WorkFrame/2*-provided function returns the list of defined WorkFrame/2 
  6655. types. 
  6656.  
  6657. #define INCL_WKFPRF
  6658. #include <wkf.h>
  6659.  
  6660. APIRET APIENTRY WkfQueryTypes (
  6661.    ULONG    ulSearchType,  /* Pattern or user-defined */
  6662.    PWKF_TYPES  *ppwkfTypes   /* List of types - returned */
  6663.    );
  6664.  
  6665.  
  6666. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulSearchType ΓòÉΓòÉΓòÉ
  6667.  
  6668. ulSearchType (ULONG) - input 
  6669.  
  6670. This field can contain one of the following values: 
  6671.  
  6672.  1  WKF_TYPE_PATTERN 
  6673.       Currently, this is the only supported search type. 
  6674.  
  6675.  2  WKF_TYPE_USERDEFINE 
  6676.       Currently not supported. 
  6677.  
  6678.  
  6679. ΓòÉΓòÉΓòÉ <hidden> Parameter - *ppwkfTypes ΓòÉΓòÉΓòÉ
  6680.  
  6681. *ppwkfTypes (PWKF_TYPES) - input/output 
  6682.  
  6683. On entry, this field should contain the address to contain the pointer to the 
  6684. PWKF_TYPES return structure. 
  6685.  
  6686. On exit, this field is updated with the pointer to the WKF_TYPES structure 
  6687. containing the list of WorkFrame/2*-defined types. 
  6688.  
  6689. WorkFrame/2 types are defined on the Types page of the Default Actions Profile. 
  6690.  
  6691.  
  6692. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryTypes ΓòÉΓòÉΓòÉ
  6693.  
  6694. (APIRET) - return values 
  6695.  
  6696. WkfQueryTypes returns the following values in addition to standard OS/2* return 
  6697. codes: 
  6698.  
  6699.  NO_ERROR 
  6700.        No errors occurred.  The list of WorkFrame/2* types is returned. 
  6701.  
  6702.  WKF_DFLTPROFILE_NOTFOUND 
  6703.        Default Actions Profile was not found.  No list is returned. 
  6704.  
  6705.  
  6706. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryTypes ΓòÉΓòÉΓòÉ
  6707.  
  6708. This WorkFrame/2*-provided function queries the list of WorkFrame/2 types 
  6709. defined in the Default Actions Profile. 
  6710.  
  6711. After calling this function, you must call WkfFreeTypes to free the returned 
  6712. *ppwkfTypes list if it is not NULL on exit. 
  6713.  
  6714. If no WorkFrame/2 types have been defined, then *ppwkfTypes is set to NULL even 
  6715. if NO_ERROR is returned.  Check for a NULL *ppwkfTypes value before using it. 
  6716.  
  6717.  
  6718. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryTypes ΓòÉΓòÉΓòÉ
  6719.  
  6720. The following pseudo-code illustrates how this interface might be used: 
  6721.  
  6722. PWKF_TYPES Types;
  6723. int ulTypCount;
  6724. int i;
  6725.  
  6726. if (NO_ERROR == WkfQueryTypes(WKF_TYPE_PATTERN, &Types))
  6727.   {
  6728.    /* Process returned list of types */
  6729.    if ( (ulTypCount = Types->ulCount) > 0)
  6730.     for (i=0; i<ulTypCount ; i++)
  6731.     {
  6732.      StoreType (Types->apTypes[i]->pszTypeName,
  6733.           Types->apTypes[i]->pszData);
  6734.           :
  6735.     }
  6736.           :
  6737.  
  6738.   } /* endif */
  6739.  
  6740.           :
  6741.  
  6742. /* Finished working with Types pointer */
  6743. WkfFreeTypes(Types);
  6744.  
  6745.  
  6746. ΓòÉΓòÉΓòÉ 15.3.7. WkfFreeTypes ΓòÉΓòÉΓòÉ
  6747.  
  6748. WkfFreeTypes 
  6749.  
  6750. Select an item: 
  6751.  
  6752.  Function Syntax 
  6753.  Return Values 
  6754.  Notes 
  6755.  Examples 
  6756.  
  6757.  
  6758. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfFreeTypes ΓòÉΓòÉΓòÉ
  6759.  
  6760. This WorkFrame/2*-provided function frees the list of environments returned by 
  6761. WkfQueryEnvirons. 
  6762.  
  6763. #define INCL_WKFPRF
  6764. #include <wkf.h>
  6765.  
  6766. VOID APIENTRY WkfFreeTypes (
  6767.    PWKF_TYPES  pwkfTypes   /* Pointer to types list structure to free */
  6768.    );
  6769.  
  6770.  
  6771. ΓòÉΓòÉΓòÉ <hidden> Parameter - pwkfTypes ΓòÉΓòÉΓòÉ
  6772.  
  6773. pwkfTypes (PWKF_TYPES) - input 
  6774.  
  6775. A pointer to the PWKF_TYPES structure returned by WkfQueryTypes. 
  6776.  
  6777. The memory allocated to this pointer will be freed. 
  6778.  
  6779.  
  6780. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfFreeTypes ΓòÉΓòÉΓòÉ
  6781.  
  6782. (VOID) - return values 
  6783.  
  6784. WkfFreeTypes has no return values. 
  6785.  
  6786.  
  6787. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfFreeTypes ΓòÉΓòÉΓòÉ
  6788.  
  6789. This WorkFrame/2*-provided function frees the memory allocated by the 
  6790. WkfQueryTypes function to hold the returned list of WorkFrame/2 types. 
  6791.  
  6792.  
  6793. ΓòÉΓòÉΓòÉ <hidden> Example - WkfFreeTypes ΓòÉΓòÉΓòÉ
  6794.  
  6795. The following pseudo-code illustrates how this interface might be used: 
  6796.  
  6797. PWKF_TYPES Types;
  6798. int ulTypCount;
  6799. int i;
  6800.  
  6801. if (NO_ERROR == WkfQueryTypes(WKF_TYPE_PATTERN, &Types))
  6802.   {
  6803.    /* Process returned list of types */
  6804.    if ( (ulTypCount = Types->ulCount) > 0)
  6805.     for (i=0; i<ulTypCount ; i++)
  6806.     {
  6807.      StoreType (Types->apTypes[i]->pszTypeName,
  6808.           Types->apTypes[i]->pszData);
  6809.           :
  6810.     }
  6811.  
  6812.           :
  6813.  
  6814.   } /* endif */
  6815.  
  6816.           :
  6817.  
  6818. /* Finished working with Types pointer */
  6819. WkfFreeTypes(Types);
  6820.  
  6821.  
  6822. ΓòÉΓòÉΓòÉ 16. Router ΓòÉΓòÉΓòÉ
  6823.  
  6824. This section describes the messages and APIs that integrated tools can use to 
  6825. interact with the WorkFrame/2* router. 
  6826.  
  6827.  
  6828. ΓòÉΓòÉΓòÉ 16.1. Using the Router APIs ΓòÉΓòÉΓòÉ
  6829.  
  6830. The router integrates any kind of tool that OS/2* supports, including OS/2 
  6831. tools that run under: 
  6832.  
  6833.  o VIO 
  6834.  o Presentation Manager* 
  6835.  o Workplace Shell* 
  6836.  
  6837.  Clients register for communication with the WorkFrame/2* router using the 
  6838.  WkfInitialize API. Typically, a client registers with the router when it 
  6839.  opens, and terminates communication (using WkfTerminate) before it closes. 
  6840.  Clients use the WkfNotify API to send messages to the router. 
  6841.  
  6842.  WkfInitialize returns a router handle that is used to identify the routing 
  6843.  session.  The client must keep track of this handle to send messages and 
  6844.  terminate the routing session. 
  6845.  
  6846.  Each router message has an associated message information structure that is 
  6847.  passed long with it.  When a client sends a message, it must first allocate 
  6848.  space for the appropriate structure using WkfAllocMsgData, initialize the 
  6849.  allocated structure, and then send it using WkfNotify. 
  6850.  
  6851.  Most of the router messages (described in this section) are information 
  6852.  messages that are meant for broadcast to clients. Others, particularly 
  6853.  WKFM_EXECUTEACTION, WKFM_LOGMESSAGE, and WKFM_LOGERROR, are explicit command 
  6854.  messages that the router passes on to other clients for execution.  For 
  6855.  example, the router passes a WKFM_LOGMESSAGE message on to the Action Log to 
  6856.  display a message on behalf of the sender. 
  6857.  
  6858.  
  6859. ΓòÉΓòÉΓòÉ 16.1.1. Receiving Router Messages ΓòÉΓòÉΓòÉ
  6860.  
  6861. Clients receive messages from the router in one of three ways, depending on the 
  6862. communication mode specified at initialization: 
  6863.  
  6864.  Presentation Manager* (PM) message queues 
  6865.            This is the recommended procedure for PM programs. The router posts 
  6866.            the message on the queue, with an initialized PWKF_SENDERINFO 
  6867.            structure in MP1, and a corresponding initialized message 
  6868.            information structure in MP2. 
  6869.  
  6870.            Note for PM Applications:  The WorkFrame/2 router reserves all 
  6871.                                       message IDs from WM_USER to WM_USER+19, 
  6872.                                       inclusive.  Do not use any message IDs 
  6873.                                       within this range to avoid conflicts with 
  6874.                                       router IDs. 
  6875.  
  6876.  SOM methods 
  6877.            Workplace Shell*-integrated programs should use this communication 
  6878.            mode. The SOM object should define a WkfReceiveMsg method to receive 
  6879.            router messages. 
  6880.  
  6881.  Named message pipes 
  6882.  
  6883.            Note:  This mode of router communication has not yet been 
  6884.                   implemented, however, it will be implemented in the near 
  6885.                   future as documented here.  If you have an immediate need to 
  6886.                   integrate a non-PM program with WorkFrame/2*, please send a 
  6887.                   note to the workframe@vnet.ibm.com via the Internet. 
  6888.  
  6889.            This is the recommended communication mode for non-PM programs.  The 
  6890.            router writes a message to the pipe in the following format: 
  6891.  
  6892.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6893.                         Γöé    Type            Γöé          Description                   Γöé
  6894.                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6895.                         ΓöéULONG               ΓöéSize of the message block (standard for Γöé
  6896.                         Γöé                    Γöénamed message pipes)                    Γöé
  6897.                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6898.                         ΓöéULONG               ΓöéMessage ID of router message being sent Γöé
  6899.                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6900.                         ΓöéWKF_SENDERINFO      ΓöéSender information structure            Γöé
  6901.                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6902.                         ΓöéMessage information ΓöéStructure type depends on message being Γöé
  6903.                         Γöéstructure           Γöésent                                    Γöé
  6904.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6905.  
  6906.             The pipe must be a named message pipe with duplex access mode, and 
  6907.             an instance count of one. 
  6908.  
  6909.             Clients receiving messages through named pipes should check for the 
  6910.             ERROR_MORE_DATA return code from the DosRead OS/2* API in case the 
  6911.             read buffer was not large enough to hold the entire message block. 
  6912.  
  6913.  
  6914. ΓòÉΓòÉΓòÉ 16.1.2. Message Information Structures ΓòÉΓòÉΓòÉ
  6915.  
  6916. Every router message is sent with a corresponding information structure that 
  6917. contains data about the message. 
  6918.  
  6919. The first field in every message structure is a ULONG indicating the size of 
  6920. the structure. 
  6921.  
  6922. Following is a table showing the router messages and the names of their 
  6923. corresponding data structure typedefs: 
  6924.  
  6925. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6926. ΓöéRouter Message ID        ΓöéData Structure        Γöé
  6927. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6928. ΓöéWKFM_ACTIONEND           ΓöéWKF_ACTIONENDINFO     Γöé
  6929. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6930. ΓöéWKFM_ACTIONSTART         ΓöéWKF_ACTIONSTARTINFO   Γöé
  6931. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6932. ΓöéWKFM_APPSTARTNOTIFY      ΓöéWKF_APPSTARTINFO      Γöé
  6933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6934. ΓöéWKFM_APPTERMNOTIFY       ΓöéWKF_APPTERMINFO       Γöé
  6935. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6936. ΓöéWKFM_CLIENTCHANGED       ΓöéWKF_CHANGEINFO        Γöé
  6937. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6938. ΓöéWKFM_CLIENTDELETED       ΓöéWKF_DELETEINFO        Γöé
  6939. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6940. ΓöéWKFM_CLIENTMOVED         ΓöéWKF_MOVEINFO (added)  Γöé
  6941. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6942. ΓöéWKFM_CLIENTRENAMED       ΓöéWKF_RENAMEINFO        Γöé
  6943. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6944. ΓöéWKFM_EXECUTEACTION       ΓöéWKF_EXECUTEINFO       Γöé
  6945. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6946. ΓöéWKFM_FILECHANGED         ΓöéWKF_FILECHANGEINFO    Γöé
  6947. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6948. ΓöéWKFM_FILEDELETED         ΓöéWKF_FILEDELETEINFO    Γöé
  6949. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6950. ΓöéWKFM_FILERENAMED         ΓöéWKF_FILERENAMEINFO    Γöé
  6951. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6952. ΓöéWKFM_INITIALIZE          ΓöéWKF_INITIALIZEINFO    Γöé
  6953. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6954. ΓöéWKFM_LOGERROR            ΓöéWKF_ERRORMSGINFO      Γöé
  6955. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6956. ΓöéWKFM_LOGMESSAGE          ΓöéWKF_LOGMSGINFO        Γöé
  6957. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6958.  
  6959.  
  6960. ΓòÉΓòÉΓòÉ 16.1.3. Using the Message Data Structures ΓòÉΓòÉΓòÉ
  6961.  
  6962. Each router message sent is accompanied by a corresponding information 
  6963. structure (see Message Information Structures) that could be allocated in 
  6964. shared memory.  When a client receives a router message, it should first issue 
  6965. a WkfAccessMsgData call to obtain permission before accessing the information 
  6966. structure. 
  6967.  
  6968. To send a message to the router, a client should first allocate memory for the 
  6969. corresponding information structure using WkfAllocMsgData. Many of the router 
  6970. information structures contain a CHAR array with a single element that is 
  6971. declared at the end of the structure.  For example, notice the szParm[1] member 
  6972. in the following structure: 
  6973.  
  6974. typedef struct _WKF_RENAMEINFO
  6975.   {
  6976.    ULONG  cb;      /* Size of this structure, in bytes */
  6977.    ULONG  flChanged;  /* Reserved */
  6978.    CHAR  szParm[1];  /* Name of file renamed */
  6979.   } WKF_RENAMEINFO;
  6980.  
  6981. Such members are conceptualized as dynamically-sized null-terminated strings 
  6982. that should be explicitly allocated before they are initialized. When 
  6983. allocating memory for the information structure using WkfAllocMsgData, specify 
  6984. enough space for the structure, plus an additional amount for the last string 
  6985. member.  The rest of the string can be accessed via the first element of the 
  6986. array since the elements are stored contiguously in memory. Initialize and copy 
  6987. such strings using the strcpy() C library function. 
  6988.  
  6989.  
  6990. ΓòÉΓòÉΓòÉ 16.2. Router APIs ΓòÉΓòÉΓòÉ
  6991.  
  6992. This section descibes: 
  6993.  
  6994.   1. WorkFrame/2*-supplied functions for registering and deregistering from the 
  6995.      WorkFrame/2 router, and sending and receiving router messages 
  6996.  
  6997.   2. WorkFrame/2-defined messages used within the message routing facilities. 
  6998.  
  6999.  The function prototypes and message definitions for the router APIs are in the 
  7000.  WKFMSG.H C header file. 
  7001.  
  7002.  
  7003. ΓòÉΓòÉΓòÉ 16.2.1. WkfInitialize ΓòÉΓòÉΓòÉ
  7004.  
  7005. WkfInitialize 
  7006.  
  7007. Select an item: 
  7008.  
  7009.  Function Syntax 
  7010.  Return Values 
  7011.  Notes 
  7012.  Examples 
  7013.  
  7014.  
  7015. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfInitialize ΓòÉΓòÉΓòÉ
  7016.  
  7017. This WorkFrame/2*-provided function initializes the message routing facilities 
  7018. for use by an integrated tool or WorkFrame/2 object. 
  7019.  
  7020. #define INCL_WKFMSG
  7021. #include <wkf.h>
  7022.  
  7023. extern LHANDLE APIENTRY WkfInitialize (
  7024.    ULONG   flConnectType,  /* Connection type */
  7025.    LHANDLE  hClient,     /* Client handle */
  7026.    ULONG   ulClientType,   /* Router client type this client is registering as */
  7027.    PSZ    pszClientTitle,  /* Client name */
  7028.    ULONG   flTypeInterest,  /* Types of clients this client has interest in */
  7029.    ULONG   flOptions     /* Registration options */
  7030.    );
  7031.  
  7032.  
  7033. ΓòÉΓòÉΓòÉ <hidden> Parameter - flConnectType ΓòÉΓòÉΓòÉ
  7034.  
  7035. flConnectType (ULONG) - input 
  7036.  
  7037. This field determines how you want to establish the connection with the 
  7038. WorkFrame/2* router.  Expected values for this field are: 
  7039.  
  7040.  WKF_CONNECT_PM 
  7041.       Establishes communication with the router via a Presentation Manager* 
  7042.       (PM) message queue.  This is recommended for programs that use PM 
  7043.       services. 
  7044.  
  7045.  WKF_CONNECT_SHELL 
  7046.       Establishes communication with the router via SOM methods. This is the 
  7047.       recommended connection type for programs that use Workplace Shell* 
  7048.       objects. 
  7049.  
  7050.       To enable communication with the router, the Workplace Shell object must 
  7051.       define a WkfReceiveMsg SOM method. 
  7052.  
  7053.  WKF_CONNECT_PIPE 
  7054.       Establishes communication with the router via a named pipe. This is 
  7055.       recommended for non-PM programs. 
  7056.  
  7057.       Note:  This communications mode has not yet been implemented.  If you 
  7058.              have an immediate need to integrate a non-PM program with 
  7059.              WorkFrame/2, please send a note to workframe@vnet.ibm.com via the 
  7060.              Internet. 
  7061.  
  7062.  
  7063. ΓòÉΓòÉΓòÉ <hidden> Parameter - hClient ΓòÉΓòÉΓòÉ
  7064.  
  7065. hClient (LHANDLE) - input 
  7066.  
  7067. This field identifies the client that wants to register with the router.  The 
  7068. expected value for this field depends on the connection type specified by the 
  7069. flConnectType field, as illustrated by the following table: 
  7070.  
  7071. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7072. ΓöéIf flConnectType is ΓöéThis field should contain...  Γöé
  7073. Γöéset to...           Γöé                              Γöé
  7074. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7075. ΓöéWKF_CONNECT_PM      ΓöéThe window handle of the      Γöé
  7076. Γöé                    ΓöéPresentation Manager*         Γöé
  7077. Γöé                    Γöéprogram's main window.  The   Γöé
  7078. Γöé                    Γöérouter will send messages to  Γöé
  7079. Γöé                    Γöéthis window's message queue.  Γöé
  7080. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7081. ΓöéWKF_CONNECT_SHELL   ΓöéThe somSelf identity pointer  Γöé
  7082. Γöé                    Γöéof the SOM object that is     Γöé
  7083. Γöé                    Γöéregistering with the router.  Γöé
  7084. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7085. ΓöéWKF_CONNECT_PIPE    ΓöéThe pipe handle of the named  Γöé
  7086. Γöé                    Γöépipe to be used to communicateΓöé
  7087. Γöé                    Γöéwith the router.  The message Γöé
  7088. Γöé                    Γöérouter will send router       Γöé
  7089. Γöé                    Γöémessages to this pipe.        Γöé
  7090. Γöé                    ΓöéThe pipe must be a named      Γöé
  7091. Γöé                    Γöémessage pipe with duplex      Γöé
  7092. Γöé                    Γöéaccess mode, and an instance  Γöé
  7093. Γöé                    Γöécount of one.                 Γöé
  7094. Γöé                    ΓöéNOTE: This communications modeΓöé
  7095. Γöé                    Γöéhas not yet been implemented. Γöé
  7096. Γöé                    ΓöéIf you have an immediate need Γöé
  7097. Γöé                    Γöéto integrate a non-PM program Γöé
  7098. Γöé                    Γöéwith WorkFrame/2, please send Γöé
  7099. Γöé                    Γöéa note to                     Γöé
  7100. Γöé                    Γöéworkframe@vnet.ibm.com via theΓöé
  7101. Γöé                    ΓöéInternet.                     Γöé
  7102. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7103.  
  7104.  
  7105. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulClientType ΓòÉΓòÉΓòÉ
  7106.  
  7107. ulClientType (ULONG) - input 
  7108.  
  7109. This field identifies the client's type to the router. Expected values for this 
  7110. field are: 
  7111.  
  7112.  WKF_TYPE_PROJECT 
  7113.       The client is a WorkFrame/2* project. 
  7114.  
  7115.  WKF_TYPE_FOLDER 
  7116.       The client is a Workplace Shell* folder. 
  7117.  
  7118.  WKF_TYPE_PROFILE 
  7119.       The client is a WorkFrame/2 actions profile 
  7120.  
  7121.  WKF_TYPE_MAKEMAKE 
  7122.       The client is a makefile generation tool. 
  7123.  
  7124.  WKF_TYPE_LIBRARY 
  7125.       The client is a library and object manager. 
  7126.  
  7127.  WKF_TYPE_MONITOR 
  7128.       The client is a monitor (in the same sense as the WorkFrame/2* Monitor). 
  7129.  
  7130.  WKF_TYPE_FILETOOL 
  7131.       The client is a tool defined as a file-scoped action. 
  7132.  
  7133.  WKF_TYPE_PROJTOOL 
  7134.       The client is a tool defined as a project-scoped action. 
  7135.  
  7136.  WKF_TYPE_ROUTER 
  7137.       The client is a router. 
  7138.  
  7139.  When a client registers with the WorkFrame/2* router, it can specify the types 
  7140.  of clients it wishes to receive routed messages from (see the flTypeInterest 
  7141.  field).  The client type an object registers as determines which clients 
  7142.  receive its messages. 
  7143.  
  7144.  
  7145. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszClientTitle ΓòÉΓòÉΓòÉ
  7146.  
  7147. pszClientTitle (PSZ) - input 
  7148.  
  7149. Title string of the client.  The router uses this string to identify the client 
  7150. when writing an entry to the WorkFrame/2* Action Log on its behalf. 
  7151.  
  7152.  
  7153. ΓòÉΓòÉΓòÉ <hidden> Parameter - flTypeInterest ΓòÉΓòÉΓòÉ
  7154.  
  7155. flTypeInterest (ULONG) - input 
  7156.  
  7157. Flag to indicate the types of clients the registering object wishes to receive 
  7158. messages from.  Use this field to tell the router that the registering object 
  7159. wishes to receive broadcasted messages from the client types specified in this 
  7160. field. 
  7161.  
  7162. See ulClientType for a list of the valid client types for this type-interest 
  7163. flag. 
  7164.  
  7165. Interest types can be combined using the | (bitwise OR) operator. For example, 
  7166. to receive messages from base projects, actions profiles, and project- and 
  7167. file-scoped action clients, set this field to: 
  7168. WKF_TYPE_PROJECT | WKF_TYPE_PROFILE | WKF_TYPE_PROJTOOL | WKF_TYPE_FILETOOL 
  7169.  
  7170. Specify WKF_TYPE_ALL to receive messages from all client types. 
  7171.  
  7172.  
  7173. ΓòÉΓòÉΓòÉ <hidden> Parameter - flOptions ΓòÉΓòÉΓòÉ
  7174.  
  7175. flOptions (ULONG) - input 
  7176.  
  7177. Registration options flag.  This field indicates whether initialization 
  7178. messages for this object should be written to the message log or not.  Set this 
  7179. field to one of the following values: 
  7180.  
  7181.  WKF_OPT_NONE 
  7182.       Do not write an entry to the Action Log each time this function is called 
  7183.       for this client. 
  7184.  
  7185.  WKF_OPT_WRITELOG 
  7186.       Write an entry to the Action Log each time this function is called for 
  7187.       this client 
  7188.  
  7189.  This function is typically called for a client each time it is opened. 
  7190.  
  7191.  
  7192. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfInitialize ΓòÉΓòÉΓòÉ
  7193.  
  7194. (LHANDLE) - return values 
  7195.  
  7196. WkfInitialize returns the following values: 
  7197.  
  7198.  NULLHANDLE 
  7199.        An error occurred. 
  7200.  
  7201.  Other 
  7202.        Router handle. 
  7203.  
  7204.  
  7205. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfInitialize ΓòÉΓòÉΓòÉ
  7206.  
  7207. This function establishes a connection with the WorkFrame/2* router and 
  7208. determines the mode of communication with the registering client. 
  7209.  
  7210. This must be the first router call issued by any object or tool that wishes to 
  7211. register itself with the router. Registering with the router gives a client 
  7212. access to its services. 
  7213.  
  7214. This function returns a router handle, which is NULL if the initialization was 
  7215. not successful. The router handle is used to uniquely identify a routing 
  7216. session. You will need to keep track of this value to call other router APIs 
  7217. such as WkfNotify and WkfTerminate. 
  7218.  
  7219.  
  7220. ΓòÉΓòÉΓòÉ <hidden> Example - WkfInititalize ΓòÉΓòÉΓòÉ
  7221.  
  7222. The following pseudo-code illustrates how to use this interface to register a 
  7223. PM library manager program with the WorkFrame/2 router: 
  7224.  
  7225. hRouter = WkfInitialize (WKF_CONNECT_PM,     /* PM connection type */
  7226.              hwnd,          /* My window handle */
  7227.              WKF_TYPE_LIBRARY,    /* Client type */
  7228.              "IBM Library Manager", /* Client title */
  7229.              WKF_TYPE_PROJECT  |   /* Listening interest */
  7230.              WKF_TYPE_LIBRARY  |
  7231.              WKF_TYPE_MONITOR  |
  7232.              WKF_TYPE_FILETOOL |
  7233.              WKF_TYPE_FOLDER,
  7234.              WKF_OPT_NONE);     /* No entry in Action Log */
  7235.  
  7236. if (hRouter==NULLHANDLE)
  7237.  ReportError ("Could not connect with WF Router.");
  7238.  
  7239.  
  7240. ΓòÉΓòÉΓòÉ <hidden> WkfReceiveMsg ΓòÉΓòÉΓòÉ
  7241.  
  7242. WkfReceiveMsg 
  7243.  
  7244. Select an item: 
  7245.  
  7246.  Function Syntax 
  7247.  Return Values 
  7248.  Notes 
  7249.  Examples 
  7250.  
  7251.  
  7252. ΓòÉΓòÉΓòÉ <hidden> Syntax - _WkfReceiveMsg ΓòÉΓòÉΓòÉ
  7253.  
  7254. If the registering client is a Workplace Shell object, it should provide this 
  7255. method to receive messages from the WorkFrame/2* router. 
  7256.  
  7257. SOM_Scope BOOL SOMLINK mrClient_WkfReceiveMsg (
  7258.    SOMAny  *somClient,  /* Client's somSelf Pointer */
  7259.    ULONG   idMsg,     /* WorkFrame/2 message ID */
  7260.    PVOID   pSenderInfo,  /* Sender information structure */
  7261.    PVOID   pMsgData    /* Message information structure */
  7262.    );
  7263.  
  7264.  
  7265. ΓòÉΓòÉΓòÉ <hidden> Parameter - somClient ΓòÉΓòÉΓòÉ
  7266.  
  7267. somClient (SOMAny) - input 
  7268.  
  7269. The somSelf pointer of this client.  Substitute the SOMAny type for the name of 
  7270. this client's SOM class when defining this function. 
  7271.  
  7272.  
  7273. ΓòÉΓòÉΓòÉ <hidden> Parameter - idMsg ΓòÉΓòÉΓòÉ
  7274.  
  7275. idMsg (ULONG) - input 
  7276.  
  7277. The message ID of the WorkFrame/2*-defined message being received. 
  7278.  
  7279.  
  7280. ΓòÉΓòÉΓòÉ <hidden> Parameter - pSenderInfo ΓòÉΓòÉΓòÉ
  7281.  
  7282. pSenderInfo (PVOID) - input 
  7283.  
  7284. Pointer to an initialized structure containing information about the sender of 
  7285. the message. 
  7286.  
  7287.  
  7288. ΓòÉΓòÉΓòÉ <hidden> Parameter - pMsgData ΓòÉΓòÉΓòÉ
  7289.  
  7290. pMsgData (PVOID) - input 
  7291.  
  7292. Pointer to an initialized message data structure containing information about 
  7293. the message. 
  7294.  
  7295.  
  7296. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfReceiveMsg ΓòÉΓòÉΓòÉ
  7297.  
  7298. (BOOL) - return values 
  7299.  
  7300. WkfReceiveMsg should return the following values: 
  7301.  
  7302.  TRUE 
  7303.        Message was received successfully, without errors. 
  7304.  
  7305.  FALSE 
  7306.        An error occurred. 
  7307.  
  7308.  
  7309. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfReceiveMsg ΓòÉΓòÉΓòÉ
  7310.  
  7311. This SOM function must be defined for a SOM client that wishes to register with 
  7312. the WorkFrame/2* router.  The router calls this function when it sends the 
  7313. client a message. 
  7314.  
  7315. The body of this function typically contains a CASE statement switching on all 
  7316. the messages that the object is interested in processing. 
  7317.  
  7318.  
  7319. ΓòÉΓòÉΓòÉ <hidden> Example - WkfReceiveMsg ΓòÉΓòÉΓòÉ
  7320.  
  7321. @@@@@ 
  7322.  
  7323.  
  7324. ΓòÉΓòÉΓòÉ 16.2.2. WkfNotify ΓòÉΓòÉΓòÉ
  7325.  
  7326. WkfNotify 
  7327.  
  7328. Select an item: 
  7329.  
  7330.  Function Syntax 
  7331.  Return Values 
  7332.  Notes 
  7333.  Examples 
  7334.  
  7335.  
  7336. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfNotify ΓòÉΓòÉΓòÉ
  7337.  
  7338. This WorkFrame/2*-provided function sends a request or notification message to 
  7339. the router for execution or broadcast to existing clients. 
  7340.  
  7341. #define INCL_WKFMSG
  7342. #include <wkf.h>
  7343.  
  7344. extern BOOL APIENTRY WkfNotify (
  7345.    LHANDLE  hRouter,  /* Router handle */
  7346.    LHANDLE  hClient,  /* Client handle */
  7347.    ULONG   idMsg,   /* Message ID */
  7348.    PVOID   uMsgData  /* Pointer to message information structure */
  7349.    );
  7350.  
  7351.  
  7352. ΓòÉΓòÉΓòÉ <hidden> Parameter - hRouter ΓòÉΓòÉΓòÉ
  7353.  
  7354. hRouter (LHANDLE) - input 
  7355.  
  7356. Router handle returned by the WkfInitialize function. 
  7357.  
  7358.  
  7359. ΓòÉΓòÉΓòÉ <hidden> Parameter - hClient ΓòÉΓòÉΓòÉ
  7360.  
  7361. hClient (LHANDLE) - input 
  7362.  
  7363. Client handle identifying the sender of the message.  Set this field to contain 
  7364. the same client handle that was specified when the sender called WkfInitialize 
  7365. to register with the router. 
  7366.  
  7367.  
  7368. ΓòÉΓòÉΓòÉ <hidden> Parameter - idMsg ΓòÉΓòÉΓòÉ
  7369.  
  7370. idMsg (LHANDLE) - input 
  7371.  
  7372. Identifier of the router message being sent. 
  7373.  
  7374. See WorkFrame/2-defined Messages for more information on router messages. 
  7375.  
  7376.  
  7377. ΓòÉΓòÉΓòÉ <hidden> Parameter - uMsgData ΓòÉΓòÉΓòÉ
  7378.  
  7379. uMsgData (PVOID) - input 
  7380.  
  7381. A pointer to an initialized data structure containing information about the 
  7382. message being sent. 
  7383.  
  7384. See Message Data Structures for more information on router message information 
  7385. structures. 
  7386.  
  7387.  
  7388. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfNotify ΓòÉΓòÉΓòÉ
  7389.  
  7390. (BOOL) - return values 
  7391.  
  7392. WkfNotify returns the following values: 
  7393.  
  7394.  TRUE 
  7395.        Message was sent successfully, without errors. 
  7396.  
  7397.  FALSE 
  7398.        An error occurred. 
  7399.  
  7400.  
  7401. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfNotify ΓòÉΓòÉΓòÉ
  7402.  
  7403. Use this WorkFrame/2*-provided function to send request or notification 
  7404. messages to the router for execution or broadcast to interested clients. This 
  7405. function broadcasts messages synchronously, that is, it does not complete until 
  7406. the message has been processed by all interested clients. 
  7407.  
  7408. Review the list of router messages and ensure that a message is sent whenever a 
  7409. relevant event occurs.  For example, if the client is a base project, the fact 
  7410. that its access method (PAM) was changed, may be of some significance to 
  7411. another registered client, such as an actions profile, if it defines actions 
  7412. that cannot be executed in the file system supported by the new PAM. In this 
  7413. case, the client should send the router the WKFM_CLIENTCHANGED message, citing 
  7414. the WKF_PROJECT_ACCESSMETHOD change flag in the WKF_CHANGEINFO data structure. 
  7415.  
  7416.  
  7417. ΓòÉΓòÉΓòÉ <hidden> Example - WkfNotify ΓòÉΓòÉΓòÉ
  7418.  
  7419. The following pseudo-code illustrates how a PM program could use this interface 
  7420. to broadcast a WKFM_FILECHANGED message: 
  7421.  
  7422. /* Build message info structure */
  7423. PWKF_FILECHANGEINFO pMsgInfo;
  7424. ULONG cSize;
  7425.  
  7426. /* Allocate message data */
  7427. cSize = sizeof(PWKF_FILECHANGEINFO) + sizeof(szFileNames) + 1;
  7428.  
  7429. pMsgInfo = (PWKF_FILECHANGEINFO) WkfAllocMsgData (cSize);
  7430.  
  7431. j = sprintf(pMsgInfo->szParm, "%s"WKF_LIST_DELIM"%s", szPrjFile, szChangedFile);
  7432. pMsgInfo->cb = cSize;
  7433.  
  7434. /* Now send message */
  7435. WkfNotify ( hRouter,      /* Router handle */
  7436.       hwnd,        /* My window handle */
  7437.       WKFM_FILECHANGED,  /* Message ID */
  7438.       (PVOID)pMsgInfo);  /* Pointer to message structure */
  7439.  
  7440. /* Always free message data after sending it */
  7441. WkfFreeMsgData (pMsgData);
  7442.  
  7443.  
  7444. ΓòÉΓòÉΓòÉ 16.2.3. WkfAccessMsgData ΓòÉΓòÉΓòÉ
  7445.  
  7446. WkfAccessMsgData 
  7447.  
  7448. Select an item: 
  7449.  
  7450.  Function Syntax 
  7451.  Return Values 
  7452.  Notes 
  7453.  Examples 
  7454.  
  7455.  
  7456. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfAccessMsgData ΓòÉΓòÉΓòÉ
  7457.  
  7458. If a message queue is used for client-router communication, use this interface 
  7459. to obtain permission to access the received message data. 
  7460.  
  7461. #define INCL_WKFMSG
  7462. #include <wkf.h>
  7463.  
  7464. extern BOOL APIENTRY WkfAccessMsgData (
  7465.    PVOID   pMsgData  /* Pointer to message information structure */
  7466.    );
  7467.  
  7468.  
  7469. ΓòÉΓòÉΓòÉ <hidden> Parameter - pMsgData ΓòÉΓòÉΓòÉ
  7470.  
  7471. pMsgData (PVOID) - input 
  7472.  
  7473. Pointer to the message information structure to access. 
  7474.  
  7475.  
  7476. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfAccessMsgData ΓòÉΓòÉΓòÉ
  7477.  
  7478. (BOOL) - return values 
  7479.  
  7480. WkfAccessMsgData returns the following values: 
  7481.  
  7482.  TRUE 
  7483.        Message data successfully accessed. 
  7484.  
  7485.  FALSE 
  7486.        An error occurred. 
  7487.  
  7488.  
  7489. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfAccessMsgData ΓòÉΓòÉΓòÉ
  7490.  
  7491. Use this function to obtain access incoming message data. 
  7492.  
  7493. Message data may reside in shared memory, thus permission to access shared 
  7494. memory object must first be granted.  Call this function after receiving an 
  7495. incoming message from the router. 
  7496.  
  7497.  
  7498. ΓòÉΓòÉΓòÉ <hidden> Example - WkfAccessMsgData ΓòÉΓòÉΓòÉ
  7499.  
  7500. The following pseudo-code illustrates how this interface could be used by a 
  7501. client registered via the PM connection type: 
  7502.  
  7503.  
  7504.     :
  7505. /* Handle MOVED and RENAMED message cases in window procedure */
  7506.  
  7507. case WKFM_CLIENTRENAMED:
  7508. case WKFM_CLIENTMOVED:
  7509.  
  7510.   PWKF_RENAMEINFO pMsgData
  7511.   PSZ       pszNewName, pszOldName;
  7512.  
  7513.   /* Make sure we can access message data */
  7514.   if ( WkfAccessMsgData (mp2) )
  7515.    {
  7516.    pMsgData = (PWKF_RENAMEINFO)mp2;  /* Cast to msg info structure type */
  7517.  
  7518.    /* Access message data by their offsets */
  7519.    pszOldName = pMsgData->szParm + strlen(pMsgData->MsgParm) + 1;
  7520.    pszNewName = pszOldName + strlen(pszOldName) + 1;
  7521.          :
  7522.    < Process message data >
  7523.          :
  7524.    }
  7525.  
  7526.    return ((MRESULT) TRUE );
  7527.  
  7528.  
  7529. ΓòÉΓòÉΓòÉ 16.2.4. WkfAllocMsgData ΓòÉΓòÉΓòÉ
  7530.  
  7531. WkfAllocMsgData 
  7532.  
  7533. Select an item: 
  7534.  
  7535.  Function Syntax 
  7536.  Return Values 
  7537.  Notes 
  7538.  Examples 
  7539.  
  7540.  
  7541. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfAllocMsgData ΓòÉΓòÉΓòÉ
  7542.  
  7543. Use this WorkFrame/2*-provided function to allocate space for outgoing message 
  7544. data.  A pointer to the newly-allocated space is returned. 
  7545.  
  7546. #define INCL_WKFMSG
  7547. #include <wkf.h>
  7548.  
  7549. extern PVOID APIENTRY WkfAllocMsgData (
  7550.    ULONG   cbAlloc  /* Number of bytes to be allocated */
  7551.    );
  7552.  
  7553.  
  7554. ΓòÉΓòÉΓòÉ <hidden> Parameter - cbAlloc ΓòÉΓòÉΓòÉ
  7555.  
  7556. cbAlloc (ULONG) - input 
  7557.  
  7558. Number of bytes to allocate for the message information structure. 
  7559.  
  7560.  
  7561. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfAllocMsgData ΓòÉΓòÉΓòÉ
  7562.  
  7563. (PVOID) - return values 
  7564.  
  7565. WkfAccessMsgData returns the following values: 
  7566.  
  7567.  NULL 
  7568.        Data unsuccessfully allocated. 
  7569.  
  7570.  Other 
  7571.        Pointer to newly-allocated memory. 
  7572.  
  7573.  
  7574. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfAllocMsgData ΓòÉΓòÉΓòÉ
  7575.  
  7576. Use this WorkFrame/2*-provided function to allocate memory for message data to 
  7577. be sent to the router. 
  7578.  
  7579. Call this function before sending a message to the router using WkfNotify, and 
  7580. always call WkfFreeMsgData to free message data after sending it. 
  7581.  
  7582.  
  7583. ΓòÉΓòÉΓòÉ <hidden> Example - WkfAllocMsgData ΓòÉΓòÉΓòÉ
  7584.  
  7585. The following pseudo-code illustrates how to use this interface: 
  7586.  
  7587. /* Build message info structure */
  7588. PWKF_FILECHANGEINFO pMsgInfo;
  7589. ULONG cSize;
  7590.  
  7591. /* Allocate message data */
  7592. cSize = sizeof(PWKF_FILECHANGEINFO) + sizeof(szFileNames) + 1;
  7593.  
  7594. pMsgInfo = (PWKF_FILECHANGEINFO) WkfAllocMsgData (cSize);
  7595.  
  7596. j = sprintf(pMsgInfo->szParm, "%s"WKF_LIST_DELIM"%s", szPrjFile, szChangedFile);
  7597. pMsgInfo->cb = cSize;
  7598.  
  7599. /* Now send message */
  7600. WkfNotify ( hRouter,      /* Router handle */
  7601.       hwnd,        /* My window handle */
  7602.       WKFM_FILECHANGED,  /* Message ID */
  7603.       (PVOID)pMsgInfo);  /* Pointer to message structure */
  7604.  
  7605.  
  7606. /* Always free message data after sending it */
  7607. WkfFreeMsgData (pMsgData);
  7608.  
  7609.  
  7610. ΓòÉΓòÉΓòÉ 16.2.5. WkfFreeMsgData ΓòÉΓòÉΓòÉ
  7611.  
  7612. WkfFreeData 
  7613.  
  7614. Select an item: 
  7615.  
  7616.  Function Syntax 
  7617.  Notes 
  7618.  Examples 
  7619.  
  7620.  
  7621. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfFreeMsgData ΓòÉΓòÉΓòÉ
  7622.  
  7623. Use this WorkFrame/2*-provided function to free an allocated message 
  7624. information structure. 
  7625.  
  7626. #define INCL_WKFMSG
  7627. #include <wkf.h>
  7628.  
  7629. extern VOID APIENTRY WkfFreeMsgData (
  7630.    PVOID   pMsgData  /* Pointer to message information structure */
  7631.    );
  7632.  
  7633.  
  7634. ΓòÉΓòÉΓòÉ <hidden> Parameter - pMsgData ΓòÉΓòÉΓòÉ
  7635.  
  7636. pMsgData (PVOID) - input 
  7637.  
  7638. Pointer to the message information structure to free. 
  7639.  
  7640.  
  7641. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfFreeMsgData ΓòÉΓòÉΓòÉ
  7642.  
  7643. Use this WorkFrame/2*-provided function to release a message information 
  7644. structure that has been allocated using WkfAllocMsgData. 
  7645.  
  7646. Do not use any other memory functions to free the message structure. The 
  7647. structure may have been allocated in shared memory and therefore needs to be 
  7648. released accordingly.  Call this function to free a message information 
  7649. structure after you no longer need access to it. 
  7650.  
  7651.  
  7652. ΓòÉΓòÉΓòÉ <hidden> Example - WkfFreeMsgData ΓòÉΓòÉΓòÉ
  7653.  
  7654. The following pseudo-code illustrates how this interface could be used by a 
  7655. client registered via the PM connection type: 
  7656.  
  7657. /* Build message info structure */
  7658. PWKF_FILECHANGEINFO pMsgInfo;
  7659. ULONG cSize;
  7660.  
  7661. /* Allocate message data */
  7662. cSize = sizeof(PWKF_FILECHANGEINFO) + sizeof(szFileNames) + 1;
  7663.  
  7664. pMsgInfo = (PWKF_FILECHANGEINFO) WkfAllocMsgData (cSize);
  7665.  
  7666. j = sprintf(pMsgInfo->szParm, "%s"WKF_LIST_DELIM"%s", szPrjFile, szChangedFile);
  7667. pMsgInfo->cb = cSize;
  7668.  
  7669. /* Now send message */
  7670. WkfNotify ( hRouter,      /* Router handle */
  7671.       hwnd,        /* My window handle */
  7672.       WKFM_FILECHANGED,  /* Message ID */
  7673.       (PVOID)pMsgInfo);  /* Pointer to message structure */
  7674.  
  7675.  
  7676. /* Always free message data after sending it */
  7677. WkfFreeMsgData (pMsgData);
  7678.  
  7679.  
  7680. ΓòÉΓòÉΓòÉ 16.2.6. WkfTerminate ΓòÉΓòÉΓòÉ
  7681.  
  7682. WkfTerminate 
  7683.  
  7684. Select an item: 
  7685.  
  7686.  Function Syntax 
  7687.  Return Values 
  7688.  Notes 
  7689.  Examples 
  7690.  
  7691.  
  7692. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfTerminate ΓòÉΓòÉΓòÉ
  7693.  
  7694. Use this WorkFrame/2*-provided function to terminate communication with the 
  7695. router. 
  7696.  
  7697. #define INCL_WKFMSG
  7698. #include <wkf.h>
  7699.  
  7700. extern BOOL APIENTRY WkfTerminate (
  7701.    LHANDLE  hRouter,  /* Router handle */
  7702.    LHANDLE  hClient  /* Client handle */
  7703.    );
  7704.  
  7705.  
  7706. ΓòÉΓòÉΓòÉ <hidden> Parameter - hRouter ΓòÉΓòÉΓòÉ
  7707.  
  7708. hRouter (LHANDLE) - input 
  7709.  
  7710. Router handle returned by the WkfInitialize function. 
  7711.  
  7712.  
  7713. ΓòÉΓòÉΓòÉ <hidden> Parameter - hClient ΓòÉΓòÉΓòÉ
  7714.  
  7715. hClient (LHANDLE) - input 
  7716.  
  7717. Client handle identifying the sender of the message.  Set this field to contain 
  7718. the same client handle that was specified when the sender issued the 
  7719. WkfInitialize function to register with the router. 
  7720.  
  7721.  
  7722. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfTerminate ΓòÉΓòÉΓòÉ
  7723.  
  7724. (BOOL) - return values 
  7725.  
  7726. WkfTerminate returns the following values: 
  7727.  
  7728.  TRUE 
  7729.        Communication with the message router successfully terminated. 
  7730.  
  7731.  FALSE 
  7732.        An error occurred. 
  7733.  
  7734.  
  7735. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfTerminate ΓòÉΓòÉΓòÉ
  7736.  
  7737. Use this WorkFrame/2*-provided function to deregister the client with the 
  7738. router. 
  7739.  
  7740. Call this function as part of the normal processing for termination of the 
  7741. client object. 
  7742.  
  7743.  
  7744. ΓòÉΓòÉΓòÉ <hidden> Example - WkfTerminate ΓòÉΓòÉΓòÉ
  7745.  
  7746. The following pseudo-code illustrates how to use this interface within the 
  7747. window procedure of a PM application: 
  7748.  
  7749. /* Terminate router connection during the processing of a "CLOSE" */
  7750. /* or "EXIT" command or message.                  */
  7751.         :
  7752.  
  7753. case WM_CLOSE:
  7754.  
  7755.  hRouter = (LHANDLE) WinQueryWindowUlong (hwnd,    /* Get router handle from */
  7756.                       QWL_USER)  /* window words      */
  7757.  
  7758.  if (hRouter != NULLHANDLE)
  7759.    fSuccess = WkfTerminate (hRouter, hwnd);
  7760.      :
  7761.  break;
  7762.  
  7763.  
  7764. ΓòÉΓòÉΓòÉ 16.3. Router Messages ΓòÉΓòÉΓòÉ
  7765.  
  7766. This section describes the messages that can be sent to or received from the 
  7767. WorkFrame/2* router. 
  7768.  
  7769. Router messages can categorized into the following groups: 
  7770.  
  7771. Notification Messages 
  7772.  
  7773.  o Messages dealing with clients 
  7774.  
  7775.     - WKFM_CLIENTCHANGED 
  7776.     - WKFM_CLIENTRENAMED 
  7777.     - WKFM_CLIENTDELETED 
  7778.     - WKFM_CLIENTMOVED 
  7779.     - WKFM_INITIALIZE 
  7780.  
  7781.  o Messages dealing with files 
  7782.  
  7783.     - WKFM_FILECHANGED 
  7784.     - WKFM_FILERENAMED 
  7785.     - WKFM_FILEDELETED 
  7786.  
  7787.  o Messages dealing with actions 
  7788.  
  7789.     - WKFM_APPSTARTNOTIFY 
  7790.     - WKFM_APPTERMNOTIFY 
  7791.     - WKFM_ACTIONSTART 
  7792.     - WKFM_ACTIONEND 
  7793.  
  7794.  Request Messages 
  7795.  
  7796.  o Messages dealing with actions 
  7797.  
  7798.     - WKFM_EXECUTEACTION 
  7799.  
  7800.  o Messages for writing to the Action Log 
  7801.  
  7802.     - WKFM_LOGMESSAGE 
  7803.     - WKFM_LOGERROR 
  7804.  
  7805.  
  7806. ΓòÉΓòÉΓòÉ 16.3.1. WKFM_ACTIONEND ΓòÉΓòÉΓòÉ
  7807.  
  7808. Message ID 
  7809.  
  7810. WKFM_ACTIONEND 
  7811.  
  7812. Cause 
  7813.  
  7814. A client sends this message to the router when an action that was started on 
  7815. its behalf ends.  For example, the WorkFrame/2* Monitor client would send this 
  7816. message after a compile action finishes processing on one or more project 
  7817. parts. 
  7818.  
  7819. Information structure 
  7820.  
  7821. WKF_ACTIONENDINFO 
  7822.  
  7823.  
  7824. ΓòÉΓòÉΓòÉ 16.3.2. WKFM_ACTIONSTART ΓòÉΓòÉΓòÉ
  7825.  
  7826. Message ID 
  7827.  
  7828. WKFM_ACTIONSTART 
  7829.  
  7830. Cause 
  7831.  
  7832. A client sends this message to the router when an action is started on its 
  7833. behalf.  For example, the WorkFrame/2* Monitor client would send this message 
  7834. after a link action that was invoked on one or more project parts has finishes 
  7835. processing. 
  7836.  
  7837. Information structure 
  7838.  
  7839. WKF_ACTIONSTARTINFO 
  7840.  
  7841.  
  7842. ΓòÉΓòÉΓòÉ 16.3.3. WKFM_APPSTARTNOTIFY ΓòÉΓòÉΓòÉ
  7843.  
  7844. Message ID 
  7845.  
  7846. WKFM_APPSTARTNOTIFY 
  7847.  
  7848. Cause 
  7849.  
  7850. A client sends this message to the router when an application has been started. 
  7851. To the router, an application is a program that was started as a result of 
  7852. another action.  For example, a make action could send this message for a 
  7853. compile or link application that it starts. A WKFM_ACTIONSTART message message 
  7854. would be sent for the make action when it starts, as well as a 
  7855. WKFM_APPSTARTNOTIFY message for each application started within the make. 
  7856.  
  7857. Information structure 
  7858.  
  7859. WKF_APPSTARTINFO 
  7860.  
  7861.  
  7862. ΓòÉΓòÉΓòÉ 16.3.4. WKFM_APPTERMNOTIFY ΓòÉΓòÉΓòÉ
  7863.  
  7864. Message ID 
  7865.  
  7866. WKFM_APPTERMNOTIFY 
  7867.  
  7868. Cause 
  7869.  
  7870. A client sends this message to the router when an application has terminated. 
  7871. To the router, an application is a program that was started as a result of 
  7872. another action.  For example, a make action could send this message for a 
  7873. terminated compile or link application that it had started.  A single 
  7874. WKFM_ACTIONEND message would be sent for the make action when it ends, as well 
  7875. as a WKFM_APPTERMNOTIFY message for each application started within the make as 
  7876. it terminates. 
  7877.  
  7878. Information structure 
  7879.  
  7880. WKF_APPTERMINFO 
  7881.  
  7882.  
  7883. ΓòÉΓòÉΓòÉ 16.3.5. WKFM_CLIENTCHANGED ΓòÉΓòÉΓòÉ
  7884.  
  7885. Message ID 
  7886.  
  7887. WKFM_CLIENTCHANGED 
  7888.  
  7889. Cause 
  7890.  
  7891. A client sends this message to the router when it has been changed.  For 
  7892. example, a base project client would send this message when one or more of its 
  7893. settings are changed. 
  7894.  
  7895. Information structure 
  7896.  
  7897. WKF_CHANGEINFO 
  7898.  
  7899.  
  7900. ΓòÉΓòÉΓòÉ 16.3.6. WKFM_CLIENTDELETED ΓòÉΓòÉΓòÉ
  7901.  
  7902. Message ID 
  7903.  
  7904. WKFM_CLIENTDELETED 
  7905.  
  7906. Cause 
  7907.  
  7908. A client sends this message to the router when it has been deleted. 
  7909.  
  7910. Information structure 
  7911.  
  7912. WKF_DELETEINFO 
  7913.  
  7914.  
  7915. ΓòÉΓòÉΓòÉ 16.3.7. WKFM_CLIENTMOVED ΓòÉΓòÉΓòÉ
  7916.  
  7917. Message ID 
  7918.  
  7919. WKFM_CLIENTMOVED 
  7920.  
  7921. Cause 
  7922.  
  7923. A client sends this message to the router when its physical file representation 
  7924. has been moved. 
  7925.  
  7926. Take an actions profile object as an example.  An actions profile is 
  7927. represented by a single file on disk, under the OS/2 Desktop directory.  Its 
  7928. location on the desktop determines its physical path on the disk.  If the 
  7929. actions profile object is moved from one folder to another, it's physical file 
  7930. representation is also moved and so it should send this message to the router 
  7931. to inform interested clients. 
  7932.  
  7933. Information structure 
  7934.  
  7935. WKF_MOVEINFO 
  7936.  
  7937.  
  7938. ΓòÉΓòÉΓòÉ 16.3.8. WKFM_CLIENTRENAMED ΓòÉΓòÉΓòÉ
  7939.  
  7940. Message ID 
  7941.  
  7942. WKFM_CLIENTRENAMED 
  7943.  
  7944. Cause 
  7945.  
  7946. A client sends this message to the router when it has been renamed. 
  7947.  
  7948. Information structure 
  7949.  
  7950. WKF_RENAMEINFO 
  7951.  
  7952.  
  7953. ΓòÉΓòÉΓòÉ 16.3.9. WKFM_EXECUTEACTION ΓòÉΓòÉΓòÉ
  7954.  
  7955. Message ID 
  7956.  
  7957. WKFM_EXECUTEACTION 
  7958.  
  7959. Cause 
  7960.  
  7961. A client sends this message to the router to tell the WorkFrame/2* program to 
  7962. execute an action.  The program to be executed must be present in the actions 
  7963. profile of the project.  If no action name is specified in the WKF_EXECUTEINFO 
  7964. data structure, the default action for the specified action class will be 
  7965. executed. The router also broadcasts a WKFM_ACTIONSTART notification message to 
  7966. interested clients when it receives this message. 
  7967.  
  7968. For example, as part of some special processing, a debugger tool may need to 
  7969. call a compiler.  As a routing client, it can send this message to have the 
  7970. router start a COMPILE action on its behalf. 
  7971.  
  7972. Information structure 
  7973.  
  7974. WKF_EXECUTEINFO 
  7975.  
  7976.  
  7977. ΓòÉΓòÉΓòÉ 16.3.10. WKFM_FILECHANGED ΓòÉΓòÉΓòÉ
  7978.  
  7979. Message ID 
  7980.  
  7981. WKFM_FILECHANGED 
  7982.  
  7983. Cause 
  7984.  
  7985. A client sends this message to the router when a file has changed.  For 
  7986. example, a compiler (client type WKF_TYPE_FILETOOL) could send this message 
  7987. when it produces a new .EXE file; a linker could send this message for each 
  7988. .OBJ file that it replaces. 
  7989.  
  7990. Information structure 
  7991.  
  7992. WKF_FILECHANGEINFO 
  7993.  
  7994.  
  7995. ΓòÉΓòÉΓòÉ 16.3.11. WKFM_FILEDELETED ΓòÉΓòÉΓòÉ
  7996.  
  7997. Message ID 
  7998.  
  7999. WKFM_FILEDELETED 
  8000.  
  8001. Cause 
  8002.  
  8003. A client sends this message to the router when an associated file has been 
  8004. deleted.  For example, a base project client would send this message once for 
  8005. every deleted project part. 
  8006.  
  8007. Information structure 
  8008.  
  8009. WKF_FILEDELETEINFO 
  8010.  
  8011.  
  8012. ΓòÉΓòÉΓòÉ 16.3.12. WKFM_FILERENAMED ΓòÉΓòÉΓòÉ
  8013.  
  8014. Message ID 
  8015.  
  8016. WKFM_FILERENAMED 
  8017.  
  8018. Cause 
  8019.  
  8020. A client sends this message to the router when a file has been renamed.  For 
  8021. example, a base project client would send this message when a project part is 
  8022. renamed. 
  8023.  
  8024. Information structure 
  8025.  
  8026. WKF_FILERENAMEINFO 
  8027.  
  8028.  
  8029. ΓòÉΓòÉΓòÉ 16.3.13. WKFM_INITIALIZE ΓòÉΓòÉΓòÉ
  8030.  
  8031. Message ID 
  8032.  
  8033. WKFM_INITIALIZE 
  8034.  
  8035. Cause 
  8036.  
  8037. The message router broadcasts this message when a client registers with the 
  8038. router using WkfInitialize. 
  8039.  
  8040. This message should not be sent to the router by registered clients. 
  8041.  
  8042. Information structure 
  8043.  
  8044. WKF_INITIALIZEINFO 
  8045.  
  8046.  
  8047. ΓòÉΓòÉΓòÉ 16.3.14. WKFM_LOGERROR ΓòÉΓòÉΓòÉ
  8048.  
  8049. Message ID 
  8050.  
  8051. WKFM_LOGERROR 
  8052.  
  8053. Cause 
  8054.  
  8055. A client sends this message to the router to tell the WorkFrame/2* program to 
  8056. write an error message to the Action Log. 
  8057.  
  8058. Information structure 
  8059.  
  8060. WKF_ERRORMSGINFO 
  8061.  
  8062.  
  8063. ΓòÉΓòÉΓòÉ 16.3.15. WKFM_LOGMESSAGE ΓòÉΓòÉΓòÉ
  8064.  
  8065. Message ID 
  8066.  
  8067. WKFM_LOGMESSAGE 
  8068.  
  8069. Cause 
  8070.  
  8071. A client sends this message to the router to tell the WorkFrame/2* program to 
  8072. write an information message to the Action Log. 
  8073.  
  8074. Information structure 
  8075.  
  8076. WKF_LOGMSGINFO 
  8077.  
  8078.  
  8079. ΓòÉΓòÉΓòÉ 17. Installation Support ΓòÉΓòÉΓòÉ
  8080.  
  8081. This section describes the WorkFrame/2*-provided APIs that support tool 
  8082. installation tasks. 
  8083.  
  8084.  
  8085. ΓòÉΓòÉΓòÉ 17.1. Installation Support APIs ΓòÉΓòÉΓòÉ
  8086.  
  8087. This section descibes the WorkFrame/2*-provided APIs for installing 
  8088. WorkFrame/2-integrated tools. 
  8089.  
  8090. The function prototypes and constant declarations for the actions profile APIs 
  8091. are in the WKFINS.H C header file. 
  8092.  
  8093.  
  8094. ΓòÉΓòÉΓòÉ 17.1.1. WkfQueryInstalledVersion ΓòÉΓòÉΓòÉ
  8095.  
  8096. WkfQueryInstalledVersion 
  8097.  
  8098. Select an item: 
  8099.  
  8100.  Function Syntax 
  8101.  Return Values 
  8102.  Notes 
  8103.  Examples 
  8104.  
  8105.  
  8106. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfQueryInstalledVersion ΓòÉΓòÉΓòÉ
  8107.  
  8108. This WorkFrame/2*-provided function returns the version of the WorkFrame/2 
  8109. product currently installed on the system. 
  8110.  
  8111. #define INCL_WKFINS
  8112. #include <wkf.h>
  8113.  
  8114. BOOL _System WkfQueryInstalledVersion (
  8115.    PSZ   pszDirectory,   /* WF installation directory - returned */
  8116.    ULONG  ulDirectory,    /* Size, in bytes, of pszDirectory buffer */
  8117.    PULONG  *pulMajorVersion, /* Major version number - returned */
  8118.    PULONG  *pulMinorVersion, /* Minor version number - returned */
  8119.    BOOL   OnlyVersion1    /* Look for version 1.x only */
  8120.    );
  8121.  
  8122.  
  8123. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszDirectory ΓòÉΓòÉΓòÉ
  8124.  
  8125. pszDirectory (PSZ) - output 
  8126.  
  8127. On exit, this field contains the fully qualified ASCIIZ path name of the 
  8128. directory where WorkFrame/2 is currently installed in the system. 
  8129.  
  8130. If the OnlyVersion1 field is set to TRUE, this field contains the directory in 
  8131. which Version 1.x of the WorkFrame/2 product is installed.  Otherwise, this 
  8132. field contains the directory in which the latest WorkFrame/2 version is 
  8133. installed. 
  8134.  
  8135. Allocate this buffer to a size of at least CCHMAXPATH large to ensure success. 
  8136.  
  8137.  
  8138. ΓòÉΓòÉΓòÉ <hidden> Parameter - ulDirectory ΓòÉΓòÉΓòÉ
  8139.  
  8140. ulDirectory (PSZ) - output 
  8141.  
  8142. On exit, this field contains the actual size, in bytes, of the field pointed to 
  8143. by pszDirectory. 
  8144.  
  8145.  
  8146. ΓòÉΓòÉΓòÉ <hidden> Parameter - pulMajorVersion ΓòÉΓòÉΓòÉ
  8147.  
  8148. pulMajorVersion (PSZ) - output 
  8149.  
  8150. On exit, this field contains the major version number of the WorkFrame/2 
  8151. product installed in pszDirectory. 
  8152.  
  8153. For example, this field would contain the number 2 for WorkFrame/2 Version 2.1. 
  8154.  
  8155.  
  8156. ΓòÉΓòÉΓòÉ <hidden> Parameter - pulMinorVersion ΓòÉΓòÉΓòÉ
  8157.  
  8158. pulMinorVersion (PSZ) - output 
  8159.  
  8160. On exit, this field contains the minor version number of the WorkFrame/2 
  8161. product installed in pszDirectory. 
  8162.  
  8163. For example, this field would contain the number 1 for WorkFrame/2 Version 2.1. 
  8164.  
  8165.  
  8166. ΓòÉΓòÉΓòÉ <hidden> Parameter - OnlyVersion1 ΓòÉΓòÉΓòÉ
  8167.  
  8168. OnlyVersion1 (BOOL) - input 
  8169.  
  8170. If this field is set to TRUE, then this function will only search for Version 
  8171. 1.x of the WorkFrame/2* product on the current system.  If this field is set to 
  8172. FALSE, this function searches for the latest version of WorkFrame/2 currently 
  8173. on the system. 
  8174.  
  8175.  
  8176. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfQueryInstalledVersion ΓòÉΓòÉΓòÉ
  8177.  
  8178. (BOOL) - return values 
  8179.  
  8180. WkfQueryInstalledVersion returns the following values: 
  8181.  
  8182.  TRUE 
  8183.        It is determined that there is a version of the WorkFrame/2 product 
  8184.        installed on the system.  Note that if OnlyVersion1 is set to TRUE, this 
  8185.        function will only return TRUE if WorkFrame/2 Version 1.x is installed 
  8186.        on the system. 
  8187.  
  8188.  FALSE 
  8189.        It is determined that the requested version of WorkFrame/2 is not 
  8190.        installed on the system.  Note that if OnlyVersion1 is set to TRUE, this 
  8191.        function will only return true if WorkFrame/2 Version 1.x is not present 
  8192.        on the system. 
  8193.  
  8194.  
  8195. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfQueryInstalledVersion ΓòÉΓòÉΓòÉ
  8196.  
  8197. This WorkFrame/2*-provided function detects whether or not WorkFrame/2 is 
  8198. installed on the system.  You can use this function to determine whether or not 
  8199. WorkFrame/2 support for your tool should be installed. 
  8200.  
  8201. Set OnlyVersion1 to TRUE if you want to search only for Version 1.x of the 
  8202. WorkFrame/2 product. Otherwise, set it to FALSE to search for the most current 
  8203. version. 
  8204.  
  8205. If the requested version of WorkFrame/2 is found, this function returns the 
  8206. WorkFrame/2 installation directory, and the major and minor release numbers of 
  8207. the version found. 
  8208.  
  8209. Note:  This function is not present in any of the shipped WorkFrame/2 DLLs. The 
  8210.        object module containing this code is statically available in WF21.LIB, 
  8211.        included with this integration kit.  This function can therefore be 
  8212.        called whether or not WorkFrame/2 is installed on the system. 
  8213.  
  8214.  
  8215. ΓòÉΓòÉΓòÉ <hidden> Example - WkfQueryInstalledVersion ΓòÉΓòÉΓòÉ
  8216.  
  8217. The following pseudo-code illustrates how this interface might be used: 
  8218.  
  8219. @@@@@@ 
  8220.  
  8221.  
  8222. ΓòÉΓòÉΓòÉ 17.1.2. WkfSetDefaultOption ΓòÉΓòÉΓòÉ
  8223.  
  8224. WkfSetDefaultOption 
  8225.  
  8226. Select an item: 
  8227.  
  8228.  Function Syntax 
  8229.  Return Values 
  8230.  Notes 
  8231.  Examples 
  8232.  
  8233.  
  8234. ΓòÉΓòÉΓòÉ <hidden> Syntax - WkfSetDefaultOption ΓòÉΓòÉΓòÉ
  8235.  
  8236. This WorkFrame/2*-provided function sets default options for an action that 
  8237. uses the default actions support (Options) DLL, DDE3DEF2. 
  8238.  
  8239. #define INCL_WKFINS
  8240. #include <wkf.h>
  8241.  
  8242. BOOL _System WkfSetDefaultOption (
  8243.    HAB  hAB,        /* Caller's anchor block, or NULLHANDLE */
  8244.    PSZ  pszActionClass,  /* Tool's action class, e.g. "EDIT" */
  8245.    PSZ  pszEXEName,    /* Unqualified program file name, no extension */
  8246.    PSZ  pszParameters,   /* Program parameters */
  8247.    PSZ  pszErrorTemplate, /* Error template */
  8248.    PSZ  pszPromptOnRun,  /* Prompt user for parameters? */
  8249.    PSZ  pszSupportDDE   /* Tool supports WF DDE protocols? */
  8250.    );
  8251.  
  8252.  
  8253. ΓòÉΓòÉΓòÉ <hidden> Parameter - hAB ΓòÉΓòÉΓòÉ
  8254.  
  8255. hAB (HAB) - input 
  8256.  
  8257. Caller's anchor block, or NULLHANDLE. 
  8258.  
  8259. If this field is set to NULLHANDLE, then this function will create its own 
  8260. temporary anchor block to open the DDE3DEF2 profile.  This field is a required 
  8261. parameter of the PrfOpenProfile OS/2* API called by this function. 
  8262.  
  8263.  
  8264. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszActionClass ΓòÉΓòÉΓòÉ
  8265.  
  8266. pszActionClass (PSZ) - input 
  8267.  
  8268. The tool's action class name, for example, "EDIT" or "COMPILE". 
  8269.  
  8270.  
  8271. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszEXEName ΓòÉΓòÉΓòÉ
  8272.  
  8273. pszEXEName (PSZ) - input 
  8274.  
  8275. The tool's unqualified program file name.  Specify this name without a file 
  8276. name extension, for example, "EPM" or "ICC". 
  8277.  
  8278.  
  8279. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszParameters ΓòÉΓòÉΓòÉ
  8280.  
  8281. pszParameters (PSZ) - input 
  8282.  
  8283. The parameters to run the program specified in pszEXEName, for example, 
  8284.  
  8285. "/W %a %z".
  8286.  
  8287. See Substitution Variables for more information on how you can specify program 
  8288. parameters using WorkFrame/2 substitution variables. 
  8289.  
  8290. This parameter maps to the Parameters entry field in the default options 
  8291. dialog. 
  8292.  
  8293.  
  8294. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszErrorTemplate ΓòÉΓòÉΓòÉ
  8295.  
  8296. pszErrorTemplate (PSZ) - input 
  8297.  
  8298. The error template for the tool's error messages.  This field is only 
  8299. applicable to tools, such as compilers and linkers, that produce output with 
  8300. error messages, and can run in the Monitor window. For example, specify this 
  8301. template: 
  8302.  
  8303. (%f : %i, %c) %t
  8304.  
  8305. for an error message of the form: 
  8306.  
  8307. (MYFILE.C : 238, 23) Text of the error message.
  8308.  
  8309. When the user double-clicks on an error or warning message in the Monitor 
  8310. window, DDE3DEF2, the default Options DLL, uses The error template to parse the 
  8311. error message into: 
  8312.  
  8313.  o The file name in which the error occurred (represented by %f) 
  8314.  o The line at which the error occurred (represented by %i) 
  8315.  o The column at which the error occurred (represented by %c) 
  8316.  o The text of the error message (represented by %t) 
  8317.  
  8318.  This parameter maps to the Error template entry field in the default options 
  8319.  dialog for most action classes. 
  8320.  
  8321.  
  8322. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszPromptOnRun ΓòÉΓòÉΓòÉ
  8323.  
  8324. pszPromptOnRun (PSZ) - input 
  8325.  
  8326. This field is expected to contain one of the following values: 
  8327.  
  8328.  WKFDEF2_PROMPT_YES 
  8329.       Prompt the user for parameters prior to starting the action. This gives 
  8330.       the user a chance to modify the parameters before the action is started. 
  8331.  
  8332.  WKFDEF2_PROMPT_NO 
  8333.       Invoke the action without prompting the user for parameters. 
  8334.  
  8335.  This parameter maps to the Prompt check box in the default options dialogs. 
  8336.  
  8337.  
  8338. ΓòÉΓòÉΓòÉ <hidden> Parameter - pszSupportDDE ΓòÉΓòÉΓòÉ
  8339.  
  8340. pszSupportDDE (PSZ) - input 
  8341.  
  8342. This field is expected to contain one of the following values: 
  8343.  
  8344.  WKFDEF2_EDITDDE_YES 
  8345.       The tool supports WorkFrame/2 DDE protocols.  This value is only 
  8346.       applicable to EDIT class tools 
  8347.  
  8348.  WKFDEF2_EDITDDE_NO 
  8349.       The tool is not an EDIT class tool, or is an EDIT class tool that does 
  8350.       not support WorkFrame/2 DDE protocols. 
  8351.  
  8352.  This parameter maps to the Send errors to editor check box in the default 
  8353.  options dialog for EDIT class actions. 
  8354.  
  8355.  
  8356. ΓòÉΓòÉΓòÉ <hidden> Return Values - WkfSetDefaultOption ΓòÉΓòÉΓòÉ
  8357.  
  8358. (BOOL) - return values 
  8359.  
  8360. WkfSetDefaultOption returns the following values: 
  8361.  
  8362.  TRUE 
  8363.        Default options successfully set. 
  8364.  
  8365.  FALSE 
  8366.        Unable to set default options. 
  8367.  
  8368.  
  8369. ΓòÉΓòÉΓòÉ <hidden> Notes - WkfSetDefaultOptions ΓòÉΓòÉΓòÉ
  8370.  
  8371. Use this WorkFrame/2*-provided function to set the default options for the tool 
  8372. if it is using the default actions support (Options) DLL, DDE3DEF2. 
  8373.  
  8374. Many of this function's parameters map to controls in the default options 
  8375. dialogs.  To see what these dialogs look like, set the options for any action 
  8376. that uses DDE3DEF2 for its Options DLL. For example, look at the options dialog 
  8377. for the Hello World WorkFrame/2 sample project's MAKE, RUN, or EDIT file-scoped 
  8378. actions (go to the Actions page of Hello World's Settings notebook and click on 
  8379. the Options push button). 
  8380.  
  8381. Note:  This function is not available in any of the DLLs shipped with the 
  8382.        WorkFrame/2 program.  The object module containing this code is 
  8383.        statically available in the WF21.LIB file included with this integration 
  8384.        kit. 
  8385.  
  8386.  
  8387. ΓòÉΓòÉΓòÉ <hidden> Example - WkfSetDefaultOptions ΓòÉΓòÉΓòÉ
  8388.  
  8389. The following pseudo-code illustrates how this interface might be used: 
  8390.  
  8391. @@@@@@ 
  8392.  
  8393.  
  8394. ΓòÉΓòÉΓòÉ 18. Building Integrated Code ΓòÉΓòÉΓòÉ
  8395.  
  8396. This section tells you how to build your code for WorkFrame/2* integration. If 
  8397. you are building an actions support or PAM DLL, note that you can combine 
  8398. support for several tools in one actions support (or Options) DLL.  The 
  8399. entrypoints for a single PAM can also be included in the same DLL, or can be 
  8400. made available in a separate DLL. 
  8401.  
  8402. Header Files to Include 
  8403.  
  8404. Include the master header file WKF.H once in the .C file within each compile 
  8405. module, and then define one or more of the following macros as appropriate to 
  8406. the interfaces you require: 
  8407.  
  8408. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8409. Γöé       Macro      Γöé              Includes                                   Γöé
  8410. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8411. ΓöéINCL_WKFMSG       ΓöéRouter header (WKFMSG.H)                                 Γöé
  8412. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8413. ΓöéINCL_WKFPRF       ΓöéActions profile header (WKFPRF.H)                        Γöé
  8414. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8415. ΓöéINCL_WKFPRJ       ΓöéBase project header (WKFPRJ.H)                           Γöé
  8416. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8417. ΓöéINCL_WF           ΓöéRouter, base project, and actions profile headers        Γöé
  8418. Γöé                  Γöé(WKFMSG.H, WKFPRF.H, and WKFPRJ.H)                       Γöé
  8419. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8420. ΓöéINCL_WKFOPT       ΓöéActions support header (WKFOPT.H)                        Γöé
  8421. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8422. ΓöéINCL_WKFPAM       ΓöéProject access method header (WKFPAM.H)                  Γöé
  8423. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8424. ΓöéINCL_WKFINS       ΓöéInstallation support header (WKFINS.H)                   Γöé
  8425. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8426.  
  8427. For example, say you are fully integrating a set of tools into WorkFrame/2. You 
  8428. are providing both an actions support and PAM DLL, registering your tools with 
  8429. the router, and creating an actions profile and sample projects. You might 
  8430. organize your files this way: 
  8431.  
  8432. Main program: 
  8433.  
  8434. TOOLMAIN.C
  8435.  #include "toolrout.h"
  8436.  #include "toolinst.h"
  8437.  #include wkf.h
  8438.  
  8439. Actions support interfaces: 
  8440.  
  8441. TOOLACTS.H
  8442.  #define INCL_WKFOPT   /* Include action support header WKFOPT.H */
  8443. TOOLACTS.C
  8444.  #include "toolacts.h"
  8445.  #include "wkf.h"
  8446.  
  8447. PAM interfaces 
  8448.  
  8449. TOOLPAM.H
  8450.  #define INCL_WKFPAM   /* Include PAM header WKFPAM.H */
  8451. TOOLPAM.C
  8452.  #include "toolpam.h"
  8453.  #include "wkf.h"
  8454.  
  8455. Router communication 
  8456.  
  8457. TOOLROUT.H
  8458.  #define INCL_WKFMSG   /* Include router header WKFMSG.H */
  8459. TOOLROUT.C
  8460.  #include "toolrout.h"
  8461.  #include "wkf.h"
  8462.  
  8463. Installing 
  8464.  
  8465. INSTPRJ.H
  8466.  #define INCL_WKFPRJ   /* Include project header WKFPRJ.H */
  8467.  #define INCL_WKFINS   /* Include installation support header WKFINMS.H */
  8468. INSTPRF.H
  8469.  #define INCL_WKFPRF   /* Include actions profile header WKFPRF.H */
  8470.  #define INCL_WKFINS
  8471. TOOLINST.C
  8472.  #include "toolinst.h"
  8473.  #include "wkf.h"
  8474.  
  8475. Note that as required, wkf.h is included only once within each compile module 
  8476. (wkf.h is not included in every header file).  The INCL_ macros are used to 
  8477. include other integration header files as appropriate. 
  8478.  
  8479. Creating the Module Definition File 
  8480.  
  8481. Your module definition file should include these elements as shown in the 
  8482. sample .DEF file for an actions support DLL below: 
  8483.  
  8484. LIBRARY WFTOOL.DLL INITINSTANCE TERMINSTANCE NEWFILES
  8485.  
  8486. DESCRIPTION 'DLL file containing actions support entrypoints'
  8487.  
  8488. DATA MULTIPLE NONSHARED
  8489.  
  8490. CODE LOADONCALL
  8491.  
  8492. EXPORTS
  8493.  WKFQUERYTOOLOPTIONS
  8494.  WKFQUERYTOOLTARGET
  8495.  WKFTOOLTERMINATE
  8496.  WKFTOOLPARSEERROR
  8497.  WKFQUERYTOOLHELPFILE
  8498.  WKFQUERYTOOLRESOURCEID
  8499.  WKFQUERYTOOLDDE
  8500.  
  8501. To provide a PAM in the same DLL, add the PAM entrypoints to the actions 
  8502. support entrypoints under the EXPORTS statement of the module definition file. 
  8503.  
  8504. Compile and Link Options 
  8505.  
  8506. You must specify these options when compiling the source to build an actions 
  8507. support or PAM DLL: 
  8508.  
  8509.  /Gm      You must write your code such that it is re-entrant. 
  8510.  
  8511.  /Ge-     Build a .DLL file. 
  8512.  
  8513.  You may specify other options as long as they do not conflict with these.  If 
  8514.  you are not using the C Set ++* compiler, specify the corresponding options on 
  8515.  your compiler. 
  8516.  
  8517.  Libraries to Link To 
  8518.  
  8519.  Link to these libraries as appropriate: 
  8520.  
  8521.  WKF21.LIB 
  8522.       All integrating tools should link to this library. It provides access to 
  8523.       the base project, WorkFrame/2 message router, and actions profiles. It 
  8524.       also contains the statically linkable object module for querying the 
  8525.       installed WorkFrame/2 directory. 
  8526.  
  8527.  WKFBPM21.LIB 
  8528.       Provides access to the services supplied by the basic PAM (DDE3BPAM.DLL) 
  8529.       shipped with WorkFrame/2.  Link to this library to chain to the basic PAM 
  8530.       when you are providing your own PAM. 
  8531.  
  8532.  WKFDEF21.LIB 
  8533.       You should link to this library only if you are not providing your own 
  8534.       actions support DLL, and wish to rely on the default options DLL, 
  8535.       DDE3DEF2, to provide actions support for your tool.  This library 
  8536.       contains the statically linkable object module for setting default 
  8537.       options for a tool that uses the default Options DLL, DDE3DEF2.  It also 
  8538.       provides access to the default tool options support (DDE3DEF2.DLL) that 
  8539.       is shipped with WorkFrame/2. 
  8540.  
  8541.  
  8542. ΓòÉΓòÉΓòÉ 19. General Constants ΓòÉΓòÉΓòÉ
  8543.  
  8544. The following table shows the general-purpose WorkFrame/2-defined constants and 
  8545. their meaning: 
  8546.  
  8547. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8548. Γöé       Constant                    Γöé              Meaning                                             Γöé
  8549. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8550. ΓöéV2_APP                             ΓöéApplication name for storing data in the OS2.INI file.            Γöé
  8551. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8552. ΓöéWF_DIRKEY                          ΓöéData key name under which the WorkFrame/2 (Version 1.x and 2.x)   Γöé
  8553. Γöé                                   Γöéinstallation directory name is stored in the OS2.INI file.        Γöé
  8554. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8555. ΓöéWKFDLL_ACTPRF                      ΓöéName of WorkFrame/2 DLL containing the actions profile interfaces.Γöé
  8556. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8557. ΓöéWKFDLL_PJIO                        ΓöéName of WorkFrame/2 DLL containing the base project I/O           Γöé
  8558. Γöé                                   Γöéinterfaces.                                                       Γöé
  8559. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8560. ΓöéWKFDLL_ROUTER                      ΓöéName of WorkFrame/2 DLL containing the router interfaces.         Γöé
  8561. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8562. ΓöéWKF_ACTION_HANDLE_RESERVED         ΓöéWorkFrame/2-initiated action handle                               Γöé
  8563. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8564. ΓöéWKF_ACTKEY_TEMPLATE                ΓöéTemplate used to generate an application key for storing options  Γöé
  8565. Γöé                                   Γöéwithin a project file.  An application key is used to identify a  Γöé
  8566. Γöé                                   Γöéspecific action within an actions profile.  It is of the form     Γöé
  8567. Γöé                                   Γöé"<class name>::<action name>".                                    Γöé
  8568. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8569. ΓöéWKF_OPTKEY_TEMPLATE                ΓöéTemplate used to generate a key used to store options for a       Γöé
  8570. Γöé                                   Γöéspecific action within an actions profile or project.  It is of   Γöé
  8571. Γöé                                   Γöéthe form                                                          Γöé
  8572. Γöé                                   Γöé"<class name>::<action name>::<scope>"                            Γöé
  8573. Γöé                                   Γöéwhere <scope> is one of WKF_SCOPE_PROJECT or WKF_SCOPE_FILE.      Γöé
  8574. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8575. ΓöéWKF_LIST_DELIM                     ΓöéCharacter used to delimit fields in WorkFrame/2 list strings      Γöé
  8576. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8577. ΓöéWKF_LIST_DELIMSTR                  ΓöéCharacter string used to delimit fields in WorkFrame/2 list       Γöé
  8578. Γöé                                   Γöéstrings                                                           Γöé
  8579. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8580. ΓöéWKF_MAX_ACTKEYLEN                  ΓöéMaximum action key name length                                    Γöé
  8581. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8582. ΓöéWKF_MAX_APINAMELEN                 ΓöéMaximum entrypoint name length                                    Γöé
  8583. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8584. ΓöéWKF_MAX_CLASSLEN                   ΓöéMaximum class name length                                         Γöé
  8585. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8586. ΓöéWKF_MAX_ENVSTRLEN                  ΓöéMaximum environment string length                                 Γöé
  8587. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8588. ΓöéWKF_MAX_ENVVARLEN                  ΓöéMaximum environment variable length                               Γöé
  8589. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8590. ΓöéWKF_MAX_HELPCMDLEN                 ΓöéMaximum help command-line string length                           Γöé
  8591. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8592. ΓöéWKF_MAX_INVKEYLEN                  ΓöéMaximum invocation string key length                              Γöé
  8593. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8594. ΓöéWKF_MAX_MASKLIST                   ΓöéMaximum mask list string length                                   Γöé
  8595. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8596. ΓöéWKF_MAX_NAMELEN                    ΓöéMaximum general name length                                       Γöé
  8597. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8598. ΓöéWKF_MAX_OPTKEYLEN                  ΓöéMaximum action option key name length                             Γöé
  8599. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8600. ΓöéWKF_MAX_PARMLIST                   ΓöéMaximum parameter list length                                     Γöé
  8601. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8602. ΓöéWKF_MAX_PATHLIST                   ΓöéMaximum path list string length                                   Γöé
  8603. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8604. ΓöéWKF_MAX_TEMPLIST                   ΓöéMaximum general list length                                       Γöé
  8605. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8606. ΓöéWKF_MTR_AUTOCLOSE                  ΓöéMonitor options flag - close monitor if action terminates without Γöé
  8607. Γöé                                   Γöéerror                                                             Γöé
  8608. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8609. ΓöéWKF_MTR_MINIMIZE                   ΓöéMonitor options flag - start monitor minimized                    Γöé
  8610. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8611. ΓöéWKF_MTR_MULTIPLE                   ΓöéMonitor options flag - multiple, concurrent monitors              Γöé
  8612. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8613. ΓöéWKF_OPTIONS_APPNAME                ΓöéApplication name for the action options                           Γöé
  8614. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8615. ΓöéWKF_PREFIX                         ΓöéUsed as a WorkFrame/2 name prefix                                 Γöé
  8616. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8617. ΓöéDDE3_PREFIX                        ΓöéUsed as a WorkFrame/2 name prefix                                 Γöé
  8618. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8619. ΓöéWKF_RUN_FULLSCREEN                 ΓöéRun mode - full-screen session                                    Γöé
  8620. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8621. ΓöéWKF_RUN_MONITOR                    ΓöéRun mode - WorkFrame/2 monitor session                            Γöé
  8622. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8623. ΓöéWKF_RUN_WINDOW                     ΓöéRun mode - Window session                                         Γöé
  8624. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8625.  
  8626. Note:  Constants with the name prefix WKF_MAX_ define the various maximum 
  8627.        string limits used by the WorkFrame/2 program.  They all include one 
  8628.        byte for the terminating NULL character. 
  8629.  
  8630.  
  8631. ΓòÉΓòÉΓòÉ 20. Data Types ΓòÉΓòÉΓòÉ
  8632.  
  8633. This section describes the WorkFrame/2* Integration Toolkit data types in C 
  8634. language. 
  8635.  
  8636.  
  8637. ΓòÉΓòÉΓòÉ 20.1. APWKF_ACTION ΓòÉΓòÉΓòÉ
  8638.  
  8639. APWKF_ACTION - array of pointers to a PWKF_ACTION data structure. 
  8640.  
  8641. typedef PWKF_ACTION *APWKF_ACTION 
  8642.  
  8643.  
  8644. ΓòÉΓòÉΓòÉ 20.2. APWKF_ENVIRON ΓòÉΓòÉΓòÉ
  8645.  
  8646. APWKF_ENVIRON - array of pointers to a PWKF_ENVIRON data structure 
  8647.  
  8648. typedef PWKF_ENVIRON *APWKF_ENVIRON; 
  8649.  
  8650.  
  8651. ΓòÉΓòÉΓòÉ 20.3. FILEFINDBUF3 ΓòÉΓòÉΓòÉ
  8652.  
  8653. FILEFINDBUF3 - An OS/2*-defined type defining 32-bit level 1 file information, 
  8654. used without extended attributes.  Each WKFPAM_PART structure contains a 
  8655. FILEFINDBUF3 element that describes a project part. 
  8656.  
  8657. This structure is returned by the control program APIs, DosFindFirst and 
  8658. DosFindNext. 
  8659.  
  8660. typedef struct _FILEFINDBUF3 {
  8661.   ULONG  oNextEntryOffset;     /* Always set to zero for WKFPAM_PART */
  8662.   FDATE  fdateCreation;
  8663.   FTIME  ftimeCreation;
  8664.   FDATE  fdateLastAccess;
  8665.   FTIME  ftimeLastAccess;
  8666.   FDATE  fdateLastWrite;
  8667.   FTIME  ftimeLastWrite;
  8668.   ULONG  cbFile;          /* Actual bytes used by file */
  8669.   ULONG  cbFileAlloc;        /* Bytes allocated for file */
  8670.   ULONG  attrFile;         /* File attributes */
  8671.   UCHAR  cchName;          /* Number of characters in file name */
  8672.   CHAR  achName[CCHMAXPATHCOMP];  /* File name */
  8673.  } FILEFINDBUF3;
  8674.  
  8675. For more information, please refer to the on-line Control Program Guide and 
  8676. Reference book from the IBM* Developer's Toolkit. 
  8677.  
  8678.  
  8679. ΓòÉΓòÉΓòÉ 20.4. HAM ΓòÉΓòÉΓòÉ
  8680.  
  8681. HAM - project access method (PAM) handle. A HAM value uniquely identifies a 
  8682. project and its corresponding project access method. 
  8683.  
  8684. typedef LHANDLE HAM; 
  8685.  
  8686. Note:  The HAM value is returned by and used solely by internal PAM functions. 
  8687.        Functions external to the PAM should not rely on the HAM value to 
  8688.        uniquely identify a project and its access method. 
  8689.  
  8690.  
  8691. ΓòÉΓòÉΓòÉ 20.5. LIST_OF_SOURCE ΓòÉΓòÉΓòÉ
  8692.  
  8693. LIST_OF_SOURCE - source files list structure used as a parameter to the 
  8694. WkfQuery...Target actions support API 
  8695.  
  8696. typedef _Packed struct _LIST_OF_SOURCE
  8697.   {
  8698.    ULONG     ulNumOfEntries;    /* Number of selected files */
  8699.    ULONG     ulNumUsed;      /* Number of files used */
  8700.    SOURCE_ENTRY  stObject[1];     /* Array of source structures */
  8701.   } LIST_OF_SOURCE;
  8702.  
  8703.  
  8704. ΓòÉΓòÉΓòÉ 20.6. LIST_OF_TARGET ΓòÉΓòÉΓòÉ
  8705.  
  8706. LIST_OF_TARGET - target files list structure; used as a parameter to the 
  8707. WkfQuery...Target actions support API 
  8708.  
  8709. typedef _Packed struct _LIST_OF_TARGET
  8710.   {
  8711.    ULONG ulNumOfEntries;        /* Number of entries in the buffer */
  8712.    ULONG ulBufferSize;         /* Actual size of cBuffer */
  8713.    char  cBuffer[1];          /* List of files produced by the action */
  8714.   } LIST_OF_TARGET;
  8715.  
  8716.  
  8717. ΓòÉΓòÉΓòÉ <hidden> Field - cBuffer ΓòÉΓòÉΓòÉ
  8718.  
  8719. cBuffer (char) 
  8720.  
  8721. A string containing a list of file names in the following form: 
  8722.  
  8723.   (filename_1)(filename_2)...(filename_n)\0
  8724.  
  8725. where each filename_x is a null-terminated string. 
  8726.  
  8727.  
  8728. ΓòÉΓòÉΓòÉ 20.7. LIST_OF_DEPEND ΓòÉΓòÉΓòÉ
  8729.  
  8730. LIST_OF_DEPEND - dependency files list structure; used as a parameter to the 
  8731. WkfQuery...Target options API 
  8732.  
  8733. typedef _Packed struct _LIST_OF_DEPEND
  8734.   {
  8735.    ULONG ulNumOfEntries;        /* Number of entries in the buffer */
  8736.    ULONG ulBufferSize;         /* Size of cBuffer, in bytes */
  8737.    char  cBuffer[1];          /* List of dependency files */
  8738.   } LIST_OF_DEPEND;
  8739.  
  8740.  
  8741. ΓòÉΓòÉΓòÉ 20.8. PHAM ΓòÉΓòÉΓòÉ
  8742.  
  8743. PHAM - pointer to a HAM project identifier 
  8744.  
  8745. typedef HAM *PHAM; 
  8746.  
  8747.  
  8748. ΓòÉΓòÉΓòÉ 20.9. PWKF_ACTION ΓòÉΓòÉΓòÉ
  8749.  
  8750. PWKF_ACTION - pointer to a WKF_ACTION data structure 
  8751.  
  8752. typedef WKF_ACTION *PWKF_ACTION; 
  8753.  
  8754.  
  8755. ΓòÉΓòÉΓòÉ 20.10. PWKF_ACTIONS ΓòÉΓòÉΓòÉ
  8756.  
  8757. PWKF_ACTIONS - pointer to a WKF_ACTIONS data structure 
  8758.  
  8759. typedef WKF_ACTIONS *PWKF_ACTIONS; 
  8760.  
  8761.  
  8762. ΓòÉΓòÉΓòÉ 20.11. PWKF_ACTIONENDINFO ΓòÉΓòÉΓòÉ
  8763.  
  8764. PWKF_ACTIONENDINFO - pointer to a WKF_ACTIONENDINFO data structure 
  8765.  
  8766. typedef WKF_ACTIONENDINFO *PWKF_ACTIONENDINFO; 
  8767.  
  8768.  
  8769. ΓòÉΓòÉΓòÉ 20.12. PWKF_ACTIONSTARTINFO ΓòÉΓòÉΓòÉ
  8770.  
  8771. PWKF_ACTIONSTARTINFO - pointer to a WKF_ACTIONSTARTINFO data structure 
  8772.  
  8773. typedef WKF_ACTIONSTARTINFO *PWKF_ACTIONSTARTINFO; 
  8774.  
  8775.  
  8776. ΓòÉΓòÉΓòÉ 20.13. PWKF_APPSTARTINFO ΓòÉΓòÉΓòÉ
  8777.  
  8778. PWKF_APPSTARTINFO - pointer to a WKF_APPSTARTINFO data structure 
  8779.  
  8780. typedef WKF_APPSTARTINFO *PWKF_APPSTARTINFO; 
  8781.  
  8782.  
  8783. ΓòÉΓòÉΓòÉ 20.14. PWKF_APPTERMINFO ΓòÉΓòÉΓòÉ
  8784.  
  8785. PWKF_APPTERMINFO - pointer to a WKF_APPTERMINFO data structure 
  8786.  
  8787. typedef WKF_APPTERMINFO *PWKF_APPTERMINFO; 
  8788.  
  8789.  
  8790. ΓòÉΓòÉΓòÉ 20.15. PWKF_CHANGEINFO ΓòÉΓòÉΓòÉ
  8791.  
  8792. PWKF_CHANGEINFO - pointer to a WKF_CHANGEINFO data structure 
  8793.  
  8794. typedef WKF_CHANGEINFO *PWKF_CHANGEINFO; 
  8795.  
  8796.  
  8797. ΓòÉΓòÉΓòÉ 20.16. PWKF_DELETEINFO ΓòÉΓòÉΓòÉ
  8798.  
  8799. PWKF_DELETEINFO - pointer to a WKF_DELETEINFO data structure 
  8800.  
  8801. typedef WKF_DELETEINFO *PWKF_DELETEINFO; 
  8802.  
  8803.  
  8804. ΓòÉΓòÉΓòÉ 20.17. PWKF_ENVIRON ΓòÉΓòÉΓòÉ
  8805.  
  8806. PWKF_ENVIRON - pointer to a WKF_ENVIRON data structure 
  8807.  
  8808. typedef WKF_ENVIRON *PWKF_ENVIRON; 
  8809.  
  8810.  
  8811. ΓòÉΓòÉΓòÉ 20.18. PWKF_ENVIRONS ΓòÉΓòÉΓòÉ
  8812.  
  8813. PWKF_ENVIRONS - pointer to a WKF_ENVIRONS data structure 
  8814.  
  8815. typedef WKF_ENVIRONS *PWKF_ENVIRONS; 
  8816.  
  8817.  
  8818. ΓòÉΓòÉΓòÉ 20.19. PWKF_EXECUTEINFO ΓòÉΓòÉΓòÉ
  8819.  
  8820. PWKF_EXECUTEINFO - pointer to a WKF_EXECUTEINFO data structure 
  8821.  
  8822. typedef WKF_EXECUTEINFO *PWKF_EXECUTEINFO; 
  8823.  
  8824.  
  8825. ΓòÉΓòÉΓòÉ 20.20. PWKF_FILECHANGEINFO ΓòÉΓòÉΓòÉ
  8826.  
  8827. PWKF_FILECHANGEINFO - pointer to a WKF_FILECHANGEINFO data structure 
  8828.  
  8829. typedef WKF_FILECHANGEINFO *PWKF_FILECHANGEINFO; 
  8830.  
  8831.  
  8832. ΓòÉΓòÉΓòÉ 20.21. PWKF_FILEDELETEINFO ΓòÉΓòÉΓòÉ
  8833.  
  8834. PWKF_FILEDELETEINFO - pointer to a WKF_DELETEINFO data structure 
  8835.  
  8836. typedef WKF_FILEDELETEINFO *PWKF_FILEDELETEINFO; 
  8837.  
  8838.  
  8839. ΓòÉΓòÉΓòÉ 20.22. PWKF_FILERENAMEINFO ΓòÉΓòÉΓòÉ
  8840.  
  8841. PWKF_FILERENAMEINFO - pointer to a WKF_FILERENAMEINFO data structure 
  8842.  
  8843. typedef WKF_FILERENAMEINFO *PWKF_FILERENAMEINFO; 
  8844.  
  8845.  
  8846. ΓòÉΓòÉΓòÉ 20.23. PWKF_INITIALIZEINFO ΓòÉΓòÉΓòÉ
  8847.  
  8848. PWKF_INITIALIZEINFO - pointer to a WKF_INITIALIZEINFO data structure 
  8849.  
  8850. typedef WKF_INITIALIZEINFO *PWKF_INITIALIZEINFO; 
  8851.  
  8852.  
  8853. ΓòÉΓòÉΓòÉ 20.24. PWKF_LOGMSGINFO ΓòÉΓòÉΓòÉ
  8854.  
  8855. PWKF_LOGMSGINFO - pointer to a WKF_LOGMSGINFO data structure 
  8856.  
  8857. typedef WKF_LOGMSGINFO *PWKF_LOGMSGINFO; 
  8858.  
  8859.  
  8860. ΓòÉΓòÉΓòÉ 20.25. PWKF_ERRORMSGINFO ΓòÉΓòÉΓòÉ
  8861.  
  8862. PWKF_ERRORMSGINFO - pointer to a WKF_ERRORMSGINFO data structure 
  8863.  
  8864. typedef WKF_ERRORMSGINFO *PWKF_ERRORMSGINFO; 
  8865.  
  8866.  
  8867. ΓòÉΓòÉΓòÉ 20.26. PWKF_MOVEINFO ΓòÉΓòÉΓòÉ
  8868.  
  8869. PWKF_MOVEINFO - pointer to a WKF_MOVEINFO data structure 
  8870.  
  8871. typedef WKF_MOVEINFO *PWKF_MOVEINFO; 
  8872.  
  8873.  
  8874. ΓòÉΓòÉΓòÉ 20.27. PWKF_RENAMEINFO ΓòÉΓòÉΓòÉ
  8875.  
  8876. PWKF_RENAMEINFO - pointer to a WKF_RENAMEINFO data structure 
  8877.  
  8878. typedef WKF_RENAMEINFO *PWKF_RENAMEINFO; 
  8879.  
  8880.  
  8881. ΓòÉΓòÉΓòÉ 20.28. PWKF_SENDERINFO ΓòÉΓòÉΓòÉ
  8882.  
  8883. PWKF_SENDERINFO - pointer to a WKF_SENDERINFO data structure 
  8884.  
  8885. typedef WKF_SENDERINFO *PWKF_SENDERINFO; 
  8886.  
  8887.  
  8888. ΓòÉΓòÉΓòÉ 20.29. PWKF_TYPE ΓòÉΓòÉΓòÉ
  8889.  
  8890. PWKF_TYPE - pointer to a WKF_TYPE data structure 
  8891.  
  8892. typedef WKF_TYPE *PWKF_TYPE; 
  8893.  
  8894.  
  8895. ΓòÉΓòÉΓòÉ 20.30. PWKF_TYPES ΓòÉΓòÉΓòÉ
  8896.  
  8897. PWKF_TYPES - pointer to a WKF_TYPES data structure 
  8898.  
  8899. typedef WKF_TYPES *PWKF_TYPES; 
  8900.  
  8901.  
  8902. ΓòÉΓòÉΓòÉ 20.31. PWKFBASEPROJECT ΓòÉΓòÉΓòÉ
  8903.  
  8904. PWKFBASEPROJECT - pointer to a WKFBASEPROJECT data structure 
  8905.  
  8906. typedef WKFBASEPROJECT *PWKFBASEPROJECT; 
  8907.  
  8908.  
  8909. ΓòÉΓòÉΓòÉ 20.32. PWKFPAM_PART ΓòÉΓòÉΓòÉ
  8910.  
  8911. PWKFPAM_PART - pointer to a WKFPAM_PART data structure 
  8912.  
  8913. typedef WKFPAM_PART *PWKFPAM_PART; 
  8914.  
  8915.  
  8916. ΓòÉΓòÉΓòÉ 20.33. SOURCE_ENTRY ΓòÉΓòÉΓòÉ
  8917.  
  8918. SOURCE_ENTRY - single source file entry in a LIST_OF_SOURCE structure 
  8919.  
  8920. typedef _Packed struct _SOURCE_ENTRY
  8921.   {
  8922.    ULONG  fUsed;       /* File usage flag */
  8923.    PSZ   szFileName;    /* File name string */
  8924.   }  SOURCE_ENTRY;
  8925.  
  8926.  
  8927. ΓòÉΓòÉΓòÉ <hidden> Field - fUsed ΓòÉΓòÉΓòÉ
  8928.  
  8929. fUsed (ULONG) 
  8930.  
  8931. Indicates whether or not a file is used by a particular action. It should 
  8932. contain one of three possible values: 
  8933.  
  8934.  0  WKF_QT_FILE_NOTUSED 
  8935.        File is not processed by action. 
  8936.  
  8937.  1  WKF_QT_FILE_USED 
  8938.        File is processed and required by action. 
  8939.  
  8940.  2  WKF_QT_FILE_DISCARD 
  8941.        File is processed and to be discarded. 
  8942.  
  8943.  
  8944. ΓòÉΓòÉΓòÉ 20.34. WKF_ACTION ΓòÉΓòÉΓòÉ
  8945.  
  8946. WKF_ACTION - action information structure 
  8947.  
  8948. typedef _Packed struct _WKF_ACTION
  8949.   {
  8950.    PSZ   pszActionName;   /* Action name */
  8951.    PSZ   pszActionClass;  /* Action class */
  8952.    PSZ   pszCommand;    /* Action command */
  8953.    PSZ   pszSrcMask;    /* Action source masks or types (to change to pszSrcTypes) */
  8954.    PSZ   pszTgtMask;    /* Action target masks or types (to change to pszTgtTypes) */
  8955.    PSZ   pszDllName;    /* Action options DLL name */
  8956.    PSZ   pszDllEntryName;  /* Options DLL entrypoint name */
  8957.  
  8958.    PSZ   pszHelpCmd;    /* Action help command string */
  8959.    PSZ   pszHelpTopic;   /* Action help topic string */
  8960.  
  8961.    UCHAR  ucActionType;   /* Action type */
  8962.    UCHAR  ucActionScope;   /* Action scope code */
  8963.    UCHAR  ucMenuScope;    /* Menu scope */
  8964.    UCHAR  ucRunMode;     /* Run mode */
  8965.  
  8966.    PSZ   pszExecHost;    /* Reserved */
  8967.    PSZ   pszMsgAction;   /* Reserved */
  8968.    PSZ   pszMsgData;    /* Reserved */
  8969.    UCHAR  ucMsgScope;    /* Reserved */
  8970.  
  8971.    BYTE  Reserved[WKF_NUM_RESERVEDBYTES];  /* Reserved */
  8972.  
  8973.   }  WKF_ACTION;
  8974.  
  8975.  
  8976. ΓòÉΓòÉΓòÉ <hidden> Field - pszCommand ΓòÉΓòÉΓòÉ
  8977.  
  8978. pszCommand (PSZ) 
  8979.  
  8980. This field contains the ASCIIZ command or executable name of the action. The 
  8981. command name for an action is specified on the General page of the action's 
  8982. Change Action settings notebook. 
  8983.  
  8984.  
  8985. ΓòÉΓòÉΓòÉ <hidden> Field - pszSrcMask ΓòÉΓòÉΓòÉ
  8986.  
  8987. pszSrcMask (PSZ) 
  8988.  
  8989. This field contains the ASCIIZ names of the types of files that the action can 
  8990. be invoked for. Each type or mask in this string list is delimited by a 
  8991. WKF_LIST_DELIM character. 
  8992.  
  8993. The action source types and masks are specified in the Types page of the 
  8994. action's Change Action settings notebook. 
  8995.  
  8996.  
  8997. ΓòÉΓòÉΓòÉ <hidden> Field - pszTgtMask ΓòÉΓòÉΓòÉ
  8998.  
  8999. pszTgtMask (PSZ) 
  9000.  
  9001. This field contains the ASCIIZ names of the types of files that can be produced 
  9002. by an invocation of the action. Each type or mask in this string list is 
  9003. delimited by a WKF_LIST_DELIM character. 
  9004.  
  9005. The action target types and masks are specified in the Types page of the 
  9006. action's Change Action settings notebook. 
  9007.  
  9008.  
  9009. ΓòÉΓòÉΓòÉ <hidden> Field - pszDllName ΓòÉΓòÉΓòÉ
  9010.  
  9011. pszDllName (PSZ) 
  9012.  
  9013. This field contains the ASCIIZ name of the dynamic link library used to handle 
  9014. the options for the action. 
  9015.  
  9016. The options DLL for an action is specified on the Options page of the action's 
  9017. Change Action settings notebook. 
  9018.  
  9019.  
  9020. ΓòÉΓòÉΓòÉ <hidden> Field - pszDllEntryName ΓòÉΓòÉΓòÉ
  9021.  
  9022. pszDllEntryName (PSZ) 
  9023.  
  9024. This field contains the ASCIIZ name of the entrypoint class in the DLL 
  9025. identified by pszDllName that could be used to handle the options for the 
  9026. action. 
  9027.  
  9028. The options DLL entrypoint for an action is specified on the Options page of 
  9029. the action's Change Action settings notebook. 
  9030.  
  9031.  
  9032. ΓòÉΓòÉΓòÉ <hidden> Field - pszHelpCmd ΓòÉΓòÉΓòÉ
  9033.  
  9034. pszHelpCmd (PSZ) 
  9035.  
  9036. This field contains the ASCIIZ name of the command that displays customized 
  9037. help for the action. 
  9038.  
  9039. The help command name for an action is specified on the Help page of the 
  9040. action's Change Action settings notebook. 
  9041.  
  9042.  
  9043. ΓòÉΓòÉΓòÉ <hidden> Field - pszHelpTopic ΓòÉΓòÉΓòÉ
  9044.  
  9045. pszHelpTopic (PSZ) 
  9046.  
  9047. This field contains the ASCIIZ name of the help topic that provides the 
  9048. customized help for the action. 
  9049.  
  9050. The help topic string for an action is specified on the Help page of the 
  9051. action's Change Action settings notebook. 
  9052.  
  9053.  
  9054. ΓòÉΓòÉΓòÉ <hidden> Field - ucActionType ΓòÉΓòÉΓòÉ
  9055.  
  9056. ucActionType (UCHAR) 
  9057.  
  9058. Currently, this field always contains WKF_ACTIONTYPE_CMD. 
  9059.  
  9060. This field can contain one of the following values: 
  9061.  
  9062.  0x01  WKF_ACTIONTYPE_CMD 
  9063.       Indicates that action is specified as a command to execute. 
  9064.  
  9065.  0x02  WKF_ACTIONTYPE_MSG 
  9066.       Indicates that the action is specified as a message to route to a 
  9067.       registered router client. Note:  This action type is not yet supported as 
  9068.       of Verson 2.1 of the WorkFrame/2 product. Currently, all actions are 
  9069.       processed as commands. 
  9070.  
  9071.  
  9072. ΓòÉΓòÉΓòÉ <hidden> Field - ucActionScope ΓòÉΓòÉΓòÉ
  9073.  
  9074. ucActionScope (UCHAR) 
  9075.  
  9076. This field can contain one of the following values: 
  9077.  
  9078.  0x0001  WKF_ACTIONSCOPE_FILE 
  9079.       The action is a file-scoped action (that is, it applies to files). 
  9080.  
  9081.  0x0002  WKF_ACTIONSCOPE_PROJECT 
  9082.       The action is a project-scoped action (applying to projects). 
  9083.  
  9084.  0x0003  WKF_ACTIONSCOPE_BOTH 
  9085.       The action can apply to both files and projects. 
  9086.  
  9087.  The scope of an action is specified on the General page of the action's Change 
  9088.  Action settings notebook. 
  9089.  
  9090.  
  9091. ΓòÉΓòÉΓòÉ <hidden> Field - ucMenuScope ΓòÉΓòÉΓòÉ
  9092.  
  9093. ucMenuScope (UCHAR) 
  9094.  
  9095. This field can contain one of the following values: 
  9096.  
  9097.  1  WKF_MENUSCOPE_DETAIL 
  9098.       The action is added to a regular popup menu. 
  9099.  
  9100.  2  WKF_MENUSCOPE_SHORT 
  9101.       The action is added to an extended popup menu. 
  9102.  
  9103.  The menu scope is specified on the General page of the action's Change Action 
  9104.  settings notebook. specified on the General 
  9105.  
  9106.  
  9107. ΓòÉΓòÉΓòÉ <hidden> Field - ucRunMode ΓòÉΓòÉΓòÉ
  9108.  
  9109. ucRunMode (UCHAR) 
  9110.  
  9111. This field can contain one of the following values: 
  9112.  
  9113.  1   WKF_RUNMODE_FULLSCREEN 
  9114.       The action is started in a full-screen session. 
  9115.  
  9116.  2   WKF_RUNMODE_WINDOW 
  9117.       The action is started in a windowed (vio) session. 
  9118.  
  9119.  3   WKF_RUNMODE_MONITOR 
  9120.       The action is started in a WorkFrame/2* Monitor window session. 
  9121.  
  9122.  255  WKF_RUNMODE_DEFAULT 
  9123.       The action is started in the default run mode. Within the OS/2* system, 
  9124.       default mode allows the Shell to establish the session type. 
  9125.  
  9126.  The run mode is specified on the General page of the action's Change Action 
  9127.  settings notebook. 
  9128.  
  9129.  
  9130. ΓòÉΓòÉΓòÉ 20.35. WKF_ACTIONS ΓòÉΓòÉΓòÉ
  9131.  
  9132. WKF_ACTIONS - action list information structure 
  9133.  
  9134. typedef _Packed struct _WKF_ACTIONS
  9135.   {
  9136.    ULONG     ulCount;    /* Number of entries in the apActions list */
  9137.    PWKF_ACTION  apActions[1];  /* List of action data structures */
  9138.   }  WKF_ACTIONS;
  9139.  
  9140.  
  9141. ΓòÉΓòÉΓòÉ 20.36. WKF_ACTIONENDINFO ΓòÉΓòÉΓòÉ
  9142.  
  9143. WKF_ACTIONENDINFO - WKMF_ACTIONEND message data structure 
  9144.  
  9145. typedef struct _WKF_ACTIONENDINFO
  9146.   {
  9147.    ULONG   cb;        /* Size of this structure, in bytes */
  9148.    LHANDLE  hActionId;     /* Router-assigned action handle */
  9149.    ULONG   cCodes;      /* Number of codes available */
  9150.    ULONG   ulRC;       /* Action result code */
  9151.    ULONG   ulTC;       /* Action termination code */
  9152.    CHAR    szActionName[1];  /* Action name */
  9153.   } WKF_ACTIONENDINFO;
  9154.  
  9155.  
  9156. ΓòÉΓòÉΓòÉ <hidden> Field - cCodes ΓòÉΓòÉΓòÉ
  9157.  
  9158. cCodes (ULONG) 
  9159.  
  9160. Indicates whether one, both, or none of the result and termination codes for 
  9161. the ended action are available.  The result code is specified in the ulRC 
  9162. member and the termination code is specified in the ulTC member. 
  9163.  
  9164. This member can contain one of the following values: 
  9165.  
  9166.  0 
  9167.       Neither the result code or termination code is available. 
  9168.  
  9169.  1 
  9170.       Only the result code is available. 
  9171.  
  9172.  2 
  9173.       Both the result code and termination code are available. 
  9174.  
  9175.  
  9176. ΓòÉΓòÉΓòÉ <hidden> Field - ulRC ΓòÉΓòÉΓòÉ
  9177.  
  9178. ulRC (ULONG) 
  9179.  
  9180. The result or completion code returned by the ended program. 
  9181.  
  9182. In OS/2*, this value is returned by the DosExecPgm and DosStartSession APIs. If 
  9183. the result code is not available, the cCodes field should be set to zero. 
  9184.  
  9185.  
  9186. ΓòÉΓòÉΓòÉ <hidden> Field - ulTC ΓòÉΓòÉΓòÉ
  9187.  
  9188. ulTC (ULONG) 
  9189.  
  9190. Termination code furnished by the system that describes why the a process 
  9191. ended. 
  9192.  
  9193. The termination code is returned by the DosExecPgm OS/2* API for a synchronous 
  9194. request.  If this value is not available, the cCodes field should be updated 
  9195. accordingly. 
  9196.  
  9197.  
  9198. ΓòÉΓòÉΓòÉ <hidden> Field - szActionName[1] ΓòÉΓòÉΓòÉ
  9199.  
  9200. szActionName[1] (CHAR) 
  9201.  
  9202. Name of the ended action. 
  9203.  
  9204.  
  9205. ΓòÉΓòÉΓòÉ 20.37. WKF_ACTIONSTARTINFO ΓòÉΓòÉΓòÉ
  9206.  
  9207. WKF_ACTIONSTARTINFO - WKMF_ACTIONSTART message data structure 
  9208.  
  9209. typedef struct _WKF_ACTIONSTARTINFO
  9210.   {
  9211.    ULONG   cb;        /* Size of this structure, in bytes */
  9212.    LHANDLE  hActionId;     /* Router-assigned action handle */
  9213.    CHAR    szActionName[1];  /* Action name */
  9214.   } WKF_ACTIONSTARTINFO;
  9215.  
  9216.  
  9217. ΓòÉΓòÉΓòÉ <hidden> Field - szActionName[1] ΓòÉΓòÉΓòÉ
  9218.  
  9219. szActionName[1] (CHAR) 
  9220.  
  9221. Name of the started action. 
  9222.  
  9223.  
  9224. ΓòÉΓòÉΓòÉ 20.38. WKF_APPSTARTINFO ΓòÉΓòÉΓòÉ
  9225.  
  9226. WKF_APPSTARTINFO - WKMF_APPSTARTNOTIFY message data structure 
  9227.  
  9228. typedef struct _WKF_APPSTARTINFO
  9229.   {
  9230.    ULONG  cb;   /* Size of this structure, in bytes */
  9231.    HAPP  happ;  /* Application handle */
  9232.   } WKF_APPSTARTINFO;
  9233.  
  9234.  
  9235. ΓòÉΓòÉΓòÉ <hidden> Field - happ ΓòÉΓòÉΓòÉ
  9236.  
  9237. happ (HAPP) 
  9238.  
  9239. Application handle assigned by the message router to uniquely identify the 
  9240. running application. 
  9241.  
  9242.  
  9243. ΓòÉΓòÉΓòÉ 20.39. WKF_APPTERMINFO ΓòÉΓòÉΓòÉ
  9244.  
  9245. WKF_APPTERMINFO - WKMF_APPTERMNOTIFY message data structure 
  9246.  
  9247. typedef struct _WKF_APPTERMINFO
  9248.   {
  9249.    ULONG  cb;     /* Size of this structure, in bytes */
  9250.    HAPP  happ;    /* Application handle */
  9251.    ULONG  ulReturn;  /* Application return code */
  9252.   } WKF_APPTERMINFO;
  9253.  
  9254.  
  9255. ΓòÉΓòÉΓòÉ <hidden> Field - happ ΓòÉΓòÉΓòÉ
  9256.  
  9257. happ (HAPP) 
  9258.  
  9259. Application handle assigned by the message router to uniquely identify the 
  9260. terminated application. 
  9261.  
  9262.  
  9263. ΓòÉΓòÉΓòÉ <hidden> Field - ulReturn ΓòÉΓòÉΓòÉ
  9264.  
  9265. ulReturn (ULONG) 
  9266.  
  9267. Return code returned by the application when it terminated. 
  9268.  
  9269.  
  9270. ΓòÉΓòÉΓòÉ 20.40. WKF_CHANGEINFO ΓòÉΓòÉΓòÉ
  9271.  
  9272. WKF_CHANGEINFO - WKF_CLIENTCHANGED message data structure 
  9273.  
  9274. typedef struct _WKF_CHANGEINFO
  9275.   {
  9276.    ULONG  cb;      /* Size of this structure, in bytes */
  9277.    ULONG  flChanged;  /* Changed flag word */
  9278.    CHAR  szParm[1];  /* Name of file changed */
  9279.   } WKF_CHANGEINFO;
  9280.  
  9281.  
  9282. ΓòÉΓòÉΓòÉ <hidden> Field - szParm[1] ΓòÉΓòÉΓòÉ
  9283.  
  9284. szParm[1] (CHAR) 
  9285.  
  9286. This field contains a single file name relating to the client component that 
  9287. changed. 
  9288.  
  9289. For example, if the client changed was a base project, this field would contain 
  9290. the name of the project file. 
  9291.  
  9292.  
  9293. ΓòÉΓòÉΓòÉ <hidden> Field - flChanged ΓòÉΓòÉΓòÉ
  9294.  
  9295. flChanged (ULONG) 
  9296.  
  9297. This field flags the components of the client that have changed. It applies 
  9298. only to base projects (that is, clients of type WKF_TYPE_PROJECT).  This field 
  9299. is NULL for all other client types. 
  9300.  
  9301. Following are the WorkFrame/2*-defined change flags for base project client 
  9302. types: 
  9303.  
  9304.  WKF_PROJECT_DIRECTORY 
  9305.       Source directories changed 
  9306.  
  9307.  WKF_PROJECT_ACCESSMETHOD 
  9308.       Project access method (PAM) changed 
  9309.  
  9310.  WKF_PROJECT_TARGETNAME 
  9311.       Target program file name changed 
  9312.  
  9313.  WKF_PROJECT_MAKEFILE 
  9314.       Make file name changed 
  9315.  
  9316.  WKF_PROJECT_MASK 
  9317.       File masks changed 
  9318.  
  9319.  WKF_PROJECT_PROFILE 
  9320.       Actions profile changed 
  9321.  
  9322.  WKF_PROJECT_TARGETPATH 
  9323.       Working directory changed 
  9324.  
  9325.  WKF_PROJECT_TARGETPARM 
  9326.       Target program parameters changed 
  9327.  
  9328.  WKF_PROJECT_TARGETPROMPT 
  9329.       Target prompt required flag changed 
  9330.  
  9331.  WKF_PROJECT_TARGETTYPE 
  9332.       Target run mode changed 
  9333.  
  9334.  WKF_PROJECT_MONITOR 
  9335.       Monitor options changed 
  9336.  
  9337.  WKF_PROJECT_FILEMENU 
  9338.       Menu type (regular or extended) for file-scoped actions changed 
  9339.  
  9340.  WKF_PROJECT_PROJECTMENU 
  9341.       Menu type (regular or extended) for project-scoped actions changed 
  9342.  
  9343.  WKF_PROJECT_OPENACTION 
  9344.       Default open behavior for non-executable files 
  9345.  
  9346.  WKF_PROJECT_EXECACTION 
  9347.       Default open behavior for executable files 
  9348.  
  9349.  WKF_PROJECT_STANDARD 
  9350.       Sets all of the above flags.  This flag can be used to flag an unknown 
  9351.       change. 
  9352.  
  9353.  Change flags may be combined using the bitwise-OR (|) operator. 
  9354.  
  9355.  
  9356. ΓòÉΓòÉΓòÉ 20.41. WKF_DELETEINFO ΓòÉΓòÉΓòÉ
  9357.  
  9358. WKF_DELETEINFO - WKFM_CLIENTDELETED message data structure 
  9359.  
  9360. typedef struct _WKF_DELETEINFO
  9361.   {
  9362.    ULONG  cb;      /* Size of this structure, in bytes */
  9363.    ULONG  flChanged;  /* Reserved */
  9364.    CHAR  szParm[1];  /* Name of deleted file */
  9365.   } WKF_DELETEINFO;
  9366.  
  9367. Note:  This structure has the same format as the WKF_CHANGEINFO, WKF_MOVEINFO, 
  9368.        and WKF_RENAMEINFO structures. 
  9369.  
  9370.  
  9371. ΓòÉΓòÉΓòÉ <hidden> Field - szParm[1] ΓòÉΓòÉΓòÉ
  9372.  
  9373. szParm[1] (CHAR) 
  9374.  
  9375. This field contains a single file name relating to the client that was deleted. 
  9376.  
  9377. For example, if the client deleted was a base project, this field would contain 
  9378. the name of its project file. 
  9379.  
  9380.  
  9381. ΓòÉΓòÉΓòÉ <hidden> Field - flChanged ΓòÉΓòÉΓòÉ
  9382.  
  9383. flChanged (ULONG) 
  9384.  
  9385. Reserved value, zero. 
  9386.  
  9387.  
  9388. ΓòÉΓòÉΓòÉ 20.42. WKF_ENVIRON ΓòÉΓòÉΓòÉ
  9389.  
  9390. WKF_ENVIRON - environment data structure. 
  9391.  
  9392. typedef _Packed struct _WKF_ENVIRON
  9393.   {
  9394.    PSZ   pszEnvName;  /* Environment variable name */
  9395.    PSZ   pszEnvStr;   /* Environment variable string */
  9396.   } WKF_ENVIRON;
  9397.  
  9398.  
  9399. ΓòÉΓòÉΓòÉ 20.43. WKF_ENVIRONS ΓòÉΓòÉΓòÉ
  9400.  
  9401. WKF_ENVIRONS - environment list structure. 
  9402.  
  9403. typedef _Packed struct _WKF_ENVIRONS
  9404.   {
  9405.    ULONG      ulCount;     /* Number of entries in the apEnvirons list */
  9406.    PWKF_ENVIRON  apEnvirons[1];  /* List of environment data structures */
  9407.   } WKF_ENVIRONS;
  9408.  
  9409.  
  9410. ΓòÉΓòÉΓòÉ 20.44. WKF_ERRORMSGINFO ΓòÉΓòÉΓòÉ
  9411.  
  9412. WKF_ERRORMSGINFO - WKFM_LOGERROR message data structure 
  9413.  
  9414. typedef struct _WKF_ERRORMSGINFO
  9415.   {
  9416.    ULONG  cb;     /* Size of this structure, in bytes */
  9417.    ULONG  idError;   /* Error ID */
  9418.    BOOL  fActivate;  /* Activate log flag */
  9419.    CHAR  szText[1];  /* Message text */
  9420.   } WKF_ERRORMSGINFO;
  9421.  
  9422.  
  9423. ΓòÉΓòÉΓòÉ <hidden> Field - idError ΓòÉΓòÉΓòÉ
  9424.  
  9425. idError (ULONG) 
  9426.  
  9427. Error message identifier.  The identifier may be OS/2-defined or user-defined. 
  9428.  
  9429. Is this the resource file string table entry ID??? 
  9430.  
  9431.  
  9432. ΓòÉΓòÉΓòÉ <hidden> Field - fActivate ΓòÉΓòÉΓòÉ
  9433.  
  9434. fActivate (BOOL) 
  9435.  
  9436. If this flag is set to TRUE, the Action Log will make itself visible when it 
  9437. displays the error message.  If this flag is set to FALSE, the error message 
  9438. will still be logged but the Action Log will not be brought to the front of the 
  9439. screen. 
  9440.  
  9441.  
  9442. ΓòÉΓòÉΓòÉ <hidden> Field - szText[1] ΓòÉΓòÉΓòÉ
  9443.  
  9444. szText[1] (CHAR) 
  9445.  
  9446. Error message text to display in the WorkFrame/2* Action Log. 
  9447.  
  9448.  
  9449. ΓòÉΓòÉΓòÉ 20.45. WKF_EXECUTEINFO ΓòÉΓòÉΓòÉ
  9450.  
  9451. WKF_EXECUTEINFO - WKFM_EXECUTEACTION message data structure 
  9452.  
  9453. typedef struct _WKF_EXECUTEINFO
  9454.   {
  9455.    ULONG   cb;                /* Size of this structure, in bytes */
  9456.    LHANDLE  hActionId;            /* Router-assigned action handle */
  9457.    ULONG   flOptions;            /* WF/2 Monitor options */
  9458.    CHAR    szProjectFile[CCHMAXPATH];    /* Project file name */
  9459.    CHAR    szActionName[WKF_MAX_NAMELEN];  /* Action name */
  9460.    CHAR    szActionClass[WKF_MAX_CLASSLEN]; /* Action class name */
  9461.    ULONG   ulRunMode;            /* Program run mode */
  9462.    ULONG   cFiles;              /* Number of files listed in the szFiles buffer */
  9463.    CHAR    szFiles[1];            /* Source files list */
  9464.   } WKF_EXECUTEINFO;
  9465.  
  9466.  
  9467. ΓòÉΓòÉΓòÉ <hidden> Field - szActionName[WKF_MAX_NAMELEN] ΓòÉΓòÉΓòÉ
  9468.  
  9469. szActionName[WKF_MAX_NAMELEN] (CHAR) 
  9470.  
  9471. The name of the action to execute.  Specify NULL to execute the default action 
  9472. for the action class specified in the szActionClass field. 
  9473.  
  9474.  
  9475. ΓòÉΓòÉΓòÉ <hidden> Field - hActionId ΓòÉΓòÉΓòÉ
  9476.  
  9477. hActionId (LHANDLE) 
  9478.  
  9479. This action handle is assigned by the message router to uniquely identify the 
  9480. action to be executed. The message router updates this field for its own 
  9481. internal use. 
  9482.  
  9483. This value is included in the information structures of the WKFM_ACTIONSTART 
  9484. and WKFM_ACTIONEND router messages. 
  9485.  
  9486.  
  9487. ΓòÉΓòÉΓòÉ <hidden> Field - flOptions ΓòÉΓòÉΓòÉ
  9488.  
  9489. flOptions (ULONG) 
  9490.  
  9491. Monitor options flags.  This field applies to actions that are to be run in a 
  9492. WorkFrame/2* Monitor window (see ulRunMode). 
  9493.  
  9494. This field can contain one or more of the following flags combined using the 
  9495. bitwise-OR (|) operator: 
  9496.  
  9497.  WKF_MTR_AUTOCLOSE 
  9498.       Close Monitor if action terminated with no errors 
  9499.  
  9500.  WKF_MTR_MINIMIZE 
  9501.       Start Monitor minimized 
  9502.  
  9503.  WKF_MTR_MULTIPLE 
  9504.       Allow multiple, concurrent monitors 
  9505.  
  9506.  
  9507. ΓòÉΓòÉΓòÉ <hidden> Field - ulRunMode ΓòÉΓòÉΓòÉ
  9508.  
  9509. ulRunMode (ULONG) 
  9510.  
  9511. The run mode in which the action is to be executed. This field can contain any 
  9512. one of the following values: 
  9513.  
  9514.  WKF_RUNMODE_FULLSCREEN 
  9515.        Action is to be started in a full-screen session. 
  9516.  
  9517.  WKF_RUNMODE_WINDOW 
  9518.        Action is to be started in a windowed (vio) session. 
  9519.  
  9520.  WKF_RUNMODE_MONITOR 
  9521.        Action is to be started in a WorkFrame/2* Monitor window. 
  9522.  
  9523.  WKF_RUNMODE_DEFAULT 
  9524.        Action is to be started in default run mode. Within the OS/2* system, 
  9525.        default mode allows the Shell to establish the session type. 
  9526.  
  9527.  
  9528. ΓòÉΓòÉΓòÉ <hidden> Field - cFiles ΓòÉΓòÉΓòÉ
  9529.  
  9530. cFiles (ULONG) 
  9531.  
  9532. Number of files listed in the szFiles string list buffer. 
  9533.  
  9534.  
  9535. ΓòÉΓòÉΓòÉ <hidden> Field - szFiles[1] ΓòÉΓòÉΓòÉ
  9536.  
  9537. szFiles[1] (CHAR) 
  9538.  
  9539. A string containing the list of fully-qualified source files for which the 
  9540. action is to be invoked. Each file name should be delimited by a WKF_LIST_DELIM 
  9541. character constant. 
  9542.  
  9543.  
  9544. ΓòÉΓòÉΓòÉ 20.46. WKF_FILECHANGEINFO ΓòÉΓòÉΓòÉ
  9545.  
  9546. WKF_FILECHANGEINFO - WKFM_FILECHANGED message data structure 
  9547.  
  9548. typedef struct _WKF_FILECHANGEINFO
  9549.   {
  9550.    ULONG  cb;      /* Size of this structure, in bytes */
  9551.    CHAR  szParm[1];   /* Project file and changed file names */
  9552.   } WKF_FILECHANGEINFO;
  9553.  
  9554.  
  9555. ΓòÉΓòÉΓòÉ <hidden> Field - szParm[1] ΓòÉΓòÉΓòÉ
  9556.  
  9557. szParm[1] (CHAR) 
  9558.  
  9559. This field is a list string that contains the following, each separated by a 
  9560. WKF_LIST_DELIM character constant: 
  9561.  
  9562.  Project file name 
  9563.       Name of the project file of the project to which the changed file 
  9564.       belongs. 
  9565.  
  9566.  Changed file name 
  9567.       Fully qualified name of the file that was updated or changed. 
  9568.  
  9569.  
  9570. ΓòÉΓòÉΓòÉ 20.47. WKF_FILEDELETEINFO ΓòÉΓòÉΓòÉ
  9571.  
  9572. WKF_FILEDELETEINFO - WKFM_FILEDELETED message data structure 
  9573.  
  9574. typedef struct _WKF_FILEDELETEINFO
  9575.   {
  9576.    ULONG  cb;      /* Size of this structure, in bytes */
  9577.    CHAR  szParm[1];   /* Project file and deleted file names */
  9578.   } WKF_FILEDELETEINFO;
  9579.  
  9580.  
  9581. ΓòÉΓòÉΓòÉ <hidden> Field - szParm[1] ΓòÉΓòÉΓòÉ
  9582.  
  9583. szParm[1] (CHAR) 
  9584.  
  9585. This field is a list string that contains the following, each separated by a 
  9586. WKF_LIST_DELIM character constant: 
  9587.  
  9588.  Project file name 
  9589.       Name of the project file of the project to which the deleted file 
  9590.       belonged. 
  9591.  
  9592.  Deleted file name 
  9593.       Fully qualified name of the file that was deleted. 
  9594.  
  9595.  
  9596. ΓòÉΓòÉΓòÉ 20.48. WKF_FILERENAMEINFO ΓòÉΓòÉΓòÉ
  9597.  
  9598. WKF_FILERENAMEINFO - WKFM_FILERENAMED message data structure 
  9599.  
  9600. typedef struct _WKF_FILERENAMEINFO
  9601.   {
  9602.    ULONG  cb;      /* Size of this structure, in bytes */
  9603.    CHAR  szParm[1];   /* Project file and renamed file names */
  9604.   } WKF_FILERENAMEINFO;
  9605.  
  9606.  
  9607. ΓòÉΓòÉΓòÉ <hidden> Field - szParm[1] ΓòÉΓòÉΓòÉ
  9608.  
  9609. szParm[1] (CHAR) 
  9610.  
  9611. This field is a list string that contains the following, each separated by a 
  9612. WKF_LIST_DELIM character constant: 
  9613.  
  9614.  Project file name 
  9615.       Name of the project file of the project to which the renamed file 
  9616.       belongs. 
  9617.  
  9618.  Original file name 
  9619.       Fully qualified original name of the file that was renamed. 
  9620.  
  9621.  New file name 
  9622.       Fully qualified new name of the renamed file. 
  9623.  
  9624.  
  9625. ΓòÉΓòÉΓòÉ 20.49. WKF_INITIALIZEINFO ΓòÉΓòÉΓòÉ
  9626.  
  9627. WKF_INITIALIZEINFO - Message router client initialization parameter block 
  9628.  
  9629. typedef struct _WKF_INITIALIZEINFO
  9630.   {
  9631.    ULONG  cb;         /* Size of this structure, in bytes */
  9632.    ULONG  flConnectType;   /* Connection type */
  9633.    ULONG  ulClientType;    /* Client type of registering client */
  9634.    ULONG  flTypeInterest;   /* Client types interested in */
  9635.    ULONG  flOptions;     /* Message router registration options */
  9636.    CHAR  szClientTitle[1];  /* Client title */
  9637.   } WKF_INITIALIZEINFO;
  9638.  
  9639.  
  9640. ΓòÉΓòÉΓòÉ <hidden> Field - szClientTitle[1] ΓòÉΓòÉΓòÉ
  9641.  
  9642. szClientTitle[1] (CHAR) 
  9643.  
  9644. Title string of the client.  The router uses this string to identify the client 
  9645. when writing an entry to the WorkFrame/2* Action Log on its behalf. 
  9646.  
  9647.  
  9648. ΓòÉΓòÉΓòÉ 20.50. WKF_LOGMSGINFO ΓòÉΓòÉΓòÉ
  9649.  
  9650. WKF_LOGMSGINFO - WKFM_LOGMESSAGE message data structure 
  9651.  
  9652. typedef struct _WKF_LOGMSGINFO
  9653.   {
  9654.    ULONG  cb;     /* Size of this structure, in bytes */
  9655.    CHAR  szText[1];  /* Message text */
  9656.   } WKF_LOGMSGINFO;
  9657.  
  9658.  
  9659. ΓòÉΓòÉΓòÉ <hidden> Field - szText[1] ΓòÉΓòÉΓòÉ
  9660.  
  9661. szText[1] (CHAR) 
  9662.  
  9663. Text to display in the WorkFrame/2* Action Log for this client. 
  9664.  
  9665.  
  9666. ΓòÉΓòÉΓòÉ 20.51. WKF_MOVEINFO ΓòÉΓòÉΓòÉ
  9667.  
  9668. WKF_MOVEINFO - WKF_CLIENTMOVED message data structure 
  9669.  
  9670. typedef struct _WKF_MOVEINFO
  9671.   {
  9672.    ULONG  cb;      /* Size of this structure, in bytes */
  9673.    ULONG  flChanged;  /* Reserved */
  9674.    CHAR  szParm[1];  /* Name of moved file */
  9675.   } WKF_MOVEINFO;
  9676.  
  9677.  
  9678. ΓòÉΓòÉΓòÉ <hidden> Field - szParm[1] ΓòÉΓòÉΓòÉ
  9679.  
  9680. szParm[1] (CHAR) 
  9681.  
  9682. This field contains three strings: the new client title, the old file name, and 
  9683. the new file name (both fully qualified). None of these strings can be NULL. 
  9684.  
  9685. Take an actions profile object as an example.  An actions profile is 
  9686. represented by a single file on disk, under the OS/2 Desktop directory.  Its 
  9687. location on the desktop determines its physical path on the disk.  Use this 
  9688. field to indicate the new title, the name of the old file, and the name of the 
  9689. new file that represents the actions profile. The client title is the title of 
  9690. the Workplace Shell* object that represents the client, and may or may not be 
  9691. different from its old title. 
  9692.  
  9693.  
  9694. ΓòÉΓòÉΓòÉ <hidden> Field - flChanged ΓòÉΓòÉΓòÉ
  9695.  
  9696. flChanged (ULONG) 
  9697.  
  9698. Reserved value, zero. 
  9699.  
  9700.  
  9701. ΓòÉΓòÉΓòÉ 20.52. WKF_RENAMEINFO ΓòÉΓòÉΓòÉ
  9702.  
  9703. WKF_RENAMEINFO - WKF_CLIENTRENAMED message data structure 
  9704.  
  9705. typedef struct _WKF_RENAMEINFO
  9706.   {
  9707.    ULONG  cb;      /* Size of this structure, in bytes */
  9708.    ULONG  flChanged;  /* Reserved */
  9709.    CHAR  szParm[1];  /* Name of file renamed */
  9710.   } WKF_RENAMEINFO;
  9711.  
  9712.  
  9713. ΓòÉΓòÉΓòÉ <hidden> Field - szParm[1] ΓòÉΓòÉΓòÉ
  9714.  
  9715. szParm[1] (CHAR) 
  9716.  
  9717. This field contains three strings: the new client title, the old file name, and 
  9718. the new file name, each delimited by a WKF_LIST_DELIM character.  None of these 
  9719. strings should be NULL. 
  9720.  
  9721. For example, if the client renamed was a base project, this field would contain 
  9722. its new title, the name of the old project file, and the name of the new 
  9723. project file.  The client title is the title of the Workplace Shell* object 
  9724. that represents the client, and may or may not be different from its old title. 
  9725.  
  9726.  
  9727. ΓòÉΓòÉΓòÉ <hidden> Field - flChanged ΓòÉΓòÉΓòÉ
  9728.  
  9729. flChanged (ULONG) 
  9730.  
  9731. Reserved value, zero. 
  9732.  
  9733.  
  9734. ΓòÉΓòÉΓòÉ 20.53. WKF_SENDERINFO ΓòÉΓòÉΓòÉ
  9735.  
  9736. WKF_SENDERINFO - Message sender information structure 
  9737.  
  9738. typedef struct _WKF_SENDERINFO
  9739.   {
  9740.    ULONG  cb;       /* Size of this structure, in bytes */
  9741.    ULONG  ulClientType;  /* Client type of sender */
  9742.   } WKF_SENDERINFO;
  9743.  
  9744.  
  9745. ΓòÉΓòÉΓòÉ 20.54. WKF_TAGPARAM ΓòÉΓòÉΓòÉ
  9746.  
  9747. WKF_TAGPARAM - encoded information to be placed in the item handle of each 
  9748. hwndErrorBox listbox item that contains a valid error message. This data type 
  9749. is used in the Wkf...ParseError API. 
  9750.  
  9751. typedef union _WKF_TAGPARAM
  9752. {
  9753.  unsigned long tagParam;
  9754.  _Packed struct
  9755.   {
  9756.   USHORT errorLine;   /* The line number within the file where the error occurred */
  9757.   char  offset;    /* The offset of the error within errorLine, in bytes */
  9758.   char  fileNumber;  /* The zero-based index of the file name item within the hwndFilenames listbox */
  9759.   } sub;
  9760. } WKF_TAGPARAM;
  9761.  
  9762.  
  9763. ΓòÉΓòÉΓòÉ <hidden> Field - tagParam ΓòÉΓòÉΓòÉ
  9764.  
  9765. tagParam (unsigned long) 
  9766.  
  9767. If an item in the hwndErrorBox listbox does not contain a valid error message, 
  9768. do not encode any information for that line. This field will contain a zero in 
  9769. the tag/handle field. 
  9770.  
  9771.  
  9772. ΓòÉΓòÉΓòÉ <hidden> Field - fileNumber ΓòÉΓòÉΓòÉ
  9773.  
  9774. fileNumber (char) 
  9775.  
  9776. The zero-based index of the item in the hwndFilenames listbox that corresponds 
  9777. to the name of the source file where the error message occurred. 
  9778.  
  9779.  
  9780. ΓòÉΓòÉΓòÉ <hidden> Field - errorLine ΓòÉΓòÉΓòÉ
  9781.  
  9782. errorLine (USHORT) 
  9783.  
  9784. The number of the line where the error occurs in the file indexed by the 
  9785. fileNumber member. 
  9786.  
  9787.  
  9788. ΓòÉΓòÉΓòÉ <hidden> Field - offset ΓòÉΓòÉΓòÉ
  9789.  
  9790. offset (char) 
  9791.  
  9792. The offset of the error within the line specified by the errorLine member.  The 
  9793. offset is in bytes, not characters.  Tabs are counted only as one byte. 
  9794.  
  9795. If the offset is not available, zero should be used. 
  9796.  
  9797.  
  9798. ΓòÉΓòÉΓòÉ 20.55. WKF_TYPE ΓòÉΓòÉΓòÉ
  9799.  
  9800. WKF_TYPE - type data structure 
  9801.  
  9802. typedef _Packed struct _WKF_TYPE
  9803.  {
  9804.   PSZ   pszTypeName;  /* Name of the type */
  9805.   ULONG  ulSearchType;  /* Pattern or user-defined */
  9806.   PSZ   pszData;    /* Type file mask string */
  9807.  } WKF_TYPE;
  9808.  
  9809.  
  9810. ΓòÉΓòÉΓòÉ <hidden> Field - pszTypeName ΓòÉΓòÉΓòÉ
  9811.  
  9812. pszTypeName (PSZ) 
  9813.  
  9814. The name of the defined type. 
  9815.  
  9816.  
  9817. ΓòÉΓòÉΓòÉ <hidden> Field - ulSearchType ΓòÉΓòÉΓòÉ
  9818.  
  9819. ulSearchType (ULONG) 
  9820.  
  9821. This field can contain one of the following values: 
  9822.  
  9823.  1  WKF_TYPE_PATTERN 
  9824.       Currently, this is the only supported search type. 
  9825.  
  9826.  2  WKF_TYPE_USERDEFINE 
  9827.       Currently not supported. 
  9828.  
  9829.  
  9830. ΓòÉΓòÉΓòÉ <hidden> Field - pszData ΓòÉΓòÉΓòÉ
  9831.  
  9832. pszData (PSZ) 
  9833.  
  9834. This field contains the collection of types and file masks that define the type 
  9835. identified by pszTypeName. Each file mask or type is delimited by a 
  9836. WKF_LIST_DELIM character in this list string. 
  9837.  
  9838.  
  9839. ΓòÉΓòÉΓòÉ 20.56. WKF_TYPES ΓòÉΓòÉΓòÉ
  9840.  
  9841. WKF_TYPES - type list structure 
  9842.  
  9843. typedef _Packed struct _WKF_TYPES
  9844.  {
  9845.   ULONG    ulCount;   /* Number of entries in the apTypes list */
  9846.   PWKF_TYPE  apTypes[1];  /* List of type structures */
  9847.  } WKF_TYPES;
  9848.  
  9849.  
  9850. ΓòÉΓòÉΓòÉ 20.57. WKFBASEPROJECT ΓòÉΓòÉΓòÉ
  9851.  
  9852. WKFBASEPROJECT - base project information structure.  The fields in this 
  9853. structure reflect the information specified in the base project Settings 
  9854. notebook, 
  9855.  
  9856. typedef _Packed struct _WKFBASEPROJECT
  9857.  {
  9858.   ULONG   cb;                /* Size of this structure, in bytes */
  9859.   CHAR    szPAM[CCHMAXPATH];        /* PAM DLL name */
  9860.   CHAR    szDirectory[WKF_MAX_PATHLIST];  /* List of project directories */
  9861.   CHAR    szMask[WKF_MAX_MASKLIST];     /* List of project file masks */
  9862.   CHAR    szTargetName[CCHMAXPATH];     /* Target program file name */
  9863.   CHAR    szTargetParm[WKF_MAX_PARMLIST];  /* Target program parameters */
  9864.   BOOL    fTargetPrompt;          /* Target prompt required flag */
  9865.   ULONG   ulTargetType;           /* Target program run mode */
  9866.   ULONG   flMonitorFlags;          /* Monitor option flags */
  9867.   CHAR    szTargetPath[CCHMAXPATH];     /* Target path name */
  9868.   CHAR    szMakeFile[CCHMAXPATH];      /* Make file name */
  9869.   CHAR    szProfile[CCHMAXPATH];      /* Actions profile file name */
  9870.   BOOL    fFileDetailMenu;         /* File-scope menu flag */
  9871.   BOOL    fProjDetailMenu;         /* Project-scope menu flag */
  9872.   CHAR    szOpenAction[WKF_MAX_CLASSLEN];  /* Default open action class name */
  9873.   CHAR    szExecAction[WKF_MAX_CLASSLEN];  /* Default execution action class name */
  9874.  } WKFBASEPROJECT;
  9875.  
  9876.  
  9877. ΓòÉΓòÉΓòÉ <hidden> Field - szPAM[CCHMAXPATH] ΓòÉΓòÉΓòÉ
  9878.  
  9879. szPAM (CHAR) 
  9880.  
  9881. The fully qualified name of the project access method DLL file specified for 
  9882. the project. 
  9883.  
  9884.  
  9885. ΓòÉΓòÉΓòÉ <hidden> Field - szDirectory[WKF_MAX_PATHLIST] ΓòÉΓòÉΓòÉ
  9886.  
  9887. szDirectory[WKF_MAX_PATHLIST] (CHAR) 
  9888.  
  9889. The string list containing the project source directory path names.  Each path 
  9890. name is separated by a WKF_LIST_DELIM character constant. 
  9891.  
  9892.  
  9893. ΓòÉΓòÉΓòÉ <hidden> Field - szMask[WKF_MAX_MASKLIST] ΓòÉΓòÉΓòÉ
  9894.  
  9895. szMask[WKF_MAX_MASKLIST] (CHAR) 
  9896.  
  9897. The project file masks string list.  Each file mask string is separated by a 
  9898. WKF_LIST_DELIM character constant. 
  9899.  
  9900.  
  9901. ΓòÉΓòÉΓòÉ <hidden> Field - szTargetName[CCHMAXPATH] ΓòÉΓòÉΓòÉ
  9902.  
  9903. szTargetName[CCHMAXPATH] (CHAR) 
  9904.  
  9905. The unqualified file name of the project's target program. 
  9906.  
  9907.  
  9908. ΓòÉΓòÉΓòÉ <hidden> Field - szTargetParm[WKF_MAX_PARMLIST] ΓòÉΓòÉΓòÉ
  9909.  
  9910. szTargetParm[WKF_MAX_PARMLIST] (CHAR) 
  9911.  
  9912. The parameter string that the target program is to be run with. This field has 
  9913. no value if no parameters were specified or if the target program identified by 
  9914. the szTargetName is not an executable file (for example, a DLL). 
  9915.  
  9916.  
  9917. ΓòÉΓòÉΓòÉ <hidden> Field - fTargetPrompt ΓòÉΓòÉΓòÉ
  9918.  
  9919. fTargetPrompt (BOOL) 
  9920.  
  9921. Flag specifying one of the following: 
  9922.  
  9923.  TRUE 
  9924.       The user is prompted for a parameter string each time the target program 
  9925.       is executed. 
  9926.  
  9927.  FALSE 
  9928.       No prompt is displayed when the target program is executed. 
  9929.  
  9930.  
  9931. ΓòÉΓòÉΓòÉ <hidden> Field - ulTargetType ΓòÉΓòÉΓòÉ
  9932.  
  9933. ulTargetType (ULONG) 
  9934.  
  9935. Target program run mode.  This field can contain any one of the following 
  9936. values: 
  9937.  
  9938.  WKF_PJIOPROG_FULLSCREEN 
  9939.       Target program is to be run in a full-screen session 
  9940.  
  9941.  WKF_PJIOPROG_WINDOW 
  9942.       Target program is to be run in a text (vio) window 
  9943.  
  9944.  WKF_PJIOPROG_MONITOR 
  9945.       Target program output is to be echoed to the WorkFrame/2* Monitor window. 
  9946.  
  9947.  
  9948. ΓòÉΓòÉΓòÉ <hidden> Field - flMonitorFlags ΓòÉΓòÉΓòÉ
  9949.  
  9950. flMonitorFlags (ULONG) 
  9951.  
  9952. Monitor option flags. 
  9953.  
  9954. This field can contain one or more of the following flags, combined using the 
  9955. bitwise-OR (|) operator: 
  9956.  
  9957.  WKF_PJIOMON_AUTOCLOSE 
  9958.       Monitor is closed if action terminates without error 
  9959.  
  9960.  WKF_PJIOMON_MINIMIZE 
  9961.       Monitor is started minimized. 
  9962.  
  9963.  WKF_PJIOMON_NOMULTIPLE 
  9964.       Multiple, concurrent monitors are not allowed.  Multiple actions run 
  9965.       serially. 
  9966.  
  9967.  
  9968. ΓòÉΓòÉΓòÉ <hidden> Field - szTargetPath[CCHMAXPATH] ΓòÉΓòÉΓòÉ
  9969.  
  9970. szTargetPath[CCHMAXPATH] (CHAR) 
  9971.  
  9972. The fully qualified path name of the project's working directory which is used: 
  9973.  
  9974.  o To store the project make file generated by the MakeMake utility 
  9975.  o To store files copied from other Workplace Shell* objects 
  9976.  o As the current directory when actions are selected on behalf of a project or 
  9977.    its parts. 
  9978.  
  9979.  
  9980. ΓòÉΓòÉΓòÉ <hidden> Field - szMakeFile[CCHMAXPATH] ΓòÉΓòÉΓòÉ
  9981.  
  9982. szMakeFile[CCHMAXPATH] (CHAR) 
  9983.  
  9984. The unqualified name of the project's default make file name. 
  9985.  
  9986.  
  9987. ΓòÉΓòÉΓòÉ <hidden> Field - szProfile[CCHMAXPATH] ΓòÉΓòÉΓòÉ
  9988.  
  9989. szProfile[CCHMAXPATH] (CHAR) 
  9990.  
  9991. The fully qualified file name of the actions profile for the project. 
  9992.  
  9993.  
  9994. ΓòÉΓòÉΓòÉ <hidden> Field - fFileDetailMenu ΓòÉΓòÉΓòÉ
  9995.  
  9996. fFileDetailMenu (BOOL) 
  9997.  
  9998. Menu type for file-scoped actions.  This field can contain any one of the 
  9999. following values: 
  10000.  
  10001.  TRUE 
  10002.       File-scoped actions are shown on an extended menu. 
  10003.  
  10004.  FALSE 
  10005.       File-scoped actions are shown on a regular menu. 
  10006.  
  10007.  
  10008. ΓòÉΓòÉΓòÉ <hidden> Field - fProjDetailMenu ΓòÉΓòÉΓòÉ
  10009.  
  10010. fProjDetailMenu (BOOL) 
  10011.  
  10012. Menu type for project-scoped actions.  This field can contain any one of the 
  10013. following values: 
  10014.  
  10015.  TRUE 
  10016.       Project-scoped actions are shown on an extended menu. 
  10017.  
  10018.  FALSE 
  10019.       Project-scoped actions are shown on a regular menu. 
  10020.  
  10021.  
  10022. ΓòÉΓòÉΓòÉ <hidden> Field - szOpenAction[WKF_MAX_CLASSLEN] ΓòÉΓòÉΓòÉ
  10023.  
  10024. szOpenAction[WKF_MAX_CLASSLEN] (CHAR) 
  10025.  
  10026. Class name defining the default behavior for non-executable files, for example, 
  10027. EDIT. 
  10028.  
  10029.  
  10030. ΓòÉΓòÉΓòÉ <hidden> Field - szExecAction[WKF_MAX_CLASSLEN] ΓòÉΓòÉΓòÉ
  10031.  
  10032. szExecAction[WKF_MAX_CLASSLEN] (CHAR) 
  10033.  
  10034. Class name defining the default behavior for executable files, for example, 
  10035. RUN. 
  10036.  
  10037.  
  10038. ΓòÉΓòÉΓòÉ 20.58. WKFPAM_PART ΓòÉΓòÉΓòÉ
  10039.  
  10040. WKFPAM_PART - represents a single element in the list of project parts passed 
  10041. back to the WKF_ADDFILES callback function. 
  10042.  
  10043. typedef _Packed struct _WKFPAM_PART
  10044.  {
  10045.   ULONG     cb;       /* Size of this structure, in bytes */
  10046.   HPOINTER    hIcon;     /* Handle to a copy of the icon for the file */
  10047.   PSZ      pszSystemData; /* Pointer to a string to display for information */
  10048.   FILEFINDBUF3  FileFind;    /* File information structure */
  10049.  } WKFPAM_PART;
  10050.  
  10051.  
  10052. ΓòÉΓòÉΓòÉ <hidden> Field - cb ΓòÉΓòÉΓòÉ
  10053.  
  10054. cb (ULONG) 
  10055.  
  10056. The size of this structure, in bytes, including the FILEFINDBUF3 buffer and 
  10057. other string data, all of which contain variable length strings. 
  10058.  
  10059.  
  10060. ΓòÉΓòÉΓòÉ <hidden> Field - hIcon ΓòÉΓòÉΓòÉ
  10061.  
  10062. hIcon (HPOINTER) 
  10063.  
  10064. A handle to a copy of the icon for the file.  This handle does not need to be 
  10065. freed. 
  10066.  
  10067.  
  10068. ΓòÉΓòÉΓòÉ <hidden> Field - pszSystemData ΓòÉΓòÉΓòÉ
  10069.  
  10070. pszSystemData (PSZ) 
  10071.  
  10072. Pointer to a string that contains any special data about the project part that 
  10073. the PAM wishes to display.  For example, a library system PAM may display 
  10074. information about the status of a file. 
  10075.  
  10076. The information is displayed in a details view column of the project container. 
  10077.  
  10078.  
  10079. ΓòÉΓòÉΓòÉ <hidden> Field - FileFind ΓòÉΓòÉΓòÉ
  10080.  
  10081. FileFind (FILEFINDBUF3) 
  10082.  
  10083. This structure contains 32-bit (OS/2* level 1) file information, used without 
  10084. extended attributes.  Non-OS/2 PAMs should also use this structure to provide 
  10085. the WorkFrame/2* program with the expected project part information. 
  10086.  
  10087. Since the WorkFrame/2* program expects one WKFPAM_PART to represent a single 
  10088. project part, the oNextEntryOffset field of the FILEFINDBUF3 structure should 
  10089. always be set to zero, indicating that there are no other FILEFINDBUF3 
  10090. structures contained within the WKFPAM_PART structure. 
  10091.  
  10092.  
  10093. ΓòÉΓòÉΓòÉ 21. SOM Classes ΓòÉΓòÉΓòÉ
  10094.  
  10095. The WorkFrame/2* program is fully integrated with the OS/2* Workplace Shell* 
  10096. via SOM1, the version of SOM shipped with OS/2. It does not run in a separate 
  10097. WorkFrame/2 shell. As such, it takes full advantage of Workplace Shell 
  10098. object-action techniques by implementing context-sensitive actions and 
  10099. extensive drag-and-drop support. 
  10100.  
  10101. The WorkFrame/2 program inherits features from the Workplace Shell by 
  10102. subclassing the Workplace Shell classes.  Following is a diagram illustrating 
  10103. the WorkFrame/2 Workplace Shell class hierarchy. 
  10104.  
  10105.  
  10106. ΓòÉΓòÉΓòÉ 22. Persistent Object IDs ΓòÉΓòÉΓòÉ
  10107.  
  10108. This section lists the persistent WorkFrame/2* object IDs that may be useful 
  10109. when creating project and actions profile objects. 
  10110.  
  10111. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10112. Γöé        Object                     Γöé      ID                 Γöé
  10113. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10114. ΓöéWorkFrame/2 main folder            Γöé<WKF_MAINFOLDER>         Γöé
  10115. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10116. ΓöéActions Profile folder             Γöé<WKF_PROFILE_FOLDER>     Γöé
  10117. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10118. ΓöéInformation folder                 Γöé<WKF_INFO_FOLDER>        Γöé
  10119. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10120. ΓöéTools folder                       Γöé<WKF_TOOLSFOLDER>        Γöé
  10121. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10122. ΓöéSamples folder                     Γöé<WKF_COMPPROJ>           Γöé
  10123. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10124. ΓöéSetup program                      Γöé<WKF_SETUP>              Γöé
  10125. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10126. ΓöéAction Log                         Γöé<WKF_ROUTER>             Γöé
  10127. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10128. ΓöéC/C++ Tools Folder                 Γöé<IBMCPP201FOLDER>        Γöé
  10129. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10130. ΓöéSample WF/2 Project Folder (in     Γöé<WKF_CPP_COMPPROJ>       Γöé
  10131. ΓöéC/C++ Tools Folder)                Γöé                         Γöé
  10132. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10133. ΓöéDefault Actions Profile            Γöé<WKF_PROFILE_DFLT>       Γöé
  10134. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10135. ΓöéIBM C/C++ Tools Actions Profile    Γöé<WKF_PROFILE_CPP>        Γöé
  10136. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10137. ΓöéIBM Toolkit Profile                Γöé<WKF_PROFILE_TLKT>       Γöé
  10138. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10139. ΓöéSample Actions Profile             Γöé<WKF_PROFILE_SAMPLE>     Γöé
  10140. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10141. ΓöéCLC Actions Profile                Γöé<WKF_PROFILE_CLC>        Γöé
  10142. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10143. ΓöéCLC sample project                 Γöé<WKF_CLC_FOLDER>         Γöé
  10144. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10145. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10146.  
  10147.  
  10148. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10149.  
  10150. The system object model, or SOM, is the framework on which Workplace Shell* 
  10151. functions that allow the creation and manipulation of objects are based.  It 
  10152. establishes a basic inheritance hierarchy for objects in the system and defines 
  10153. the underlying protocols which regulate the relationships between objects. 
  10154.  
  10155.  
  10156. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10157.  
  10158. Trademark of the IBM Corporation. 
  10159.  
  10160.  
  10161. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10162.  
  10163. Trademark of the Microsoft Corporation. 
  10164.  
  10165.  
  10166. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10167.  
  10168. This is an example of a hypertext link. 
  10169.  
  10170.  
  10171. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10172.  
  10173. The default editor is the default action specified for the EDIT action class. 
  10174.  
  10175.  
  10176. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10177.  
  10178. Information Presentation Facility 
  10179.  
  10180.  
  10181. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10182.  
  10183. A resource number is a help window identifier. Each help window within a help 
  10184. (.HLP) file should have a unique resource number that identifies it. 
  10185.  
  10186.  
  10187. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10188.  
  10189. The application name and data key form the two-level key values that are used 
  10190. to store and retrieve information from project files.  An application name key 
  10191. should be unique within an application. Data keys should be unique within the 
  10192. project file. This is similar to the way data is stored and retrieved from 
  10193. OS/2* initialization (.INI) files. 
  10194.  
  10195. For example, the name of working file for an editor called THOR could be stored 
  10196. using THOR for the application key name, and work_file for the data key name. 
  10197.  
  10198.  
  10199. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10200.  
  10201. Types within the WorkFrame/2* context are similar to OS/2* types (see types in 
  10202. the OS/2 Master Help Index for a full explanation). 
  10203.  
  10204. The types available within the WorkFrame/2 environment are defined on the Types 
  10205. page of the Default Actions Profile notebook.  Types simplify the process of 
  10206. specifying the masks of files that can be used as source for an action (source 
  10207. masks), and those that can be produced by the action (target masks). 
  10208.  
  10209.  
  10210. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  10211.  
  10212. A project part is an object that belongs to a WorkFrame/2* project. Currently, 
  10213. the only known kind of project part is a file.