home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / odtlktv6.zip / ODTLKT / TOOLKIT / BOOK / USETLKT.INF (.txt) < prev   
OS/2 Help File  |  1995-12-14  |  377KB  |  8,901 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. How to Use This Book ΓòÉΓòÉΓòÉ
  3.  
  4. Before you start reading the information in this book, it might be helpful to 
  5. review the following topics, which explain how to use this book: 
  6.  
  7.      Using the Contents 
  8.      Getting Additional Information 
  9.      Using the Menu Bar Choices 
  10.      Documentation Conventions 
  11.  
  12.  
  13. ΓòÉΓòÉΓòÉ 1.1. Using the Contents ΓòÉΓòÉΓòÉ
  14.  
  15. When the Contents window first appears, some topics have a plus (+) sign beside 
  16. them. The plus sign indicates that additional topics are available. 
  17.  
  18. To expand the Contents if you are using a mouse, click on the plus sign. If you 
  19. are using the keyboard, use the Up or Down Arrow key to highlight the topic, 
  20. and press the plus (+) key. For example, Toolkit Roadmap has a plus sign beside 
  21. it. To see additional topics for that heading, click on the plus sign or 
  22. highlight that topic and press the plus (+) key. 
  23.  
  24. To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  25. to highlight the topic, and then press Enter). 
  26.  
  27.  
  28. ΓòÉΓòÉΓòÉ 1.2. Getting Additional Information ΓòÉΓòÉΓòÉ
  29.  
  30. After you select a topic, the information for that topic appears in a window. 
  31. Highlighted words or phrases indicate that additional information is available. 
  32. You will notice that certain words and phrases are highlighted in green 
  33. letters, or in white letters on a black background. These are called hypertext 
  34. terms. If you are using a mouse, double-click on the highlighted word. If you 
  35. are using a keyboard, press the Tab key to move to the highlighted word, and 
  36. then press Enter. Additional information then appears in a window. 
  37.  
  38.  
  39. ΓòÉΓòÉΓòÉ 1.3. Using Menu Bar Choices ΓòÉΓòÉΓòÉ
  40.  
  41. Several choices are available for managing information presented in this book. 
  42. There are three menus on the menu bar: 
  43.  
  44.      Services menu 
  45.      Options menu 
  46.      Help menu 
  47.  
  48.  
  49. ΓòÉΓòÉΓòÉ 1.3.1. Services Menu ΓòÉΓòÉΓòÉ
  50.  
  51. The actions that are selectable from the Services menu operate on the active 
  52. window currently displayed on the screen. These actions include the following: 
  53.  
  54.      Bookmark Option 
  55.      Copy Option 
  56.      Print Option 
  57.      Search Option 
  58.  
  59.  
  60. ΓòÉΓòÉΓòÉ 1.3.1.1. Bookmark Option ΓòÉΓòÉΓòÉ
  61.  
  62. The Bookmark option allows you to set a placeholder so you can retrieve 
  63. information of interest to you. When you place a bookmark on a topic, it is 
  64. added to a list of bookmarks you have previously set. You can view the list, 
  65. and you can remove one or all bookmarks from the list. If you have not set any 
  66. bookmarks, the list is empty. To set a bookmark, do the following: 
  67.  
  68.    1. Select a topic from the Contents. 
  69.  
  70.    2. When that topic appears, choose the Bookmark option from the Services 
  71.       menu. 
  72.  
  73.    3. If you want to change the name used for the bookmark, type the new name 
  74.       in the field. 
  75.  
  76.    4. Click on the Place radio button or press the Up or Down Arrow key to 
  77.       select it. 
  78.  
  79.    5. Click on OK or select it and press Enter. The bookmark is then added to 
  80.       the bookmark list. 
  81.  
  82.  
  83. ΓòÉΓòÉΓòÉ 1.3.1.2. Copy Option ΓòÉΓòÉΓòÉ
  84.  
  85. The Copy option allows you to copy a topic that you are viewing to the System 
  86. Clipboard or to a file that you can edit. You will find this particularly 
  87. useful for copying syntax definitions and program samples into the application 
  88. that you are developing. 
  89.  
  90. You can copy a topic that you are viewing in two ways: 
  91.  
  92.      Copy copies the topic that you are viewing into the System Clipboard. If 
  93.       you are using a Presentation Manager editor (for example, the System 
  94.       Editor) that copies or cuts (or both) to the System Clipboard and pastes 
  95.       to the System Clipboard, you can easily add the copied information to 
  96.       your program source module. 
  97.  
  98.      Copy to file copies the topic that you are viewing into a temporary file 
  99.       named TEXT.TMP. You can later edit that file by using any editor. You 
  100.       will find TEXT.TMP in the directory where your viewable document resides. 
  101.  
  102.  To copy a topic, do the following: 
  103.  
  104.    1. Expand the Contents list and select a topic. 
  105.  
  106.    2. When the topic appears, choose Copy to file from the Services menu. 
  107.  
  108.    3. The system puts the text pertaining to that topic into the temporary file 
  109.       named TEXT.TMP. 
  110.  
  111.  For information on one of the other choices in the Services menu, highlight 
  112.  the choice and press the F1 key. 
  113.  
  114.  
  115. ΓòÉΓòÉΓòÉ 1.3.1.3. Print Option ΓòÉΓòÉΓòÉ
  116.  
  117. The Print option allows you to print one or more topics. You can also print a 
  118. set of topics by first marking the topics in the Contents list. To print the 
  119. document contents list do the following: 
  120.  
  121.    1. Choose Print from the Services menu. 
  122.  
  123.    2. Click on Contents (or press the Up or Down Arrow key to select it). 
  124.  
  125.    3. Click on Print (or select it and press Enter). 
  126.  
  127.    4. The Contents list is printed on your printer. 
  128.  
  129.  
  130. ΓòÉΓòÉΓòÉ 1.3.1.4. Search Option ΓòÉΓòÉΓòÉ
  131.  
  132. The Search option allows you to find occurrences of a word or phrase in the 
  133. current topic, selected topics, or all topics. You can specify a word or phrase 
  134. to be searched. You can also limit the search to a set of topics by first 
  135. marking the topics in the Contents list. 
  136.  
  137. To search for a word or phrase in all topics, do the following: 
  138.  
  139.    1. Choose the Search option from the Services menu. Type the word or words 
  140.       to be searched for. 
  141.  
  142.    2. Click on All sections or press the Up or Down Arrow keys to select it. 
  143.  
  144.    3. Click on Search or select it and press Enter to begin the search. 
  145.  
  146.    4. The list of topics where the word or phrase appears is displayed. 
  147.  
  148.  
  149. ΓòÉΓòÉΓòÉ 1.3.2. Options Menu ΓòÉΓòÉΓòÉ
  150.  
  151. The actions that are selectable from the Options menu allow you to change the 
  152. way your Contents list is displayed. To expand the Contents and show all levels 
  153. for all topics, choose Expand all from the Options menu. You can also press 
  154. Ctrl+*. For information on one of the other choices in the Options menu, 
  155. highlight the choice and press the F1 key. 
  156.  
  157.  
  158. ΓòÉΓòÉΓòÉ 1.3.3. Help Menu ΓòÉΓòÉΓòÉ
  159.  
  160. The actions that are selectable from the Help menu allow you to select 
  161. different types of help information. You can also press the F1 key for help 
  162. information about the Information Presentation Facility (IPF). 
  163.  
  164.  
  165. ΓòÉΓòÉΓòÉ 1.4. Documentation Conventions ΓòÉΓòÉΓòÉ
  166.  
  167. Throughout the Using Your Toolkit, the following conventions distinguish the 
  168. different elements of text: 
  169.  
  170.  plain text                    Function names, structure names, data type 
  171.                                names, message names, enumerated types, and 
  172.                                constant names. 
  173.  
  174.  Initial capitalization        Key names, push buttons, check boxes, radio 
  175.                                buttons, group-box controls, drop-down list box, 
  176.                                dialog windows, spin buttons, combo-boxes, 
  177.                                single-line entry (SLE) and multiple-line entry 
  178.                                (MLE) fields. 
  179.  
  180.  CAPITALS                      File names and error codes. 
  181.  
  182.  monospace                     Programming examples and user input at the 
  183.                                command line prompt or into an entry field. 
  184.  
  185.  bold                          Window sub-titles, menu bar choices and menu 
  186.                                items. 
  187.  
  188.  italics                       Parameters, structure fields, titles of 
  189.                                documents, and first occurrences of words with 
  190.                                special meaning. 
  191.  
  192.  
  193. ΓòÉΓòÉΓòÉ 2. Introduction ΓòÉΓòÉΓòÉ
  194.  
  195. Welcome to the IBM Developer's Toolkit for OS/2 Warp (Warp Toolkit). This book 
  196. documents the following: 
  197.  
  198.      Additions and updates made to the IBM Developer's Toolkit for OS/2 Warp 
  199.       as listed in the What's New section. 
  200.  
  201.      Descriptions of hardcopy and online documentation, code samples, and 
  202.       tools 
  203.  
  204.      Ordering information for hardcopy books and The Developer Connection for 
  205.       OS/2 
  206.  
  207.      Programming considerations that have been changed or added 
  208.  
  209.      System debug support which introduces you to the interface that installs 
  210.       the debug kernel, symbol files, and debug version of the PM 
  211.  
  212.      Toolkit roadmap that covers the folder hierarchy and the contents and 
  213.       directory structure 
  214.  
  215.      Toolkit support information that assists you in installing or using the 
  216.       Warp Toolkit, or reporting suspected system defects as a result of 
  217.       applying the Warp Toolkit 
  218.  
  219.      Mechanisms for sending us your ideas and comments about the Warp Toolkit 
  220.       and its documentation 
  221.  
  222.  
  223. ΓòÉΓòÉΓòÉ 3. README ΓòÉΓòÉΓòÉ
  224.  
  225.  
  226. ΓòÉΓòÉΓòÉ 4. Installation ΓòÉΓòÉΓòÉ
  227.  
  228. The TK21DESK.CMD command, used to recreate the Toolkit's icons or objects on 
  229. the Desktop, is no longer necessary. The function, formerly part of TK21DESK, 
  230. is now a part of the installation program. 
  231.  
  232. To restore your Toolkit Desktop objects, insert the CD or diskette that 
  233. contains the install program (TKINSTAL.EXE), start the program, and follow 
  234. these steps: 
  235.  
  236.    1. Click on Options to open Installation options. 
  237.  
  238.    2. Deselect Install selected files and Write CONFIG.SYS updates to: (only 
  239.       Register WPS classes and Create desktop objects should be selected). 
  240.  
  241.    3. Click on OK to close Installation options. 
  242.  
  243.    4. Highlight the root (top-most) component in the component tree, then fill 
  244.       in the Destination: field with the location of your Toolkit subdirectory. 
  245.  
  246.    5. Click on Install. 
  247.  
  248.  
  249. ΓòÉΓòÉΓòÉ 5. What's New ΓòÉΓòÉΓòÉ
  250.  
  251. What's New provides information on the latest release of the Warp Toolkit 
  252. available on The Developer Connection for OS/2. See the following sections for 
  253. the latest updates and additions: 
  254.  
  255.      Important Information 
  256.      IBM Developer API Extensions for OS/2 
  257.      OpenDoc for OS/2 
  258.      Sample Additions 
  259.      Tool Updates 
  260.  
  261.  
  262. ΓòÉΓòÉΓòÉ 5.1. Important Information ΓòÉΓòÉΓòÉ
  263.  
  264. Included in this section are important items that can affect your development 
  265. efforts when using the IBM Developer's Toolkit for OS/2 Warp. 
  266.  
  267.      Compiling with IBM C/2 
  268.      Compiling with VisualAge (C Set ++) 
  269.      Replacing DLGEDIT - Dialog Editor 
  270.      Replacing IPFCBIDI - Bidirectional Information Presentation Facility 
  271.       Compiler 
  272.  
  273.  
  274. ΓòÉΓòÉΓòÉ 5.2. IBM Developer API Extensions for OS/2 ΓòÉΓòÉΓòÉ
  275.  
  276. The IBM Developer API Extensions for OS/2 extends the OS/2 Warp application 
  277. programming interface (API) set so that application developers can develop a 
  278. common source code base for OS/2 Warp and Windows platforms. The SMART and 
  279. Hyperwise tools assist in analyzing existing Windows applications and migrating 
  280. the source code, resources, and help files to code that will compile on both 
  281. OS/2 Warp and Windows platforms. Both SMART and Hyperwise are available on the 
  282. Developer Connection for OS/2. 
  283.  
  284. See the following sections for more detailed information: 
  285.  
  286.      IBM Developer API Extensions for OS/2 Samples 
  287.      Programming Considerations 
  288.  
  289.  
  290. ΓòÉΓòÉΓòÉ 5.3. OpenDoc for OS/2 ΓòÉΓòÉΓòÉ
  291.  
  292. The header files, libraries, and bindings along with samples, technical 
  293. documentation and tools specific to OpenDoc for OS/2 are included in this 
  294. release of the Warp Toolkit. 
  295.  
  296. See the following sections for more detailed OpenDoc information: 
  297.  
  298.      OpenDoc Overview 
  299.      OpenDoc for OS/2 Support 
  300.      Programming Considerations 
  301.      What's New in OpenDoc for OS/2 
  302.  
  303.  
  304. ΓòÉΓòÉΓòÉ 5.3.1. OpenDoc Overview ΓòÉΓòÉΓòÉ
  305.  
  306. OpenDoc is an architecture that provides a means for applications to support 
  307. compound documents. Compound documents are documents that are created and 
  308. edited by several cooperating applications working within the context of a 
  309. single document. 
  310.  
  311. OpenDoc enables users to integrate and edit any kind of content, including 
  312. multimedia, in place, in any kind of document. An example of this type of 
  313. integration would be a chart from a graphics application embedded into a 
  314. word-processing document. The chart could still be edited by the graphics 
  315. application while it is in the word-processing document. In this case, the 
  316. chart from the graphics application and the word-processing document would both 
  317. be parts. 
  318.  
  319. To a user, a part is a single set of information displayed and manipulated in 
  320. one or more frames or windows. OpenDoc delivers component-based software in an 
  321. industry-standard manner. For end users, OpenDoc will simplify and streamline 
  322. the computing experience, while ensuring a much higher level of flexibility and 
  323. customization.  Specifically, OpenDoc offers the following user benefits: 
  324.  
  325.      Easy creation of compound documents.  OpenDoc is designed to handle 
  326.       current and future types of media.  Users can place any kind of media 
  327.       into an OpenDoc document using the familiar cut-and-paste or 
  328.       drag-and-drop manipulation. 
  329.  
  330.      Editing in place.  With OpenDoc, users can edit any type of content 
  331.       within a single document, without having to cut and paste between 
  332.       different application windows. 
  333.  
  334.      Powerful document management.  Rather than manually assembling the 
  335.       various pieces of a document, users can let an OpenDoc document hold all 
  336.       of them.  This reduces the task of managing files, and facilitates 
  337.       document exchange and updating. As documents are edited, changes are 
  338.       tracked through drafts, ensuring greater data integrity and allowing 
  339.       users to work on shared documents without content loss from version to 
  340.       version. 
  341.  
  342.      Consistency of operation.  Because users can specify preferred part 
  343.       editors, they only need to learn one way to edit each type of data for 
  344.       example, using the same text editor for word processing, entering 
  345.       spreadsheet data, or labeling diagrams. 
  346.  
  347.      Uniformity of interface.  OpenDoc defines a consistent user interface for 
  348.       embedding and manipulating all kinds of media in documents. 
  349.  
  350.      Scalability.  The OpenDoc human interface addresses a wide range of 
  351.       users, from novices to experts.  No class of user has to understand the 
  352.       additional functionality typically used at the next level.  Novices can 
  353.       create compound documents easily, while experts can experience nearly 
  354.       unlimited potential. 
  355.  
  356.      Plug-and-play solutions.  With OpenDoc, vendors will be able to assemble 
  357.       collections of parts into solution sets that target specific tasks or 
  358.       work styles, such as a legal publishing bundle, allowing users to choose 
  359.       the solutions most appropriate for their needs. 
  360.  
  361.      Access to object services.  OpenDoc is based on the industry-standard 
  362.       CORBA (Common Object Request Broker Architecture) object technology. This 
  363.       will allow users to take advantage of a wide range of distributed 
  364.       services working consistently across many different CORBA-compliant 
  365.       desktop and server systems. 
  366.  
  367.  To more clearly understand the benefits OpenDoc provides to the user, let's 
  368.  examine a usage scenario that most computer users can relate to, the use of 
  369.  text editors. 
  370.  
  371.  Most applications today (whether word processors, spreadsheets, databases, or 
  372.  more specialized tools) include text editing capabilities.  Some rely heavily 
  373.  on text editing, such as WordPerfect or Ami Pro.  Some use text only 
  374.  incidentally, such as WordPerfect Office or Lotus 1-2-3/G.  Unfortunately, for 
  375.  the user, all differ in their details.  For example, some allow text styles, 
  376.  and some do not. Some offer tab stops, and some do not, and so on. In addition 
  377.  to such details, they also differ in functionality and mode of operation.  The 
  378.  result? If you use six different programs, you need to learn six different 
  379.  ways to do the same task:  edit text. With OpenDoc, a text paragraph becomes a 
  380.  software module, usable wherever text is needed.  You could take your favorite 
  381.  text editor and use it whenever you needed to work with text.  Applications 
  382.  built in this way would have an important characteristic: they would 
  383.  simultaneously be simpler and more powerful. They would be simpler because you 
  384.  would have to learn only one way to do something, and they would be more 
  385.  powerful because you always have the option of choosing a fully functional 
  386.  module replacing less capable ones. 
  387.  
  388.  OpenDoc also offers developers a number of important advantages: 
  389.  
  390.      Faster, more efficient development.  Software developers can reuse 
  391.       previously developed parts, eliminating the need to start from scratch 
  392.       with each development effort.  This ability to reuse existing parts also 
  393.       means that developers need to spend less time on parts that are 
  394.       peripheral to their main area of expertise. 
  395.  
  396.      Reduction of application complexity.  Because OpenDoc parts are 
  397.       independent of one another, a collection of parts that is less complex 
  398.       than the large, monolithic applications of today can offer equivalent 
  399.       functionality. 
  400.  
  401.      Diminished costs of software development.  The fact that parts are 
  402.       smaller than applications makes them both quicker and cheaper to write, 
  403.       which reduces the penalties for failure. 
  404.  
  405.      Industry-standard object mechanism.  Because parts can use SOM, a 
  406.       CORBA-compliant object mechanism, they can be written in a wide range of 
  407.       programming languages and development will be supported by many tool 
  408.       vendors. This mechanism gives developers high performance coupled with 
  409.       great flexibility in the use of plug-and-play objects. 
  410.  
  411.  Here is a developer usage scenario.  Today, a developer who wants to create 
  412.  even a highly specialized tool such as a three-dimensional modeling and 
  413.  rendering program has to spend time developing a text editor, so that users 
  414.  can enter specifications and label their diagrams.  But, as a developer of 
  415.  such a program, you would much rather concentrate on your specific area of 
  416.  expertise. In the OpenDoc world, you would have two choices for providing 
  417.  functions that fall outside the primary focus of your application: bundle 
  418.  existing parts with your product or rely on the user to provide parts to 
  419.  support those functions.  Either way, you are free to concentrate on the 
  420.  competitive value of your product, rather than on peripheral issues.  The 
  421.  result is a much more useful, powerful program developed in a fraction of the 
  422.  time it would have taken using the conventional, monolithic approach. 
  423.  
  424.  
  425. ΓòÉΓòÉΓòÉ 5.3.1.1. Planning for Component Software ΓòÉΓòÉΓòÉ
  426.  
  427. Here are some questions to investigate when determining how components fit with 
  428. your business and software directions: 
  429.  
  430.      What parts make sense for your business? 
  431.  
  432.       Some parts may be included by end users in compound documents.  These 
  433.       parts are manipulated or tweaked by users and are embedded within word 
  434.       processor, spreadsheet, drawing, or other kinds of horizontal application 
  435.       documents. 
  436.  
  437.       Other parts do not have a visual incarnation but instead provide access 
  438.       to server data or facilitate sharing between related activities or users. 
  439.       Typically, such parts will be used by setting parameters in a dialog box 
  440.       and then displaying the resulting data with a more conventional visual 
  441.       part (for example, a database access part that provides tabular data 
  442.       targeted at a spreadsheet).  These "back-end" parts probably represent 
  443.       real business objects such as a customer, problem report, or invoice. 
  444.  
  445.      How will existing applications be divided into parts? 
  446.  
  447.       Where are the value fault-lines in your applications? What are the 
  448.       facilities and features of your applications that others would want to 
  449.       use if they could only pull them out separately? 
  450.  
  451.       Consider your user-interface components--do they include look-and-feel 
  452.       features that can be reused in new kinds of reports and documents? 
  453.  
  454.       Consider also the internal calculations and manipulations performed by 
  455.       your application.  Are these reusable in other places? Where are the 
  456.       places you have added information specific to your business or 
  457.       application? 
  458.  
  459.       Finally, consider any connectivity between different machines or modules 
  460.       in your application.  Should this connectivity be made available in a 
  461.       general- purpose way? 
  462.  
  463.       Remember, in most cases, componentized applications are still delivered 
  464.       as large complete applications--people still want solutions, not 
  465.       technology. Nonetheless, these complete applications will increasingly be 
  466.       made out of components.  This allows more flexible delivery, faster 
  467.       response to changing needs, and solutions better tailored to end users. 
  468.  
  469.      What is scriptable in my components? 
  470.  
  471.       The Open Scripting Architecture (OSA) in OpenDoc allows one part to 
  472.       direct or request information from another.  Parts publish "event suites" 
  473.       that define the available interfaces for such interactions.  Event suites 
  474.       are like an API but are intended for users of the part, not implementers. 
  475.  
  476.       Suites consist of verbs--the actions that can be performed on the parts, 
  477.       and nouns--the kinds of data stored within a part.  For example, a Person 
  478.       part might define Name, Phone, and Address nouns. A typical action on 
  479.       Person might be "Tell me the home phone number."  There are core and 
  480.       standard suites that most parts should support.  There are OpenDoc 
  481.       standardized suites for parts that manipulate text, tables, etc. 
  482.  
  483.       What suites should your parts support?  You can answer this question by 
  484.       considering the nouns and verbs that users of the part would need.  Your 
  485.       parts should support standard suites where possible. 
  486.  
  487.  
  488. ΓòÉΓòÉΓòÉ 5.3.2. What's New in OpenDoc for OS/2 ΓòÉΓòÉΓòÉ
  489.  
  490. The following sections outline what is new in OpenDoc support since the release 
  491. of the OpenDoc Developer's Kit 2 for OS/2 product that shipped on The Developer 
  492. Connection for OS/2, Volume 9. 
  493.  
  494.      Standard ISO Prefix 
  495.      DTS HH Header Files 
  496.      ITEXT.H 
  497.      Settings Extension 
  498.      Registry 
  499.      Templates API Changes 
  500.      Menu IDs 
  501.      DR4 Merge 
  502.      Changes in ODDragandDrop and ODClipboard 
  503.      Miscellaneous 
  504.      Template Code 
  505.      Public Utilities 
  506.      Notes on Scripting Support in the Container Part 
  507.  
  508.  
  509. ΓòÉΓòÉΓòÉ 5.3.2.1. Standard ISO Prefix ΓòÉΓòÉΓòÉ
  510.  
  511. All standard types/properties now have a standardized ISO prefix of: 
  512.  
  513.    +//ISO 9070/ANSI::113722::US::CI LABS::
  514.  
  515. Parts produced by vendors should also add this prefix where appropriate with 
  516. the addition of a vendor name as follows: 
  517.  
  518.    +//ISO 9070/ANSI::113722::US::CI LABS::XXX:
  519.  
  520. where XXX is your company name. 
  521.  
  522.  
  523. ΓòÉΓòÉΓòÉ 5.3.2.2. DTS HH Header Files ΓòÉΓòÉΓòÉ
  524.  
  525. Removed *.HH files (including OSA.HH) and integrated DTS changes into existing 
  526. .H files. Changes were also made to the PUBUTILS so they can be built for both 
  527. regular C++ and VisualAge DTS C++. Include os2.h instead of os2.hh and define 
  528. the symbol INCL_ODDTS. 
  529.  
  530.  
  531. ΓòÉΓòÉΓòÉ 5.3.2.3. ITEXT.H ΓòÉΓòÉΓòÉ
  532.  
  533. Modified ITEXT.H to remove MAC-specific references: 
  534.  
  535.              BEFORE                                  AFTER
  536.  
  537.   ODTradITextData                              ODPlainITextData
  538.   ODTraditionalMacText                         kODOS2PlainText
  539.   ODScriptCode                                 ODCodePage
  540.   SetITextScriptCode(ODIText*, ODScriptCode)   SetITextCodePage(ODIText*, ODCodePage);
  541.   GetITextScriptCode(ODIText*)                 GetITextCodePage(ODIText*);
  542.  
  543.  
  544. ΓòÉΓòÉΓòÉ 5.3.2.4. Settings Extension ΓòÉΓòÉΓòÉ
  545.  
  546. The flPageFlag parameter will determine what pages are added to or removed from 
  547. the notebook. 
  548. Added two additional parameters to AddNotebookPages():  flPageFlag and 
  549. ulReserved. ulReserved should be set to 0. 
  550.  
  551.   AddNotebookPages(ODSettingsExtension *somSelf,   Environment *ev,
  552.                    HWND hwndNotebook, ODULong flPageFlag, ODULong ulReserved)
  553.  
  554. Predefined values for flPageFlag are as follows: 
  555.  
  556.  const ODULong  kODGeneralPage  =     0X00000001;  // General notebook page
  557.  const ODULong  kODTypePage     =     0X00000002;
  558.  const ODULong  kODViewPage     =     0X00000004;
  559.  const ODULong  kODFile1Page    =     0X00000008;
  560.  const ODULong  kODFile2Page    =     0X00000010;
  561.  const ODULong  kODStandardPages =    0X0000001F;
  562.  const ODULong  kODIconViewPage   =   0X00000020;
  563.  const ODULong  kODTreeViewPage   =   0X00000040;
  564.  const ODULong  kODDetailsViewPage=   0X00000080;
  565.  const ODULong  kODFolderViewPages=   0X000000E0;
  566.  const ODULong  kODLinkSourcePage   = 0X00000200;
  567.  const ODULong  kODLinkTargetPage   = 0X00000400;
  568.  const ODULong  kODLinkPages        = 0X00000600;
  569.  const ODULong  kODAllPages         = 0X000006FF;
  570.  
  571. Note:  Can not load Presentation Page by calling AddNotebookPages() because it 
  572.        requires an additional parameter. 
  573.  
  574.  Added new method to class to remove unwanted pages 
  575.  
  576.     RemoveNotebookPages(ODSettingsExtension *somSelf,   Environment *ev,
  577.                         HWND hwndNotebook, ULONG flPageFlag)
  578.  
  579.  
  580. ΓòÉΓòÉΓòÉ 5.3.2.5. Registry ΓòÉΓòÉΓòÉ
  581.  
  582. Modified Registry error codes to begin with errPR_ . 
  583.  
  584.  
  585. ΓòÉΓòÉΓòÉ 5.3.2.6. Templates API Changes ΓòÉΓòÉΓòÉ
  586.  
  587. The ODTemplates class has had a method name change that also affects the C and 
  588. REXX utility functions for templates. ODTemplates::RemoveTemplate has been 
  589. renamed to ODTemplates::DeleteTemplate. The corresponding parameters are still 
  590. the same.  However, the C interface has changed as follows: 
  591.  
  592. LONG APIENTRY ODRemoveTemplate(PSZ ObjectID);
  593.  
  594.    is now: 
  595.  
  596. ODBoolean APIENTRY ODDeleteTemplate(PSZ ObjectID);
  597.  
  598. returning kODTrue for success, and kODFalse for failure. 
  599.  
  600.    and 
  601.  
  602. LONG APIENTRY ODCreateTemplate(ODType partKindName,ODEditor partEditor);
  603.  
  604.    is now: 
  605.  
  606. PSZ APIENTRY ODCreateTemplate(ODType partKindName,ODEditor partEditor);
  607.  
  608. returning a NULL PSZ for failure and the Object ID for success. 
  609.  
  610. The REXX utility function for RxODRemoveTemplate was changed to 
  611. RxODDeleteTemplate also. 
  612.  
  613.  
  614. ΓòÉΓòÉΓòÉ 5.3.2.7. Menu IDs ΓòÉΓòÉΓòÉ
  615.  
  616. Menu IDs have been moved from odmenuid.h to cmddefs.idl. 
  617.  
  618.  
  619. ΓòÉΓòÉΓòÉ 5.3.2.8. DR4 Merge ΓòÉΓòÉΓòÉ
  620.  
  621. The following list describes what changed in each IDL. 
  622.  
  623.      Clipbd.idl 
  624.  
  625.       The following methods were added: 
  626.  
  627.               void ActionUndone(in ODUpdateID update, in ODCloneKind originalCloneKind);
  628.               void ActionRedone(in ODUpdateID update, in ODCloneKind originalCloneKind);
  629.               void SetPlatformClipboard(in ODPlatformTypeList typeList);
  630.               void DraftSaved(in ODDraft draft);
  631.  
  632.      ObjctItr.idl 
  633.  
  634.       The following methods: 
  635.  
  636.               void  First(inout ODISOStr key,
  637.                           inout ODObject object,
  638.                           inout ODULong objectLength);
  639.               void  Next(inout ODISOStr key,
  640.                          inout ODObject object,
  641.                          inout ODULong objectLength);
  642.  
  643.        were changed to: 
  644.  
  645.               void  First(out ODISOStr key,
  646.                           out ODObject object,
  647.                           out ODULong objectLength);
  648.               void  Next(out ODISOStr key,
  649.                          out ODObject object,
  650.                          out ODULong objectLength);
  651.  
  652.      ODObject.idl 
  653.  
  654.       The following method was removed: 
  655.  
  656.                  ODBoolean IsInitialized();
  657.  
  658.      ODSessn.idl 
  659.  
  660.       The following method: 
  661.  
  662.                  ODIText* GetUserName();
  663.  
  664.        was changed to: 
  665.  
  666.                  void  GetUserName(out ODIText name);
  667.  
  668.      ShPlugIn.idl 
  669.  
  670.       File replaced by ShPlugIn.h 
  671.  
  672.      FaceItr.idl 
  673.  
  674.       The following method was made private: 
  675.  
  676.                  void InitFacetIterator(in ODFacet facet,
  677.                                         in ODTraversalType traversalType,
  678.                                         in ODSiblingOrder siblingOrder);
  679.  
  680.      Frame.idl 
  681.  
  682.       The following public methods were added: 
  683.  
  684.                  ODBoolean  IsInLimbo();
  685.                  void    SetInLimbo(in ODBoolean isInLimbo);
  686.  
  687.       The following method: 
  688.  
  689.                  ODPoint GetContentExtent();
  690.  
  691.        was changed to: 
  692.  
  693.                  void    GetContentExtent(out ODPoint contentExtent);
  694.  
  695.      FrFaItr.idl 
  696.  
  697.       The following method was made private: 
  698.  
  699.                  void InitFrameFacetIterator(in ODFrame frame);
  700.  
  701.      Draft.idl 
  702.  
  703.       The following method: 
  704.  
  705.                  ODFrame CreateFrame(
  706.                      in ODType    frameType,
  707.                      in ODFrame    containingFrame,
  708.                      in ODShape    frameShape,
  709.                      in ODCanvas    biasCanvas,
  710.                      in ODPart    part,
  711.                      in ODTypeToken  viewType,
  712.                      in ODTypeToken  presentation,
  713.                      in ODBoolean  isSubframe,
  714.                      in ODBoolean  isOverlaid);
  715.  
  716.        was changed to: 
  717.  
  718.                  ODFrame CreateFrame(
  719.                      in ODObjectType frameType,
  720.                      in ODFrame    containingFrame,
  721.                      in ODShape    frameShape,
  722.                      in ODCanvas    biasCanvas,
  723.                      in ODPart    part,
  724.                      in ODTypeToken  viewType,
  725.                      in ODTypeToken  presentation,
  726.                      in ODBoolean  isSubframe,
  727.                      in ODBoolean  isOverlaid);
  728.  
  729.      LinkSpcB.idl 
  730.  
  731.       The following methods were made private: 
  732.  
  733.                  ODPart GetPart();
  734.                  ODByteArray GetPartData();
  735.                  ODBoolean FromThisDraft();
  736.  
  737.      LinkSrcB.idl 
  738.  
  739.       The following method has been made MAC-specific: 
  740.  
  741.                  ODBoolean ShowLinkSourceInfo(
  742.                          in ODFacet facet,
  743.                          in ODUpdateID change,
  744.                          in ODBoolean changesAllowed,
  745.                          out ODLinkInfoResult infoResult);
  746.  
  747.       The following method has been made private: 
  748.  
  749.                  ODLink GetLink();
  750.  
  751.      Undo.idl 
  752.  
  753.       The following method has been added: 
  754.  
  755.                  void AbortCurrentTransaction();
  756.  
  757.      Window.idl 
  758.  
  759.       The following method has been removed: 
  760.  
  761.                  void SetShouldDispose(in ODBoolean shouldDispose);
  762.  
  763.       The following methods: 
  764.  
  765.                  void InitWindow(in ODPlatformWindow platformWindow,
  766.                            in ODType    frameType,
  767.                            in ODBoolean  isRootWindow,
  768.                            in ODBoolean  isResizable,
  769.                            in ODBoolean  isFloating,
  770.                            in ODBoolean  shouldSave,
  771.                            in ODPart    rootPart,
  772.                            in ODTypeToken  viewType,
  773.                            in ODTypeToken  presentation,
  774.                            in ODFrame    sourceFrame);
  775.                    void InitWindowForFrame(in ODPlatformWindow platformWindow,
  776.                            in ODFrame    frame,
  777.                            in ODBoolean  isRootWindow,
  778.                            in ODBoolean  isResizable,
  779.                            in ODBoolean  isFloating,
  780.                            in ODBoolean  shouldSave,
  781.                            in ODFrame    sourceFrame);
  782.  
  783.        were changed to: 
  784.  
  785.                    void InitWindow(in ODPlatformWindow platformWindow,
  786.                            in ODType    frameType,
  787.                            in ODBoolean  isRootWindow,
  788.                            in ODBoolean  isResizable,
  789.                            in ODBoolean  isFloating,
  790.                            in ODBoolean  shouldSave,
  791.                            in ODBoolean    shouldDispose,
  792.                            in ODPart    rootPart,
  793.                            in ODTypeToken  viewType,
  794.                            in ODTypeToken  presentation,
  795.                            in ODFrame    sourceFrame);
  796.                    void InitWindowForFrame(in ODPlatformWindow platformWindow,
  797.                            in ODFrame    frame,
  798.                            in ODBoolean  isRootWindow,
  799.                            in ODBoolean  isResizable,
  800.                            in ODBoolean  isFloating,
  801.                            in ODBoolean  shouldSave,
  802.                            in ODBoolean   shouldDispose,
  803.                            in ODFrame    sourceFrame);
  804.  
  805.      WinStat.idl 
  806.  
  807.       The following methods: 
  808.  
  809.                    ODWindow RegisterWindow(in ODPlatformWindow newWindow,
  810.                                in ODType frameType,
  811.                                in ODBoolean isRootWindow,
  812.                                in ODBoolean isResizable,
  813.                                in ODBoolean isFloating,
  814.                                in ODBoolean shouldSave,
  815.                                in ODPart rootPart,
  816.                                in ODTypeToken viewType,
  817.                                in ODTypeToken presentation,
  818.                                in ODFrame sourceFrame);
  819.                    ODWindow RegisterWindowForFrame(in ODPlatformWindow newWindow,
  820.                                in ODFrame frame,
  821.                                in ODBoolean isRootWindow,
  822.                                in ODBoolean isResizable,
  823.                                in ODBoolean isFloating,
  824.                                in ODBoolean shouldSave,
  825.                                in ODFrame sourceFrame);
  826.  
  827.       were changed to: 
  828.  
  829.                    ODWindow RegisterWindow(in ODPlatformWindow newWindow,
  830.                                in ODType frameType,
  831.                                in ODBoolean isRootWindow,
  832.                                in ODBoolean isResizable,
  833.                                in ODBoolean isFloating,
  834.                                in ODBoolean shouldSave,
  835.                                in ODBoolean shouldDispose,
  836.                                in ODPart rootPart,
  837.                                in ODTypeToken viewType,
  838.                                in ODTypeToken presentation,
  839.                                in ODFrame sourceFrame);
  840.                    ODWindow RegisterWindowForFrame(in ODPlatformWindow newWindow,
  841.                                in ODFrame frame,
  842.                                in ODBoolean isRootWindow,
  843.                                in ODBoolean isResizable,
  844.                                in ODBoolean isFloating,
  845.                                in ODBoolean shouldSave,
  846.                                in ODBoolean shouldDispose,
  847.                                in ODFrame sourceFrame);
  848.  
  849.  
  850. ΓòÉΓòÉΓòÉ 5.3.2.9. Changes in ODDragAndDrop and ODClipboard ΓòÉΓòÉΓòÉ
  851.  
  852.     
  853.  
  854.     
  855.  
  856.      Support for non-OpenDoc drag&drop and clipboard formats 
  857.  
  858.       To improve OpenDoc support for OS/2 standard drag&drop RMFs and clipboard 
  859.       formats, a set of standard kinds has been defined in stddefs.xh: 
  860.  
  861.                Kind:                   Display name:              Clipboard format and/or drag&drop RMF:
  862.  
  863.             kODKindOS2Bitmap        kOS2BitmapDisplayName        CF_BITMAP, <DRM_OS2FILE,DRF_BITMAP>
  864.             kODKindOS2DspBitmap     kOS2DspBitmapDisplayName     CF_DSPBITMAP, <DRM_OS2FILE,DRF_DSPBITMAP>
  865.             kODKindOS2Metafile      kOS2MetafileDisplayName      CF_METAFILE, <DRM_OS2FILE,DRF_METAFILE>
  866.             kODKindOS2DspMetafile   kOS2DspMetafileDisplayName   CF_DSPMETAFILE
  867.             kODKindOS2Text          kOS2TextDisplayName          CF_TEXT, <DRM_OS2FILE,DRF_TEXT>
  868.             kODKindOS2DspText       kOS2DspTextDisplayName       CF_DSPTEXT
  869.             kODKindOS2DIB           kOS2DIBDisplayName           <DRM_OS2FILE,DRF_DIB>
  870.             kODKindOS2DIF           kOS2DIFDisplayName           <DRM_OS2FILE,DRF_DIF>
  871.             kODKindOS2OEMText       kOS2OEMTextDisplayName       <DRM_OS2FILE,DRF_OEMTEXT>
  872.             kODKindOS2OwnerDisplay  kOS2OwnerDisplayDisplayName  <DRM_OS2FILE,DRF_OWNERDISPLAY>
  873.             kODKindOS2PtrPict       kOS2PtrPictDisplayName       <DRM_OS2FILE,DRF_PTRPICT>
  874.             kODKindOS2RTF           kOS2RTFDisplayName           <DRM_OS2FILE,DRF_RTF>
  875.             kODKindOS2SYLK          kOS2SYLKDisplayName          <DRM_OS2FILE,DRF_SYLK>
  876.             kODKindOS2TIFF          kOS2TIFFDisplayName          <DRM_OS2FILE,DRF_TIFF>
  877.             kODKindOS2Palette       kOS2PaletteDisplayName       CF_PALETTE
  878.  
  879.       Parts that support any of the above clipboard formats and RMFs should 
  880.       register the corresponding standard kind. Parts that support other 
  881.       clipboard formats and RMFs should register the corresponding strings as 
  882.       kinds. This will ensure that if non-OpenDoc content of a certain type is 
  883.       dropped or pasted in a container part, the appropriate part editor will 
  884.       be chosen to handle the operation. 
  885.  
  886.      ODDragAndDrop::GetDataFromDragManager has changed as follows : 
  887.  
  888.               ODBoolean GetDataFromDragManager( in ODStorageUnitView theSUView,
  889.                                                 in ODPtr             szSelectedRMF,
  890.                                                 out ODStorageUnit    renderedSU );
  891.  
  892.       to: 
  893.  
  894.               ODBoolean GetDataFromDragManager( in ODStorageUnitView theSUView,
  895.                                                 out ODStorageUnit    renderedSU );
  896.  
  897.      The following public methods have been added: 
  898.  
  899.         -  ODDragAndDrop::CanEmbed 
  900.  
  901.            Syntax: 
  902.  
  903.                       ODBoolean CanEmbed(in ODStorageUnit dropSU);
  904.  
  905.            Parameters: 
  906.  
  907.            dropSU - reference to the content storage unit for the drag item 
  908.  
  909.            This method will query the registration manager for a part editor 
  910.            capable of handling the content of the drag-and-drop storage unit. 
  911.            It returns TRUE if a match is found, FALSE otherwise. A container 
  912.            part should call this method in its DragEnter method to determine 
  913.            whether it can accept the drop. 
  914.  
  915.         -  ODDragAndDrop::CanIncorporate 
  916.  
  917.            Syntax: 
  918.  
  919.                       ODBoolean CanIncorporate(in ODStorageUnit dropSU, in ODType kind);
  920.  
  921.            Parameters: 
  922.  
  923.                       dropSU - reference to the content storage unit for the drag item
  924.                       kind  - part kind
  925.  
  926.            This method will determine if the type of data in dropSU matches the 
  927.            supplied kind. It returns TRUE if a match is found, FALSE otherwise. 
  928.            A non-container part should call this method in its DragEnter method 
  929.            for the kinds that it supports to determine whether it can accept 
  930.            the drop. 
  931.  
  932.         -  ODClipboard::CanEmbed 
  933.  
  934.            Syntax: 
  935.  
  936.                       ODBoolean CanEmbed();
  937.  
  938.            This method will query the registration manager for a part editor 
  939.            capable of handling the content of the clipboard storage unit. It 
  940.            returns TRUE if a match is found, FALSE otherwise. A container part 
  941.            should call this method to determine whether to enable the Paste 
  942.            menu item. 
  943.  
  944.         -  ODClipboard::CanIncorporate 
  945.  
  946.            Syntax: 
  947.  
  948.                       ODBoolean CanIncorporate(in ODType kind);
  949.  
  950.            Parameters: 
  951.  
  952.            kind  - part kind 
  953.  
  954.            This method will determine if there is a format on the PM clipboard 
  955.            matching the supplied kind. It returns TRUE if a match is found, 
  956.            FALSE otherwise. A non-container part should call this method for 
  957.            the kinds that it supports to determine whether to enable the Paste 
  958.            menu item. 
  959.  
  960.            For examples on using the new APIs, see Container Part and ClipDrag 
  961.            Part code (methods: DragEnter, DragWithin, Drop, AdjustMenus). 
  962.  
  963.  
  964. ΓòÉΓòÉΓòÉ 5.3.2.10. Miscellaneous ΓòÉΓòÉΓòÉ
  965.  
  966. ODFacet::AcquireWindow changed to ODFacet::GetWindow. 
  967.  
  968. ODTransform::TransformPoints now takes a pointer to an ODByteArray instead of a 
  969. pointer to an array of ODPoints. 
  970.  
  971. ODDraft::BeginClone added a destination frame parameter. 
  972.  
  973. The following IText utilities have had their names changed to be consistent 
  974. with the Apple names: 
  975.  
  976.         CreateITextPSZ->CreateITextCString
  977.         CreateITextStringPtr->CreateITextPString
  978.         CreateITextSize->CreateITextClear
  979.         SetITextPSZ->SetITextCString
  980.         SetITextStringPtr->SetITextPString
  981.         GetITextPSZ->GetITextCString
  982.         GetITextStringPtr->GetITextPString
  983.  
  984. The following Storage utility functions have had an environment pointer added 
  985. as the first parameter: 
  986.  
  987.         ODSUAddPropValue
  988.         ODSUForceFocus
  989.         ODSUExistsThenFocus
  990.         ODSURemoveProperty
  991.         ODGetBooleanProp
  992.         ODSetBooleanProp
  993.         ODGetUShortProp
  994.         ODSetUShortProp
  995.         ODGetSShortProp
  996.         ODSetSShortProp
  997.         ODGetULongProp
  998.         ODSetULongProp
  999.         ODGetSLongProp
  1000.         ODSetSLongProp
  1001.         ODGetISOStrProp
  1002.         ODSetISOStrProp
  1003.         ODGetTypeListProp
  1004.         ODSetTypeListProp
  1005.         ODGetITextProp
  1006.         ODSetITextProp
  1007.         ODGetTime_TProp
  1008.         ODSetTime_TProp
  1009.         ODGetPointProp
  1010.         ODSetPointProp
  1011.         ODGetRectProp
  1012.         ODSetRectProp
  1013.         ODGetStrongSURefProp
  1014.         ODSetStrongSURefProp
  1015.         ODGetWeakSURefProp
  1016.         ODSetWeakSURefProp
  1017.         ODGetPolygonProp
  1018.         ODSetPolygonProp
  1019.         ODGetMatrixProp
  1020.         ODSetMatrixProp
  1021.         ODGetIconFamilyProp
  1022.         ODSetIconFamilyProp
  1023.  
  1024. AEDescChanged function is obsolete. 
  1025.  
  1026. ODNameResolver::GetUserToken no longer takes an ODDesc* parameter. 
  1027.  
  1028. ODNameResolver::SetUserToken is obsolete. 
  1029.  
  1030. A part's InitPart and InitPartFromStorage methods should now call their 
  1031. parent's methods rather than the PersistentObject methods. The reason for this 
  1032. is that the creation time, date and name stamps have been moved from pstobj.cpp 
  1033. to part.cpp. 
  1034.  
  1035.         InitPart(
  1036.           before DR3
  1037.             somSelf->InitPersistentObject(ev, storageUnit);
  1038.          after
  1039.             parent_InitPart(somSelf, ev, storageUnit, partWrapper);
  1040.         InitPartFromStorage(
  1041.          before DR3
  1042.             somSelf->InitPersistentObjectFromStorage(ev, storageUnit);
  1043.         after
  1044.             parent_InitPartFromStorage(somSelf, ev, storageUnit, partWrapper);
  1045.  
  1046. Parts can no longer assume that the partinfo property/value pair exist in the 
  1047. storage unit provided in the ReadPartInfo and WritePartInfo calls.  See 
  1048. Container Part for example code. 
  1049.  
  1050. Parts must override the new ClonePartInfo method.  See Container Part for 
  1051. example code. 
  1052.  
  1053. Any reference counted object that is obtained with an AcquireXXX method has had 
  1054. the reference count incremented by that method and the part is responsible for 
  1055. releasing that object when done with it. 
  1056.  
  1057. The following methods have been changed as follows: 
  1058.  
  1059. ODBaseShape 
  1060.  
  1061.     ODPolygon CopyPolygon();
  1062.  
  1063. to: 
  1064.  
  1065.     void CopyPolygon(out ODPolygon copy);
  1066.  
  1067. ODTransform 
  1068.  
  1069.     ODPoint TransformPoint(in ODPoint point);
  1070.  
  1071. to: 
  1072.  
  1073.     void TransformPoint(inout ODPoint point);
  1074.     ODPoint InvertPoint(in ODPoint point);
  1075.  
  1076. to: 
  1077.  
  1078.     void InvertPoint(inout ODPoint point);
  1079.  
  1080. ODFrame 
  1081.  
  1082.     ODPoint GetContentExtent();
  1083.  
  1084. to: 
  1085.  
  1086.     void GetContentExtent(out ODPoint contentExtent);
  1087.  
  1088. The following data types have been changed as follows: 
  1089.  
  1090. ODPurgePriority 
  1091.  
  1092.  kInvisibleBlocks to kODInvisibleBlocks
  1093.  kAllBlocks to kODAllBlocks
  1094.  kVisibleBlocks to kODVisibleBlocks
  1095.  
  1096. ODDraftPermissions 
  1097.  
  1098.  kDPNone to kODDPNone
  1099.  kDPTransient to kODPTransient
  1100.  kDPReadOnly to kODPReadOnly
  1101.  kDPSharedWrite to kODPSharedWrite
  1102.  kDPExclusiveWrite to kODPExclusiveWrite
  1103.  
  1104. ODTranslateResult 
  1105.  
  1106.  removed kODNative
  1107.  
  1108. Renamed DragReference to ODPlatformDragReference. 
  1109.  
  1110. Changed type of ODEditor from string to ODISOStr. 
  1111.  
  1112. Changed type of ODContainerSuite from char* to ODISOStr. 
  1113.  
  1114. Added new method to ODMenuBar 
  1115.  
  1116.   ODBoolean IsValid();
  1117.  
  1118. IText formats 
  1119.  
  1120.  removed kODMACIText - use kODOS2IText instead
  1121.  removed related kODTraditionalMacText - use kODOS2PlainText instead
  1122.  
  1123.  
  1124. ΓòÉΓòÉΓòÉ 5.3.2.11. Template Code ΓòÉΓòÉΓòÉ
  1125.  
  1126. A change was made to the template code.  The part editor creating the part is 
  1127. set as the preferred editor. This editor will always be used when the the 
  1128. template is dragged into the docshell.  The preferred editor for the kind which 
  1129. is set in the OpenDoc Preferences object is used only when when the part editor 
  1130. that created the part is not available. 
  1131.  
  1132.  
  1133. ΓòÉΓòÉΓòÉ 5.3.2.12. Public Utilities ΓòÉΓòÉΓòÉ
  1134.  
  1135. The following files are provided as public utilities for which we ship source 
  1136. code in the Warp Toolkit. 
  1137.  
  1138.   altpoint.h
  1139.   altpoly.h
  1140.   except.h
  1141.   focuslib.h
  1142.   lineops.h
  1143.   oddebug.h
  1144.   odutils.h
  1145.   altpoly.cpp
  1146.   altpoint.cpp
  1147.   except.cpp
  1148.   focuslib.cpp
  1149.   lineops.cpp
  1150.   oddebug.cpp
  1151.   odutils.cpp
  1152.   pubutils.mak   - builds pubutils.lib
  1153.  
  1154. These files are located in the \TOOLKIT\BETA\SAMPLES\OPENDOC\PUBUTILS 
  1155. subdirectory. 
  1156.  
  1157.  
  1158. ΓòÉΓòÉΓòÉ 5.3.2.13. Notes on Scripting Support in the Container Part ΓòÉΓòÉΓòÉ
  1159.  
  1160. The Container Part has been updated to enable scripting.  It has been updated 
  1161. to support the SetData event for the background color. 
  1162.  
  1163.  The following is a list of changes that were made.  Please refer to the source 
  1164. code for the details. 
  1165.  
  1166.      Initialization: 
  1167.  
  1168.         -  Create an instance of the Semantic Interface 
  1169.  
  1170.                                _fSemtIntf = new ODSemanticInterface();
  1171.                                _fSemtIntf->InitSemanticInterface(ev, somSelf, _fSession);
  1172.  
  1173.         -  Install Object Accessor and Event Handler 
  1174.  
  1175.                                ODObjectAccessorUPP theAccessorUPP;
  1176.                                theAccessorUPP = NewODObjectAccessorProc( GetPropertyFromNULL );
  1177.                                _fSemtIntf->InstallObjectAccessor(ev, cProperty, typeNull, theAccessorUPP,
  1178.                                               (ODSLong)somSelf);
  1179.                                ODEventHandlerUPP newHandler;
  1180.                                newHandler = NewODEventHandlerProc( HandleSetData ) ;
  1181.                                _fSemtIntf->InstallEventHandler(ev, kAECoreSuite, kAESetData,
  1182.                                               newHandler,
  1183.                                               (ODSLong)somSelf);
  1184.  
  1185.      Accessing SemanticInterface extension: 
  1186.  
  1187.         -  Update HasExtension method for semantic interface 
  1188.  
  1189.                                ContainerPartHasExtension(...)
  1190.                                {
  1191.                                 if (!strcmp(extensionName, kODExtSemanticInterface) )
  1192.                                   return kODTrue;
  1193.                                 else
  1194.                                   return ContainerPart_parent_ODPart_HasExtension(...);
  1195.                                }
  1196.  
  1197.         -  Update AcquireExtension method for semantic interface 
  1198.  
  1199.                                ContainerPartAcquireExtension(...)
  1200.                                {
  1201.                                                    ...
  1202.                                  if(!strcmp(extensionName, kODExtSemanticInterface) )
  1203.                                    return _fSemtIntf;
  1204.                                  else
  1205.                                    return ContainerPart_parent_ODPart_AcquireExtension(...);
  1206.                                }
  1207.  
  1208.      New routines to create object specifiers and send event to change color 
  1209.  
  1210.                      ContainerPartHandleColorMenu(...)
  1211.                      {
  1212.                        AEDesc    objspec, color;
  1213.                        RGBColor  newColor;
  1214.                        ODError   err = noErr;
  1215.                        // Convert menu id to rgb color
  1216.                        newColor = RGBColorFromMenuColor(command);
  1217.                        // Create a desc for the color
  1218.                        AECreateDesc(typeInteger, &newColor, sizeof(RGBColor), &color) );
  1219.                        // create objspec
  1220.                        CreatePropObjSpec(somSelf, ev, frame, formUniqueID,
  1221.                                          pBackgroundColor, objspec);
  1222.                        // Send the SetData event to change background color to "color"
  1223.                        SendSetDataEvent(somSelf, ev, objspec, color);
  1224.                      }
  1225.                      CreatePropObjSpec(...)
  1226.                      {
  1227.                        AEDesc          nullDesc = {typeNull, kODNULL};
  1228.                        AEDesc          id, pr;
  1229.                        ODPersistentObjectID  foo;
  1230.                        ODDraft* draft = somSelf->GetStorageUnit(ev)->GetDraft(ev);
  1231.                        foo = draft->GetPersistentObjectID( ev, frame, kODFrameObject);
  1232.                        AECreateDesc(typeInteger, (Ptr) &foo, sizeof(foo), &id);
  1233.                        AECreateDesc(typeType, (Ptr) &prop, sizeof(prop), &pr);
  1234.                        // Create object specifier for this part
  1235.                        AECreateObjSpecifier(cPart, &nullDesc, form, &id, kODTrue, &objSpec);
  1236.                        // Create object specifier for background color
  1237.                        AECreateObjSpecifier(cProperty, &objSpec, formPropertyID, &pr,
  1238.                                             kODTrue, &objSpec);
  1239.                      }
  1240.  
  1241.                      SendSetDataEvent(...)
  1242.                      {
  1243.                        ODSession*           session = somSelf->GetStorageUnit(ev)->GetSession(ev);
  1244.                        ODMessageInterface*  msg = session->GetMessageInterface(ev);
  1245.                        ODOSAEvent*   event;
  1246.                        AEDesc         tempReply;
  1247.                        ODOSAEvent*   reply = new ODOSAEvent;
  1248.                        OSAEvent      tempEvent;
  1249.                        ODAddressDesc*  address;
  1250.                        // Create an address descriptor for this document
  1251.                        msg->CreatePartAddrDesc(ev, &address, somSelf);
  1252.                        // Create the OSA event
  1253.                        msg->CreateEvent(ev, kAECoreSuite, kAESetData, address,
  1254.                                         kAnyTransactionID, &event);
  1255.                        ODDeleteObject(address);
  1256.                        // Add parms to event
  1257.                        ODDescToAEDesc(event, &tempEvent);
  1258.                        AEPutParamDesc(&tempEvent, keyDirectObject, &objSpec);
  1259.                        AEPutParamDesc(&tempEvent, keyAEData, &data);
  1260.                        AEDescChanged(&tempEvent, event);
  1261.                        // Reply must have an AEDesc even though were not using it
  1262.                        AEDescToODDesc(&tempReply, (ODDesc *) reply);
  1263.                        // Send the event
  1264.                        msg->Send(ev, somSelf, event, reply, kAENoReply,
  1265.                                  kAENormalPriority, kAEDefaultTimeout);
  1266.                      }
  1267.  
  1268.      Create ObjectAccessor routine to create a token for the background color 
  1269.  
  1270.                      GetPropertyFromNULL(...)
  1271.                      {
  1272.                           ...
  1273.                       switch(propID)
  1274.                       {
  1275.                         case pBackgroundColor:
  1276.                         {
  1277.                          // create an instance of Container property accessor object to
  1278.                          // do the work
  1279.                          accessorObj = new ContainerPropAccessor(propID, (ContainerPart *)refCon);
  1280.                          // create a desc for the object pointer
  1281.                          AECreateDesc(cProperty, &accessorObj, sizeof(accessorObj), &tokenDesc);
  1282.                          // add desc to token
  1283.                          resolver->SetUserToken(ev, value, userODDesc);
  1284.                         }
  1285.                           ...
  1286.                      }
  1287.  
  1288.      Create an event handler routine for SetData 
  1289.  
  1290.                      HandleSetData(...)
  1291.                      {
  1292.                                      ...
  1293.                        GetDirectParam( session, &realMessage, &evtDp);
  1294.                                      ...
  1295.                        resolver->GetUserToken(ev, tmpWrapper, &myTokenODDesc);
  1296.                        AEDesc theToken;
  1297.                        error = ODDescToAEDesc(myTokenODDesc, &theToken );
  1298.                        if (error == noErr)
  1299.                        {
  1300.                          switch (theToken.descriptorType)
  1301.                          {
  1302.                              case typeProperty:
  1303.                              {
  1304.                                DescType typeCode;
  1305.                                ContainerPropAccessor* embedPropAccessorObj;
  1306.                                Size     dataSize = sizeof(embedPropAccessorObj);
  1307.                                // get prop accessor obj ptr
  1308.                                AEGetDescData(&theToken, &typeCode, (Ptr) &embedPropAccessorObj,
  1309.                                              (Size)sizeof(embedPropAccessorObj), &dataSize);
  1310.                                // use prop accessor obj to set the data
  1311.                                embedPropAccessorObj->SetData(&theData);
  1312.                                delete embedPropAccessorObj;
  1313.                              }
  1314.                              break;
  1315.                          }
  1316.                        }
  1317.                                      ...
  1318.                      }
  1319.  
  1320.  
  1321. ΓòÉΓòÉΓòÉ 5.4. Sample Additions ΓòÉΓòÉΓòÉ
  1322.  
  1323. New samples have been added in several different areas of the Warp Toolkit to 
  1324. assist you in your programming efforts. 
  1325.  
  1326.      Entertainment Video Samples 
  1327.  
  1328.         -  Beehive 
  1329.  
  1330.      IBM Developer API Extensions for OS/2 Samples 
  1331.  
  1332.         -  Browser 
  1333.  
  1334.      OpenDoc Samples 
  1335.  
  1336.         -  Cookbook 
  1337.         -  Hello World 
  1338.         -  Push Button 
  1339.         -  Ticker Tape 1 
  1340.         -  Ticker Tape 2 
  1341.  
  1342.      SOM REXX Sample 
  1343.  
  1344.         -  Animal SOM Class 
  1345.  
  1346.      WPS REXX Samples 
  1347.  
  1348.         -  Workplace Shell Class 
  1349.         -  Workplace Shell Folder 
  1350.  
  1351.      REXX Samples 
  1352.  
  1353.         -  Complex Number 
  1354.         -  Concurrency 
  1355.         -  Directives 
  1356.         -  Display Month Array 
  1357.         -  Factorial 
  1358.         -  Guard and Reply 
  1359.         -  Pipe 
  1360.         -  Query Date 
  1361.         -  Query Time 
  1362.         -  Semaphore Class 
  1363.         -  Stack 
  1364.         -  Start and Guard 
  1365.  
  1366.  
  1367. ΓòÉΓòÉΓòÉ 5.5. Tool Updates ΓòÉΓòÉΓòÉ
  1368.  
  1369. This release of the Warp Toolkit contains the following tool updates: 
  1370.  
  1371.      Resource Compiler Enhancements 
  1372.  
  1373.  
  1374. ΓòÉΓòÉΓòÉ 5.5.1. Resource Compiler Enhancements ΓòÉΓòÉΓòÉ
  1375.  
  1376. As an enhancement for the IBM Developer API Extensions for OS/2, the OS/2 
  1377. Resource Compiler (RC) now supports string IDs for resources in addition to 
  1378. numbers. You can use either SMART or the Resource Compiler to convert 
  1379. resources. If you use the Resource Compiler, you do not need to include the hhh 
  1380. file with your code. OS/2 supports string IDs with double quotes. See the 
  1381. discussion of the RESOURCE statement in the IBM Developer API Extensions for 
  1382. OS/2 Programming Guide for more information. 
  1383.  
  1384.  
  1385. ΓòÉΓòÉΓòÉ 6. Toolkit Contents ΓòÉΓòÉΓòÉ
  1386.  
  1387. This section represents the main body of the Warp Toolkit. It contains the 
  1388. following topics: 
  1389.  
  1390.      Toolkit Roadmap -- provides a "roadmap" of the Warp Toolkit presented as 
  1391.       a directory hierarchy and a folder hierarchy. 
  1392.  
  1393.      Header files -- describes special programming considerations for Control 
  1394.       Program, Multimedia, OS/2, and Workplace Shell header files. 
  1395.  
  1396.      Sample programs -- provides descriptions of the OS/2, BIDI, REXX, IBM 
  1397.       Developer API Extensions for OS/2, Presentation Manager, Multimedia, 
  1398.       OpenDoc, and Workplace Shell code samples that are included in the Warp 
  1399.       Toolkit. 
  1400.  
  1401.      Tools -- provides descriptions of the Presentation Manager, Multimedia, 
  1402.       OpenDoc, SOM, and Workplace Shell tools. It also introduces you to the 
  1403.       interface that installs the debug kernel, symbol files, and debug version 
  1404.       of PM, OpenDoc, and Workplace Shell and describes tools that support your 
  1405.       debugging efforts. 
  1406.  
  1407.      Online documentation -- describes the online books of the Warp Toolkit. 
  1408.  
  1409.      Try Me! -- New samples and tools provided on an "as is" basis for 
  1410.       evaluation and demonstration. 
  1411.  
  1412.      BETA -- Beta version of entertainment samples, tools, and online 
  1413.       documentation. 
  1414.  
  1415.  
  1416. ΓòÉΓòÉΓòÉ 6.1. Toolkit Roadmap ΓòÉΓòÉΓòÉ
  1417.  
  1418. The tools, samples, and technical documentation in the Warp Toolkit are 
  1419. available in two ways.  You can access them through the Toolkit folder and its 
  1420. subfolders on the Desktop, or you can access them using an OS/2 window or OS/2 
  1421. full-screen session and changing into the \TOOLKIT subdirectory and its 
  1422. subdirectories. 
  1423.  
  1424.  
  1425. ΓòÉΓòÉΓòÉ 6.1.1. Directory Hierarchy ΓòÉΓòÉΓòÉ
  1426.  
  1427. The Warp Toolkit package has the following directory structure: 
  1428.  
  1429.   \TOOLKIT        - Root subdirectory for the Toolkit.
  1430.     Γöé
  1431.     Γö£ΓöÇ\BETA       - Beta version of new samples, tools (EXE), and online books
  1432.     Γö£ΓöÇ\BIN        - Programming tools
  1433.     Γö£ΓöÇ\BITMAP     - Sample multimedia bit maps
  1434.     Γö£ΓöÇ\BOOK       - Online technical information
  1435.     Γö£ΓöÇ\DLL        - Toolkit dynamic link library (DLL) files
  1436.     Γö£ΓöÇ\H          - C, C++, and DTS header files
  1437.     Γö£ΓöÇ\HELP       - Toolkit help (HLP) files
  1438.     Γö£ΓöÇ\ICON       - Toolkit icon (ICO) files
  1439.     Γö£ΓöÇ\IDL        - Workplace Shell interface definition language (IDL) files
  1440.     Γö£ΓöÇ\INC        - Assembler header (INC) files
  1441.     Γö£ΓöÇ\IPFC       - Information Presentation Facility Compiler (IPFC) files
  1442.     Γö£ΓöÇ\LIB        - Import library (LIB) files
  1443.     Γö£ΓöÇ\SAMPLES    - Contains common information for all
  1444.     Γöé               samples, as well as SAMPLES.DOC
  1445.     ΓööΓöÇ\SOM        - SOM subdirectories
  1446.  
  1447. Note:  If you have not installed the Warp Toolkit on your system and you are 
  1448.        reading from The Developer Connection for OS/2 CD, the \TOOLKIT 
  1449.        subdirectory is located in the \DEVTOOLS\WARPTLKT directory. 
  1450.  
  1451.  
  1452. ΓòÉΓòÉΓòÉ 6.1.2. Folder Hierarchy ΓòÉΓòÉΓòÉ
  1453.  
  1454. The Warp Toolkit package has the following Workplace Shell folder hierarchy: 
  1455.  
  1456.  IBM Developer's Toolkit                - Root folder of the Toolkit.
  1457.  for OS/2 Warp                            Contains the README file and the
  1458.   Γöé                                       other Toolkit folders
  1459.   Γöé
  1460.   Γö£ΓöÇDevelopment Tools                   - Programming tools
  1461.   Γö£ΓöÇMultimedia Bitmaps                  - Sample multimedia bit maps
  1462.   Γö£ΓöÇDeveloper API Extensions Samples    - IBM Developer API Extensions for
  1463.   Γöé                                       OS/2 samples
  1464.   Γö£ΓöÇMultimedia Sample Programs          - Multimedia sample programs
  1465.   Γö£ΓöÇOS/2 Sample Programs                - Control Program sample programs
  1466.   Γö£ΓöÇPM Sample Programs                  - Presentation Manager (PM) sample programs
  1467.   Γö£ΓöÇREXX Sample Programs                - REXX sample programs
  1468.   Γö£ΓöÇToolkit Information                 - Online technical books
  1469.   Γö£ΓöÇWorkplace Shell Sample Programs     - Workplace Shell (WPS) sample programs
  1470.   Γö£ΓöÇTry Me!                             - New samples and tools provided on an
  1471.   Γöé                                       "as is" basis for evaluation and demonstration
  1472.   ΓööΓöÇBETA                                - Beta version of books, samples, and tools
  1473.      Γö£ΓöÇBRender                          - BRender components
  1474.      Γöé  ΓööΓöÇBRender Samples               - BRender samples
  1475.      Γö£ΓöÇBeta Entertainment Samples       - Entertainment samples
  1476.      Γöé  Γö£ΓöÇAudio Samples                 - Audio samples
  1477.      Γöé  Γö£ΓöÇInput Samples                 - Input samples
  1478.      Γöé  Γö£ΓöÇNetwork Samples               - Network samples
  1479.      Γöé  ΓööΓöÇVideo Samples                 - Video samples
  1480.      ΓööΓöÇBeta Toolkit Information         - Online technical books
  1481.  
  1482.  
  1483. ΓòÉΓòÉΓòÉ 6.2. Header Files ΓòÉΓòÉΓòÉ
  1484.  
  1485. You should be aware of special programming considerations in the following sets 
  1486. of header files: 
  1487.  
  1488.      Control Program 
  1489.      Multimedia 
  1490.      OS/2 
  1491.      Workplace Shell 
  1492.  
  1493.  Note:  For compatibility with the VisualAge C++, the #pragma checkout 
  1494.         directives in all header files have been changed to #pragma info. The 
  1495.         #pragma checkout directive is no longer supported by C Set ++.  Because 
  1496.         the #pragma info directive provides similar function to #pragma 
  1497.         checkout, the header file changes should not affect code that uses the 
  1498.         header files. If you use the #pragma checkout directive with VisualAge 
  1499.         C++, it generates an "unsupported pragma" error for both C and C++ 
  1500.         compilers. Refer to the VisualAge C++ Language Reference for more 
  1501.         details. 
  1502.  
  1503.  
  1504. ΓòÉΓòÉΓòÉ 6.2.1. Control Program Header Files ΓòÉΓòÉΓòÉ
  1505.  
  1506. DosSetDOSProperty() and DosQueryDOSProperty() in BSEDOS.H are not supported. Do 
  1507. not use these functions. 
  1508.  
  1509.  
  1510. ΓòÉΓòÉΓòÉ 6.2.2. Multimedia Header Files ΓòÉΓòÉΓòÉ
  1511.  
  1512. The multimedia header files listed below are delivered in two different 
  1513. versions. One version uses conventions compatible with the standard OS/2 
  1514. header-file format. The other version uses conventions compatible with 
  1515. Microsoft Windows header files. The Windows-style headers are currently shipped 
  1516. for compatibility with earlier multimedia applications, but will be removed 
  1517. from the Toolkit in the future. 
  1518.  
  1519. New applications should use the OS/2-style header files. Applications that use 
  1520. the Windows-style headers will need to modify their source code when moving to 
  1521. the new headers. 
  1522.  
  1523.  Windows-Style       OS/2-Style 
  1524.  CDAUDIO.H           CDAUDOS2.H 
  1525.  MCIDRV.H            MMDRVOS2.H 
  1526.  MIDI.H              MIDIOS2.H 
  1527.  MMIO.H              MMIOOS2.H 
  1528.  MMSYSTEM.H          MCIOS2.H 
  1529.  
  1530.  Note:  There is a known problem with the AUDIO.H header file when compiling 
  1531.         for C++. The typedef for the audio_update structure must be changed: 
  1532.  
  1533.  from: 
  1534.  
  1535.     typedef struct audio_update FAR *UPDATE;
  1536.  
  1537.  to: 
  1538.  
  1539.     typedef audio_update FAR *UPDATE;
  1540.  
  1541.  
  1542. ΓòÉΓòÉΓòÉ 6.2.3. OS/2 Header Files ΓòÉΓòÉΓòÉ
  1543.  
  1544. Instead of using the SELECTOROF macro in the OS2DEF.H header file, use one of 
  1545. the following two macros to obtain the selector of a 16:16 address: 
  1546.  
  1547.   #define SELECTOROF(p)   (((PUSHORT)&(p))[1])
  1548.   OR
  1549.   #define SELECTOROF(p)   ((ULONG)(p)>>16)
  1550.  
  1551. If you use the selector returned from one of the above macros with the OFFSETOF 
  1552. and MAKEP macros in the OS2DEF.H header file, you can successfully convert a 
  1553. 16:16 address to a 0:32 address. 
  1554.  
  1555.  
  1556. ΓòÉΓòÉΓòÉ 6.2.4. Workplace Shell Header Files ΓòÉΓòÉΓòÉ
  1557.  
  1558. The following #defines are needed by wpQueryNameClashOptions but are not in the 
  1559. Workplace Shell header files: 
  1560.  
  1561.   #define NO_NAMECLASH_RENAME   0x10
  1562.   #define NO_NAMECLASH_APPEND   0x20
  1563.   #define NO_NAMECLASH_REPLACE  0x40
  1564.   #define NO_NAMECLASH_DIALOG   0x80
  1565.  
  1566. You should define them when using wpQueryNameClashOptions. 
  1567.  
  1568.  
  1569. ΓòÉΓòÉΓòÉ 6.3. Sample Programs ΓòÉΓòÉΓòÉ
  1570.  
  1571. This section describes the sample programs available with the Warp Toolkit. 
  1572.  
  1573. The sample programs are categorized as follows: 
  1574.  
  1575.      BIDI (Bidirectional) 
  1576.      DAPIE (IBM Developer API Extensions for OS/2) 
  1577.      Multimedia 
  1578.      OpenDoc 
  1579.      OS/2 
  1580.      Presentation Manager 
  1581.      REXX 
  1582.      Workplace Shell 
  1583.  
  1584.  Most sample programs are written in C language and demonstrate the use of the 
  1585.  functions of the control program (CP, base OS/2 operating system), the PM 
  1586.  interface, the multimedia (MM) interface, and the Workplace Shell (WPS). 
  1587.  
  1588.  Each sample program serves as a template that can be easily modified for your 
  1589.  own purposes. These programs let you investigate the best way to implement 
  1590.  your own application requirements. 
  1591.  
  1592.  Some of the sample programs require specific hardware devices. When 
  1593.  appropriate, the hardware is listed following the program descriptions. 
  1594.  Without these devices, you can still compile and run the sample programs; 
  1595.  however, you might not receive the full effect of the program. For example, if 
  1596.  a multimedia sample program has audio, you will not hear it unless you have an 
  1597.  audio adapter supported by OS/2 multimedia and speakers installed. 
  1598.  
  1599.  Most samples also contain the overhead routines necessary to create a PM 
  1600.  application, as well as stubs for the basic menu items that all applications 
  1601.  should have. 
  1602.  
  1603.  There are many comments within the source code that clarify technical 
  1604.  information. 
  1605.  
  1606.  Note:  Names of the sample programs, in most cases, correspond to their 
  1607.         Toolkit subdirectory names. 
  1608.  
  1609.  
  1610. ΓòÉΓòÉΓòÉ 6.3.1. Starting Sample Programs ΓòÉΓòÉΓòÉ
  1611.  
  1612. There are two ways to start a sample program: 
  1613.  
  1614.      From the Desktop: 
  1615.  
  1616.       When installed, all sample programs (with the exception of the 
  1617.       bidirectional samples, some of the Multimedia samples, and some of the 
  1618.       Workplace Shell samples) appear in the sample programs folders located 
  1619.       within the Toolkit folder. To start a sample program, open the Toolkit 
  1620.       folder, open the folder representing the type of samples you wish to 
  1621.       execute, then select the appropriate sample program. 
  1622.  
  1623.      From an OS/2 command prompt: 
  1624.  
  1625.       Change to the subdirectory where the sample is located, type the name of 
  1626.       the executable file and press Enter. 
  1627.  
  1628.  Most samples include a description file (or makefile) you can use to build the 
  1629.  sample yourself. The name of the makefile is either MAKEFILE or filename.MAK, 
  1630.  where filename refers to the name of the sample. To build the sample, 
  1631.  
  1632.    1. Go to an OS/2 command prompt and change to the subdirectory where the 
  1633.       makefile is located. 
  1634.  
  1635.       You must execute these commands from the subdirectory where the makefile 
  1636.       is located in order to build the sample correctly. 
  1637.  
  1638.    2. Enter one of the following, depending on the name of the makefile: 
  1639.  
  1640.           When the name of the makefile is MAKEFILE, type: 
  1641.  
  1642.                         NMAKE
  1643.  
  1644.           When the name of the makefile is filename.MAK, type: 
  1645.  
  1646.                         NMAKE /f filename.MAK
  1647.  
  1648.  For information about the NMAKE tool, refer to the OS/2 Tools Reference. 
  1649.  
  1650.  Note:  The makefile assumes that the IBM C Set ++ compiler is used for code 
  1651.         compilation. 
  1652.  
  1653.  
  1654. ΓòÉΓòÉΓòÉ 6.3.2. BIDI Sample Programs ΓòÉΓòÉΓòÉ
  1655.  
  1656. These samples demonstrate the use of the Bidirectional Language support 
  1657. available in the Arabic and Hebrew versions of OS/2. There are two sets of 
  1658. samples provided: one set for the Arabic language and the other set for the 
  1659. Hebrew language. For both languages, there are two samples: 
  1660.  
  1661.      STYLE 
  1662.      TELDIR 
  1663.  
  1664.  Note:  Programs that use the bidirectional support functions will run only on 
  1665.         the Arabic and Hebrew versions of the OS/2 operating system, which are 
  1666.         currently the only versions of the operating system that support these 
  1667.         features. 
  1668.  
  1669.  
  1670. ΓòÉΓòÉΓòÉ 6.3.2.1. STYLE Sample Program ΓòÉΓòÉΓòÉ
  1671.  
  1672. STYLE is a sample program that demonstrates the bidirectional language support 
  1673. features of PM controls and other system components. 
  1674.  
  1675. Note:  The Arabic versions of this sample (located in 
  1676.        \TOOLKIT\SAMPLES\BIDI\ARABIC), require the Arabic version of OS/2 to 
  1677.        run, and the Hebrew versions of this sample (located in 
  1678.        \TOOLKIT\SAMPLES\BIDI\HEBREW), require the Hebrew version of OS/2 to 
  1679.        run. 
  1680.  
  1681.  
  1682. ΓòÉΓòÉΓòÉ 6.3.2.2. TELDIR Sample Program ΓòÉΓòÉΓòÉ
  1683.  
  1684. TELDIR is a simple bilingual telephone directory application that demonstrates 
  1685. how language and orientation selections can be set dynamically by a 
  1686. "BIDI-aware" application. 
  1687.  
  1688. Note:  The Arabic versions of this sample require the Arabic version of OS/2 to 
  1689.        run, and the Hebrew versions of this sample require the Hebrew version 
  1690.        of OS/2 to run. 
  1691.  
  1692.  
  1693. ΓòÉΓòÉΓòÉ 6.3.3. Device Driver Sample Programs ΓòÉΓòÉΓòÉ
  1694.  
  1695. Physical device driver (PDD) and virtual device driver (VDD) samples are not 
  1696. included in the IBM Developer's Toolkit for OS/2 Warp. See the Developer 
  1697. Connection Device Driver Kit (DDK) for device driver samples. 
  1698.  
  1699.  
  1700. ΓòÉΓòÉΓòÉ 6.3.4. IBM Developer API Extensions for OS/2 Samples ΓòÉΓòÉΓòÉ
  1701.  
  1702. The following samples are included supporting the IBM Developer API Extensions 
  1703. for OS/2: 
  1704.  
  1705.      Browser 
  1706.      HiWorld 
  1707.      ToyBox 
  1708.      WinMain Wrapper Function (MAIN.C) 
  1709.      DLL Initialization Entry Point (DLLMAIN.C) 
  1710.  
  1711.  
  1712. ΓòÉΓòÉΓòÉ 6.3.4.1. Browser ΓòÉΓòÉΓòÉ
  1713.  
  1714. The Browser sample allows you to view the lines of text files in a Multiple 
  1715. Document Interface (MDI) environment. The sample provides files containing the 
  1716. program source code. You may open one or more of them, scroll them, change 
  1717. their display fonts, and arrange their windows or icons inside the sample 
  1718. program window. 
  1719.  
  1720. There are two versions of the Browser sample. The Win32 version, located in the 
  1721. \TOOLKIT\SAMPLES\DAPIE\BROWSER subdirectory, will build without source changes 
  1722. on a Win32 system with the appropriate development tools. (Win32 tools are not 
  1723. provided with the Warp Toolkit.) 
  1724.  
  1725. The OS/2 version of Browser is located in the \TOOLKIT\SAMPLES\DAPIE\BROWSER2 
  1726. subdirectory. 
  1727.  
  1728. The Browser sample, like all the other IBM Developer API Extensions for OS/2 
  1729. samples in the Warp Toolkit, should be compiled with IBM C Set ++.  The sample 
  1730. will not compile with the VisualAge C++ compiler. 
  1731.  
  1732.  
  1733. ΓòÉΓòÉΓòÉ 6.3.4.2. DLL Initialization Entry Point ΓòÉΓòÉΓòÉ
  1734.  
  1735. The DLLMAIN.C file (located in the \TOOLKIT\SAMPLES\DAPIE\DLLENTRY 
  1736. subdirectory) contains the DLL initialization/termination function, which is 
  1737. called when a process gains or loses access to the DLL. The .DEF file used to 
  1738. build the DLL needs to specify INITINSTANCE and TERMINSTANCE; otherwise, this 
  1739. function will only be called for the first process to gain access and the last 
  1740. process to free up the DLL. 
  1741.  
  1742. This implementation is for IBM C Set ++ and assumes that the C runtime library 
  1743. is being statically linked to the DLL and that the library uses C++ classes. 
  1744.  
  1745.  
  1746. ΓòÉΓòÉΓòÉ 6.3.4.3. HiWorld ΓòÉΓòÉΓòÉ
  1747.  
  1748. HiWorld is a simple Windows 32-bit (Win32) application that displays the 
  1749. following text, centered in the client area of the main window: 
  1750.  
  1751. Hello, World
  1752.  
  1753. There are two versions of the HiWorld sample. The Win32 version, located in the 
  1754. \TOOLKIT\SAMPLES\DAPIE\HIWORLD subdirectory, will build without source changes 
  1755. on a Win32 system with the appropriate development tools. (Win32 tools are not 
  1756. provided with the Warp Toolkit.) 
  1757.  
  1758. The OS/2 version of HiWorld is located in the \TOOLKIT\SAMPLES\DAPIE\HIWORLD2 
  1759. subdirectory along with a README that briefly describes the steps that were 
  1760. taken to convert the Win32 version of HiWorld to this native OS/2 executable. 
  1761.  
  1762. The HiWorld sample, like all the other IBM Developer API Extensions for OS/2 
  1763. samples in the Warp Toolkit, should be compiled with IBM C Set ++.  The sample 
  1764. will not compile with the VisualAge C++ compiler. 
  1765.  
  1766.  
  1767. ΓòÉΓòÉΓòÉ 6.3.4.4. ToyBox ΓòÉΓòÉΓòÉ
  1768.  
  1769. ToyBox is a basic Win32 application that uses bit-block transfer (BitBlt) to 
  1770. display a large number of simple bit maps on the display screen and give them 
  1771. motion. It moves the objects around the client portion of the screen and makes 
  1772. the objects appear to change shape and rotate. 
  1773.  
  1774. There are two versions of the ToyBox sample. The Win32 version, located in the 
  1775. \TOOLKIT\SAMPLES\DAPIE\TOYBOX subdirectory, will build without source changes 
  1776. on a Win32 system with the appropriate development tools. (Win32 tools are not 
  1777. provided with the Warp Toolkit.) 
  1778.  
  1779. The OS/2 version of ToyBox is located in the \TOOLKIT\SAMPLES\DAPIE\TOYBOX2 
  1780. subdirectory. 
  1781.  
  1782. The ToxBox sample, like all the other IBM Developer API Extensions for OS/2 
  1783. samples in the Warp Toolkit, should be compiled with IBM C Set ++.  The sample 
  1784. will not compile with the VisualAge C++ compiler. 
  1785.  
  1786.  
  1787. ΓòÉΓòÉΓòÉ 6.3.4.5. WinMain Wrapper Function ΓòÉΓòÉΓòÉ
  1788.  
  1789. The MAIN.C file (located in the \TOOLKIT\SAMPLES\DAPIE\WINMAIN subdirectory) is 
  1790. provided as a helper (stub) to demonstrate how to invoke the Windows WinMain 
  1791. function from OS/2. 
  1792.  
  1793. This is the "main" wrapper for an application based on the IBM Developer API 
  1794. Extensions for OS/2. It initializes the Alternative Windows Emulator (AWE) 
  1795. environment, calls the WinMain function, and upon completion, calls the WinTerm 
  1796. function to shut down the AWE environment. 
  1797.  
  1798. Note:  To be able to use the Windows WinMain() function, use the OS/2 Warp 
  1799.        main() function located in the MAIN.C file. MAIN.C gets compiled and 
  1800.        linked with the module containing WinMain() and creates an OS/2 Warp 
  1801.        executable. If you do not use the OS/2 Warp main() function, you will 
  1802.        receive a link error stating that there is no starting address for your 
  1803.        program. 
  1804.  
  1805.  
  1806. ΓòÉΓòÉΓòÉ 6.3.5. Multimedia Sample Programs ΓòÉΓòÉΓòÉ
  1807.  
  1808. The Multimedia sample programs are as follows: 
  1809.  
  1810.      ADMCT 
  1811.      ASYMREC 
  1812.      AVCINST 
  1813.      CAPSAMP 
  1814.      CAPTION 
  1815.      CASECONV 
  1816.      CDMCIDRV 
  1817.      Control File Templates 
  1818.      CLOCK 
  1819.      CODEC 
  1820.      DIVE 
  1821.      DOUBPLAY 
  1822.      DUET1 
  1823.      DUET2 
  1824.      FSSHT 
  1825.      MCD Command Tables 
  1826.      MCDTEMP 
  1827.      MCISPY 
  1828.      MCISTRNG 
  1829.      MMBROWSE 
  1830.      MMOTTK 
  1831.      MOVIE 
  1832.      RECORDER 
  1833.      Short Control File Templates 
  1834.      SHRC 
  1835.      TUNER 
  1836.      ULTIEYES 
  1837.      ULIOT 
  1838.  
  1839.  
  1840. ΓòÉΓòÉΓòÉ 6.3.5.1. ADMCT Sample Program ΓòÉΓòÉΓòÉ
  1841.  
  1842. ADMCT (located in \TOOLKIT\SAMPLES\MM\ADMCT), is an example of a media control 
  1843. driver (MCD) that demonstrates how to control a streaming device. Streaming 
  1844. devices use the services of the sync/stream manager (SSM) of OS/2 multimedia to 
  1845. control the data stream from a source location to a target location. 
  1846.  
  1847.  
  1848. ΓòÉΓòÉΓòÉ 6.3.5.2. ASYMREC Sample Program ΓòÉΓòÉΓòÉ
  1849.  
  1850. ASYMREC (located in \TOOLKIT\SAMPLES\MM\ASYMREC), illustrates how to include 
  1851. asymmetric recording function in your multimedia application. Modules include 
  1852. source code extracted from the Video IN recorder application, which enables 
  1853. frame-step recording using Ultimotion compression techniques. 
  1854.  
  1855.  
  1856. ΓòÉΓòÉΓòÉ 6.3.5.3. AVCINST I/O Procedure Sample ΓòÉΓòÉΓòÉ
  1857.  
  1858. AVCINST (located in \TOOLKIT\SAMPLES\MM\AVCINST), illustrates how an 
  1859. application can install and remove an I/O procedure to use multimedia 
  1860. input/output (MMIO) file services. The AVC I/O procedure installation sample is 
  1861. a simple PM application that allows you to install or de-install the audio AVC 
  1862. I/O procedure, AVCAPROC.DLL. 
  1863.  
  1864. Hardware requirements: 
  1865.  
  1866.      Computer capable of running OS/2 Warp 
  1867.  
  1868.  Software requirements: 
  1869.  
  1870.      OS/2 Warp 
  1871.      Multimedia support 
  1872.  
  1873.  
  1874. ΓòÉΓòÉΓòÉ 6.3.5.4. CAPSAMP Sample Program ΓòÉΓòÉΓòÉ
  1875.  
  1876. CAPSAMP (located in \TOOLKIT\SAMPLES\MM\CAPSAMP), and the caption utility 
  1877. functions (located in \TOOLKIT\SAMPLES\MM\CAPDLL) are part of the sample 
  1878. captioning system provided with the Warp Toolkit. CAPSAMP demonstrates how 
  1879. captioning can be integrated into applications using caption files in 
  1880. conjunction with the caption utility functions. 
  1881.  
  1882. Hardware requirements: 
  1883.  
  1884.      Computer capable of running OS/2 Warp 
  1885.      Speaker or headphones 
  1886.      Sound card 
  1887.  
  1888.  Software requirements: 
  1889.  
  1890.      OS/2 Warp 
  1891.      Multimedia support 
  1892.  
  1893.  
  1894. ΓòÉΓòÉΓòÉ 6.3.5.5. CAPTION Sample Program ΓòÉΓòÉΓòÉ
  1895.  
  1896. CAPTION (located in \TOOLKIT\SAMPLES\MM\CAPTION), is part of the sample 
  1897. captioning system provided with the Warp Toolkit. The caption creation utility 
  1898. program creates a "caption" file. It enables a user to synchronize an audio 
  1899. file with a text file. 
  1900.  
  1901. This concept can be extended beyond audio and text to apply to many 
  1902. possibilities, such as synchronizing audio and video, or synchronizing video 
  1903. and text. 
  1904.  
  1905. Note:  In order for the Caption sample to work correctly, captioning must be 
  1906.        enabled in the operating system. To enable captioning proceed as 
  1907.        follows: 
  1908.  
  1909.         -  Open the Multimedia Setup object in the Multimedia folder 
  1910.         -  Go to the System page 
  1911.         -  Indicate a checkmark in the Captioning check box. 
  1912.  
  1913.  
  1914. ΓòÉΓòÉΓòÉ 6.3.5.6. CASECONV I/O Procedure Sample ΓòÉΓòÉΓòÉ
  1915.  
  1916. CASECONV (located in \TOOLKIT\SAMPLES\MM\CASECONV), provides a simple example 
  1917. of how to write a file format I/O procedure (without illustrating the use of 
  1918. data translation). This sample performs case conversion of text. 
  1919.  
  1920.  
  1921. ΓòÉΓòÉΓòÉ 6.3.5.7. CDMCT Sample Program ΓòÉΓòÉΓòÉ
  1922.  
  1923. CDMCT (located in \TOOLKIT\SAMPLES\MM\CDMCIDRV), is an example of a media 
  1924. control driver (MCD) that demonstrates how to control a non-streaming device. 
  1925. Non-streaming devices stream data within the device. 
  1926.  
  1927.  
  1928. ΓòÉΓòÉΓòÉ 6.3.5.8. Control File Templates ΓòÉΓòÉΓòÉ
  1929.  
  1930. The \TOOLKIT\SAMPLES\MM\CF subdirectory contains control file templates you can 
  1931. utilize when installing a program using MINSTALL. 
  1932.  
  1933.  
  1934. ΓòÉΓòÉΓòÉ 6.3.5.9. CLOCK Sample Program ΓòÉΓòÉΓòÉ
  1935.  
  1936. CLOCK (located in \TOOLKIT\SAMPLES\MM\CLOCK), illustrates the use of the memory 
  1937. playlist feature of OS/2 multimedia. The memory playlist feature provides for 
  1938. easy manipulation of multimedia in memory to create unique effects based on 
  1939. user input or other dynamic events. 
  1940.  
  1941. Hardware requirements: 
  1942.  
  1943.      Computer capable of running OS/2 Warp 
  1944.      Speaker or headphones 
  1945.      Sound card 
  1946.  
  1947.  Software requirements: 
  1948.  
  1949.      OS/2 Warp 
  1950.      Multimedia support 
  1951.  
  1952.  
  1953. ΓòÉΓòÉΓòÉ 6.3.5.10. CODEC Sample Program ΓòÉΓòÉΓòÉ
  1954.  
  1955. CODEC (located in \TOOLKIT\SAMPLES\MM\CODEC), illustrates how to write a CODEC 
  1956. procedure to include compression and decompression routines in your multimedia 
  1957. applications. A CODEC procedure operates on data within a file or buffer. 
  1958.  
  1959.  
  1960. ΓòÉΓòÉΓòÉ 6.3.5.11. DIVE Sample Program ΓòÉΓòÉΓòÉ
  1961.  
  1962. DIVE (located in \TOOLKIT\SAMPLES\MM\DIVE), illustrates the use of the direct 
  1963. interface video extensions. DIVE provides optimized blitting performance for 
  1964. motion video subsystems and applications that perform rapid screen updates in 
  1965. the OS/2 PM and full-screen environments. Using DIVE interfaces, applications 
  1966. can either write directly to video memory or use the DIVE blitter. The DIVE 
  1967. blitter will take advantage of acceleration hardware when present and 
  1968. applicable to the function being performed. 
  1969.  
  1970. Note:  The DIVE sample requires OS/2 Warp Version 3 in order to execute 
  1971.        properly. The files for the samples will be installed when the samples 
  1972.        are selected, but Workplace Shell objects will not be created for them 
  1973.        if the installed operating system is not OS/2 Warp Version 3. 
  1974.  
  1975. The OS/2 Warp color support defaults to 16 colors. This means that your setup 
  1976. needs to be updated, otherwise the DIVE sample will not run. 
  1977.  
  1978. The maximum window size of this sample has been limited to 640x480 because 
  1979. larger window sizes may cause excessive swapping on machines with less than 
  1980. 16MB. 
  1981.  
  1982. The DIVE sample that comes with this release of The Developer Connection for 
  1983. OS/2 will not work with the original DIVE.DLL file. For this release of the 
  1984. Warp Toolkit, an updated .DLL file is shipped with the sample. A .DLL file with 
  1985. equivalent function will be included in a future version of OS/2 Warp. 
  1986.  
  1987.  Hardware requirements: 
  1988.  
  1989.      Computer capable of running OS/2 Warp 
  1990.      SVGA (a screen mode of 640x480x256 constitutes a minimum SVGA system) 
  1991.  
  1992.  Software requirements: 
  1993.  
  1994.      OS/2 Warp 
  1995.      Multimedia support 
  1996.      Software motion video 
  1997.  
  1998.  
  1999. ΓòÉΓòÉΓòÉ 6.3.5.12. DOUBPLAY Sample Program ΓòÉΓòÉΓòÉ
  2000.  
  2001. DOUBPLAY (located in \TOOLKIT\SAMPLES\MM\DOUBPLAY), allows an application to 
  2002. play audio files directly from application memory buffers. An array of multiple 
  2003. playlist structures can be constructed that combines playlist commands with 
  2004. data buffers to perform complex operations on multiple buffers. 
  2005.  
  2006. This sample takes a single wave file, MYWAVE.WAV, and plays it using a memory 
  2007. playlist. The playlist is constructed as a circular buffer composed of a series 
  2008. of small buffers, the sum of which may or may not be larger than the size of 
  2009. the .WAV file. This circular buffer is used to repeatedly play an audio file 
  2010. when the PLAY button is selected. As each buffer in the playlist is expended, 
  2011. the application refills the expended buffer with new data from the .WAV file. 
  2012. When all the buffers in the playlist have been expended, the playlist branches 
  2013. back to the first buffer to play the new data. This circular buffering process 
  2014. continues until the STOP button is selected or the application is closed. 
  2015.  
  2016. Hardware requirements: 
  2017.  
  2018.      Computer capable of running OS/2 Warp 
  2019.      Speakers or headphones 
  2020.      Sound card 
  2021.  
  2022.  Software requirements: 
  2023.  
  2024.      OS/2 Warp 
  2025.      Multimedia support 
  2026.  
  2027.  
  2028. ΓòÉΓòÉΓòÉ 6.3.5.13. DUET1 Sample Program ΓòÉΓòÉΓòÉ
  2029.  
  2030. DUET1 (located in \TOOLKIT\SAMPLES\MM\DUET1), illustrates the OS/2 multimedia 
  2031. concept of device grouping and integrating multimedia into an application's 
  2032. help information. This sample demonstrates the concepts of grouping two 
  2033. streaming devices. 
  2034.  
  2035. Note:  The Streaming Device Duet sample (DUET1, located in 
  2036.        \TOOLKIT\SAMPLES\MM\DUET1) requires that the IBM M-Audio Capture and 
  2037.        Playback Adapter card be installed in order for the sample to execute 
  2038.        properly. 
  2039.  
  2040.  Hardware requirements: 
  2041.  
  2042.      Computer capable of running OS/2 Warp 
  2043.      Speaker or headphones 
  2044.      Sound card (capable of playing two mono wave files simultaneously such as 
  2045.       the IBM M-AUDIO card) 
  2046.  
  2047.  Software requirements: 
  2048.  
  2049.      OS/2 Warp 
  2050.      Multimedia support 
  2051.  
  2052.  
  2053. ΓòÉΓòÉΓòÉ 6.3.5.14. DUET2 Sample Program ΓòÉΓòÉΓòÉ
  2054.  
  2055. DUET2 (located in \TOOLKIT\SAMPLES\MM\DUET2), illustrates the OS/2 multimedia 
  2056. concept of device grouping and integrating multimedia into an application's 
  2057. help information. This sample demonstrates how one of the devices in the 
  2058. multimedia device group can be a non-streaming device. 
  2059.  
  2060. Hardware requirements: 
  2061.  
  2062.      Computer capable of running OS/2 Warp 
  2063.      Speaker or headphones 
  2064.      Sound card 
  2065.      CD ROM 
  2066.  
  2067.  Software requirements: 
  2068.  
  2069.      OS/2 Warp 
  2070.      Multimedia support 
  2071.  
  2072.  
  2073. ΓòÉΓòÉΓòÉ 6.3.5.15. FSSHT Sample Program ΓòÉΓòÉΓòÉ
  2074.  
  2075. FSSHT (located in \TOOLKIT\SAMPLES\MM\FSSHT), contains a sample file system 
  2076. stream handler. 
  2077.  
  2078.  
  2079. ΓòÉΓòÉΓòÉ 6.3.5.16. MCD Command Tables ΓòÉΓòÉΓòÉ
  2080.  
  2081. Before a media control driver (MCD) can interpret a string command, the media 
  2082. device manager (MDM) must use a command table to change the string into an 
  2083. equivalent procedural command. Represented as resources to the driver, command 
  2084. tables are created using the RCDATA type of resource. The resource number of 
  2085. the RCDATA block is the device type number. The \TOOLKIT\SAMPLES\MM\MCDTBL 
  2086. subdirectory contains command tables for each of the following devices: 
  2087.  
  2088.      Amp Mixer 
  2089.      CD-ROM/XA 
  2090.      CD Audio 
  2091.      Digital Video 
  2092.      Sequencer 
  2093.      Videodisc 
  2094.      Wave Audio 
  2095.  
  2096.  If you want to support device-specific messages, you must create a device- 
  2097.  specific command table. 
  2098.  
  2099.  
  2100. ΓòÉΓòÉΓòÉ 6.3.5.17. MCDTEMP Template ΓòÉΓòÉΓòÉ
  2101.  
  2102. MCDTEMP (located in \TOOLKIT\SAMPLES\MM\MCDTEMP), provides a basic template to 
  2103. write a media control driver (MCD). Refer to the \ADMCT and \CDMCIDRV 
  2104. subdirectories for specific streaming or to the multimedia I/O (MMIO) samples. 
  2105.  
  2106.  
  2107. ΓòÉΓòÉΓòÉ 6.3.5.18. MCISPY Sample Program ΓòÉΓòÉΓòÉ
  2108.  
  2109. MCISPY (located in \TOOLKIT\SAMPLES\MM\MCISPY), monitors media control 
  2110. interface messages that are exchanged between applications and the OS/2 
  2111. multimedia subsystem. 
  2112.  
  2113. In addition to teaching you about multimedia messages, MCISPY also serves as a 
  2114. powerful debugging aid. 
  2115.  
  2116. The MCISpy sample must be manually set up. To do so, follow these steps: 
  2117.  
  2118.    1. Copy the MDM.DLL file located in the \MMOS2\DLL subdirectory to the 
  2119.       \TOOLKIT\DLL subdirectory. 
  2120.  
  2121.    2. Use the DLLRNAME tool from C Set ++ for OS/2 to rename the copy to 
  2122.       MCI.DLL (type DLLRNAME MDM.DLL MDM=MCI). 
  2123.  
  2124.    3. Place the stub MDM.DLL provided with the Warp Toolkit in the LIBPATH so 
  2125.       that it is recognized prior to the MDM.DLL file located in the \MMOS2\DLL 
  2126.       subdirectory. The source code for the stub MDM.DLL is included in the 
  2127.       MCISpy sample. 
  2128.  
  2129.    4. Restart your system. 
  2130.  
  2131.  Note:  Driver notifications may not be visible in releases prior to OS/2 Warp, 
  2132.         Version 3. These notifications include all multimedia messages routed 
  2133.         through mdmDriverNotify(). 
  2134.  
  2135.  Hardware requirements: 
  2136.  
  2137.      Computer capable of running OS/2 Warp 
  2138.  
  2139.  Software requirements: 
  2140.  
  2141.      Multimedia support 
  2142.      OS/2 Warp 
  2143.  
  2144.       Note:  The files for the samples will be installed when the samples are 
  2145.              selected, but Workplace Shell objects will not be created for them 
  2146.              if the installed operating system is not OS/2 Warp Version 3. 
  2147.  
  2148.  
  2149. ΓòÉΓòÉΓòÉ 6.3.5.19. MCISTRNG Sample Program ΓòÉΓòÉΓòÉ
  2150.  
  2151. MCISTRNG (located in \TOOLKIT\SAMPLES\MM\MCISTRNG), serves as a powerful 
  2152. testing and debugging tool that enables developers writing media drivers to 
  2153. control their devices at the application level. The string test sample 
  2154. illustrates how an application uses the interpretive string interface provided 
  2155. by the media control interface. 
  2156.  
  2157. This sample also illustrates how notification messages are returned from the 
  2158. media drivers to the application. 
  2159.  
  2160. Hardware requirements: 
  2161.  
  2162.      Computer capable of running OS/2 Warp 
  2163.  
  2164.  Software requirements: 
  2165.  
  2166.      OS/2 Warp 
  2167.      Multimedia support 
  2168.  
  2169.  
  2170. ΓòÉΓòÉΓòÉ 6.3.5.20. MMBROWSE Sample Program ΓòÉΓòÉΓòÉ
  2171.  
  2172. MMBROWSE (located in \TOOLKIT\SAMPLES\MM\MMBROWSE), illustrates how to use the 
  2173. multimedia I/O (MMIO) subsystem to install I/O procedures for various image 
  2174. formats and then convert these image formats to OS/2 bit maps. 
  2175.  
  2176. Hardware requirements: 
  2177.  
  2178.      Computer capable of running OS/2 Warp 
  2179.  
  2180.  Software requirements: 
  2181.  
  2182.      OS/2 Warp 
  2183.      Multimedia support 
  2184.  
  2185.  
  2186. ΓòÉΓòÉΓòÉ 6.3.5.21. MMOTTK I/O Procedure Sample ΓòÉΓòÉΓòÉ
  2187.  
  2188. MMOTTK (located in \TOOLKIT\SAMPLES\MM\MMIOPROC), provides an example of how to 
  2189. write an I/O procedure for use with image file formats. This sample enables 
  2190. file format transparency for M-Motion still video files and illustrates the use 
  2191. of data translation. 
  2192.  
  2193.  
  2194. ΓòÉΓòÉΓòÉ 6.3.5.22. MOVIE Sample Program ΓòÉΓòÉΓòÉ
  2195.  
  2196. MOVIE (located in \TOOLKIT\SAMPLES\MM\MOVIE), demonstrates device control of a 
  2197. software motion video device. 
  2198.  
  2199. This sample also illustrates how to cut, copy, paste, and delete movie data 
  2200. from an application. 
  2201.  
  2202. A movie can be played in an application-defined window or in the system default 
  2203. window provided by the software motion video subsystem. 
  2204.  
  2205. Note:  If you installed the Warp Toolkit from diskette, the Movie sample 
  2206.        (located in \TOOLKIT\SAMPLES\MM\MOVIE) does not contain the MOVIE.AVI 
  2207.        file necessary to execute the application. Copy any .AVI file from the 
  2208.        \MMOS2\MOVIES subdirectory on the drive you have Multimedia installed. 
  2209.        The .AVI file should be copied to the \TOOLKIT\SAMPLES\MM\MOVIE 
  2210.        subdirectory on which you have the Warp Toolkit samples installed, and 
  2211.        the target name of the file should be MOVIE.AVI. 
  2212.  
  2213.  Hardware requirements: 
  2214.  
  2215.      Computer capable of running OS/2 Warp 
  2216.      Speakers or headphones 
  2217.      Sound card 
  2218.      SVGA (a screen mode of 640x480x256 constitutes a minimum SVGA system) 
  2219.  
  2220.  Software requirements: 
  2221.  
  2222.      OS/2 Warp 
  2223.      Multimedia support 
  2224.      Software motion video 
  2225.  
  2226.  
  2227. ΓòÉΓòÉΓòÉ 6.3.5.23. RECORDER Sample Program ΓòÉΓòÉΓòÉ
  2228.  
  2229. RECORDER (located in \TOOLKIT\SAMPLES\MM\RECORDER), illustrates the concept of 
  2230. recording audio through the media control interface and how to query a device 
  2231. to find out the recording capabilities. 
  2232.  
  2233. This sample also illustrates how to change the audio recording and audio device 
  2234. properties, such as bits per sample, samples per second, input level, and input 
  2235. source. 
  2236.  
  2237. Hardware requirements: 
  2238.  
  2239.      Computer capable of running OS/2 Warp 
  2240.      Speaker or headphones 
  2241.      Sound card 
  2242.  
  2243.  Software requirements: 
  2244.  
  2245.      OS/2 Warp 
  2246.      Multimedia support 
  2247.  
  2248.  
  2249. ΓòÉΓòÉΓòÉ 6.3.5.24. Short Control File Templates ΓòÉΓòÉΓòÉ
  2250.  
  2251. The \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory contains a simple example of 
  2252. control file templates you can use when installing a program using MINSTALL. 
  2253.  
  2254.  
  2255. ΓòÉΓòÉΓòÉ 6.3.5.25. SHRC Sample Program ΓòÉΓòÉΓòÉ
  2256.  
  2257. SHRC (located in \TOOLKIT\SAMPLES\MM\SHRC), provides a sample stream handler 
  2258. resource file. 
  2259.  
  2260.  
  2261. ΓòÉΓòÉΓòÉ 6.3.5.26. TUNER Sample Program ΓòÉΓòÉΓòÉ
  2262.  
  2263. TV tuner cards allow a desktop PC to receive and display broadcasted television 
  2264. signals. TUNER (located in \TOOLKIT\SAMPLES\MM\TUNER), provides an example of 
  2265. how to use the MCI string interface to control a tuner card. 
  2266.  
  2267. Once the application is running, the display window can be sized and a TV 
  2268. channel can be selected. The channel can be selected through up/down buttons or 
  2269. a text entry field displayed both at the bottom of the window. 
  2270.  
  2271. Hardware requirements: 
  2272.  
  2273.      Computer capable of running OS/2 Warp 
  2274.      TV tuner card (such as the WinTV Basic) 
  2275.  
  2276.  Software requirements: 
  2277.  
  2278.      OS/2 Warp 
  2279.      Multimedia support 
  2280.      Appropriate drivers for installed tuner card 
  2281.  
  2282.  A TV tuner card is handled as a digital video device by the multimedia 
  2283.  subsystem. A typical system has one or more digital video devices, with 
  2284.  digital video 1 assigned to software motion video. By default this sample 
  2285.  opens the digital video 2 device. If the tuner card is not assigned to digital 
  2286.  video 2 an alternate device ordinal must be provided at the command line with 
  2287.  the following format: 
  2288.  
  2289.     /d=digitalvideoxx
  2290.  
  2291.  where: 
  2292.  
  2293.  xx        Is a two digit number, padded on the left with zero. 
  2294.  
  2295.  For example: 
  2296.  
  2297.     /d=digitalvideo03
  2298.  
  2299.  Most TV tuner cards, such as the Hauppauge WinTV card, support several video 
  2300.  sources. The connector number that corresponds to the tuner video source is 
  2301.  dependent on the hardware and may not be the same for each tuner card. The 
  2302.  connector number is not changed by this sample. Instead, it uses the default 
  2303.  connector number that is set by the Multimedia Setup program. 
  2304.  
  2305.  
  2306. ΓòÉΓòÉΓòÉ 6.3.5.27. ULTIEYES Sample Program ΓòÉΓòÉΓòÉ
  2307.  
  2308. ULTIEYES (located in \TOOLKIT\SAMPLES\MM\ULTIEYES), demonstrates the use of 
  2309. non-linear video by displaying segments from a movie clip in response to input 
  2310. from the mouse. 
  2311.  
  2312. Hardware requirements: 
  2313.  
  2314.      SVGA (a screen mode of 640x480x256 constitutes a minimum SVGA system) 
  2315.  
  2316.  Software requirements: 
  2317.  
  2318.      Multimedia support 
  2319.      Software motion video 
  2320.      OS/2 Warp 
  2321.  
  2322.       Note:  The files for the samples will be installed when the samples are 
  2323.              selected, but Workplace Shell objects will not be created for them 
  2324.              if the installed operating system is not OS/2 Warp Version 3. 
  2325.  
  2326.  
  2327. ΓòÉΓòÉΓòÉ 6.3.5.28. ULIOT I/O Procedure Sample ΓòÉΓòÉΓòÉ
  2328.  
  2329. ULIOT (located in \TOOLKIT\SAMPLES\MM\ULTIMOIO), provides a detailed example of 
  2330. what you need to consider when writing I/O procedures for software motion video 
  2331. file formats. This sample program includes CODEC support and illustrates how to 
  2332. integrate common and file-format-specific code to support multiple I/O 
  2333. procedures. 
  2334.  
  2335.  
  2336. ΓòÉΓòÉΓòÉ 6.3.6. OpenDoc Sample Parts ΓòÉΓòÉΓòÉ
  2337.  
  2338. Source code is provided for the following OpenDoc parts. 
  2339.  
  2340. Note that installation of OpenDoc for OS/2 is required for execution of these 
  2341. OpenDoc sample parts. 
  2342.  
  2343.      Cookbook 
  2344.      Hello World 
  2345.      Push Button 
  2346.      Ticker Tape 1 
  2347.      Ticker Tape 2 
  2348.  
  2349.  
  2350. ΓòÉΓòÉΓòÉ 6.3.6.1. Cookbook Sample Part ΓòÉΓòÉΓòÉ
  2351.  
  2352. The \TOOLKIT\SAMPLES\OPENDOC\PARTS\COOKBOOK subdirectory contains the source 
  2353. code for the Cookbook part. This part shows a developer how to create a fairly 
  2354. simple part by subclassing the OpenDoc ODPart class.  All 66 of the ODPart 
  2355. methods are overridden, and 32 of the ODPart methods are implemented. 
  2356.  
  2357. The Cookbook part accomplishes the following: 
  2358.  
  2359.      Part registration 
  2360.      Instantiation of the part object 
  2361.      Initialization 
  2362.      Opening the part 
  2363.      Drawing the part 
  2364.      Handling basic events (such as menu, mouse, and activate) 
  2365.      Using persistent storage 
  2366.      Embedding (the part itself can be embedded, but does not handle 
  2367.       embedding) 
  2368.      Facet manipulation 
  2369.      Frame manipulation 
  2370.      Activation 
  2371.  
  2372.  In general, the implementation of the Cookbook sample part follows the Apple 
  2373.  recipes. There is, however, one exception. The ActivateFrame method 
  2374.  incorrectly calls the FocusAcquired method to handle the acquiring of the 
  2375.  part's focus by the activated frame.  Similarly, the CommitRelinquishFocus 
  2376.  method incorrectly calls the FocusLost method.  The correct implementation of 
  2377.  ActivateFrame and CommitRelinquishFocus can be found in the Container Part, 
  2378.  located in the \TOOLKIT\BETA\SAMPLES\OPENDOC\PARTS\CNTNRPRT directory. 
  2379.  
  2380.  The Cookbook sample part, like all the other OpenDoc samples in the Warp 
  2381.  Toolkit, should be compiled with IBM C Set ++.  The sample will not compile 
  2382.  with the VisualAge C++ compiler. 
  2383.  
  2384.  
  2385. ΓòÉΓòÉΓòÉ 6.3.6.2. Hello World Sample Part ΓòÉΓòÉΓòÉ
  2386.  
  2387. The \TOOLKIT\SAMPLES\OPENDOC\PARTS\HELLO subdirectory contains the source code 
  2388. for the Hello World part. This part handler demonstrates subclassing a 
  2389. container, including how to properly initialize and uninitialize the part 
  2390. class, store persistent data, handle specific user events, and draw the part in 
  2391. an OpenDoc window. 
  2392.  
  2393. The Hello World part handler supports the four standard view types: large and 
  2394. small icon, thumbnail, and frame. 
  2395.  
  2396. Since this sample inherits from the Container Part, see its Known Limitations 
  2397. for information on known problems with the Container Part that can be seen in 
  2398. this part. 
  2399.  
  2400. The Hello World sample part, like all the other OpenDoc samples in the Warp 
  2401. Toolkit, should be compiled with IBM C Set ++.  The sample will not compile 
  2402. with the VisualAge C++ compiler. 
  2403.  
  2404.  
  2405. ΓòÉΓòÉΓòÉ 6.3.6.3. Push Button Sample Part ΓòÉΓòÉΓòÉ
  2406.  
  2407. The \TOOLKIT\SAMPLES\OPENDOC\PARTS\PUSHBTN subdirectory contains the source 
  2408. code for the push button part.  This part handler is an example of a PM control 
  2409. as an OpenDoc part.  The control is implemented such that pressing the push 
  2410. button displays a message window.  The user is able to change the view type to 
  2411. large icon, small icon, thumbnail or frame view.  The push button shows how to 
  2412. implement support for: 
  2413.  
  2414.      Subclassing from a container part 
  2415.      Part handler installation/registration 
  2416.      Standard storage unit properties (persistent data storage and retrieval) 
  2417.      Standard view types 
  2418.      General drawing 
  2419.      General embedding 
  2420.      Simple user event handling 
  2421.      Controls as parts 
  2422.      Frame negotiation (embedded part) 
  2423.  
  2424.  Generally in OpenDoc, when you click the mouse button 1 on a part, it 
  2425.  activates the part and gives the part access to the menu bar.  This does not 
  2426.  happen on the Push Button part because clicking of mouse button 1 actually 
  2427.  presses the button. 
  2428.  
  2429.  Since the activation border is not available, users have to press Ctrl+mouse 
  2430.  button 1 to select the Push Button part. 
  2431.  
  2432.  Anything that is dragged and dropped into the Push Button part is covered by 
  2433.  the Push Button. 
  2434.  
  2435.  Since the semantics of the Push Button part causes a press on the mouse click 
  2436.  but no activation, any operation requiring activation of the Push Button part 
  2437.  is restricted, including clicking on the Push Button Part to deactivate 
  2438.  another part or an embedded part in the document. 
  2439.  
  2440.  The Push Button part does not inverse its color (selection highlighting) when 
  2441.  user selects this part. This part does not override any menu bar method; all 
  2442.  the base menu bar items remain unchanged. 
  2443.  
  2444.  Because the Push Button part uses a PM control, its contents cannot be rotated 
  2445.  or scaled. 
  2446.  
  2447.  Since this sample inherits from the Container Part, see its Known Limitations 
  2448.  for information on known problems with the Container Part that can be seen in 
  2449.  this part. 
  2450.  
  2451.  The Push Button sample part, like all the other OpenDoc samples in the Warp 
  2452.  Toolkit, should be compiled with IBM C Set ++.  The sample will not compile 
  2453.  with the VisualAge C++ compiler. 
  2454.  
  2455.  
  2456. ΓòÉΓòÉΓòÉ 6.3.6.4. Ticker Tape 1 Sample Part ΓòÉΓòÉΓòÉ
  2457.  
  2458. The \TOOLKIT\SAMPLES\OPENDOC\PARTS\TTAPE1 subdirectory contains the source code 
  2459. for the Ticker Tape 1 part. The Ticker Tape 1 part displays text retrieved from 
  2460. a file in a window resembling a ticker tape, such that the file text is 
  2461. scrolled from right to left. It is a simple example of subclassing a container 
  2462. part, where parts can be embedded within the Ticker Tape 1 part.  (Ticker Tape 
  2463. 1 subclasses from the sample container part located in the 
  2464. \TOOLKIT\BETA\SAMPLES\OPENDOC\CNTNRPRT subdirectory.) 
  2465.  
  2466. Note that the embedded parts are displayed only when the ticker tape text is 
  2467. not scrolling.  Scrolling writes over the embedded parts.  To stop the 
  2468. scrolling of the ticker tape text, click over the Ticker Tape 1 part with mouse 
  2469. button 1. The text stops scrolling, the embedded parts are displayed, and new 
  2470. parts can be embedded.  Scrolling starts when you click with mouse button 1 
  2471. anywhere outside of the Ticker Tape 1 part. 
  2472.  
  2473. You can select a text file to replace the text scrolling from right to left 
  2474. within the rectangular window.  A pop-up menu appears when you click over the 
  2475. part with mouse button 2.  From the pop-up menu you can select the Open Text 
  2476. File menu item to select a new file.  Note that the maximum size of the text 
  2477. file you can select is 32,000 bytes. 
  2478.  
  2479. For an example of how to register an OpenDoc part handler using a REXX command 
  2480. file, see the TAPEINST.CMD file in the \TOOLKIT\SAMPLES\OPENDOC\PARTS\TTAPE1 
  2481. subdirectory. 
  2482.  
  2483. Since this sample inherits from the Container Part, see its Known Limitations 
  2484. for information on known problems with the Container Part that can be seen in 
  2485. this part. 
  2486.  
  2487. The Ticker Tape 1 sample part, like all the other OpenDoc samples in the Warp 
  2488. Toolkit, should be compiled with IBM C Set ++.  The sample will not compile 
  2489. with the VisualAge C++ compiler. 
  2490.  
  2491. Note:  When compiling the Ticker Tape 1 sample part, you may get a "String 
  2492.        Buffer Exceeded" error from the SOM compiler.  To avoid this problem, 
  2493.        edit the Ticker Tape 1 part's makefile, TTAPE1.MAK, and add the 
  2494.        following option to the SOM compiler statement: 
  2495.  
  2496.               -S50000
  2497.  
  2498.  
  2499. ΓòÉΓòÉΓòÉ 6.3.6.5. Ticker Tape 2 Sample Part ΓòÉΓòÉΓòÉ
  2500.  
  2501. The \TOOLKIT\SAMPLES\TTAPE2 subdirectory contains the source code for the 
  2502. Ticker Tape 2 part. This part handler is an example of how new features can be 
  2503. built upon a part handler by subclassing from that part handler. 
  2504.  
  2505. The Ticker Tape 2 part handler subclasses from Ticker Tape 1 and so inherits 
  2506. all of Ticker Tape 1 part's features.  Because the Ticker Tape 1 part handler 
  2507. subclasses from the Container part, Ticker Tape 2 also inherits Container part 
  2508. features such as the ability to embed parts. 
  2509.  
  2510. The Ticker Tape 2 part handler improves upon the updating of ticker tape text 
  2511. by dynamically updating from the Ticker Tape 2 part handler's storage unit. 
  2512. When a text file is selected to replace the ticker tape text, the text is 
  2513. externalized to the storage unit (and Ticker Tape 1 part's text buffer is 
  2514. deleted).  When more text to display is needed, a fixed amount of text is 
  2515. retrieved from the storage unit.  This allows the amount of memory required to 
  2516. display the text to be small, regardless of how large the original text file 
  2517. is. 
  2518.  
  2519. The Ticker Tape 2 part updates its text from its storage unit, but it can be 
  2520. modified easily to update from any data stream. 
  2521.  
  2522. Since this sample inherits from the Container Part, see its Known Limitations 
  2523. for information on known problems with the Container Part that can be seen in 
  2524. this part. 
  2525.  
  2526. The Ticker Tape 2 sample part, like all the other OpenDoc samples in the Warp 
  2527. Toolkit, should be compiled with IBM C Set ++.  The sample will not compile 
  2528. with the VisualAge C++ compiler. 
  2529.  
  2530.  
  2531. ΓòÉΓòÉΓòÉ 6.3.7. OS/2 Sample Programs ΓòÉΓòÉΓòÉ
  2532.  
  2533. The OS/2 sample programs are as follows: 
  2534.  
  2535.      CLOCK 
  2536.      DLLAPI 
  2537.      EAS 
  2538.      HANOI 
  2539.      NPIPE 
  2540.      QUEUES 
  2541.      SEMAPH 
  2542.      SORT 
  2543.      VMM 
  2544.      WORMS 
  2545.  
  2546.  
  2547. ΓòÉΓòÉΓòÉ 6.3.7.1. CLOCK Sample Program ΓòÉΓòÉΓòÉ
  2548.  
  2549. CLOCK (located in \TOOLKIT\SAMPLES\OS2\TIMESERV), demonstrates how to use and 
  2550. implement window timers and system-resource timers. This sample program 
  2551. displays both an analog and digital clock. To simulate elapsed seconds, the 
  2552. main PM thread repeatedly sets a one-second window timer that updates the 
  2553. current time. 
  2554.  
  2555. CLOCK features an audible and visual alarm that the user can set. When the time 
  2556. expires, the sample makes use of the DOS timer services and notifies the user 
  2557. by sounding an alarm and displaying a message box. 
  2558.  
  2559.  
  2560. ΓòÉΓòÉΓòÉ 6.3.7.2. DLLAPI Sample Program ΓòÉΓòÉΓòÉ
  2561.  
  2562. DLLAPI (located in \TOOLKIT\SAMPLES\OS2\DLLAPI), demonstrates how to write and 
  2563. use a dynamic link library (DLL). The sample has a .DLL file and an executable 
  2564. (.EXE) file. The .DLL provides the 32-bit API function that is called by the 
  2565. .EXE file. 
  2566.  
  2567. The .DLL uses protected memory on its shared data, and exception management to 
  2568. validate the pointer parameters for a 32-bit API function. The .EXE file 
  2569. demonstrates how to handle a divide-by-zero exception, and calls the function 
  2570. with invalid pointer parameters, followed by a call with valid pointer 
  2571. parameters. 
  2572.  
  2573.  
  2574. ΓòÉΓòÉΓòÉ 6.3.7.3. EAS Sample Program ΓòÉΓòÉΓòÉ
  2575.  
  2576. EAS (located in \TOOLKIT\SAMPLES\OS2\EAEDIT), demonstrates a multithreaded 
  2577. application that retrieves, modifies, or sorts files by their extended 
  2578. attribute value. Included in this sample program are PM procedures for dialog 
  2579. boxes and a standard client window. The sample lets the user select an extended 
  2580. attribute file name from a list, or enter a new name in an entry field. The 
  2581. user can select the extended attribute type from a table. 
  2582.  
  2583.  
  2584. ΓòÉΓòÉΓòÉ 6.3.7.4. HANOI Sample Program ΓòÉΓòÉΓòÉ
  2585.  
  2586. HANOI (located in \TOOLKIT\SAMPLES\OS2\HANOI), demonstrates a multithreaded 
  2587. application with the familiar "towers of Hanoi" puzzle. When the sample program 
  2588. is started, the user sees three poles (A, B, and C). Initially, pole A has on 
  2589. it a stack of disks starting with the largest disks on the bottom and 
  2590. succeeding smaller disks on the top. The main thread handles the PM interface 
  2591. and lets the user start or stop the Hanoi routine. It also lets the user reset 
  2592. the number of working disks. The second thread is created when the Start item 
  2593. is selected from the Options menu. This thread starts the recursive execution 
  2594. of the Hanoi algorithm, runs in the background, and moves and paints the disks. 
  2595. All disks end up on pole C. 
  2596.  
  2597.  
  2598. ΓòÉΓòÉΓòÉ 6.3.7.5. NPIPE Sample Program ΓòÉΓòÉΓòÉ
  2599.  
  2600. NPIPE (located in \TOOLKIT\SAMPLES\OS2\NPIPE), demonstrates two-way 
  2601. communication between two unrelated processes using named pipe functions. This 
  2602. sample program implements the game of TicTacToe with two executable files: 
  2603.  
  2604.      CLINPIPE.EXE (the client) 
  2605.  
  2606.       The client is the user.  For example, the client will: 
  2607.  
  2608.         -  Connect to the server and acknowledge successful connection 
  2609.            (START_MSG). 
  2610.         -  Notify the server through a pipe when it wishes to begin play 
  2611.            (YOU_FIRST or CLIENT_MOVE). 
  2612.         -  Notify the server when it wishes to quit (CLIENT_QUIT). 
  2613.         -  Send the server a valid move when requested by the server 
  2614.            (CLIENT_MOVE). 
  2615.  
  2616.      SVRNPIPE.EXE (the server) 
  2617.  
  2618.       The server is the computer.  For example, the server will: 
  2619.  
  2620.         -  Connect a pipe to the client through which play will be executed 
  2621.            (START_MSG) upon the initial request of a client to play. 
  2622.         -  Play with many clients simultaneously. 
  2623.         -  Notify the client of the server's move, and request a valid move 
  2624.            from the client (SERVER_MOVE). 
  2625.         -  Notify the client of game-end (WIN_SERVER, WIN_CLIENT, WIN_DRAW). 
  2626.  
  2627.  
  2628. ΓòÉΓòÉΓòÉ 6.3.7.6. QUEUES Sample Program ΓòÉΓòÉΓòÉ
  2629.  
  2630. QUEUES (located in \TOOLKIT\SAMPLES\OS2\QUEUES), demonstrates interprocess 
  2631. communications (IPC) using the 32-bit queue component. It consists of two 
  2632. executable programs: 
  2633.  
  2634.      SVRQUEUE.EXE 
  2635.  
  2636.       Creates an IPC queue; a named, shared-memory buffer for queue elements; 
  2637.       and a shared, named, mutex (mutual exclusive) semaphore. After 
  2638.       initializing the queue, SVRQUEUE starts a thread to read from the queue, 
  2639.       prints the contents of the messages read from the queue, and terminates 
  2640.       at the user's request. 
  2641.  
  2642.      CLIQUEUE.EXE 
  2643.  
  2644.       Opens the queue and accesses the shared-memory element buffer and mutex 
  2645.       semaphore, and starts a thread to write to the queue. CLIQUEUE requests a 
  2646.       string of data from the user, allocates a shared-memory element from the 
  2647.       buffer, puts the string in the shared-memory element, then uses an event 
  2648.       semaphore to direct the thread to write the element to the queue. 
  2649.       CLIQUEUE terminates at the user's request. 
  2650.  
  2651.  
  2652. ΓòÉΓòÉΓòÉ 6.3.7.7. SEMAPH Sample Program ΓòÉΓòÉΓòÉ
  2653.  
  2654. SEMAPH (located in \TOOLKIT\SAMPLES\OS2\SEMAPH), demonstrates the use of mutex 
  2655. and event semaphores. In the sample, several threads share access to the same 
  2656. resource. 
  2657.  
  2658. A mutex semaphore is used to guarantee that only one thread has access to the 
  2659. resource at a time.  A mutex semaphore is used to check for a stop event or for 
  2660. a user signal to give up the resource. 
  2661.  
  2662. An event semaphore is used to signal the thread to give up the resource. An 
  2663. event semaphore can be posted by the user, or run in auto mode, in which case 
  2664. the event semaphore will be posted at fixed time intervals. 
  2665.  
  2666. Each thread can be displayed as a square of a unique color. Similarly, the 
  2667. resource can be displayed as a rectangle; its color is that of the first thread 
  2668. that owns it. 
  2669.  
  2670.  
  2671. ΓòÉΓòÉΓòÉ 6.3.7.8. SORT Sample Program ΓòÉΓòÉΓòÉ
  2672.  
  2673. SORT (located in \TOOLKIT\SAMPLES\OS2\SORT), demonstrates the use of multiple 
  2674. threads by performing multiple sorts at the same time. Each sorting algorithm 
  2675. runs from a separate thread. The main thread is used to handle the main 
  2676. window's messages, while the routine that updates the display is run from 
  2677. another thread. 
  2678.  
  2679.  
  2680. ΓòÉΓòÉΓòÉ 6.3.7.9. VMM Sample Program ΓòÉΓòÉΓòÉ
  2681.  
  2682. VMM (located in \TOOLKIT\SAMPLES\OS2\VMM), demonstrates the use of virtual 
  2683. memory by using new memory-management functions to allocate and set the 
  2684. attributes of memory. Users can read or write data into memory and reset the 
  2685. attributes using a dialog box. The memory manager protects or opens the virtual 
  2686. memory to read or write operations according to the different attributes of 
  2687. each memory block. To free memory, the user enters the address of the memory. 
  2688.  
  2689.  
  2690. ΓòÉΓòÉΓòÉ 6.3.7.10. WORMS Sample Program ΓòÉΓòÉΓòÉ
  2691.  
  2692. WORMS (located in \TOOLKIT\SAMPLES\OS2\CONSOLIO), demonstrates how to call 
  2693. video (Vio), keyboard (Kbd), and mouse (Mou) 16-bit function from a 32-bit code 
  2694. segment. This sample program displays earth worms aimlessly moving about the 
  2695. screen. Each worm is a separate thread with a unique color combination and 
  2696. movement pattern. When one worm encounters another worm, the color attribute of 
  2697. the worm is set to red. The user can add or delete worms using the keyboard or 
  2698. mouse. 
  2699.  
  2700.  
  2701. ΓòÉΓòÉΓòÉ 6.3.8. Presentation Manager Sample Programs ΓòÉΓòÉΓòÉ
  2702.  
  2703. The PM sample programs are as follows: 
  2704.  
  2705.      CLIPBRD 
  2706.      DIALOG 
  2707.      DRAGDROP 
  2708.      GRAPHIC 
  2709.      HELLO 
  2710.      IMAGE32 
  2711.      IPF 
  2712.      JIGSAW 
  2713.      PALETTE 
  2714.      PRINT 
  2715.      STYLE 
  2716.      TEMPLATE 
  2717.  
  2718.  
  2719. ΓòÉΓòÉΓòÉ 6.3.8.1. CLIPBRD Sample Program ΓòÉΓòÉΓòÉ
  2720.  
  2721. CLIPBRD (located in \TOOLKIT\SAMPLES\PM\CLIPBRD), demonstrates how to provide a 
  2722. PM interface to the clipboard. Initially, this sample program displays a 
  2723. standard window with a bit map. The user can cut and paste rectangular images 
  2724. in this window, using the system clipboard as an intermediate storage area. 
  2725.  
  2726.  
  2727. ΓòÉΓòÉΓòÉ 6.3.8.2. DIALOG Sample Program ΓòÉΓòÉΓòÉ
  2728.  
  2729. DIALOG (located in \TOOLKIT\SAMPLES\PM\DIALOG), demonstrates how to associate a 
  2730. dialog box with a standard window. The dialog box is defined as a dialog 
  2731. template in a resource file. 
  2732.  
  2733. This sample program also demonstrates how to implement entry fields, push 
  2734. buttons, and message boxes. Message boxes are only displayed for error 
  2735. conditions. 
  2736.  
  2737.  
  2738. ΓòÉΓòÉΓòÉ 6.3.8.3. DRAGDROP Sample Program ΓòÉΓòÉΓòÉ
  2739.  
  2740. DRAGDROP (located in \TOOLKIT\SAMPLES\PM\DRAGDROP), demonstrates how to move 
  2741. files between directories by using the drag and drop operation of direct 
  2742. manipulation. This sample program creates a drop-down list box that contains a 
  2743. scrollable file name list of the current directory. 
  2744.  
  2745. To change the current directory, select the Window option and type in the 
  2746. directory name, and press Enter. To change the current directory to one higher 
  2747. in the directory tree, select File from the menu bar, then Open. The Select 
  2748. subdirectory window appears. Type in the name of the subdirectory, then select 
  2749. OK. 
  2750.  
  2751. DRAGDROP must be started twice, so that there are two running instances of the 
  2752. sample. Then, using a mouse, the user can: 
  2753.  
  2754.      Display a directory file list in the first sample 
  2755.      Select a file name from the second sample 
  2756.      Drag the file name (using mouse button 2) to the directory in the first 
  2757.       sample 
  2758.      Drop the file name into the directory in the first sample. 
  2759.  
  2760.  The file is now moved to the chosen directory of the first sample. 
  2761.  
  2762.  
  2763. ΓòÉΓòÉΓòÉ 6.3.8.4. GRAPHIC Sample Program ΓòÉΓòÉΓòÉ
  2764.  
  2765. GRAPHIC (located in \TOOLKIT\SAMPLES\PM\GRAPHIC), demonstrates how to use 
  2766. default viewing transformation functions of the PM. It also demonstrates how to 
  2767. use an asynchronous drawing thread. This sample program lets the user load 
  2768. metafiles using a dialog box. The dialog box contains a Help push button. When 
  2769. the Help push button is activated, it provides instructions on loading a 
  2770. metafile from another directory. The user also can print a metafile or graphic 
  2771. circle. 
  2772.  
  2773.  
  2774. ΓòÉΓòÉΓòÉ 6.3.8.5. HELLO Sample Program ΓòÉΓòÉΓòÉ
  2775.  
  2776. HELLO (located in \TOOLKIT\SAMPLES\PM\STDWND), demonstrates how to create and 
  2777. display a standard window that conforms to the Common User Access requirements. 
  2778.  
  2779. This sample program also demonstrates how to use resources defined in a script 
  2780. file. Initially, HELLO displays a standard window with the text "Hello". The 
  2781. Options conditional-cascaded menu contains three items. Each item paints a 
  2782. different text string in the window. 
  2783.  
  2784. This sample also shows how to override the Ctrl+C key combination. 
  2785.  
  2786.  
  2787. ΓòÉΓòÉΓòÉ 6.3.8.6. IMAGE32 Sample Program ΓòÉΓòÉΓòÉ
  2788.  
  2789. IMAGE32 (located in \TOOLKIT\SAMPLES\PM\PORTING), demonstrates how to migrate 
  2790. from an existing OS/2 16-bit application to a 32-bit application. 
  2791.  
  2792. This sample also demonstrates how to display an image using the GpiImage 
  2793. function. The image data comes from a file that the user must select using the 
  2794. standard File Open menu item. 
  2795.  
  2796.  
  2797. ΓòÉΓòÉΓòÉ 6.3.8.7. IPF Sample Program ΓòÉΓòÉΓòÉ
  2798.  
  2799. IPF (located in \TOOLKIT\SAMPLES\PM\IPF), demonstrates how to use the IPF to 
  2800. create an online document. This sample program features customized windows that 
  2801. display text, graphics, and animation. 
  2802.  
  2803. Two files are associated with this sample: 
  2804.  
  2805.      IPF online document (INF) 
  2806.  
  2807.       The .INF file is the compiled IPF document. The source contains tagging 
  2808.       that defines different types of windows. Tags that control the format and 
  2809.       display of text also are included in this file. 
  2810.  
  2811.      OS/2 dynamic link library (DLL) 
  2812.  
  2813.       The .DLL file is the compiled OS/2 C language source for the code object 
  2814.       that is called when the .INF file is read at run time. A series of bit 
  2815.       maps used for animation are included in the .DLL. 
  2816.  
  2817.  
  2818. ΓòÉΓòÉΓòÉ 6.3.8.8. JIGSAW Sample Program ΓòÉΓòÉΓòÉ
  2819.  
  2820. JIGSAW (located in \TOOLKIT\SAMPLES\PM\BMPSAMP), demonstrates the use of bit 
  2821. maps in a graphics application. This sample provides a jigsaw puzzle based on 
  2822. the decomposition of an arbitrary bit map loaded from a file. The user can 
  2823. jumble the pieces, then drag them with a mouse. The image can be made smaller, 
  2824. larger, scrolled horizontally, or scrolled vertically. 
  2825.  
  2826. This sample program also demonstrates how to call the Information Presentation 
  2827. Facility help hook, to create instance and associate the instance with the 
  2828. active application window. 
  2829.  
  2830.  
  2831. ΓòÉΓòÉΓòÉ 6.3.8.9. PALETTE Sample Program ΓòÉΓòÉΓòÉ
  2832.  
  2833. PALETTE (located in \TOOLKIT\SAMPLES\PM\PALETTE), demonstrates 32-bit graphics 
  2834. functions including: 
  2835.  
  2836.      Creating a window using a custom palette and animation. 
  2837.      Using menus with switches, and modifying the menu text. 
  2838.      Using multiple threads and semaphores in the Presentation Manager 
  2839.       environment. 
  2840.      Displaying graphics on the screen using outline fonts and clip paths. 
  2841.      Online help. 
  2842.  
  2843.  When started, PALETTE displays a standard window with a large OS/2 logo in the 
  2844.  foreground. You have the ability to change the OS/2 logo to the IBM logo. If 
  2845.  you resize the window, the logo is scaled and redrawn to fit the new window 
  2846.  size. You can also control the animation speed from the PALETTE menu. 
  2847.  
  2848.  The animation is performed by: 
  2849.  
  2850.      Creating a clip path which represents the outline of the logo characters 
  2851.       (which are displayed using an outline font). 
  2852.      Setting the clip path to the presentation space. 
  2853.      Drawing a series of lines to the presentation space. 
  2854.  
  2855.  Each line drawn with an incremental color index. Palette animation is 
  2856.  performed using the 32-bit GpiAnimatePalette call. 
  2857.  
  2858.  In order to PALETTE to remain responsive to system and user messages, no 
  2859.  animation is performed on the main window procedure thread. A second thread is 
  2860.  created from which all animation is performed. 
  2861.  
  2862.  Hardware requirements: 
  2863.  
  2864.      XGA adapter 
  2865.      1MG of RAM 
  2866.      32-bit graphics engine 
  2867.  
  2868.  
  2869. ΓòÉΓòÉΓòÉ 6.3.8.10. PRINT Sample Program ΓòÉΓòÉΓòÉ
  2870.  
  2871. PRINT (located in \TOOLKIT\SAMPLES\PM\PRINT), demonstrates how to display and 
  2872. print text, metafiles, and bit maps. It also demonstrates how to: 
  2873.  
  2874.      Query and display system printer configurations 
  2875.      Interact with printer drivers to change job properties 
  2876.      Query and display available printer and screen fonts 
  2877.      Query and display printer forms and setup margins 
  2878.      Selectively print part or all of a document on an asynchronous thread. 
  2879.  
  2880.  
  2881. ΓòÉΓòÉΓòÉ 6.3.8.11. STYLE Sample Program ΓòÉΓòÉΓòÉ
  2882.  
  2883. STYLE (located in \TOOLKIT\SAMPLES\PM\CONTROLS), demonstrates a PM application 
  2884. that conforms with the Common User Access requirements and implements the 
  2885. following controls: 
  2886.  
  2887.      Container 
  2888.      Notebook 
  2889.      Slider 
  2890.      Spin button 
  2891.      Value set 
  2892.  
  2893.  This sample program also demonstrates secondary windows, such as dialogs and 
  2894.  message boxes. The program lets the user edit and save text files. The source 
  2895.  for online help, in IPF format, is also provided. 
  2896.  
  2897.  STYLE also demonstrates the detection of a font that does not conform to the 
  2898.  International Standards Organization (ISO 9241). When the user is running the 
  2899.  sample on an ISO-compliant monitor and selects a non-compliant font in the 
  2900.  standard font dialog, a message box is displayed to inform the user. 
  2901.  
  2902.  The code in STYLE is structured so that the addition of a new function is 
  2903.  handled in an efficient manner. For example, to add a new command to an 
  2904.  existing menu, you need only add the command to the resource file, then add 
  2905.  the appropriate message-processing routines to the STY_USER.C file. 
  2906.  
  2907.  
  2908. ΓòÉΓòÉΓòÉ 6.3.8.12. TEMPLATE Sample Program ΓòÉΓòÉΓòÉ
  2909.  
  2910. TEMPLATE (located in \TOOLKIT\SAMPLES\PM\TEMPLATE), demonstrates the structure 
  2911. common to all PM applications. This sample program shows how to structure an 
  2912. application that has more than one source file. It includes the initialization 
  2913. file (which is used and then discarded), the resident code, and the 
  2914. non-resident code that is loaded only when needed. 
  2915.  
  2916. TEMPLATE also demonstrates how to: 
  2917.  
  2918.      Create a standard window 
  2919.      Load resources from a resource file 
  2920.      Create a dialog box and a button control 
  2921.      Display a message box 
  2922.      Open a file 
  2923.      Close a file 
  2924.      Print text 
  2925.      Paint a window 
  2926.      Process a message from a menu 
  2927.      Run a thread in the background 
  2928.      Exit a process. 
  2929.  
  2930.  Several online help files are also provided in IPF format. 
  2931.  
  2932.  
  2933. ΓòÉΓòÉΓòÉ 6.3.9. REXX Sample Programs ΓòÉΓòÉΓòÉ
  2934.  
  2935. The REXX sample programs are as follows: 
  2936.  
  2937.      CALLREXX 
  2938.      DEVINFO 
  2939.      PMREXX 
  2940.      REXXCALC 
  2941.      REXXUTIL 
  2942.      RXMACDLL 
  2943.      REXX Animal SOM Class Sample 
  2944.      REXX Workplace Shell Class Sample 
  2945.      REXX Workplace Shell Folder Sample 
  2946.      REXX Complex Number Sample 
  2947.      REXX Concurrency Sample 
  2948.      REXX Directives Sample 
  2949.      REXX Display Month Array Sample 
  2950.      REXX Factorial Sample 
  2951.      REXX Guard and Reply Sample 
  2952.      REXX Pipe Sample 
  2953.      REXX Query Date Sample 
  2954.      REXX Query Time Sample 
  2955.      REXX Semaphore Class Sample 
  2956.      REXX Stack Sample 
  2957.      REXX Start and Guard Sample 
  2958.  
  2959.  
  2960. ΓòÉΓòÉΓòÉ 6.3.9.1. CALLREXX Sample Program ΓòÉΓòÉΓòÉ
  2961.  
  2962. CALLREXX demonstrates how a C-language application calls a REXX application. To 
  2963. run the REXX application BACKWARD.FNC, CALLREXX.C issues RexxStart. RexxStart 
  2964. calls the REXX interpreter and passes it a parameter string. BACKWARD.FNC 
  2965. returns a result string to the C-language application. 
  2966.  
  2967.  
  2968. ΓòÉΓòÉΓòÉ 6.3.9.2. DEVINFO Sample Program ΓòÉΓòÉΓòÉ
  2969.  
  2970. DEVINFO issues DosDevConfig and returns the data in a collection of compound 
  2971. variables when all available items are requested, or a single variable when 
  2972. only one item is requested. This is a REXX subcommand handler and variable pool 
  2973. example. This sample can be run in an OS/2 full-screen session, an OS/2 
  2974. text-window session, or in PMREXX. 
  2975.  
  2976.  
  2977. ΓòÉΓòÉΓòÉ 6.3.9.3. PMREXX Sample Program ΓòÉΓòÉΓòÉ
  2978.  
  2979. PMREXX provides a PM window in which the user can display the output from a 
  2980. REXX procedure or from any programs called by the REXX procedure. The window 
  2981. has an entry field into which the user can type. 
  2982.  
  2983.  
  2984. ΓòÉΓòÉΓòÉ 6.3.9.4. REXXCALC Sample Program ΓòÉΓòÉΓòÉ
  2985.  
  2986. REXXCALC illustrates the steps required to develop enhanced applications. 
  2987.  
  2988.  
  2989. ΓòÉΓòÉΓòÉ 6.3.9.5. REXXUTIL Sample Program ΓòÉΓòÉΓòÉ
  2990.  
  2991. REXXUTIL demonstrates a set of external functions packaged in a dynamic link 
  2992. library, including: 
  2993.  
  2994.      Use of OS/2 system functions in REXX external functions 
  2995.      Techniques for passing large amounts of data to a REXX program using REXX 
  2996.       compound variables as arrays. 
  2997.  
  2998.  REXXUTIL runs on 32-bit OS/2. It can be run in an OS/2 full-screen session, an 
  2999.  OS/2 window session, or in PMREXX. 
  3000.  
  3001.  
  3002. ΓòÉΓòÉΓòÉ 6.3.9.6. RXMACDLL Sample Program ΓòÉΓòÉΓòÉ
  3003.  
  3004. RXMACDLL demonstrates the macrospace interface with the two following 
  3005. C-language programs and that are compiled into two separate dynamic link 
  3006. libraries (DLLs): 
  3007.  
  3008.      MACRO.C 
  3009.  
  3010.       Contains REXX external functions, which perform REXX macrospace 
  3011.       operations. 
  3012.  
  3013.      RXNLSINF.C 
  3014.  
  3015.       Contains a REXX external function that provides information related to 
  3016.       national language support (for example, as a currency symbol and 
  3017.       separator). 
  3018.  
  3019.  RXMACDLL.CMD uses MACRO.DLL to load NLSMONEY.CMD into the macrospace and calls 
  3020.  NLSMONEY.CMD several times to format currency amounts. NLSMONEY.CMD formats 
  3021.  the amounts according to the specifications provided by RXNLSINF.DLL. 
  3022.  
  3023.  RXMACDLL can be run in an OS/2 full-screen session, an OS/2 window session, or 
  3024.  in PMREXX. 
  3025.  
  3026.  
  3027. ΓòÉΓòÉΓòÉ 6.3.9.7. REXX Animal SOM Class Sample ΓòÉΓòÉΓòÉ
  3028.  
  3029. The sample code in the \TOOLKIT\SAMPLES\REXX\SOM\ANIMAL directory illustrates 
  3030. the use of a simple metaclass to provide customized constructors and to perform 
  3031. basic instance tracking. 
  3032.  
  3033. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3034.  
  3035.  
  3036. ΓòÉΓòÉΓòÉ 6.3.9.8. REXX Workplace Shell Class Sample ΓòÉΓòÉΓòÉ
  3037.  
  3038. The WPSORXCL.CMD sample in the \TOOLKIT\SAMPLES\REXX\WPS directory demonstrates 
  3039. how to use the OS/2 Workplace Shell folders to represent Object REXX classes. 
  3040. This is presented in a tree view where an Object REXX class is a folder and 
  3041. subclasses are subfolders. The top folder title is updated as classes are added 
  3042. for a progress indicator.  Methods in a class can be represented as abstract 
  3043. WPS objects; but the default is not to create them because it is quite time 
  3044. consuming. 
  3045.  
  3046. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3047.  
  3048. The REXX Workplace Shell samples also require the REXX classes first be 
  3049. registered with the Workplace Shell. To register REXX classes with the 
  3050. Workplace Shell, type the following at an OS/2 command prompt: 
  3051.  
  3052.      WPSINST
  3053.  
  3054. The WPSINST.CMD program can be used at any time to query REXX classes and to 
  3055. register and deregister them. To deregister the REXX classes, type the 
  3056. following at an OS/2 command prompt: 
  3057.  
  3058.      WPSINST -
  3059.  
  3060.  
  3061. ΓòÉΓòÉΓòÉ 6.3.9.9. REXX Workplace Shell Folder Sample ΓòÉΓòÉΓòÉ
  3062.  
  3063. The WPSORXFL.CMD sample in the \TOOLKIT\SAMPLES\REXX\WPS directory demonstrates 
  3064. useful routines for folders.  The first routine will take a WPS folder as input 
  3065. and return an array of SOM objects; one for each object in that folder.  The 
  3066. second routine will take an array of WPS objects and a string; returning an 
  3067. array of objects that match the string.  The sample also uses three methods to 
  3068. iterate over arrays as iteration examples. 
  3069.  
  3070. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3071.  
  3072. The REXX Workplace Shell samples also require the REXX classes first be 
  3073. registered with the Workplace Shell. To register REXX classes with the 
  3074. Workplace Shell, type the following at an OS/2 command prompt: 
  3075.  
  3076.      WPSINST
  3077.  
  3078. The WPSINST.CMD program can be used at any time to query REXX classes and to 
  3079. register and deregister them. To deregister the REXX classes, type the 
  3080. following at an OS/2 command prompt: 
  3081.  
  3082.      WPSINST -
  3083.  
  3084.  
  3085. ΓòÉΓòÉΓòÉ 6.3.9.10. REXX Complex Number Sample ΓòÉΓòÉΓòÉ
  3086.  
  3087. The COMPLEX.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates how 
  3088. to create a complex number class using the ::class and ::method directives. 
  3089. Also shown is an example of subclassing the complex number class (the vector 
  3090. subclass).  Finally, the stringlike class demonstrates the use of a mixin to 
  3091. provide some string behavior to the complex number class. 
  3092.  
  3093. The USECOMP.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates the 
  3094. use of the ::requires directive to use the complex number class defined in 
  3095. COMPLEX.CMD. 
  3096.  
  3097. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3098.  
  3099.  
  3100. ΓòÉΓòÉΓòÉ 6.3.9.11. REXX Concurrency Sample ΓòÉΓòÉΓòÉ
  3101.  
  3102. The CCREPLY.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates how 
  3103. to use reply to run two methods at the same time. 
  3104.  
  3105. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3106.  
  3107.  
  3108. ΓòÉΓòÉΓòÉ 6.3.9.12. REXX Directives Sample ΓòÉΓòÉΓòÉ
  3109.  
  3110. The GUESS.CMD sample in the \TOOLKIT\SAMPLES\REXX directory creates a simple 
  3111. node class and uses it to create a logic tree.  The logic tree is filled in by 
  3112. playing a simple guessing game. 
  3113.  
  3114. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3115.  
  3116.  
  3117. ΓòÉΓòÉΓòÉ 6.3.9.13. REXX Display Month Array Sample ΓòÉΓòÉΓòÉ
  3118.  
  3119. The MONTH.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates the 
  3120. use of arrays to replace stems.  This sample displays the days of the month. 
  3121.  
  3122. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3123.  
  3124.  
  3125. ΓòÉΓòÉΓòÉ 6.3.9.14. REXX Factorial Sample ΓòÉΓòÉΓòÉ
  3126.  
  3127. The FACTOR.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates a way 
  3128. to define a factorial class using the subclass method and the .methods 
  3129. environment symbol. 
  3130.  
  3131. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3132.  
  3133.  
  3134. ΓòÉΓòÉΓòÉ 6.3.9.15. REXX Guard and Reply Sample ΓòÉΓòÉΓòÉ
  3135.  
  3136. The GREPLY.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates the 
  3137. difference between Guarded and UnGuarded methods.  In the first example, the 
  3138. method is guarded, so it does not begin execution until the final result is 
  3139. tallied.  In the second example, the method is unguarded so it can begin 
  3140. execution while method sum_up is still looping.  In fact, unguarded_get often 
  3141. runs immediately after the Reply, so we use a guard instruction to ensure 
  3142. sum_up runs for a bit before unguarded_get returns with the intermediate sum. 
  3143.  
  3144. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3145.  
  3146.  
  3147. ΓòÉΓòÉΓòÉ 6.3.9.16. REXX Pipe Sample ΓòÉΓòÉΓòÉ
  3148.  
  3149. The PIPE.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates the use 
  3150. of the ::class and ::method directives to create a simple implementation of a 
  3151. CMS-like pipeline function. 
  3152.  
  3153. The USEPIPE.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates how 
  3154. to use the pipes implemented in the PIPE.CMD sample. 
  3155.  
  3156. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3157.  
  3158.  
  3159. ΓòÉΓòÉΓòÉ 6.3.9.17. REXX Query Date Sample ΓòÉΓòÉΓòÉ
  3160.  
  3161. The QDATE.CMD sample in the \TOOLKIT\SAMPLES\REXX directory displays the 
  3162. current date and moon phase for that date in English. 
  3163.  
  3164.  
  3165. ΓòÉΓòÉΓòÉ 6.3.9.18. REXX Query Time Sample ΓòÉΓòÉΓòÉ
  3166.  
  3167. The QTIME.CMD sample in the \TOOLKIT\SAMPLES\REXX directory displays the 
  3168. current time in English. 
  3169.  
  3170.  
  3171. ΓòÉΓòÉΓòÉ 6.3.9.19. REXX Semaphore Class Sample ΓòÉΓòÉΓòÉ
  3172.  
  3173. The SEMCLS.CMD sample in the \TOOLKIT\SAMPLES\REXX directory implements a 
  3174. semaphore class in Object REXX.  The class is defined to the Global OREXX 
  3175. environment. 
  3176.  
  3177. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3178.  
  3179.  
  3180. ΓòÉΓòÉΓòÉ 6.3.9.20. REXX Stack Sample ΓòÉΓòÉΓòÉ
  3181.  
  3182. The STACK.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates how to 
  3183. implement a stack class using the ::class and 
  3184. ::method directives.  This sample also includes a short example of the use of a 
  3185. stack. 
  3186.  
  3187. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3188.  
  3189.  
  3190. ΓòÉΓòÉΓòÉ 6.3.9.21. REXX Start and Guard Sample ΓòÉΓòÉΓòÉ
  3191.  
  3192. The KTGUARD.CMD sample in the \TOOLKIT\SAMPLES\REXX directory demonstrates the 
  3193. use of the start method and the guard instruction to control execution of 
  3194. several programs.  In this sample, the programs are controlled by one "guarded" 
  3195. variable. 
  3196.  
  3197. For this sample to function properly, the OpenDoc Pak must be installed first. 
  3198.  
  3199.  
  3200. ΓòÉΓòÉΓòÉ 6.3.10. SOM Sample Programs ΓòÉΓòÉΓòÉ
  3201.  
  3202. Note:  The ANIMALS and TP (text processing) sample programs are not included in 
  3203.        the Warp Toolkit. Refer to the SOMobjects Developer Toolkit for 
  3204.        accessing them and obtaining information on them. 
  3205.  
  3206.  
  3207. ΓòÉΓòÉΓòÉ 6.3.11. Workplace Shell Sample Programs ΓòÉΓòÉΓòÉ
  3208.  
  3209. The Workplace Shell sample programs are as follows: 
  3210.  
  3211.      BROWSE 
  3212.      CAR 
  3213.      CARPP 
  3214.      TEXTFLDR 
  3215.      WPCAR 
  3216.      WPSTUTOR 
  3217.      WSFILE 
  3218.  
  3219.  Note:  All Workplace Shell samples require SOM 2.1 in order to execute 
  3220.         properly. 
  3221.  
  3222.  
  3223. ΓòÉΓòÉΓòÉ 6.3.11.1. BROWSE Sample Program ΓòÉΓòÉΓòÉ
  3224.  
  3225. BROWSE displays file system objects in a hexadecimal or text format in a PM 
  3226. window. Open a view of an object is the default format (hexadecimal).  This is 
  3227. done by: 
  3228.  
  3229.      Dropping a file system object on the Browse-O-Matic icon 
  3230.      Double-clicking mouse button 1 and entering the name of a file to view. 
  3231.  
  3232.  A view of an object can be opened in either hexadecimal or text format by 
  3233.  selecting the Open Text View or Open Hex View item of the Open 
  3234.  conditional-cascaded menu. This is done by single-clicking mouse button 2 on 
  3235.  the Browse-O-Matic icon. The default view format can be changed in the 
  3236.  Settings notebook page by selecting: 
  3237.  
  3238.    1. Settings menu item 
  3239.  
  3240.    2. Menu notebook tab 
  3241.  
  3242.    3. ~Open choice of the "Available menus" drop-down list box 
  3243.  
  3244.    4. Settings... push button 
  3245.  
  3246.    5. ~Settings, Open ~Hex View or Open ~Text View option of the "Default 
  3247.       action" drop-down list box. 
  3248.  
  3249.  
  3250. ΓòÉΓòÉΓòÉ 6.3.11.2. CAR Sample Program ΓòÉΓòÉΓòÉ
  3251.  
  3252. CAR demonstrates how to create a Workplace Shell object using basic 
  3253. object-oriented programming techniques and the SOM, including: 
  3254.  
  3255.      Initializing an object 
  3256.      Adding settings pages to an object 
  3257.      Saving and restoring the state of an object 
  3258.      Modifying an object's context menus (adding and deleting menu items) 
  3259.      Querying object class data 
  3260.      Processing context menu items 
  3261.      Implementing settings page dialog processing 
  3262.      Handling exceptions. 
  3263.  
  3264.  
  3265. ΓòÉΓòÉΓòÉ 6.3.11.3. CARPP Sample Program ΓòÉΓòÉΓòÉ
  3266.  
  3267. CARPP is a C++ version of the CAR sample program. CARPP demonstrates how to 
  3268. create a Workplace Shell object using basic object-oriented programming 
  3269. techniques and the SOM, including: 
  3270.  
  3271.      Initializing an object 
  3272.      Adding settings pages to an object 
  3273.      Saving and restoring the state of an object 
  3274.      Modifying an object's context menus (adding and deleting menu items) 
  3275.      Querying object class data 
  3276.      Processing context menu items 
  3277.      Implementing settings page dialog processing 
  3278.      Handling exceptions. 
  3279.  
  3280.  
  3281. ΓòÉΓòÉΓòÉ 6.3.11.4. TEXTFLDR Sample Program ΓòÉΓòÉΓòÉ
  3282.  
  3283. TEXTFLDR allows only plain text objects to be placed into the folder. Objects 
  3284. that are not plain text, that is, control- or extended-ASCII characters, are 
  3285. rejected. Objects are considered to be plain text if the "Associated type" 
  3286. field of the Settings notebook is set to plain text. If there is no associated 
  3287. type set, the first 500 bytes are placed into the folder. 
  3288.  
  3289.  
  3290. ΓòÉΓòÉΓòÉ 6.3.11.5. WPCAR Sample Program ΓòÉΓòÉΓòÉ
  3291.  
  3292. WPCAR, the Workplace Shell WPDataFile subclass sample, is the C++ version of 
  3293. the CAR sample. 
  3294.  
  3295.  
  3296. ΓòÉΓòÉΓòÉ 6.3.11.6. WPSTUTOR Sample Program ΓòÉΓòÉΓòÉ
  3297.  
  3298. WPSTUTOR displays the order in which object methods are invoked by the 
  3299. Workplace Shell. When a sample object's class method is executed, the method's 
  3300. name and a description of its function are displayed in a PM window. The sample 
  3301. saves the object's title and its icon title backwards. 
  3302.  
  3303. This object class subclasses the WPDataFile class. Most Workplace Shell 
  3304. instance and class methods are overridden so that information about the methods 
  3305. can be displayed to the user. 
  3306.  
  3307. This sample is designed to be more of a tutorial for Workplace Shell 
  3308. programming than a programming example. 
  3309.  
  3310. Note:  The SHOWDESC.EXE file should be renamed to SHOWDESC.BAK (or something 
  3311.        else) to turn off the sample. Rename the file back to SHOWDESC.EXE to 
  3312.        turn the sample back on. 
  3313.  
  3314.  
  3315. ΓòÉΓòÉΓòÉ 6.3.11.7. WSFILE Sample Program ΓòÉΓòÉΓòÉ
  3316.  
  3317. WSFILE displays, creates, and installs Workplace objects of two classes: WSFILE 
  3318. and WSFOLDER. The WSFILE class is a subclass of the WPDataFile class, and the 
  3319. WSFOLDER class is a subclass of class WPFolder. 
  3320.  
  3321.  
  3322. ΓòÉΓòÉΓòÉ 6.4. Tools ΓòÉΓòÉΓòÉ
  3323.  
  3324. This section provides a brief description of each tool with just enough detail 
  3325. to get you started at the OS/2 command line. 
  3326.  
  3327. The tools are categorized as follows: 
  3328.  
  3329.      Development Tools 
  3330.      OpenDoc 
  3331.      Presentation Manager - PM 
  3332.      Multimedia 
  3333.      SOM 
  3334.      Workplace Shell 
  3335.  
  3336.  For complete information about the tools described here, please refer to the 
  3337.  online OS/2 Tools Reference. 
  3338.  
  3339.  Note:  The Wave Doctor, previously available with the OS/2 Multimedia Toolkit 
  3340.         product, is not included in the Warp Toolkit. 
  3341.  
  3342.  
  3343. ΓòÉΓòÉΓòÉ 6.4.1. Development Tools ΓòÉΓòÉΓòÉ
  3344.  
  3345. The Developer tools help you develop OS/2 programs. As programmers, we tend to 
  3346. use such tools as they are needed, and the ones covered here are not likely to 
  3347. be used as much as the compiler and linker. Nonetheless, they are handy to 
  3348. have. Perhaps you will only use a few of them in your programming career, but 
  3349. it is important to know where you can find information about them, in the event 
  3350. you will ever need them. The tools included in this section are: 
  3351.  
  3352.      EXEHDR - Executable-Header Files 
  3353.      FWDSTAMP - Forwarders 
  3354.      IMPLIB - Import a Library 
  3355.      KwikINF - Quick Information 
  3356.      LINK386 
  3357.      MARKEXE 
  3358.      MKMSGF - Make Message File 
  3359.      MSGBIND - Message Binding 
  3360.      NMAKE 
  3361.      PACK and UNPACK 
  3362.      PACK2 and UNPACK2 
  3363.  
  3364.  
  3365. ΓòÉΓòÉΓòÉ 6.4.1.1. EXEHDR ΓòÉΓòÉΓòÉ
  3366.  
  3367. EXEHDR provides a listing of the contents of the executable-header file; it 
  3368. also provides a listing of the attributes of all segments in the file. 
  3369.  
  3370. Uses of EXEHDR include: 
  3371.  
  3372.      Determining whether a file is an application or a dynamic link library 
  3373.      Modifying and viewing the attributes set by the module definition file 
  3374.      Viewing the number and size of code and data segments. 
  3375.  
  3376.  
  3377. ΓòÉΓòÉΓòÉ 6.4.1.1.1. Starting EXEHDR ΓòÉΓòÉΓòÉ
  3378.  
  3379. To start EXEHDR from the command line, type: 
  3380.  
  3381.    EXEHDR [options] filename
  3382.  
  3383. where: 
  3384.  
  3385.  options        Is the name of the EXEHDR option that modifies the header file. 
  3386.                 Regardless of options, EXEHDR always generates a listing of the 
  3387.                 header file. 
  3388.  
  3389.  filename       Is the name of the application or dynamic link library file. 
  3390.                 You can specify any number of files. 
  3391.  
  3392.  
  3393. ΓòÉΓòÉΓòÉ 6.4.1.2. FWDSTAMP ΓòÉΓòÉΓòÉ
  3394.  
  3395. FWDSTAMP adds entry points, called forwarders, to a dynamic link library (.DLL) 
  3396. file. Forwarders point to API functions or other exported code or data. They 
  3397. contain an import reference so that the final target address of the forwarded 
  3398. entry is contained in a different module. A forwarder might be called an 
  3399. imported export. 
  3400.  
  3401. When a file has a fix-up to a forwarded entry point, the loader resolves that 
  3402. fix-up to the address of the entry point that the forwarder imports by 
  3403. traversing the chain of forwarders until the end of the chain (a non-forwarded 
  3404. export) is reached. All forwarders are implicitly exported. 
  3405.  
  3406. The imported entry point that a forwarder refers to may itself be another 
  3407. forwarder. The loader will process a chain of forwarders until a non-forwarder 
  3408. entry point is encountered. 
  3409.  
  3410. There is no run-time cost to forwarders; however, there is a slight load-time 
  3411. cost as the loader resolves forwarder chains with their final addresses. 
  3412.  
  3413.  
  3414. ΓòÉΓòÉΓòÉ 6.4.1.2.1. Using FWDSTAMP ΓòÉΓòÉΓòÉ
  3415.  
  3416. You use forwarders to combine several DLLs into one without having to relink 
  3417. old applications. For example, if MOUCALLS and VIOCALLS were combined into a 
  3418. single DLL called NEWLIB.DLL, then MOUCALLS and VIOCALLS could be replaced with 
  3419. special DLLs containing forwarders to NEWLIB.DLL. 
  3420.  
  3421.  
  3422. ΓòÉΓòÉΓòÉ 6.4.1.2.2. Starting FWDSTAMP ΓòÉΓòÉΓòÉ
  3423.  
  3424. To start FWDSTAMP from the command line, type: 
  3425.  
  3426.    FWDSTAMP infile deffile outfile
  3427.  
  3428. where: 
  3429.  
  3430.  infile      Specifies the name of the dynamic link library file that LINK386 
  3431.              created. Use the file-name extension of .DLL. 
  3432.  
  3433.  deffile     Specifies the name of the module definition file (.DEF) that 
  3434.              contains the forwarders. 
  3435.  
  3436.  outfile     Specifies the name of the .DLL file that will contain the added 
  3437.              forwarders. 
  3438.  
  3439.  Forwarders are specified in the module definition file so that an exported 
  3440.  name, which is also imported, is a forwarder. For example: 
  3441.  
  3442.      IMPORTS
  3443.       VIOMODEWAIT=NEWLIB.123
  3444.      EXPORTS
  3445.       VIOMODEWAIT @ 25
  3446.  
  3447.  In the example, a forwarder entry point for VIOMODEWAIT is created and 
  3448.  contains an import reference to NEWLIB.123. 
  3449.  
  3450.  
  3451. ΓòÉΓòÉΓòÉ 6.4.1.3. IMPLIB ΓòÉΓòÉΓòÉ
  3452.  
  3453. IMPLIB is used to generate an import library (.LIB) file. IMPLIB takes a module 
  3454. definition file (.DEF) as input. For each export definition in the .DEF file, 
  3455. IMPLIB generates a corresponding import definition. 
  3456.  
  3457. The .LIB file generated by IMPLIB is used as input to LINK386, which creates an 
  3458. executable (.EXE) file. The .LIB file provides LINK386 with information about 
  3459. imported dynamic link functions. 
  3460.  
  3461.  
  3462. ΓòÉΓòÉΓòÉ 6.4.1.3.1. Creating an IMPLIB ΓòÉΓòÉΓòÉ
  3463.  
  3464. Import libraries are created by IMPLIB and are used to link DLLs with 
  3465. applications. 
  3466.  
  3467. Import libraries are similar in some respects to standard libraries: 
  3468.  
  3469.      You specify import libraries and standard libraries in the same 
  3470.       command-line field of LINK386. 
  3471.      Both types of libraries resolve external references at link time. 
  3472.  
  3473.  However, import libraries differ from standard libraries in that they contain 
  3474.  no executable code. Rather, they identify the DLLs where the executable code 
  3475.  can be found at run time. 
  3476.  
  3477.  Creating import libraries is an extra step. Nevertheless, import libraries are 
  3478.  recommended for use with all DLLs for two reasons: 
  3479.  
  3480.      IMPLIB automates much of the program creation process for you. To use 
  3481.       IMPLIB, you need to supply the .DEF file you already created for the 
  3482.       dynamic link library. Without an import library, you must create a second 
  3483.       .DEF file that explicitly defines all needed functions in the dynamic 
  3484.       link library. 
  3485.  
  3486.      Import libraries make it easier for one person to write a library and 
  3487.       another to write the application. Much of the linking process (linking 
  3488.       the .DLL file and creating the import library) can be done by the author 
  3489.       of the dynamic link library. The import library and associated .DLL file 
  3490.       can then be given as a unit to the person linking the application - that 
  3491.       person need not worry about creating a .DEF file. 
  3492.  
  3493.  
  3494. ΓòÉΓòÉΓòÉ 6.4.1.3.2. Starting IMPLIB ΓòÉΓòÉΓòÉ
  3495.  
  3496. You can start IMPLIB and specify all input from the command line. An example of 
  3497. the syntax follows: 
  3498.  
  3499.    IMPLIB [options] implibname {deffile... | dllfile...}
  3500.  
  3501. where: 
  3502.  
  3503.  options        Is the name of the option that modifies the output of IMPLIB. 
  3504.                 All options are described as follows: 
  3505.  
  3506.                                Syntax                   Description 
  3507.                                /HELP                    Displays a short 
  3508.                                                         summary of IMPLIB 
  3509.                                                         syntax. 
  3510.                                /IGNORECASE              Turns case sensitivity 
  3511.                                                         off. This is the 
  3512.                                                         default. 
  3513.                                /NOIGNORECASE            Turns case sensitivity 
  3514.                                                         on. 
  3515.                                /NOLOGO                  Suppresses the 
  3516.                                                         copyright screen when 
  3517.                                                         IMPLIB starts. 
  3518.  
  3519.  implibname     Is the name of the import library created. 
  3520.  
  3521.  deffile        Is one or more module definition files that export routines in 
  3522.                 the dynamic link library. 
  3523.  
  3524.  dllfile        Is one or more DLLs with exported entry points. 
  3525.  
  3526.  Note:  You can specify any number of either module definition files or DLLs. 
  3527.  
  3528.  The following command creates the import library, MYLIB.LIB, from the module 
  3529.  definition file, MYLIB.DEF: 
  3530.  
  3531.      IMPLIB MYLIB.LIB MYLIB.DEF
  3532.  
  3533.  
  3534. ΓòÉΓòÉΓòÉ 6.4.1.4. KwikINF ΓòÉΓòÉΓòÉ
  3535.  
  3536. KwikINF provides you with a quick and convenient method of accessing 
  3537. information in online documents stored in the OS/2 BOOKSHELF from anywhere on 
  3538. the Desktop, with the exception of DOS or WIN-OS/2 sessions. When KwikINF is 
  3539. started, you can search for a text string of your choice directly or through a 
  3540. pop-up window by pressing a user-selectable hot key. Until you configure 
  3541. KwikINF, your KwikINF hot key is Alt+Q. 
  3542.  
  3543.  
  3544. ΓòÉΓòÉΓòÉ 6.4.1.4.1. Starting KwikINF ΓòÉΓòÉΓòÉ
  3545.  
  3546. KwikINF is installed as a program object in the Development Tools folder. You 
  3547. start KwikINF by double-clicking on the KwikINF program object or by entering 
  3548. KwikINF from the command line of an OS/2 window. You can also start KwikINF 
  3549. automatically when you start OS/2 by placing a shadow of the KwikINF object in 
  3550. the Startup folder of the OS/2 System folder on the Desktop. You shadow an 
  3551. object by pressing Ctrl+Shift while dragging the object to the place where you 
  3552. wish to drop the shadow. 
  3553.  
  3554. Note:  You should not add KwikINF to your STARTUP.CMD if it is followed by an 
  3555.        EXIT statement. 
  3556.  
  3557.  You can start, terminate, and configure KwikINF from a command line in an OS/2 
  3558.  window by entering: 
  3559.  
  3560.      KwikINF [no options] [/C] [/T] [/?]
  3561.  
  3562.  where: 
  3563.  
  3564.  no options     Starts KwikINF.  After entering this command, the default 
  3565.                 KwikINF hot key (Alt+Q) is enabled. 
  3566.  
  3567.  /C             Opens the Configure KwikINF window.  Use this window to: 
  3568.  
  3569.                          Select another KwikINF hot key 
  3570.                          Select a default online document from the BOOKSHELF 
  3571.                          Search 
  3572.                          Select the activation behavior of the KwikINF window. 
  3573.  
  3574.  /T             Terminates KwikINF and disables the KwikINF hot key. 
  3575.  
  3576.  /?             Displays the enclosed information. 
  3577.  
  3578.  
  3579. ΓòÉΓòÉΓòÉ 6.4.1.4.2. Performing a Search ΓòÉΓòÉΓòÉ
  3580.  
  3581. How you initiate a search for information in online documents is dependent on 
  3582. where you are on the Desktop when you press the KwikINF hot key: 
  3583.  
  3584.      From an OS/2 full-screen session, a PM VIO or AVIO window, or PM MLE : 
  3585.  
  3586.       Position the cursor on the string you want to search for and press the 
  3587.       KwikINF hot key. KwikINF retrieves the word at the cursor. If you have 
  3588.       configured KwikINF to display the KwikINF window when the KwikINF hot key 
  3589.       is pressed, KwikINF automatically places the retrieved word in the 
  3590.       "Search string" entry field of the KwikINF window. When you select Search 
  3591.       or press Enter, KwikINF displays the information. If you have configured 
  3592.       KwikINF to bypass the KwikINF window when the KwikINF hot key is pressed, 
  3593.       KwikINF automatically displays the information. 
  3594.  
  3595.      From a graphic-text PM window: 
  3596.  
  3597.       Press the KwikINF hot key, then type the string you want to search for in 
  3598.       the "Search string" entry field of the KwikINF window. The KwikINF 
  3599.       text-retrieval feature is not available from graphic-text PM windows. 
  3600.  
  3601.  
  3602. ΓòÉΓòÉΓòÉ 6.4.1.5. LINK386 ΓòÉΓòÉΓòÉ
  3603.  
  3604. LINK386 is used to translate object files and standard library files into a 
  3605. single executable file. LINK386 also generates DLLs and device drivers. 
  3606.  
  3607. LINK386 uses the following files as input: 
  3608.  
  3609.      One or more object files that are linked with any optional library files 
  3610.       to create the executable file.  Object files usually have a .OBJ 
  3611.       extension. 
  3612.  
  3613.      One or more library files. The library files contain object modules that 
  3614.       are linked to the object files to create the executable file. Library 
  3615.       files usually have a .LIB extension. 
  3616.  
  3617.      A module definition file. The module definition file provides information 
  3618.       to LINK386 about the executable file or dynamic link library file it is 
  3619.       creating. The module definition file usually has a .DEF extension. 
  3620.  
  3621.  LINK386 produces three types of output files: 
  3622.  
  3623.      An executable file that runs under OS/2 whenever you specify a module 
  3624.       definition file that has a NAME statement. The executable file usually 
  3625.       has a .EXE extension. 
  3626.  
  3627.      A dynamic link library file. A dynamic link library is produced whenever 
  3628.       you specify a module definition file that has a LIBRARY statement. A 
  3629.       dynamic link library file usually has a .DLL extension. 
  3630.  
  3631.      A device driver file. A virtual or physical device driver is produced 
  3632.       whenever you specify a module definition file that has the VIRTUAL DEVICE 
  3633.       or PHYSICAL DEVICE statements. A device driver file usually has a .DRV 
  3634.       extension. 
  3635.  
  3636.  Note:  Object-oriented compilers may change the name of a function internally. 
  3637.         LINK386 has the ability to change the name back to the original 
  3638.         function name when displaying error messages. 
  3639.  
  3640.  Three additional options are available with the Warp Toolkit: 
  3641.  
  3642.            /E[XEPACK:{1|2}]                   Causes pages of code and data in 
  3643.                                               the file to be compressed 
  3644.  
  3645.            /NOO[UTPUTONERROR]                 Prevents the LINK386 from 
  3646.                                               creating the executable file if 
  3647.                                               an error is encountered. 
  3648.  
  3649.            /NOS[ECTORALIGNCODE]               Turns off the alignment feature 
  3650.                                               provided through the LINK386 
  3651.                                               Linker. LINK386 normally aligns 
  3652.                                               pages of code on sector (512 
  3653.                                               byte) boundaries. This reduces 
  3654.                                               the time to load the pages when 
  3655.                                               the application is executed. The 
  3656.                                               /NOSECTORALIGNCODE option aligns 
  3657.                                               pages of code based on the value 
  3658.                                               used in the /ALIGN option. 
  3659.  
  3660.  
  3661. ΓòÉΓòÉΓòÉ 6.4.1.5.1. Starting LINK386 ΓòÉΓòÉΓòÉ
  3662.  
  3663. To link the object files and optional library files of your application, supply 
  3664. input to LINK386 by: 
  3665.  
  3666.      Responding to a series of LINK386 prompts 
  3667.      Typing commands directly at the command prompt 
  3668.      Creating a response file and entering the file name on the command line. 
  3669.  
  3670.  
  3671. ΓòÉΓòÉΓòÉ 6.4.1.5.2. Responding to LINK386 Prompts ΓòÉΓòÉΓòÉ
  3672.  
  3673. To start LINK386, type the following at the command prompt: 
  3674.  
  3675.    LINK386
  3676.  
  3677. Press Enter; a series of prompts appear, one at a time: 
  3678.  
  3679.   Object modules [.OBJ]:
  3680.   Run file [basename.EXE]:
  3681.   List file [NUL.MAP]:
  3682.   Libraries [.LIB]:
  3683.   Definitions file [NUL.DEF]:
  3684.  
  3685. You can respond using any combination of upper- and lowercase letters. Enter 
  3686. your responses by pressing Enter. 
  3687.  
  3688. To extend input to a new line, type a plus sign (+) as the last character on 
  3689. the current line. When the same prompt appears on a new line, you can continue. 
  3690.  
  3691. Note:  Do not split a file name across lines. 
  3692.  
  3693.  To select the default response to a prompt, press Enter. The next prompt 
  3694.  appears. 
  3695.  
  3696.  To select the default response to the current prompt and all remaining 
  3697.  prompts, type a semicolon and press Enter. 
  3698.  
  3699.  Note:  You must enter the name of at least one object file. 
  3700.  
  3701.  Responses within a command line are separated by commas. 
  3702.  
  3703.  LINK386 supplies the following default file extensions: .OBJ, .EXE, .MAP, 
  3704.  .LIB, and .DEF. You can override these extensions by typing the file extension 
  3705.  of your choice. 
  3706.  
  3707.  
  3708. ΓòÉΓòÉΓòÉ 6.4.1.5.3. Typing Input on the Command Line ΓòÉΓòÉΓòÉ
  3709.  
  3710. You can start LINK386 and specify all input from the command line.  An example 
  3711. of the LINK386 command is: 
  3712.  
  3713.    LINK386 [options] objfiles[,exefile,mapfile,libraries,deffile]
  3714.  
  3715. where: 
  3716.  
  3717.  options        Is the name of the LINK386 option. Any number of options may be 
  3718.                 specified. 
  3719.  
  3720.                 You can specify options anywhere on the response line, except 
  3721.                 before a comma at the end of a line of characters. If you want 
  3722.                 to specify more than one option, either group them at the end 
  3723.                 of a response, or specify them at the end of several responses. 
  3724.                 Each option must begin with a forward slash (/). 
  3725.  
  3726.                 To end the linking process at any point, press Ctrl+Break. 
  3727.  
  3728.  objfiles       Is the name of the object files that you want linked. 
  3729.  
  3730.  exefile        Is the output file that LINK386 created.  LINK386 produces 
  3731.                 either an executable file, a dynamic link library, or a device 
  3732.                 driver. If you do not specify a file name, LINK386 uses the 
  3733.                 name of the first object file. Use the file-name extension .EXE 
  3734.                 if it is an executable file, .DLL if it is a dynamic link 
  3735.                 library, and .DRV if it is a device driver. 
  3736.  
  3737.  mapfile        Is the name of the file that contains the map listing. The 
  3738.                 default file name extension is .MAP. Use the /M option to 
  3739.                 include public symbols in this file. Enter NULL if you do not 
  3740.                 want a map file. 
  3741.  
  3742.  libraries      Is a list of libraries for LINK386 to search. These libraries 
  3743.                 include standard or import libraries, but not DLLs. The library 
  3744.                 names should be separated by plus signs (+) or blank spaces. 
  3745.  
  3746.  deffile        Is the name of the module definition file for the executable 
  3747.                 file or dynamic link library. 
  3748.  
  3749.  
  3750. ΓòÉΓòÉΓòÉ 6.4.1.5.4. Creating a Response File ΓòÉΓòÉΓòÉ
  3751.  
  3752. To operate LINK386 using a response file, you must first create a file that 
  3753. contains the responses you want LINK386 to process. You can give the file any 
  3754. name, and create it with any text editor. 
  3755.  
  3756. Type the following command at the command prompt: 
  3757.  
  3758.    LINK386 @filename[.ext]
  3759.  
  3760. The @ symbol tells LINK386 that filename is a response file. If the file is not 
  3761. in the working directory, you must specify the path. Begin using a response 
  3762. file at any point on the LINK386 command line or at any LINK386 prompt. The 
  3763. file should contain responses in the same order as the LINK386 prompts. Each 
  3764. response needs to be on a separate line. If you choose to place responses on 
  3765. the same line, separate them with commas. 
  3766.  
  3767. If the file does not contain responses for all the prompts, LINK386 displays 
  3768. the appropriate prompt and waits for you to supply a response. End the response 
  3769. file with a semicolon. 
  3770.  
  3771. You can use special characters in the response file the same way you would use 
  3772. them in responses entered at the keyboard. 
  3773.  
  3774.  
  3775. ΓòÉΓòÉΓòÉ 6.4.1.5.5. Example of a Response File ΓòÉΓòÉΓòÉ
  3776.  
  3777. The response file in the following example instructs LINK386 to generate an 
  3778. executable file called FUN.EXE, and four object modules, FUN, SUN, RUN, and 
  3779. GAMES. 
  3780.  
  3781.   fun+sun+run+games /map
  3782.   fun.exe
  3783.   funlist
  3784.   ;
  3785.  
  3786. If you specify the file name, FUNLIST, LINK386 will generate a map file named 
  3787. FUNLIST.MAP. Adding the /MAP option will cause LINK386 to include the public 
  3788. symbols of the application in the map file. 
  3789.  
  3790.  
  3791. ΓòÉΓòÉΓòÉ 6.4.1.5.6. OS2STUB.EXE ΓòÉΓòÉΓòÉ
  3792.  
  3793. OS2STUB.EXE is included in the executable file created by LINK386, if the STUB 
  3794. statement is included in the module definition file. The stub is invoked 
  3795. whenever the file is executed under DOS. By default, LINK386 adds its own 
  3796. standard stub for this purpose. 
  3797.  
  3798.  
  3799. ΓòÉΓòÉΓòÉ 6.4.1.6. MARKEXE ΓòÉΓòÉΓòÉ
  3800.  
  3801. MARKEXE lets you view and set the type of application. The type of application 
  3802. identifies the OS/2 sessions in which a program can run. You can use MARKEXE in 
  3803. conjunction with programs that you have created using LINK386 or with programs 
  3804. created by some other means. 
  3805.  
  3806.  
  3807. ΓòÉΓòÉΓòÉ 6.4.1.6.1. Starting MARKEXE ΓòÉΓòÉΓòÉ
  3808.  
  3809. To start MARKEXE from the command line, type: 
  3810.  
  3811.    MARKEXE [force] [no] [display|dllinit|dllterm|type|lfns] filename
  3812.  
  3813. where: 
  3814.  
  3815.  force          Marks the executable file with OS/2 as the target operating 
  3816.                 system even though the file was marked for another operating 
  3817.                 system. Using force may produce internally inconsistent 
  3818.                 executable files. 
  3819.  
  3820.  no             Sets the command to the opposite condition. 
  3821.  
  3822.  display        Displays the application type in a message. This does not 
  3823.                 change the file. 
  3824.  
  3825.  dllinit        Sets per process initialization for the dynamic link library. 
  3826.  
  3827.  dllterm        Sets per process termination for the dynamic link library. 
  3828.  
  3829.  type           Specifies the application type of the executable file. It can 
  3830.                 be one of the following: 
  3831.  
  3832.                 WINDOWAPI                     Uses the API function provided by 
  3833.                                               the PM. It must be executed in a 
  3834.                                               PM window. 
  3835.  
  3836.                 WINDOWCOMPAT                  Runs (compatible) in a PM window 
  3837.                                               or in a full-screen session. 
  3838.  
  3839.                 NOTWINDOWCOMPAT               Executes the application in a 
  3840.                                               full-screen session only. 
  3841.  
  3842.                 UNSPECIFIED                   Runs an unspecified application 
  3843.                                               type in an OS/2 full-screen 
  3844.                                               session. 
  3845.  
  3846.                 If type is not specified, MARKEXE simply displays the current 
  3847.                 type of the executable file. 
  3848.  
  3849.  lfns           Specifies that the program supports long file names. 
  3850.  
  3851.  filename       Specifies the executable file to be marked. Any number of files 
  3852.                 can be marked. 
  3853.  
  3854.  MARKEXE does not modify the file if the application type of the executable 
  3855.  file is the same as the requested type. It displays the message "unchanged" to 
  3856.  indicate this. 
  3857.  
  3858.  
  3859. ΓòÉΓòÉΓòÉ 6.4.1.6.2. Viewing the Application Type ΓòÉΓòÉΓòÉ
  3860.  
  3861. You can view the application type of MYPROG.EXE by typing the following: 
  3862.  
  3863.    MARKEXE MYPROG.EXE
  3864.  
  3865. MARKEXE displays the type in a message that looks like this: 
  3866.  
  3867.    MYPROG.EXE: OS/2 2.1, WINDOWCOMPACT, LFNS
  3868.  
  3869.  
  3870. ΓòÉΓòÉΓòÉ 6.4.1.6.3. Setting the Application Type ΓòÉΓòÉΓòÉ
  3871.  
  3872. You can set the application type for MYPROG.EXE to WINDOWCOMPAT by typing: 
  3873.  
  3874.   MARKEXE windowcompat myprog.exe
  3875.  
  3876. If you have more than one executable file to be set to the same application 
  3877. type, you can supply the file names in a single command line, as in the 
  3878. following example: 
  3879.  
  3880.   MARKEXE windowcompat myprog.exe abc.exe xyz.exe
  3881.  
  3882.  
  3883. ΓòÉΓòÉΓòÉ 6.4.1.7. MKMSGF ΓòÉΓòÉΓòÉ
  3884.  
  3885. MKMSGF converts a text message file to an output (binary) message file that 
  3886. DosGetMessage uses to display messages. Text messages in OS/2 full-screen 
  3887. applications do not need to be loaded into memory with the application; they 
  3888. can reside on disk until needed. 
  3889.  
  3890. You can use the output message file by specifying a message file name and a 
  3891. message number in the DosGetMessage parameter list. The messages also can be 
  3892. bound to the executable file by MSGBIND. 
  3893.  
  3894.  
  3895. ΓòÉΓòÉΓòÉ 6.4.1.7.1. Creating a MKMSGF ΓòÉΓòÉΓòÉ
  3896.  
  3897. The input message file is a standard ASCII file that contains three types of 
  3898. lines: 
  3899.  
  3900.      Comment 
  3901.      Component identifier 
  3902.      Component message. 
  3903.  
  3904.  Comment lines are the first lines of a file and must begin with a semicolon. A 
  3905.  component-identifier is a three-character name identifier (for example, "DOS") 
  3906.  that precedes all MKMSGF message numbers.  Component-message lines consist of 
  3907.  a message header and an ASCII text message. 
  3908.  
  3909.  The following is an example of a text message source file. 
  3910.  
  3911.     ;This is an example
  3912.     ;of a text message
  3913.     ;file
  3914.     DOS
  3915.     DOS0100E: File not found
  3916.     DOS0101?:
  3917.     DOS0102H: Usage: del [drive:][path] filename
  3918.     DOS0103?:
  3919.     DOS0104I: 1% files copied
  3920.     DOS0105?:
  3921.     DOS0106W: Warning! All data will be erased!
  3922.     DOS0107?:
  3923.     DOS0108?:
  3924.     DOS0109P: Do you wish to apply these patches (Y or N)? %0
  3925.  
  3926.  where: 
  3927.  
  3928.  DOS0100E - DOS0109P      Identifies message numbers in sequence. The first 
  3929.                           three characters indicate the component identifier; 
  3930.                           the four-digit number indicates the message number, 
  3931.                           which is followed by a letter (described below), then 
  3932.                           a colon and blank space. If a message number is not 
  3933.                           used, type the number, end it with a question mark 
  3934.                           (?), and leave an empty entry. 
  3935.  
  3936.  E, H, I, P, W            Indicates the type of message. Categories include 
  3937.                           error (E), help (H), information (I), prompt (P), and 
  3938.                           warning (W). 
  3939.  
  3940.  %0                       Displays a prompt for input from the user, after 
  3941.                           which a carriage return and line feed are inserted. 
  3942.  
  3943.  
  3944. ΓòÉΓòÉΓòÉ 6.4.1.7.2. Starting MKMSGF ΓòÉΓòÉΓòÉ
  3945.  
  3946. To start MKMSGF from the command line, type: 
  3947.  
  3948.    MKMSGF infile outfile [option]
  3949.  
  3950. where: 
  3951.  
  3952.  infile      Specifies the input file that contains message profiles. 
  3953.  
  3954.  outfile     Names the outfile using the three-character component identifier 
  3955.              and the .MSG file extension; for example, MES.MSG. 
  3956.  
  3957.  option      Specifies the name of the option that modifies the output file. 
  3958.  
  3959.  
  3960. ΓòÉΓòÉΓòÉ 6.4.1.7.3. Starting MKMSGF Using a Message Control File ΓòÉΓòÉΓòÉ
  3961.  
  3962. A message control file is used to create multiple code page message files. An 
  3963. example of the command-line syntax follows: 
  3964.  
  3965.    MKMSGF @controlfile
  3966.  
  3967. where: 
  3968.  
  3969.  @controlfile   Is the name of the file that contains the control statements 
  3970.                 used to generate a multiple code page message file. 
  3971.  
  3972.                 The @ symbol is not part of the file name; it is a required 
  3973.                 delimiter. 
  3974.  
  3975.  An example of a message control file follows: 
  3976.  
  3977.      root.in root.out /Pcodepage
  3978.      /Ddbcsrang/ctryid /LlangID,VerId /V
  3979.      sub.001 sub1.out /Pcodepage
  3980.      /Ddbcsrang/ctryid /LlangID,VerId
  3981.      .
  3982.      .
  3983.      .
  3984.      sub.00n subn.out /Pcodepage
  3985.      /Ddbcsrang/ctryid /LlangID,VerId
  3986.  
  3987.  
  3988. ΓòÉΓòÉΓòÉ 6.4.1.8. MSGBIND ΓòÉΓòÉΓòÉ
  3989.  
  3990. When DosGetMessage is issued, it searches for the message in the message 
  3991. segment bound to the application's executable file, and then the application's 
  3992. message file on a hard disk. To ensure that a message is displayed quickly, you 
  3993. can bind it to the application's executable file by using the MSGBIND utility 
  3994. program. For each executable file, MSGBIND specifies which message files to 
  3995. scan; for each message file, it specifies which message to include in the 
  3996. executable file. 
  3997.  
  3998. Note:  The MSGBIND utility program supports the new compression format 
  3999.        available with LINK386 (/EXEPACK:2) and RC (-x2). 
  4000.  
  4001.  
  4002. ΓòÉΓòÉΓòÉ 6.4.1.8.1. Starting MSGBIND ΓòÉΓòÉΓòÉ
  4003.  
  4004. To start MSGBIND from the command line, type: 
  4005.  
  4006.    MSGBIND [infile]
  4007.  
  4008. where: 
  4009.  
  4010.  infile    Specifies the input file that contains the executable files, output 
  4011.            message files, and message numbers that are to be bound. 
  4012.  
  4013.  
  4014. ΓòÉΓòÉΓòÉ 6.4.1.8.2. Binding the Message File ΓòÉΓòÉΓòÉ
  4015.  
  4016. The input file contains three types of lines: 
  4017.  
  4018.      > Executable file 
  4019.      < Message file 
  4020.      Message numbers. 
  4021.  
  4022.  An example of an input file follows: 
  4023.  
  4024.     >PROG1.EXE
  4025.     <\MESSAGES\PRGMSG.MSG
  4026.     PRG0100
  4027.     PRG0101
  4028.     PRG0102
  4029.     <\MESSAGES\APP.MSG
  4030.     APP0001
  4031.     APP0002
  4032.     APP0003
  4033.  
  4034.  where: 
  4035.  
  4036.  >PROG1.EXE      Is the executable file to be modified 
  4037.  
  4038.  <               Defines the first message of a series to be bound, delimited 
  4039.                  either by the end of the series or a less-than symbol (<). 
  4040.  
  4041.  <\MESSAGES\PRGMSG.MSG and <\MESSAGES\APP.MSG Names the files containing the 
  4042.                  binary versions of the messages (created by MKMSGF) and their 
  4043.                  identifying numbers: the three-character component identifier 
  4044.                  and the four-digit message number. 
  4045.  
  4046.  
  4047. ΓòÉΓòÉΓòÉ 6.4.1.9. NMAKE ΓòÉΓòÉΓòÉ
  4048.  
  4049. NMAKE carries out all tasks needed to create or update a program after one or 
  4050. more of the source files in the program have changed. NMAKE compares the 
  4051. modification dates for one set of files - the target files - with those of 
  4052. another set of files - the source files.  NMAKE then carries out a given task 
  4053. only if a target file is out of date. NMAKE does not compile and link all files 
  4054. just because one file was updated. This can save time when creating programs 
  4055. that have many source files or that take several steps to complete. 
  4056.  
  4057. Note:  Previous releases of this program did not honor the documented behavior 
  4058.        of the .SUFFIXES pseudotarget, which lists all of the extensions that 
  4059.        NMAKE considers when searching for a rule to build a target that lacks 
  4060.        an explicit build rule. NMAKE now uses only the suffixes given in the 
  4061.        .SUFFIXES pseudotarget. If this more restrictive behavior causes some of 
  4062.        your targets not to be built, you can enable NMAKE to behave in its 
  4063.        former way by coding in the environment this variable: 
  4064.  
  4065.                 SET NMAKE=b
  4066.  
  4067.  
  4068. ΓòÉΓòÉΓòÉ 6.4.1.9.1. Using NMAKE ΓòÉΓòÉΓòÉ
  4069.  
  4070. To use NMAKE, create a description file (or makefile). A description file, in 
  4071. its simplest form, lists which files depend on others and which commands need 
  4072. to be executed if a file changes. You can create an NMAKE description file with 
  4073. any text editor that produces ASCII files. 
  4074.  
  4075. A description file looks like this: 
  4076.  
  4077.     targets... : dependants...Γöé
  4078.          command              ΓöéΓöÇΓöÇΓöÇΓöÇ description block
  4079.             :                 Γöé
  4080.     targets... : dependants...
  4081.          command
  4082.             :
  4083.  
  4084. A dependent relationship among files is defined in a description block. A 
  4085. description block indicates the relationship among various parts of the 
  4086. program. It contains commands to bring all components up-to-date. The 
  4087. description file can contain any number of description blocks. 
  4088.  
  4089. Use NMAKE description files for creating backup files, configuring data files, 
  4090. and running programs when data files are modified. 
  4091.  
  4092.  
  4093. ΓòÉΓòÉΓòÉ 6.4.1.9.2. Starting NMAKE ΓòÉΓòÉΓòÉ
  4094.  
  4095. You can start NMAKE and specify all input from the command line. An example of 
  4096. the syntax follows: 
  4097.  
  4098.    NMAKE [options] [macrodefinitions] [targets] [/F filename]
  4099.  
  4100. where: 
  4101.  
  4102.  options               Is the name of the option that modifies the action of 
  4103.                        NMAKE. 
  4104.  
  4105.  macrodefinitions      Is the name of the macro that replaces one text string 
  4106.                        for another in the description file. 
  4107.  
  4108.  targets               Is the name of one or more target files you want NMAKE 
  4109.                        to create. If you do not list any targets, NMAKE creates 
  4110.                        the first target in the description file. 
  4111.  
  4112.  /F filename           Is the name of the option that specifies filename as the 
  4113.                        name of the description file to use. If a dash (-) is 
  4114.                        entered instead of a file name, NMAKE reads a 
  4115.                        description file from the standard input device. 
  4116.  
  4117.  
  4118. ΓòÉΓòÉΓòÉ 6.4.1.10. PACK and UNPACK ΓòÉΓòÉΓòÉ
  4119.  
  4120. PACK reduces the size of a file by compressing its data. You can use PACK for a 
  4121. single file or a group of files, thereby reducing the disk space required for 
  4122. your OS/2 application. UNPACK restores a compressed file to its original size 
  4123. and copies it to a specified directory. 
  4124.  
  4125.  
  4126. ΓòÉΓòÉΓòÉ 6.4.1.10.1. Starting PACK ΓòÉΓòÉΓòÉ
  4127.  
  4128. You can start PACK with a single command from the command line. The input 
  4129. required can be specified in one of two following methods: 
  4130.  
  4131.      Method 1: You can type the names of all the files you want to compress 
  4132.       directly in the command line. 
  4133.      Method 2: You can type the name of a single file that contains a list of 
  4134.       all the files you want to compress. 
  4135.  
  4136.  When using PACK, select the method that is suitable for you. Include the drive 
  4137.  and path if the files are not in the working directory. You can specify file 
  4138.  names with any combination of uppercase and lowercase letters. File-name 
  4139.  extensions are not required; however, if you specify a file name that has an 
  4140.  extension, also type the extension. 
  4141.  
  4142.  Examples of the command-line syntax follow: 
  4143.  
  4144.   Method 1:
  4145.      PACK sourcefile [packedfile]
  4146.                      [/H:headerpath\|/H:headerfile|/H:headerpath\headerfile]
  4147.                      [/D:headerdate] [/T:headertime] [/C] [/A] [/R]
  4148.  
  4149.   Method 2:
  4150.      PACK listfile [packedfile] /L
  4151.                    [/H:headerpath\|/H:headerfile|/H:headerpath\headerfile]
  4152.                    [/D:headerdate] [/T:headertime] [/C]
  4153.  
  4154.  where: 
  4155.  
  4156.  sourcefile          Specifies the name of the file you want packed 
  4157.                      (compressed). This parameter is required. Include the 
  4158.                      drive and path if the file is not in the working 
  4159.                      directory. Global file-name characters are permitted. 
  4160.  
  4161.                      When the data is compressed, the name of the source file 
  4162.                      is placed in the header of the compressed file and is used 
  4163.                      as the destination file name during unpacking. 
  4164.  
  4165.  listfile            Specifies the name of the file that contains a list of 
  4166.                      files that are to be compressed. When naming a list file, 
  4167.                      do not use global file-name characters. 
  4168.  
  4169.                      For information about list files, see Creating a List 
  4170.                      File. 
  4171.  
  4172.  packedfile          Specifies the name of the file that will contain the 
  4173.                      compressed data. Files that contain compressed data can be 
  4174.                      recognized by the @ symbol as the last character in the 
  4175.                      file name. If you do not specify this parameter, PACK 
  4176.                      places the compressed data in sourcefile and modifies its 
  4177.                      name to contain the @ symbol. 
  4178.  
  4179.  /H:headerpath\ or /H:headerfile or /H:headerpath\headerfile These parameters 
  4180.                      can be used separately or paired. 
  4181.  
  4182.                      /H:headerpath\                     Specifies the 
  4183.                                                         destination path (drive 
  4184.                                                         letters are not 
  4185.                                                         permitted) to be placed 
  4186.                                                         in the header of the 
  4187.                                                         file that contains the 
  4188.                                                         compressed data. Unless 
  4189.                                                         this path is overridden 
  4190.                                                         with the UNPACK 
  4191.                                                         command, it will be the 
  4192.                                                         destination path when 
  4193.                                                         the file is 
  4194.                                                         uncompressed. 
  4195.                                                         Headerpath must end 
  4196.                                                         with a backslash (\). 
  4197.  
  4198.                      /H:headerfile                      Specifies the name of 
  4199.                                                         the file to be placed 
  4200.                                                         in the header of the 
  4201.                                                         compressed file. This 
  4202.                                                         file name will be used 
  4203.                                                         as the destination file 
  4204.                                                         for the uncompressed 
  4205.                                                         data and cannot be 
  4206.                                                         overridden. 
  4207.  
  4208.                                                         If a header file name 
  4209.                                                         is not specified, PACK 
  4210.                                                         automatically uses 
  4211.                                                         sourcefile as the name 
  4212.                                                         of the file that is 
  4213.                                                         placed in the header of 
  4214.                                                         the compressed file. 
  4215.  
  4216.                      /H:headerpath\headerfile           Specifies that both a 
  4217.                                                         destination path and a 
  4218.                                                         destination file name 
  4219.                                                         are to be placed in the 
  4220.                                                         header of the file that 
  4221.                                                         has the compressed 
  4222.                                                         data. 
  4223.  
  4224.  /D:headerdate       Records the date in the header of the file that has the 
  4225.                      compressed data, and also in the destination file when it 
  4226.                      is uncompressed. 
  4227.  
  4228.                      The date must follow the format /D:MM-DD-YYYY.  For 
  4229.                      example: /D:08-20-1991 and /D:12-30-2010. 
  4230.  
  4231.  /T:headertime       Records the time in the header of the file that has the 
  4232.                      compressed data, and also in the destination file when it 
  4233.                      is uncompressed. 
  4234.  
  4235.                      The time must follow the format /T:HH.MM. For example 
  4236.                      /T:02.06 and /T:14.54. Hour 00 represents 12 a.m. and hour 
  4237.                      12 represents 12 p.m. 
  4238.  
  4239.  /A                  Adds data from sourcefile to the data in packedfile. 
  4240.  
  4241.                      The source file can be either in a compressed or 
  4242.                      uncompressed state. If the source file is in an 
  4243.                      uncompressed state, the data is compressed before being 
  4244.                      added to the file containing the compressed data. 
  4245.  
  4246.  /C                  Specifies that the current path be placed in the header of 
  4247.                      the file that contains the compressed data. When the 
  4248.                      UNPACK command is used, this path will be the destination 
  4249.                      path for the file that contains the uncompressed data. 
  4250.  
  4251.                      You cannot use /C when the headerpath is used. 
  4252.  
  4253.  /L                  Indicates that listfile is a list file. A list file is not 
  4254.                      compressed; it simply contains a listing of the names of 
  4255.                      the files that are to be compressed. 
  4256.  
  4257.  /R                  Removes the file specified by sourcefile from the file 
  4258.                      that contains only compressed data. The sourcefile 
  4259.                      parameter must specify the path and file name exactly as 
  4260.                      they appear in the header of the file with the compressed 
  4261.                      data; otherwise, the following error message appears on 
  4262.                      the screen: 
  4263.  
  4264.                                             The specified file to remove was not found.
  4265.  
  4266.                      The /R parameter is valid only when used in conjunction 
  4267.                      with sourcefile and packedfile. 
  4268.  
  4269.  Note:  The path and file-name information stored in the header of the file 
  4270.         that contains the compressed data can be displayed by using the /SHOW 
  4271.         option available with UNPACK. 
  4272.  
  4273.  
  4274. ΓòÉΓòÉΓòÉ 6.4.1.10.2. Creating a List File ΓòÉΓòÉΓòÉ
  4275.  
  4276. To use a list file with PACK, you must first create a file that contains the 
  4277. names of the files you want to compress. You can give the list file any name. 
  4278. Following is an example of specifying a list file at the command line: 
  4279.  
  4280.    PACK DEVICE.LST DEVICE.DRV /L
  4281.  
  4282. The /L indicates that DEVICE.LST is a list file. If the list file is not in the 
  4283. working directory, you must specify the drive and path. Global file-name 
  4284. characters are not permitted in the list-file name. DEVICE.DRV is the 
  4285. destination file for the end-to-end-compressed data. (End-to-end compressed 
  4286. data is the data from each of the files contained in the list file. This data 
  4287. is stored in a contiguous format in the destination file.) 
  4288.  
  4289. The syntax used in the list file is similar to that used in the command line. 
  4290. The syntax for a single line in the list file follows: 
  4291.  
  4292.    sourcefile [/H:headerpath\|/H:headerfile|/H:headerpath\ headerfile]
  4293.               [/D:headerdate] [/T:headertime] [/C]
  4294.  
  4295. Remember, when using the list-file method (method 2), global file-name 
  4296. characters are not permitted in the source-file name. Notice also that "PACK" 
  4297. is excluded, and packedfile is not permitted in the list file, because they 
  4298. were specified on the command line. You can include comments or blank lines by 
  4299. entering a semicolon as the first character of the line. An example of a list 
  4300. file follows: 
  4301.  
  4302.    ;This is a comment
  4303.    C:\OS2\COMMAND.COM
  4304.    CONFIG.SYS /H:CONFIG.BAK /C
  4305.    \OS2\INSTALL\DDINSTAL.EXE /H:\OS2\DDINSTAL.TMP /D:10-15-91 /T:11.45
  4306.  
  4307.  
  4308. ΓòÉΓòÉΓòÉ 6.4.1.10.3. Starting UNPACK ΓòÉΓòÉΓòÉ
  4309.  
  4310. UNPACK restores a file of compressed data to its original size and copies it to 
  4311. a specified drive and path. To start the UNPACK command, type: 
  4312.  
  4313.   UNPACK sourcefile [destinationdrive:][destinationpath]
  4314.                     [/SHOW] [/N:singlefile] [/V] [/F]
  4315.  
  4316. where: 
  4317.  
  4318.  sourcefile            Specifies the name of an existing file that contains 
  4319.                        compressed data. If this file contains one or more files 
  4320.                        of compressed data, UNPACK restores each file within the 
  4321.                        file. 
  4322.  
  4323.  destinationdrive:     Specifies the name of the drive to which you want UNPACK 
  4324.                        to copy one or more restored files. 
  4325.  
  4326.                        When you specify a destination drive, but not a path, 
  4327.                        UNPACK uses the path information stored in the header of 
  4328.                        the file that contains the compressed data. 
  4329.  
  4330.  destinationpath       Specifies the name of the directory (and its 
  4331.                        subdirectories) to which you want UNPACK to copy one or 
  4332.                        more restored files. 
  4333.  
  4334.                        When specified, the destination path overrides the path 
  4335.                        information stored in the header of the file that 
  4336.                        contains the compressed data. 
  4337.  
  4338.  /SHOW                 Displays the destination path and file-name information 
  4339.                        that are saved in the header of each file containing 
  4340.                        compressed data. 
  4341.  
  4342.  /N:singlefile         Extracts and uncompresses one file from a file that 
  4343.                        contains multiple files of compressed data. 
  4344.  
  4345.  /V                    Verifies that sectors written to the target disk are 
  4346.                        recorded properly. This parameter lets you know that 
  4347.                        critical data has been correctly recorded. 
  4348.  
  4349.                        This parameter causes UNPACK to run slower because a 
  4350.                        check is made for each entry recorded on the disk. 
  4351.  
  4352.  /F                    Specifies that files with extended attributes should not 
  4353.                        be unpacked or copied if the destination file system 
  4354.                        does not support extended attributes. 
  4355.  
  4356.  
  4357. ΓòÉΓòÉΓòÉ 6.4.1.11. PACK2 and UNPACK2 ΓòÉΓòÉΓòÉ
  4358.  
  4359. The algorithm used to compress files has been substantially enhanced. The use 
  4360. of this utility program is identical to the PACK and UNPACK utility, which is 
  4361. documented in the OS/2 Tools Reference. 
  4362.  
  4363.  
  4364. ΓòÉΓòÉΓòÉ 6.4.2. Multimedia Tools ΓòÉΓòÉΓòÉ
  4365.  
  4366. This section describes the Multimedia tools which help you develop multimedia 
  4367. programs. There is one multimedia tool available in this release: 
  4368.  
  4369.  MIDICONV - MIDI Conversion Utility
  4370.  
  4371. Note:  The Wave Doctor, previously available with the OS/2 Multimedia Toolkit 
  4372.        product, is not available with this version of the Warp Toolkit. 
  4373.  
  4374.  
  4375. ΓòÉΓòÉΓòÉ 6.4.2.1. MIDICONV ΓòÉΓòÉΓòÉ
  4376.  
  4377. MIDICONV is a conversion utility program that lets you convert a MIDI format 1 
  4378. file to a MIDI format 0 file through the use of an installable I/O procedure. 
  4379.  
  4380. Note:  A MIDI format 0 file has only one track of music; a MIDI format 1 file 
  4381.        has multiple tracks of music. 
  4382.  
  4383.  
  4384. ΓòÉΓòÉΓòÉ 6.4.3. OpenDoc Tools ΓòÉΓòÉΓòÉ
  4385.  
  4386. The following OpenDoc tools are provided: 
  4387.  
  4388.      OpenDoc Debugging 
  4389.      OSA Resource Editor 
  4390.  
  4391.  
  4392. ΓòÉΓòÉΓòÉ 6.4.3.1. OpenDoc Debugging ΓòÉΓòÉΓòÉ
  4393.  
  4394. To use the debug version of OpenDoc, prepend the \TOOLKIT\DEBUG path to your 
  4395. PATH and LIBPATH environment variables in the CONFIG.SYS file. Remove that path 
  4396. from those variables when you are ready to return to the non-debug OpenDoc 
  4397. environment. 
  4398.  
  4399. Note that symbol files for OpenDoc are also provided in with the kernel 
  4400. debugger (see System Debug Support). 
  4401.  
  4402. The debug version of OpenDoc provides the following facilities: 
  4403.  
  4404.      Ability to browse the format of the Bento file 
  4405.  
  4406.       Select Bento from the menu bar in the document shell to get a MLE dump of 
  4407.       the Bento file. 
  4408.  
  4409.      Ability to log various types of data 
  4410.  
  4411.       Select Logging from the menu bar in the document shell to choose where to 
  4412.       log data to or to turn on SOM tracing. 
  4413.  
  4414.      Catching exceptions 
  4415.  
  4416.       With the debug version of OpenDoc, when an OpenDoc exception is caught by 
  4417.       the shell, a message box is displayed giving the exception type and the 
  4418.       location where it was thrown. If the OS/2 environment variable 
  4419.       ODBREAKONTHROW is defined, OpenDoc will execute an INT 3 instruction when 
  4420.       the exception it raised.  This will cause control to transfer to the 
  4421.       debugger and you can examine the call stack to try to determine the cause 
  4422.       of the exception.  You can define the ODBREAKONTHROW environment variable 
  4423.       by typing the following command at an OS/2 command prompt: 
  4424.  
  4425.             SET ODBREAKONTHROW=1
  4426.  
  4427.       In the debug version of OpenDoc, the default destination for messages 
  4428.       output using the somPrintf function is the file OpenDoc.log. The log file 
  4429.       is in the default directory.  You can cause these messages to be directed 
  4430.       to the PMPRINTF message queue instead by starting DOCSHELL.EXE with the 
  4431.       -s option. You can then use PMPRINTF.EXE (available on The Developer 
  4432.       Connection for OS/2 CD) to view the messages in a PM window. 
  4433.  
  4434.      Ability to debug problems with reference counts 
  4435.  
  4436.       The debugging version of OpenDoc will output debug messages under the 
  4437.       following conditions: 
  4438.  
  4439.         -  A ref-counted object is deleted with a non-zero ref count. 
  4440.         -  A ref-counted object is released too many times. 
  4441.  
  4442.       Following is an example of ref-count related messages in OpenDoc.log: 
  4443.  
  4444.             XXX Deleted ODTransform 1794110 (with ref-count at 1)
  4445.             XXX Deleted PageLayout 12A0C10 (with ref-count at 169)
  4446.             XXX Deleted ODFrame 12EAD10 (with ref-count at 94)
  4447.             XXX Deleted SimplePart 1644C90 (with ref-count at 1)
  4448.             XXX Deleted ODFrame 1645310 (with ref-count at 4)
  4449.             XXX Deleted CMStorageUnit 164BE10 (with ref-count at 1)
  4450.             XXX Deleted CMDraft A08510 (with ref-count at 1)
  4451.  
  4452.       There are three environment variables that can be used to get more 
  4453.       information about ref-counted objects.  If the environment variable 
  4454.       ODTRACKREFCTCLASS is set to the name of a ref-counted object class (case 
  4455.       sensitive), then OpenDoc will log all acquires and releases of objects of 
  4456.       that class.  Following is an example of the output generated with 
  4457.       ODTRACKREFCTCLASS=ODFrame: shell, a message box is displayed giving the 
  4458.       exception type and the location 
  4459.  
  4460.             +++ IncrementRefCount of ODFrame 1242E90: Now 7
  4461.             --- Release ODFrame 1242E90: Now 6
  4462.             --- Release ODFrame 12FBE10: Now 6
  4463.             +++ IncrementRefCount of ODFrame 12FBE10: Now 7
  4464.             +++ IncrementRefCount of ODFrame 1242E90: Now 7
  4465.             --- Release ODFrame 1242E90: Now 6
  4466.             +++ IncrementRefCount of ODFrame 12D9F90: Now 4
  4467.             --- Release ODFrame 12D9F90: Now 3
  4468.             +++ IncrementRefCount of ODFrame 1242E90: Now 7
  4469.             --- Release ODFrame 1242E90: Now 6
  4470.             --- Release ODFrame 12FBE10: Now 6
  4471.  
  4472.       If the environment variable ODTRACKREFCTOBJ is set to the hexadecimal 
  4473.       address of a ref-counted object, then OpenDoc will log all acquires and 
  4474.       releases for that object only.  The output is similar to that for 
  4475.       tracking a class, except that all the information will be for the same 
  4476.       object. 
  4477.  
  4478.       If the environment variable ODDUMPSTACKFRAMES is set, OpenDoc will follow 
  4479.       each of the above logfile messages with a symbolic dump of the call 
  4480.       stack.  The numeric value of the environment variable indicates the 
  4481.       number of stack frames to dump.  The following environment set commands: 
  4482.  
  4483.             set ODTRACKREFCTCLASS=ODFrame
  4484.             set ODDUMPSTACKFRAMES=8
  4485.  
  4486.       results in the following example output in the OpenDoc.log file: 
  4487.  
  4488.             --- Release ODFrame 1242E90: Now 6
  4489.             OPENDOC   TempRef<ODPart>::TempRef(ODPart*) (StdDispO.obj)
  4490.             OPENDOC   OS2DispatchModule::DispatchMouseEvent(Environment*,ODEventData*,ODEventInfo*) (StdDispO.obj)
  4491.             OPENDOC   OS2DispatchModule::Dispatch(Environment*,ODEventData*) (StdDispO.obj)
  4492.             OPENDOC   ODStandardDispatchModuleDispatch (StdDisp.obj)
  4493.             OPENDOC   ODDispatcherRemoveDispatchModuleEntries (Disptch.obj)
  4494.             OPENDOC   ODDispatcherRedispatch (Disptch.obj)
  4495.             OPENDOC   ODDispatcherRemoveDispatchModuleEntries (Disptch.obj)
  4496.             OPENDOC   ODDispatcherDispatch (Disptch.obj)
  4497.             +++ IncrementRefCount of ODFrame 1242E90: Now 7
  4498.             OPENDOC   ODExclusiveFocusModuleAcquireFocusOwner (ExcFocus.obj)
  4499.             OPENDOC   ODArbitratorPurge (Arbitrat.obj)
  4500.             OPENDOC   ODArbitratorAcquireFocusOwner (Arbitrat.obj)
  4501.             CNTNRPRT  ODArbitrator::AcquireFocusOwner(Environment*,unsigned long) (cntnrprt.obj)
  4502.             CNTNRPRT  ContainerPartDeActivatingWindow (cntnrprt.obj)
  4503.             CNTNRPRT  ContainerPart::DeActivatingWindow(Environment*,ODFrame*) (cntnrprt.obj)
  4504.             CNTNRPRT  ContainerPartHandleEvent (cntnrprt.obj)
  4505.             OPENDOC   ODPartWrapperCreateRootMenuBar (PartWrap.obj)
  4506.             --- Release ODFrame 1242E90: Now 6
  4507.             OPENDOC   BaseTempRef::~BaseTempRef() (Tempobj.obj)
  4508.             OPENDOC   BaseTempRef::~BaseTempRef() (Tempobj.obj)
  4509.             CNTNRPRT  TempRef<ODFrame>::~TempRef() (cntnrprt.obj)
  4510.             CNTNRPRT  ContainerPartDeActivatingWindow (cntnrprt.obj)
  4511.             CNTNRPRT  ContainerPart::DeActivatingWindow(Environment*,ODFrame*) (cntnrprt.obj)
  4512.             CNTNRPRT  ContainerPartHandleEvent (cntnrprt.obj)
  4513.             OPENDOC   ODPartWrapperCreateRootMenuBar (PartWrap.obj)
  4514.             OPENDOC   ODPartWrapperHandleEvent (PartWrap.obj)
  4515.             +++ IncrementRefCount of ODFrame 1242E90: Now 7
  4516.             OPENDOC   ODFrameInitFrame (Frame.obj)
  4517.             OPENDOC   CMDraftPartDeleted (CMDraft.obj)
  4518.             OPENDOC   CMDraftCreateFrame (CMDraft.obj)
  4519.             CNTNRPRT  ODDraft::CreateFrame(Environment*,char*,ODFrame*,ODShape*,ODCanvas*,ODPart*,unsigned long,unsigned long,unsigned char,unsigned char) (cntnrprt.obj)
  4520.             CNTNRPRT  ContainerPartMakeEmbeddedFrame (cntnrprt.obj)
  4521.             CNTNRPRT  ContainerPart::MakeEmbeddedFrame(Environment*,ODFrame*,ODShape*,ODTransform*,ODPart*,unsigned char) (cntnrprt.obj)
  4522.             CNTNRPRT  ContainerPartDrop (cntnrprt.obj)
  4523.             OPENDOC   ODPartWrapperCreateRootMenuBar (PartWrap.obj)
  4524.  
  4525.       The symbolic information for the stack dump is obtained from the debug 
  4526.       information in the executable so only modules that were compiled and 
  4527.       linked with the debug flags will have symbolic information displayed. 
  4528.       Stack frame entries for which no symbolic information is available will 
  4529.       display the module name with the hexadecimal return address.  Source file 
  4530.       names and line number information are also available. where it was 
  4531.       thrown. If the OS/2 environment variable ODBREAKONTHROW is defined, 
  4532.  
  4533.       Note that the overhead of formatting and displaying the symbolic stack 
  4534.       dump is significant, so excessive stack dumping can cause severe 
  4535.       performance degradation. 
  4536.  
  4537.       OpenDoc looks at the above mentioned environment variables at startup, so 
  4538.       changing these variable while OpenDoc is running will have no effect. 
  4539.  
  4540.       In addition to using the stack dump feature with reference counted 
  4541.       objects, the DumpStack function is available in the debug version of 
  4542.       OpenDoc for parts to call any time they want.  To use this function, 
  4543.       include the header file dumpstck.h in your sourcefile. The prototype for 
  4544.       DumpStack is: 
  4545.  
  4546.             void DumpStack(long start, long depth);
  4547.  
  4548.       The start parameter indicates the number of stack frames to ignore before 
  4549.       beginning the dump, and the depth parameter indicates the number of 
  4550.       frames to dump.  DumpStack only knows how to retrieve symbolic 
  4551.       information from modules compiled with IBM C Set ++ (version 2.1 or 
  4552.       later) and IBM VisualAge C++ (version 3.0) compilers. It has not been 
  4553.       tested with any other compilers. 
  4554.  
  4555.       In order for OpenDoc to function properly, it is important that all 
  4556.       ref-counted objects be properly cleaned up.  We encourage part developers 
  4557.       to use the above mentioned tools to help identify and eliminate all 
  4558.       ref-counting errors that are reported in the log file. 
  4559.  
  4560.  
  4561. ΓòÉΓòÉΓòÉ 6.4.3.2. OSA Resource Editor ΓòÉΓòÉΓòÉ
  4562.  
  4563. The OSA Resource Editor is a tool designed for creating, editing, and browsing 
  4564. AETE Resources. The OSA Resource Editor (RED) will help you create your 
  4565. application's AETE Resource by using a Workplace-Shell-style user interface to 
  4566. direct you and maintain the syntactic correctness of your AETE Resource.  For 
  4567. instructions on starting this tool, see Starting the OSA Resource Editor. 
  4568.  
  4569. The AETE (Apple Event Terminology Extension) Resource is the way an application 
  4570. describes its vocabulary to the rest of the world. It provides information on 
  4571. the kind of objects that the application handles and the actions that can be 
  4572. performed on them.  OSA's Scripting Components use this resource in order to 
  4573. associate names with internal events in the system. The application's 
  4574. vocabulary, or terminology, are the nouns and verbs that the application 
  4575. supports. 
  4576.  
  4577. The AETE Resource allows scripting components to interpret scripts correctly 
  4578. and send the appropriate events (verbs) to the application during script 
  4579. execution. If you want your application to be scriptable, you will have to 
  4580. supply an AETE Resource with it. The verbs and nouns that are in the resource 
  4581. can then be used by script writers when scripting the application. 
  4582.  
  4583. OSA's Scripting Components use the AETE Resource to interpret the 
  4584. human-language terms used in scripts that control your application, and 
  4585. associate them with the corresponding IDs, keywords, and other codes used in 
  4586. events. 
  4587.  
  4588. The AETE Resource is a binary file with a strict structure. It consists of 
  4589. several suites, that hold the events (verbs) and classes (nouns). The suite is 
  4590. an organizational unit that allows categorization of the objects that an 
  4591. application supports. Each suite contains the following information: 
  4592.  
  4593.      ID defined for each suite 
  4594.      Events defined for each suite 
  4595.      Parameters defined for each event 
  4596.      Event object classes defined for each suite 
  4597.      Properties defined for each object class 
  4598.      Elements defined for each object class 
  4599.      Key forms defined for each element class 
  4600.      Comparison operators defined for each suite 
  4601.      Values for enumerators defined for each suite 
  4602.  
  4603.  Note:  Since the OS/2 AETE Resource is binary compatible with the Macintosh 
  4604.         AETE Resource, AETE Resources can also be built on the Macintosh using 
  4605.         a tool such as Rez or Resorcerer. A utility is needed to transfer the 
  4606.         Macintosh AETE Resource from the resource fork to the data fork before 
  4607.         it can be brought over to OS/2. 
  4608.  
  4609.  AEUT Resource 
  4610.  
  4611.  The Apple Event User Terminology (AEUT) Resource contains terminology 
  4612.  information for all the standard suites of events defined in the Apple Event 
  4613.  Registry: Standard Suites [4]. The Event Registry is an effort for 
  4614.  standardizing the vocabulary used by applications and is maintained by CI 
  4615.  Labs. 
  4616.  
  4617.  
  4618. ΓòÉΓòÉΓòÉ 6.4.3.2.1. Starting the OSA Resource Editor (RED) ΓòÉΓòÉΓòÉ
  4619.  
  4620. You can start the OSA Resource Editor in two ways: 
  4621.  
  4622.      From the command line, change to the TOOLKIT\BETA\BIN\OSARED subdirectory 
  4623.       and type: 
  4624.  
  4625.               RED
  4626.  
  4627.      From the Desktop, open the Toolkit folder and then: 
  4628.  
  4629.         1. Open the Try Me! folder. 
  4630.  
  4631.         2. Double-click on OSA Resource Editor. 
  4632.  
  4633.  When the OSA Resource Editor is started, a folder named RED OSA Resource 
  4634.  Editor is opened. This folder (the "editor folder") contains helpful tools and 
  4635.  all of the AETE Resources being edited. In the editor folder you will find a 
  4636.  Templates folder, a Library folder, and an OSA Aware Applications folder. When 
  4637.  you create new resources, or open existing resources, their icons will be 
  4638.  added to the editor folder. 
  4639.  
  4640.  See Creating an AETE Resource for detailed instructions on how to create a 
  4641.  resource using the OSA Resource Editor. 
  4642.  
  4643.  
  4644. ΓòÉΓòÉΓòÉ 6.4.3.2.2. Creating an AETE Resource ΓòÉΓòÉΓòÉ
  4645.  
  4646. The organization of the terms in your resource directly affects the ability of 
  4647. users to explore and control your application through scripting. This section 
  4648. provides guidance for using the OSA Resource Editor (RED) to create your 
  4649. application's resource. 
  4650.  
  4651. To create an AETE Resource, do the following: 
  4652.  
  4653.    1. Select Create resource from the RED menu on the RED OSA Resource Editor 
  4654.       folder menu bar. 
  4655.  
  4656.       This will open a properties notebook for a new resource. On the first 
  4657.       page of the notebook (the AETE page), you can fill in the general 
  4658.       information of the resource (its major and minor versions, the language 
  4659.       code, and the script code). On the second page (the File page), you can 
  4660.       fill in your application's name (which is also the file stem for saving 
  4661.       your AETE Resource), and a path in which the resource's file should be 
  4662.       saved. 
  4663.  
  4664.    2. Select Create at the bottom of the notebook and the resource will be 
  4665.       created (its icon will be added to the editor folder). 
  4666.  
  4667.    3. Specify the standard suites that your application supports by opening the 
  4668.       Library folder (located within the RED OSA Resource Editor folder). 
  4669.  
  4670.       In the Library folder you can find the set of all standard suites. Simply 
  4671.       drag (use Ctrl+mouse button keys) the ones your application supports onto 
  4672.       the newly created resource. Once the supported standard suites are in the 
  4673.       resource, they may be extended or overridden. If you do not wish to 
  4674.       support a suite as a whole, you may choose one of the following two 
  4675.       options: 
  4676.  
  4677.           If the part you do wish to support is rather small, you should open 
  4678.            the suite's properties notebook and modify the suite's ID to '****'. 
  4679.            You can now choose the objects you do wish to support from the 
  4680.            Library and drag them onto the suite. 
  4681.  
  4682.           If you wish to support most of the suite, you should delete those 
  4683.            objects that you do not want. This will automatically modify the 
  4684.            suite's ID to '****', after prompting you to confirm that this is 
  4685.            indeed your intention. 
  4686.  
  4687.    4. You can now add your own, uninherited, objects to the resource by doing 
  4688.       the following: 
  4689.  
  4690.         a. Open the Templates folder (located in the RED OSA Resource Editor 
  4691.            folder). 
  4692.  
  4693.            In the Templates folder you can find the Resource template and a set 
  4694.            of templates for the different types of objects that may be in a 
  4695.            resource including: Suite, Event, Class, Comparison Operator, 
  4696.            Enumeration, Enumerator, Parameter, Property, Element, and Key Form. 
  4697.  
  4698.            Note:  A resource can not go inside a resource. Its icon is included 
  4699.                   in the Templates folder for completeness. 
  4700.  
  4701.         b. Drag the templates of the desired objects onto your resource. The 
  4702.            Resource Editor will maintain the strict structure of the AETE 
  4703.            Resource by not enabling the drop of a template anywhere in the 
  4704.            containment hierarchy, but in the right place. Thus, you will only 
  4705.            be able to drop an event on a suite, a key form, an element, and so 
  4706.            on. 
  4707.  
  4708.  You are ready to use the tool. There are few features of the OSA Resource 
  4709.  Editor that are worth mentioning. Snooping into existing applications: 
  4710.  OSA-aware applications (that are already installed and are in the OSA 
  4711.  database), can be found in the OSA Aware Applications folder. You can bring 
  4712.  those into the editor in order to study their structure. Binary files of AETE 
  4713.  resources can be imported from the Apple Mac platform or created on OS/2. They 
  4714.  can be opened by selecting Open resource from the RED menu, which will pop a 
  4715.  file dialog. 
  4716.  
  4717.  If you opened a resource and want to browse it, remember the following: 
  4718.  
  4719.      Tree view of the resource gives an overview of the whole tree structure 
  4720.       of the resource. 
  4721.      Details view of the other objects lets you see the properties of all the 
  4722.       contained objects at once. 
  4723.  
  4724.  When working on a new resource it is helpful to look at the names that are 
  4725.  already in use. The dictionary panel provides a list of all the names in the 
  4726.  AETE+AEUT name space. Each object window has an Options choice on its menu 
  4727.  bar. Selecting Open dictionary from the Options menu will open the dictionary 
  4728.  panel. The other selection in the Options menu is Open browser. The browser 
  4729.  displays a listing of the resource. 
  4730.  
  4731.  When you are finished editing a resource and ready to save it, there are two 
  4732.  output formats:  binary and text. Most of the time you save to a binary file. 
  4733.  This binary file can eventually be installed into the OSA-aware applications 
  4734.  database. It maintains binary compatibility with the Apple Mac platform. You 
  4735.  save to a text file for getting a hard copy of the resource. The name of the 
  4736.  file may be entered through a file dialog or in the File page in the 
  4737.  resource's properties notebook. 
  4738.  
  4739.  
  4740. ΓòÉΓòÉΓòÉ 6.4.4. Presentation Manager (PM) Tools ΓòÉΓòÉΓòÉ
  4741.  
  4742. This section describes the Presentation Manager tools which help you develop 
  4743. Presentation Manager programs: 
  4744.  
  4745.      DLGEDIT - Dialog Editor 
  4746.      FONTEDIT - Font Editor 
  4747.      ICONEDIT - Icon Editor 
  4748.      IPFC - Information Presentation Facility Compiler 
  4749.      RC - Resource Script 
  4750.  
  4751.  
  4752. ΓòÉΓòÉΓòÉ 6.4.4.1. DLGEDIT ΓòÉΓòÉΓòÉ
  4753.  
  4754. DLGEDIT (Dialog Editor) is used to create and modify dialog boxes and specify 
  4755. the controls and text within dialog boxes. As you create a dialog box and add 
  4756. controls, the dialog editor draws it to the screen. You can resize and 
  4757. reposition the dialog box, then test its controls before you incorporate it in 
  4758. your application. 
  4759.  
  4760. Although the dialog editor draws box outlines and controls to the screen so 
  4761. that you can view it from a user's perspective, the dialog editor does not save 
  4762. it as a graphic. Instead, the dialog editor stores a description of the dialog 
  4763. box and its controls in a text file that has a file-name extension of .DLG. It 
  4764. also creates a compiled form of the .DLG file into a resource file that has an 
  4765. extension of .RES. The dialog-box and resource files can each contain 
  4766. descriptions of more than one dialog box. The resource file can contain other 
  4767. application resources, such as icons, bit maps, and string tables. It is 
  4768. attached to the application's executable (.EXE) file after the compile and link 
  4769. processes. 
  4770.  
  4771. This version of the Dialog Editor is enhanced for use with Pen for OS/2. With 
  4772. this enhanced version, handwriting and sketch controls are available. 
  4773.  
  4774.  
  4775. ΓòÉΓòÉΓòÉ 6.4.4.1.1. Starting DLGEDIT ΓòÉΓòÉΓòÉ
  4776.  
  4777. To start the dialog editor, select the PM Development Tools folder, then select 
  4778. the Dialog Editor object. 
  4779.  
  4780. The File Edit menu bar choices provide two ways to create a dialog box: 
  4781.  
  4782.      From the Edit menu, select the New Dialog item. The editor opens a new 
  4783.       dialog in the current file. 
  4784.  
  4785.       Notice that the dialog editor does not tell you that it has opened the 
  4786.       resource files. You can open a new include file or an existing one. 
  4787.  
  4788.      From the File menu, select the New item. This opens new resource files 
  4789.       with the extensions .RES and .DLG, as shown in the following figure: 
  4790.  
  4791.  When you edit a dialog box, the names of the resource and include files are 
  4792.  shown in the title bar of the dialog editor. If you are editing a new file 
  4793.  that has not yet been named or saved, "Untitled" appears in the title bar in 
  4794.  place of a name. 
  4795.  
  4796.  
  4797. ΓòÉΓòÉΓòÉ 6.4.4.1.2. Replacing DLGEDIT ΓòÉΓòÉΓòÉ
  4798.  
  4799. IBM supports the version of DLGEDIT (Dialog Editor) in this release of the Warp 
  4800. Toolkit, but will not be enhancing or otherwise changing the Dialog Editor in 
  4801. future releases. URE (Universal Resource Editor) will become the editor of 
  4802. choice for creating and modifying dialogs and other resources. 
  4803.  
  4804.  
  4805. ΓòÉΓòÉΓòÉ 6.4.4.2. FONTEDIT ΓòÉΓòÉΓòÉ
  4806.  
  4807. FONTEDIT (Font Editor) is used to design and save fonts for use in 
  4808. applications. A font is a set of alphanumeric characters, punctuation marks, 
  4809. and other symbols that share a common typeface design and line weight. 
  4810.  
  4811. When the font editor creates a font file, it supplies an .FNT file-name 
  4812. extension. The font file contains a header, which describes the font in general 
  4813. terms, and a section that contains bit maps of the characters themselves. 
  4814.  
  4815.  
  4816. ΓòÉΓòÉΓòÉ 6.4.4.2.1. Starting FNTEDIT ΓòÉΓòÉΓòÉ
  4817.  
  4818. To start the font editor select the PM Development Tools folder, then select 
  4819. the Font Editor object. The following window appears: 
  4820.  
  4821. The quadrille to the left of the screen has within it an enlarged version of 
  4822. the character selected from the long, scrollable, horizontal box at the bottom 
  4823. of the screen. To edit the enlarged version of the character in the quadrille, 
  4824. use the mouse to switch the enlarged representation to black or white. You can 
  4825. change a series of pels by holding mouse button 1 down and moving the pointer 
  4826. through the pels. 
  4827.  
  4828. Several choices are available from the menu bar that enable you to tailor 
  4829. individual fonts. With these choices you can: 
  4830.  
  4831.      Create a font file or open an existing file 
  4832.      Edit a new or existing font 
  4833.      Define the characteristics of the font 
  4834.      Specify character spacing (fixed or proportional) 
  4835.      Name the typeface 
  4836.      Identify a type style (italic, underscored) 
  4837.      Change the width and weight of individual characters 
  4838.      Insert or delete a column in the character. 
  4839.  
  4840.  
  4841. ΓòÉΓòÉΓòÉ 6.4.4.2.2. Font Resource Files ΓòÉΓòÉΓòÉ
  4842.  
  4843. All resources, except fonts, can be bound to the application's executable file 
  4844. or compiled into a dynamic link library (DLL). Fonts must be put in a separate 
  4845. .DLL using the RC. You then link the file at run time and load the resources 
  4846. into your application by using DosLoadModule or GpiLoadFonts. A .DLL containing 
  4847. font resources must have a file-name extension of .FON. The .FON file can be 
  4848. installed on the system. 
  4849.  
  4850.  
  4851. ΓòÉΓòÉΓòÉ 6.4.4.3. ICONEDIT ΓòÉΓòÉΓòÉ
  4852.  
  4853. ICONEDIT (Icon Editor) is used to create icons, pointers, and bit maps. In the 
  4854. PM, an icon is a graphic symbol that identifies a data object, a system action, 
  4855. or a minimized application. A pointer is a small shape on the screen that 
  4856. reflects the movement of the mouse. Pointers have a hot spot that identifies 
  4857. their exact location on the screen. 
  4858.  
  4859. Icons, pointers, and bit maps produced by the Icon Editor are graphic symbols 
  4860. comprised of pels in any of the following display states: 
  4861.  
  4862.      Black 
  4863.      White 
  4864.      Color 
  4865.      Screen (background color) 
  4866.      Inverse screen (inverse of background color). 
  4867.  
  4868.  Mini-icons (also called small icons) are icons that are one-half the size of 
  4869.  normal icons (also called large icons). Normal icons are 32x32 or 40x40 pels 
  4870.  (depending on the monitor resolution). Mini-icons are 16x16 or 20x20 pels. 
  4871.  They are used in areas where a normal icon is too large, for example, in 
  4872.  toolbars. 
  4873.  
  4874.  If you previously had OS/2 installed on your system, and if you did not update 
  4875.  your icon profile when you installed this Warp Toolkit, then you need to run 
  4876.  the Icon Editor once with its profile update options in order to use the 
  4877.  mini-icon forms. To do this, enter: 
  4878.  
  4879.   X:\TOOLKIT\BIN\ICONEDIT /t /i
  4880.  
  4881.  where: 
  4882.  
  4883.  X         Is the drive location for the installed Warp Toolkit. 
  4884.  
  4885.  After the initial run of Icon Editor, the new mini-icons will be part of your 
  4886.  profile and you will not need to use options /t /i again. 
  4887.  
  4888.  
  4889. ΓòÉΓòÉΓòÉ 6.4.4.3.1. Starting ICONEDIT ΓòÉΓòÉΓòÉ
  4890.  
  4891. To start the Icon Editor, select the PM Development Tools folder, then select 
  4892. the Icon Editor object. The following window appears: 
  4893.  
  4894. Notice the information area at the top of the Icon Editor window; the items 
  4895. displayed from left to right include: 
  4896.  
  4897.      A two-button mouse, showing the color currently selected for each button 
  4898.      An actual-size image of the current figure that you are editing 
  4899.      A status area that provides: 
  4900.  
  4901.  
  4902.         -  Size (in pels using x and y coordinates) 
  4903.         -  Pen location 
  4904.         -  Pen size (from 1-by-1 to 9-by-9) 
  4905.         -  Hot spot (for icons and pointers, but not bit maps) 
  4906.         -  Figure type (icon, pointer, or bit map) 
  4907.         -  Form name. 
  4908.  
  4909.  The palette window, in the lower-right corner, displays the colors that are 
  4910.  available for use during editing. The colors currently selected are marked 
  4911.  with frames. 
  4912.  
  4913.  The editing window is the largest part of your working area. Use the mouse to 
  4914.  paint the enlarged representation with the selected color. 
  4915.  
  4916.  The menu-bar choices provide access to the many functions of the Icon Editor. 
  4917.  These choices enable you to: 
  4918.  
  4919.      Create a new icon, pointer, or bit map 
  4920.      Edit an existing icon, pointer, or bit map 
  4921.      Test the new icon or pointer 
  4922.      Superimpose a grid over the editing window (for drawing a symmetrical 
  4923.       figure) 
  4924.      Restrict a drawing to straight vertical or horizontal lines 
  4925.      Make transparent pels (for icons or pointers) visible 
  4926.      Change the shape and size of the pen 
  4927.      Select system preferences (to set prompts or suppress warnings) 
  4928.      Define hot spots (where the mouse pointer is directed). 
  4929.  
  4930.  
  4931. ΓòÉΓòÉΓòÉ 6.4.4.4. IPFC ΓòÉΓòÉΓòÉ
  4932.  
  4933. IPF (Information Presentation Facility) is a set of tools used to create an 
  4934. online help facility for an application. IPF also is used to create online 
  4935. information that can be viewed independent of an application. It is a tool for 
  4936. both the information author and the application programmer. 
  4937.  
  4938. As an author of online information, you can define the windows in which 
  4939. information is displayed. For example, a window can be split so that scrollable 
  4940. text can be displayed beside a stationary illustration that the text describes. 
  4941. The following figure shows an IPF application-control-window. 
  4942.  
  4943. Note:  A new, 32-bit version of the Information Presentation Facility Compiler 
  4944.        (IPFC) is included in the Warp Toolkit. The new compiler provides the 
  4945.        following enhancements: 
  4946.  
  4947.         -  Ability to specify output files 
  4948.         -  Expanded use of environment variables 
  4949.         -  Improved error messages 
  4950.         -  More sophisticated use of support files 
  4951.         -  New command-line interface 
  4952.         -  New tag (:hdref.) 
  4953.         -  Two new macros (.nameit and .ce) 
  4954.         -  Upgraded overall performance and increased limits 
  4955.  
  4956.  
  4957. ΓòÉΓòÉΓòÉ 6.4.4.4.1. Developing Online Information ΓòÉΓòÉΓòÉ
  4958.  
  4959. IPF makes it possible for you to design your information in two types of 
  4960. formats: 
  4961.  
  4962.      An online document format for reference books 
  4963.      A help-window format for context-sensitive help for your application 
  4964.       programs. 
  4965.  
  4966.  To produce either format, you must create a text file using a text editor and 
  4967.  two IPF elements: 
  4968.  
  4969.      The IPF tagging language - consists of instructions for formatting and 
  4970.       displaying your document on the screen. 
  4971.      The IPFC - interprets the tags and converts the source file into an IPF 
  4972.       format. 
  4973.  
  4974.  
  4975. ΓòÉΓòÉΓòÉ 6.4.4.4.2. Starting IPFC ΓòÉΓòÉΓòÉ
  4976.  
  4977. You can start the IPFC and specify all input from the command line. An example 
  4978. of the syntax follows: 
  4979.  
  4980.   IPFC [-switch] [-option] infile [outfile]
  4981.  
  4982. where: 
  4983.  
  4984.  -switch   Performs the functions in the following list. They can be used 
  4985.            either individually or combined. 
  4986.  
  4987.                           i         Compiles the source file as an online 
  4988.                                     document. 
  4989.                           s         Suppresses the performance of the search 
  4990.                                     function. 
  4991.                           x         Generates and displays a cross-reference 
  4992.                                     list. 
  4993.  
  4994.  -option   Performs the functions in the following list. They can be used 
  4995.            either individually or combined. 
  4996.  
  4997.                           C         Character code page. 
  4998.                           D         DBCS range or country code. 
  4999.                           L         Language ID. 
  5000.                           W         Warning level. 
  5001.  
  5002.  infile    Specifies the name of your IPF source file. 
  5003.  
  5004.            If you do not give a file-name extension, the IPFC uses .IPF by 
  5005.            default. If your file has a file-name extension other than IPF, 
  5006.            include that file-name extension in the command-line syntax. 
  5007.  
  5008.  outfile   Specifies the name of the output file. If this parameter is not 
  5009.            used, the output file will have the same file name as the input file 
  5010.            and an extension of either .INF (if used in conjunction with the i 
  5011.            switch) or .HLP. If you need to store the outfile in a different 
  5012.            location, a path can be specified. 
  5013.  
  5014.  The interface from earlier levels of the compiler is still supported. An 
  5015.  example of the syntax follows: 
  5016.  
  5017.     IPFC filename [/INF] [/S] [/X] [/Wn] [> messageoutputfilename]
  5018.  
  5019.  where: 
  5020.  
  5021.  filename                 Specifies the name of your IPF source file. 
  5022.  
  5023.                           If you do not give a file-name extension, the IPFC 
  5024.                           uses .IPF by default. If your file has a file-name 
  5025.                           extension other than IPF, include that file-name 
  5026.                           extension in the command line. 
  5027.  
  5028.  /INF                     Compiles the source file as an online document. 
  5029.  
  5030.                           If this parameter is not included, the default is to 
  5031.                           compile the source file as a help library (with a 
  5032.                           file-name extension of .HLP). 
  5033.  
  5034.  /S                       Suppresses the performance of the Search function. 
  5035.                           This parameter increases compression of compiled data 
  5036.                           by about 10% to further reduce the storage it 
  5037.                           requires. 
  5038.  
  5039.  /X                       Generates and displays a cross-reference list. 
  5040.  
  5041.  /Wn                      Generates and displays a list of error messages.  The 
  5042.                           value of n indicates the level of error messages you 
  5043.                           want to receive. Values you can specify for n are 1, 
  5044.                           2, or 3. 
  5045.  
  5046.                               Warning Level 1  (the most severe) 
  5047.                               Warning Level 2  (moderately severe) 
  5048.                               Warning Level 3  (the least severe and is the 
  5049.                                default). 
  5050.  
  5051.  messageoutputfilename    Specifies the name of the file where error and cross 
  5052.                           reference messages are sent. If you do not specify 
  5053.                           this parameter, messages generated by /X and /Wn are 
  5054.                           sent to the display screen. 
  5055.  
  5056.  
  5057. ΓòÉΓòÉΓòÉ 6.4.4.4.2.1. Compiling Help Files ΓòÉΓòÉΓòÉ
  5058.  
  5059. To compile a source file that is intended as a help-text window, use the IPFC 
  5060. command without the /INF option. For example: 
  5061.  
  5062.   IPFC myhelp.hlp
  5063.  
  5064.  
  5065. ΓòÉΓòÉΓòÉ 6.4.4.4.2.2. Compiling with International Language Considerations ΓòÉΓòÉΓòÉ
  5066.  
  5067. The following parameters provide international language support: 
  5068.  
  5069.  /COUNTRY  = nnn  (where nnn is the 3-digit country code)
  5070.  /CODEPAGE = nnnn  (where nnnn is the 3 or 4-digit code page)
  5071.  /LANGUAGE = xxx  (where xxx is a 3-letter identifier that
  5072.              indicates an international language file is to be used)
  5073.  
  5074. An example of the command-line syntax follows: 
  5075.  
  5076.   IPFC myfile.txt /INF /COUNTRY=033 /CODEPAGE=437 /LANGUAGE=FRA
  5077.  
  5078. You can now add additional languages to IPFC by providing an IPFxxx.NLS file 
  5079. where xxx matches the name of the language supplied with the /LANGUAGE or -L 
  5080. switch. 
  5081.  
  5082. You can also add additional code pages by providing an APSYxxxx.APS file where 
  5083. xxxx matches the number of the code page. Four-digit code pages are supported. 
  5084. Three-digit code pages have a leading 0 in their APSYxxxx.APS file name, but 
  5085. the leading 0 does not have to be passed with the /CODEPAGE or -C switch.  The 
  5086. underlying operating system must support the supplied code page. 
  5087.  
  5088. Note:  When adding new language or code page files, be sure they are located in 
  5089.        the same subdirectory where your IPFC program files are located. 
  5090.  
  5091.  
  5092. ΓòÉΓòÉΓòÉ 6.4.4.4.2.3. IPFC Environment Variables ΓòÉΓòÉΓòÉ
  5093.  
  5094. There are four environment variables that can be used to specify the location 
  5095. of source files: 
  5096.  
  5097.  IPFC               Specifies the location of the .IPF support files (such as 
  5098.                     APSYMBOL.APS and IPF*.NLS). 
  5099.  
  5100.  IPFCIMBED          Searches for files imbedded with the .im macro. 
  5101.  
  5102.  IPFCARTWORK        Specifies the location of artwork files and artlink files. 
  5103.  
  5104.  TMP                Indicates where the compiler should store the temporary 
  5105.                     files it creates during the compilation. 
  5106.  
  5107.  
  5108. ΓòÉΓòÉΓòÉ 6.4.4.4.2.4. Viewing an Online Document ΓòÉΓòÉΓòÉ
  5109.  
  5110. If you want to see your formatted online document, you can use the VIEW command 
  5111. to display it. 
  5112.  
  5113. An online document has an extension of .INF. It can be viewed by entering its 
  5114. name as a parameter to the VIEW command; for example: 
  5115.  
  5116.   VIEW myfile
  5117.  
  5118. You do not need to include the .INF file extension. 
  5119.  
  5120. Note:  You cannot use VIEW to display help-text windows for application 
  5121.        programs. However, for test viewing purposes, you can compile the help 
  5122.        text as .INF files and use VIEW to look at the information. 
  5123.  
  5124.  
  5125. ΓòÉΓòÉΓòÉ 6.4.4.5. RC ΓòÉΓòÉΓòÉ
  5126.  
  5127. RC (Resource Script) is a tool that lets you add application resources, such as 
  5128. message strings, pointers, menus, and dialog boxes, to your application's 
  5129. executable file. The primary purpose of RC is to prepare data for applications 
  5130. that use functions such as WinLoadString, WinLoadPointer, WinLoadMenu, and 
  5131. WinLoadDlg. These functions load resources from the application's executable 
  5132. file or another specified executable file. The application then can use the 
  5133. loaded resources as needed. 
  5134.  
  5135. RC and the resource functions let you define and modify application resources 
  5136. without recompiling the application itself. RC can modify the resources in an 
  5137. executable file at any time without affecting the rest of the file. You can 
  5138. create custom applications from a single executable file by using RC to add the 
  5139. custom resources you need to each application.  RC is especially important for 
  5140. international language support because it lets you define all 
  5141. language-dependent data, such as message strings, as resources. Preparing the 
  5142. application for a new language is simply a matter of adding new resources to 
  5143. the existing executable file. 
  5144.  
  5145. The effective limit to the length of a string value of a macro to the RC 
  5146. preprocessor is 794 bytes.  To count to the limit, count one for each byte 
  5147. interior to the string, one byte for the beginning and ending double quotation 
  5148. marks of each segment of the string as defined, plus one byte for the 
  5149. whitespace separating the ending and beginning double quotation marks of 
  5150. concatenated string segments. 
  5151.  
  5152. The RC program recognizes the accelerator flags (constants named like AF_*) 
  5153. when expressed in an ACCELTABLE statement. The flags may be expressed singly or 
  5154. in combination with the bitwise OR operator. 
  5155.  
  5156. The ID numbers of messages in MESSAGETABLE resources range from 0 to 65535 of 
  5157. any positive integer. This range is the same range as string IDs inside 
  5158. STRINGTABLE resources. 
  5159.  
  5160. The RC program can read from the INCLUDE environment variable any HPFS 
  5161. filenames containing embedded blanks, without the need to enclose such names 
  5162. inside quotation marks. RC uses the semicolon as a directory separator in the 
  5163. INCLUDE environment variable. 
  5164.  
  5165. The RC program offers two new switches with the Warp Toolkit: 
  5166.  
  5167.  /nologo   Suppresses display of the copyright banner each time the program 
  5168.            starts. 
  5169.  /?        Displays the command-line syntax and options. 
  5170.  
  5171.  A new option is available with the Warp Toolkit. 
  5172.  
  5173.      -x[{1|2}]
  5174.  
  5175.  This option causes resources to be compressed.  These resources will be 
  5176.  automatically decompressed when the resource is accessed. 
  5177.  
  5178.  
  5179. ΓòÉΓòÉΓòÉ 6.4.4.5.1. Creating an RC File ΓòÉΓòÉΓòÉ
  5180.  
  5181. All resources are defined in a resource script file. You use a text editor to 
  5182. create a resource script file that has an .RC extension. Resources are defined 
  5183. either explicitly in statements in the resource script file, or in other files 
  5184. (such as output files from the resource editors). The .RC file is the input 
  5185. file to the RC; the output has an .RES extension. The .RC file can contain 
  5186. statements that define resources and that include resources from other files. 
  5187. Text-based resources such as menus, accelerator keys, and text strings are 
  5188. defined in the .RC file. Non-text-based resources are specified in the .RC file 
  5189. as file names of the external files where these resources reside. Such 
  5190. resources include icons, pointers, and bit maps. The syntax for including 
  5191. external files in a resource script varies according to the nature of the 
  5192. resources defined or contained in the files. Fonts have a resource file to 
  5193. themselves. 
  5194.  
  5195. Make sure that none of the include files in your resource script file contain 
  5196. an end-of-file character. When the RC sees an end-of-file character, it assumes 
  5197. it to be the end of all input. 
  5198.  
  5199. For an example of a resource script file, see the sample program TEMPLATE. 
  5200.  
  5201.  
  5202. ΓòÉΓòÉΓòÉ 6.4.4.5.2. Starting RC ΓòÉΓòÉΓòÉ
  5203.  
  5204. You can start RC in three ways: 
  5205.  
  5206.      Compile a resource script file and bind it to an executable file: 
  5207.  
  5208.       To compile the resource script file EXAMPLE.RC and bind the resulting 
  5209.       compiled resource (.RES) file to the executable file, EXAMPLE.EXE, use 
  5210.       the following command: 
  5211.  
  5212.               RC EXAMPLE
  5213.  
  5214.       You do not need to specify the .RC extension for EXAMPLE. The RC program 
  5215.       creates the resource file EXAMPLE.RES and then adds the compiled resource 
  5216.       to the executable file EXAMPLE.EXE. 
  5217.  
  5218.      Compile a resource script file but do not bind it to the executable file: 
  5219.  
  5220.       To compile the resource script file, EXAMPLE.RC, into a resource file 
  5221.       without binding the resources to an executable file, use the following 
  5222.       command: 
  5223.  
  5224.               RC -R EXAMPLE
  5225.  
  5226.       The compiler creates the resource file EXAMPLE.RES. 
  5227.  
  5228.      Compile a resource script file and put it in a DLL: 
  5229.  
  5230.       Instead of binding a resource file to your application, you can put it in 
  5231.       a dynamic link library. To add the compiled resources to a dynamic link 
  5232.       library, use the following command: 
  5233.  
  5234.               RC EXAMPLE.RES DYNALINK.DLL
  5235.  
  5236.       You can then link the file at run time and load the resources into your 
  5237.       application by using DosLoadModule or GpiLoadFonts. However, you cannot 
  5238.       switch from binding resources to putting resources into a dynamic link 
  5239.       library without changing your application source code. 
  5240.  
  5241.  
  5242. ΓòÉΓòÉΓòÉ 6.4.5. SOM Tools ΓòÉΓòÉΓòÉ
  5243.  
  5244. SOM tools help you develop SOM programs. This section describe the SOM tools: 
  5245.  
  5246.      CTOI 
  5247.      IRDUMP - Information Repository Dump 
  5248.      PDL - Public Definition Language 
  5249.      PREGIMPL  - PM version of REGIMPL 
  5250.      REGIMPL - Implementation Registration 
  5251.      SC - SOM Compiler 
  5252.      SOMCORBA - SOM CORBA 
  5253.      SOMDCHK - SOM Check 
  5254.      SOMDD - SOM DSOM Daemon 
  5255.      SOMDSRV - SOM Server 
  5256.      SOMENV - SOM Environment 
  5257.      SOMSTARS 
  5258.      SOMXH - SOM .XH Header Files 
  5259.      WPIDL2XH - Workplace Shell .IDL To .XH Files 
  5260.  
  5261.  
  5262. ΓòÉΓòÉΓòÉ 6.4.5.1. CTOI ΓòÉΓòÉΓòÉ
  5263.  
  5264. CTOI automates the conversion process from the SOM 1.0 format (.CSC files) to 
  5265. SOM 2.0 format (.IDL files). An example of the syntax follows: 
  5266.  
  5267.   CTOI f1
  5268.  
  5269. where: 
  5270.  
  5271.  f1   Is the name of the .CSC file to be converted. 
  5272.  
  5273.  You may require some modifications to your environment and your existing code 
  5274.  in order to use this tool successfully. For more information, see the article 
  5275.  titled Using the SOM CTOI Tool in the online version of The Developer 
  5276.  Connection News, Volume 5. This newsletter can be found by opening the 
  5277.  following folders, starting with The Developer Connection folder: 
  5278.  
  5279.     The Developer Connection Browser
  5280.       The Developer Connection for OS/2 References
  5281.         The Developer Connection News
  5282.  
  5283.  
  5284. ΓòÉΓòÉΓòÉ 6.4.5.2. IRDUMP ΓòÉΓòÉΓòÉ
  5285.  
  5286. IRDUMP (Information Repository Dump) verifies that a class exists in the 
  5287. Information Repository. An example of the syntax follows: 
  5288.  
  5289.   IRDUMP [-o] [-w] [-?] [object]
  5290.  
  5291. where: 
  5292.  
  5293.  -o       Includes file offset information. 
  5294.  -w       Follows dump with "within" operation. 
  5295.  -?       Shows this usage information. 
  5296.  object   Is a simple or fully-qualified name of an object in the Interface 
  5297.           Repository. 
  5298.  
  5299.  The default action is to dump all objects. 
  5300.  
  5301.  
  5302. ΓòÉΓòÉΓòÉ 6.4.5.3. PDL ΓòÉΓòÉΓòÉ
  5303.  
  5304. PDL (Public Definition Language) is a separate program that performs the same 
  5305. function as the Public Definition Language (PDL) emitter used with the SOM 
  5306. Compiler.  That emitter generates a copy of an .IDL file which has the portions 
  5307. designated as private removed. The file generated is the same as the .IDL file 
  5308. from which it is produced, except that it removes all items within the .IDL 
  5309. file that are marked as "private". An item is marked as private by surrounding 
  5310. it with #ifdef __PRIVATE__ and #endif directives.  Thus, the PDL emitter can be 
  5311. used to generate a "public" version of an .IDL file. (Generally, client 
  5312. programs will need only the "public" methods and attributes.) 
  5313.  
  5314. The PDL program can be invoked independently of the SOM Compiler.  In addition, 
  5315. the PDL program can remove any kind of items in the .IDL file that are preceded 
  5316. by a user-specified #ifdef directive and followed by an #endif directive. 
  5317.  
  5318. The PDL program is invoked as follows: 
  5319.  
  5320.   PDL [-c] [-d] [-f] [-h] [-s] [-/] files
  5321.  
  5322. where: 
  5323.  
  5324.  -c cmd         Specifies that, for each .IDL file, the PDL program is to run 
  5325.                 the specified system command. This command may contain a single 
  5326.                 occurrence of the string %s, which will be replaced with the 
  5327.                 source file name before the command is executed. For example 
  5328.                 the option -c sc -sh %s has the same effect as issuing the SC 
  5329.                 command with the -sh option. 
  5330.  
  5331.  -d dir         Specifies a directory in which the output files are to be 
  5332.                 placed. (The output files are given the same name as the input 
  5333.                 files). If no directory is specified, the output files are 
  5334.                 named <fileStem>.PDL (where fileStem is the file stem of the 
  5335.                 input file) and are placed in the current working directory. 
  5336.  
  5337.  -h             Requests this description of the PDL command syntax and 
  5338.                 options. 
  5339.  
  5340.  -f             Specifies that output files are to replace existing files with 
  5341.                 the same name, even if the existing files are read-only. By 
  5342.                 default, files are replaced only if they have write access. 
  5343.  
  5344.  -s smemit      Specifies the SMEMIT variable with which the PDL program is to 
  5345.                 invoke the SOM Compiler. 
  5346.  
  5347.  -/ <string>    Specifies the #ifdef pattern for which the PDL program will 
  5348.                 strip out .IDL statements.  The default value is #ifdef 
  5349.                 __PRIVATE__. 
  5350.  
  5351.  files          Specifies one or more .IDL files whose specified #ifdef 
  5352.                 sections are to be removed. Filenames must be completely 
  5353.                 specified (with the .IDL extension). If no #ifdef directive is 
  5354.                 specified (by including a -/<string> option), then the #ifdef 
  5355.                 __PRIVATE__ sections will be removed by default. 
  5356.  
  5357.  Selected options can be specified individually, as a string of option 
  5358.  characters, or as a combination of both. Any option that takes an argument 
  5359.  either must be specified individually or must appear as the final option in a 
  5360.  string of option characters. 
  5361.  
  5362.  
  5363. ΓòÉΓòÉΓòÉ 6.4.5.4. PREGIMPL ΓòÉΓòÉΓòÉ
  5364.  
  5365. PREGIMPL is a Presentation Manager version of the REGIMPL tool. 
  5366.  
  5367.  
  5368. ΓòÉΓòÉΓòÉ 6.4.5.5. REGIMPL ΓòÉΓòÉΓòÉ
  5369.  
  5370. Before an implementation (a server program and class libraries) can be used by 
  5371. client applications, it must be registered with DSOM by running the 
  5372. Implementation Registration utility, REGIMPL. This facility is available 
  5373. primarily for use in command (.CMD) files. 
  5374.  
  5375. During execution of REGIMPL, DSOM updates its database to include the new 
  5376. server implementation and the associated classes. This enables DSOM to find 
  5377. and, if necessary, to activate the server so that clients can invoke methods on 
  5378. it. 
  5379.  
  5380. Below are some examples on how you can use REGIMPL. 
  5381.  
  5382.      To enter interactive mode: 
  5383.  
  5384.               REGIMPL
  5385.  
  5386.      To add implementation: 
  5387.  
  5388.               REGIMPL -A -i <str> [-p <str>] [-v <str>] [-f <str>] [-b <str>]
  5389.                                   [-h <str>] [-m {on|off}] [-z <str>]
  5390.  
  5391.      To update implementation: 
  5392.  
  5393.               REGIMPL -U -i <str> [-p <str>] [-v <str>] [-f <str>] [-b <str>]
  5394.                                   [-h <str>] [-m {on|off}]
  5395.  
  5396.      To delete implementation: 
  5397.  
  5398.               REGIMPL -D -i <str> [-i ...]
  5399.  
  5400.      To list implementation(s): 
  5401.  
  5402.               REGIMPL -L [-i <str> [-i ...]]
  5403.  
  5404.      To list aliases: 
  5405.  
  5406.               REGIMPL -S
  5407.  
  5408.      To add class(es): 
  5409.  
  5410.               REGIMPL -a -c <str> [-c ...] -i <str> [-i ...]
  5411.  
  5412.      To delete class(es): 
  5413.  
  5414.               REGIMPL -d -c <str> [-c ...] [-i <str> [-i ...]]
  5415.  
  5416.      To list classes associated with implementation(s): 
  5417.  
  5418.               REGIMPL -l [-i <str> [-i ...]]
  5419.  
  5420.       where: 
  5421.  
  5422.       -i <str>            Is the implementation alias name. 
  5423.       -p <str>            Is the server program name. The default value is 
  5424.                           SOMDSVR.EXE. 
  5425.       -v <str>            Is the server-class name. The default value is 
  5426.                           SOMDServer. 
  5427.       -f <str>            Is the reference data file name.  Use NULL to delete. 
  5428.       -b <str>            Is the reference data backup file name. Use NULL to 
  5429.                           delete. 
  5430.       -h <str>            Is the host machine name. The default value is 
  5431.                           localhost. 
  5432.       -m {on|off}         Enables multi-threaded server. 
  5433.       -z <str>            Is the implementation ID. 
  5434.       -c <str>            Is the class name. 
  5435.  
  5436.  
  5437. ΓòÉΓòÉΓòÉ 6.4.5.6. SC ΓòÉΓòÉΓòÉ
  5438.  
  5439. The OS/2 operating system provides a programming interface that allows 
  5440. applications to implement Desktop objects. This programming interface enables 
  5441. you to create Desktop objects that conforms to the CUA architecture using basic 
  5442. object-oriented programming interface. The interface is implemented using the 
  5443. IBM SC (SOM Compiler). 
  5444.  
  5445. The SOM Compiler (SC) helps implementers build classes in which interface and 
  5446. implementation are decoupled.  The SOM Compiler reads the IDL definition of a 
  5447. class interface and generates: 
  5448.  
  5449.      An implementation skeleton for the class 
  5450.      Bindings for implementors 
  5451.      Bindings for client programs 
  5452.  
  5453.  Bindings are language-specific macros and procedures that make implementing 
  5454.  and using SOM classes more convenient. These bindings offer a convenient 
  5455.  interface to SOM that is tailored to a particular programming language. For 
  5456.  instance, C programmers can invoke methods in the same way they make ordinary 
  5457.  procedure calls. The C++ bindings "wrap" SOM objects as C++ objects, so that 
  5458.  C++ programmers can invoke methods on SOM objects in the same way they invoke 
  5459.  methods on C++ objects. In addition, SOM objects receive full C++ 
  5460.  typechecking, just as C++ objects do. Currently, the SOM Compiler can generate 
  5461.  both C and C++ language bindings for a class. 
  5462.  
  5463.  
  5464. ΓòÉΓòÉΓòÉ 6.4.5.6.1. Starting SC ΓòÉΓòÉΓòÉ
  5465.  
  5466. The SOM compiler is actually a precompiler and a collection of code emitters 
  5467. that produce binding files from the output of the precompiler. The files have 
  5468. several forms, including C-header files, a C-implementation template, and the 
  5469. language-neutral version of the class definition file. 
  5470.  
  5471. To start the SOM precompiler from the command line, type: 
  5472.  
  5473.  SC [-C] [-D] [-E] [-I] [-S] [-U] [-V] [-c] [-d] [-h] [-i] [-m] [-p] [-r]
  5474.     [-s] [-u] [-v] [-w] f1 f2 ...
  5475.  
  5476. where: 
  5477.  
  5478.   -C <n>                Is the size of the comment buffer. The default value is 
  5479.                         49152. 
  5480.   -D <DEFINE>           Is the same as the -D option for cpp. 
  5481.   -E <var>=<value>      Is the set environment variable. 
  5482.   -I <INCLUDE>          Is the same as the -I option for cpp. 
  5483.   -S <n>                Is the size of the string buffer. The default is 49152. 
  5484.   -U <UNDEFINE>         Is the same as the -U option for cpp. 
  5485.   -V                    Shows the version number of the compiler. 
  5486.   -c                    Ignores all comments. 
  5487.   -d <dir>              Is the output directory for each emitted file. 
  5488.   -h                    Is this message. 
  5489.   -i <file>             Uses this file name as supplied. 
  5490.   -m <name[=value]>     Adds a global modifier. 
  5491.   -p                    Is a shorthand for -D__PRIVATE__. 
  5492.   -r                    Checks if the releaseorder entries exist. The default 
  5493.                         value is FALSE. 
  5494.   -s <string>           Replaces the SMEMIT variable with a <string>. 
  5495.   -u                    Updates the interface repository. 
  5496.   -v                    Verboses the debugging mode. The default value is 
  5497.                         FALSE. 
  5498.   -w                    Does not display warnings. The default value is FALSE. 
  5499.  file1, file2           Is the name of a file that contains an OIDL class 
  5500.                         definition. If you do not specify a file-name 
  5501.                         extension, the compiler uses .IDL by default. 
  5502.  
  5503.  The options can be specified individually, as a string of option characters, 
  5504.  or as a combination of these forms. Any option that takes an argument must be 
  5505.  specified individually or be the final option in a string of option 
  5506.  characters. 
  5507.  
  5508.  The modifiers are as follows: 
  5509.  
  5510.  addprefixes            Adds functionprefix to method names in template file 
  5511.  [no]addstar            Does not add a * to C bindings for interface 
  5512.                         references. 
  5513.  corba                  Checks the source for CORBA compliance. 
  5514.  csc                    Forces running of the OIDL compiler. 
  5515.  emitappend             Appends the emitted files at the end of an existing 
  5516.                         file. 
  5517.  noheader               Does not add a header to the emitted file. 
  5518.  noint                  Does not warn about int causing portability problems. 
  5519.  nolock                 Does not lock the IR during update. 
  5520.  nopp                   Does not run the source through the pre-processor. 
  5521.  notc                   Does not use typecodes for emit information. 
  5522.  nouseshort             Does not generate short names for types. 
  5523.  pp=<path>              Specifies a local pre-processor to use. 
  5524.  tcconsts               Generates CORBA type code constants. 
  5525.  
  5526.  
  5527. ΓòÉΓòÉΓòÉ 6.4.5.6.2. SMEMIT Environment Variable ΓòÉΓòÉΓòÉ
  5528.  
  5529. SMEMIT is used to indicate which emitter programs should be executed. Like the 
  5530. SMINCLUDE environment variable it can consist of a list of items separated by 
  5531. semicolons. Each item designates a particular emitter by the name of the file 
  5532. extension the emitter produces. The syntax is as follows: 
  5533.  
  5534.   SMEMIT=[h;ih;c;xh;xih;xc;def;ir;pdl]
  5535.  
  5536. The default values are h and ih. For example: 
  5537.  
  5538.   SET SMEMIT=H;IH;DEF;
  5539.  
  5540. indicates that EMITH.EXE, EMITIH.EXE, and EMITDEF.EXE programs should be 
  5541. executed to produce .H, .IH, and .DEF files, respectively. By default all 
  5542. emitted output files are placed in the same directory as the input file. If the 
  5543. SMEMIT environment variable is not defined, the SOM compiler will perform a 
  5544. syntax check of your class definition but no output will be produced. 
  5545.  
  5546. Note:  All command-line modifiers can be set in the environment by changing 
  5547.        them to UPPERCASE and preappending SM to them. 
  5548.  
  5549.  
  5550. ΓòÉΓòÉΓòÉ 6.4.5.6.3. SMINCLUDE Environment Variable ΓòÉΓòÉΓòÉ
  5551.  
  5552. The SOM compiler uses an environment variable called SMINCLUDE to locate 
  5553. included class definitions. SMINCLUDE specifies where to search for .IDL and 
  5554. .EFW files. Because every SOM class will have an include file for its parent 
  5555. class definition, you must set SMINCLUDE before running the SOM compiler. Its 
  5556. form is similar to the OS/2 PATH or DPATH environment variables, in that it can 
  5557. consist of one or more directory names, separated by a semicolon. Directory 
  5558. names can be specified with absolute or relative path names. The syntax is as 
  5559. follows: 
  5560.  
  5561.   SMINCLUDE=<dir1>[;<dir2>]+
  5562.  
  5563. For example: 
  5564.  
  5565.   SET SMINCLUDE=.;C:\TOOLKIT\SOM\INCLUDE;C:\TOOLKIT\IDL;
  5566.  
  5567. Note:  All command-line modifiers can be set in the environment by changing 
  5568.        them to UPPERCASE and preappending SM to them. 
  5569.  
  5570.  
  5571. ΓòÉΓòÉΓòÉ 6.4.5.6.4. SMKNOWNEXTS Environment Variable ΓòÉΓòÉΓòÉ
  5572.  
  5573. SMKNOWNEXTS add headers to user written emitters. The syntax is as follows: 
  5574.  
  5575.   SMKNOWNEXTS=ext[;ext]+
  5576.  
  5577. Note:  All command-line modifiers can be set in the environment by changing 
  5578.        them to UPPERCASE and preappending SM to them. 
  5579.  
  5580.  
  5581. ΓòÉΓòÉΓòÉ 6.4.5.6.5. SMTMP Environment Variable ΓòÉΓòÉΓòÉ
  5582.  
  5583. The SMTMP environment variable specifies the name of a directory that the SOM 
  5584. compiler uses to hold intermediate output files. The syntax is as follows: 
  5585.  
  5586.   SMTMP=<dir>
  5587.  
  5588. For example: 
  5589.  
  5590.   SET SMTMP=%TMP%
  5591.  
  5592. tells the SOM compiler to use the same directory for temporary files as given 
  5593. by the setting of the TMP environment variable. As a general rule, the 
  5594. directory indicated by SMTMP should never coincide with the directory used by 
  5595. the SOM compiler for its input or the emitted output files. 
  5596.  
  5597. Note:  All command-line modifiers can be set in the environment by changing 
  5598.        them to UPPERCASE and preappending SM to them. 
  5599.  
  5600.  
  5601. ΓòÉΓòÉΓòÉ 6.4.5.6.6. SOMIR Environment Variable ΓòÉΓòÉΓòÉ
  5602.  
  5603. SOMIR provides a list of IRs to search for. The syntax is as follows: 
  5604.  
  5605.  SOMIR=<path>[;<path>]+
  5606.  
  5607. Note:  All command-line modifiers can be set in the environment by changing 
  5608.        them to UPPERCASE and preappending SM to them. 
  5609.  
  5610.  
  5611. ΓòÉΓòÉΓòÉ 6.4.5.6.7. #pragma Directives ΓòÉΓòÉΓòÉ
  5612.  
  5613. There are two pragma directives: 
  5614.  
  5615.  #pragma somemittypes on                 Turns on the emission of global types. 
  5616.  
  5617.  #pragma somemittypes off                Turns off the emission of global 
  5618.                                          types. 
  5619.  
  5620.  #pragma modifier <modifier stm>         Used instead of modifier statement. 
  5621.  
  5622.  
  5623. ΓòÉΓòÉΓòÉ 6.4.5.6.8. Running SOM Emitters ΓòÉΓòÉΓòÉ
  5624.  
  5625. You complete the SOM compilation process by running the emitters. You can 
  5626. control the output of the emitters from the command line by typing: 
  5627.  
  5628.   COMMAND [-o filename] [-a name[=value]]*
  5629.  
  5630. where: 
  5631.  
  5632.  command              Is one of the following: 
  5633.  
  5634.                                     EMITH 
  5635.                                     EMITIH 
  5636.                                     EMITC 
  5637.                                     EMITDEF 
  5638.  
  5639.  -o                   Is an explicit name (including drive, path, and file-name 
  5640.                       extension) for the emitted output file. If this option is 
  5641.                       not specified, the output file is placed in the current 
  5642.                       directory, and the file-name extension defaults to a type 
  5643.                       appropriate to the selected emitter program. 
  5644.  
  5645.  -a name[=value]      Adds a global attribute. 
  5646.  
  5647.  
  5648. ΓòÉΓòÉΓòÉ 6.4.5.7. SOMCORBA ΓòÉΓòÉΓòÉ
  5649.  
  5650. SOMCORBA is a command script to convert to implicit pointers (like CORBA) for 
  5651. interface references. 
  5652.  
  5653.  
  5654. ΓòÉΓòÉΓòÉ 6.4.5.8. SOMDCHK ΓòÉΓòÉΓòÉ
  5655.  
  5656. SOMDCHK evaluates the environment to verify whether DSOM can operate correctly. 
  5657. The program generates messages that evaluate the DSOM environment. It 
  5658. determines whether the necessary SOM DLLs can be located, whether DSOM is 
  5659. enabled for workgroup (cross-machine) communication, whether Interface and 
  5660. Implementation Repositories can be located, and it displays the settings of 
  5661. important environment variables. In its "verbose" mode, SOMDCHK gives the 
  5662. default settings for DSOM environment variables and explains how DSOM uses 
  5663. them. 
  5664.  
  5665. The program is invoked from the command line using the syntax given below. The 
  5666. optional verbose setting can be turned on by including the -v option with the 
  5667. following command: 
  5668.  
  5669.   SOMDCHK [-v]
  5670.  
  5671.  
  5672. ΓòÉΓòÉΓòÉ 6.4.5.9. SOMDD ΓòÉΓòÉΓòÉ
  5673.  
  5674. SOMDD is the DSOM daemon. It must be started prior to running a DSOM 
  5675. application. The daemon can be started manually from the command line, or it 
  5676. could be started automatically from a start-up script run at boot time. It may 
  5677. be run in the background with the following command: 
  5678.  
  5679.   START SOMDD
  5680.  
  5681. The SOMDD program requires no parameters. An optional -q  parameters can be 
  5682. used to set "quiet" mode, to suppress messages. 
  5683.  
  5684. Note:  The SOMDD.EXE program shipped with VisualAge C++ is incompatible with 
  5685.        the version of SOM used with Warp Toolkit and should not be used. You 
  5686.        will need to update both your LIBPATH and PATH statements to ensure that 
  5687.        the Warp Toolkit path is ahead of the VisualAge C++ compiler. 
  5688.  
  5689.  
  5690. ΓòÉΓòÉΓòÉ 6.4.5.10. SOMDSVR ΓòÉΓòÉΓòÉ
  5691.  
  5692. SOMDSVR is the "generic" server program. It can be started either from the 
  5693. command line or automatically upon demand. When starting SOMDSVR from the 
  5694. command line, the server's implementation ID or alias must be supplied as an 
  5695. argument. The command syntax for starting a generic SOM server is: 
  5696.  
  5697.   SOMDSVR [impl_id | -a alias]
  5698.  
  5699.  
  5700. ΓòÉΓòÉΓòÉ 6.4.5.11. SOMENV ΓòÉΓòÉΓòÉ
  5701.  
  5702. SOMENV is a command script to set the environment variables required for SOM 
  5703. programming. This command script requires that the SOMBASE environment variable 
  5704. be set. 
  5705.  
  5706.  
  5707. ΓòÉΓòÉΓòÉ 6.4.5.12. SOMSTARS ΓòÉΓòÉΓòÉ
  5708.  
  5709. SOMSTARS is a command script to convert to explicit pointers for interface 
  5710. references. 
  5711.  
  5712.  
  5713. ΓòÉΓòÉΓòÉ 6.4.5.13. SOMXH ΓòÉΓòÉΓòÉ
  5714.  
  5715. SOMXH is a command script to create the .XH header files from the .IDL files 
  5716. located in the \TOOLKIT\SOM\INCLUDE subdirectory. 
  5717.  
  5718.  
  5719. ΓòÉΓòÉΓòÉ 6.4.5.14. WPIDL2XH ΓòÉΓòÉΓòÉ
  5720.  
  5721. WPIDL2XH.CMD is a command file to emit .XH header files from Workplace Shell 
  5722. .IDL files. 
  5723.  
  5724. To re-generate the .XH headers for C++, invoke this command file on each 
  5725. Workplace Shell class .IDL file from the Toolkit. It is only necessary to do 
  5726. this when you upgrade to a new level of SOM.  Invoking the SOMXH command script 
  5727. will create .XH files for you, as the Workplace Shell classes currently only 
  5728. maintain passthru sections for .H files for C. The syntax is as follows: 
  5729.  
  5730.   WPIDL2XH <inputfile>
  5731.  
  5732.  
  5733. ΓòÉΓòÉΓòÉ 6.4.6. Workplace Shell Tools ΓòÉΓòÉΓòÉ
  5734.  
  5735. This section describes the Workplace Shell tools which help you develop 
  5736. Workplace Shell programs. There are two Workplace Shell tools in this release: 
  5737.  
  5738.      OBJUTIL - Object Utility/2 
  5739.      WPCLSLST - Workplace Class List 
  5740.  
  5741.  
  5742. ΓòÉΓòÉΓòÉ 6.4.6.1. OBJUTIL ΓòÉΓòÉΓòÉ
  5743.  
  5744. OBJUTIL (Object Utility/2) is a new Workplace Shell tool that provides a 
  5745. facility for registering classes, and creating and modifying instances of 
  5746. classes. 
  5747.  
  5748.  
  5749. ΓòÉΓòÉΓòÉ 6.4.6.2. WPCLSLST ΓòÉΓòÉΓòÉ
  5750.  
  5751. WPCLSLST (Workplace Class List) creates a workplace object class and an 
  5752. instance of a workplace object class. Workplace objects are constructed using 
  5753. the SOM protocol and are instances of one of the following workplace object 
  5754. classes: 
  5755.  
  5756.  Predefined     These classes are defined by the system. Examples of predefined 
  5757.                 workplace object classes are WPObject, WPFileSystem, and 
  5758.                 WPAbstract. 
  5759.  
  5760.  Subclass       These classes are derived from existing predefined workplace 
  5761.                 object classes. They add or remove function; however, they 
  5762.                 retain the basic behavior of that class. 
  5763.  
  5764.  Replaced       These classes replace the class being subclassed. They notify 
  5765.                 the behavior of an instance of a predefined workplace object 
  5766.                 class without the instance being aware of the new class. 
  5767.  
  5768.  
  5769. ΓòÉΓòÉΓòÉ 6.4.6.2.1. Starting WPCLSLST ΓòÉΓòÉΓòÉ
  5770.  
  5771. To start the Workplace Class List, select the PM Development Tools folder, then 
  5772. select the WP Class List object. A window similar to the following appears: 
  5773.  
  5774. Using this window, you can: 
  5775.  
  5776.      Add, delete, and browse registered Workplace Class Objects 
  5777.      Create an instance of a Workplace Class Object 
  5778.      View the registered Workplace Class Object in the system. 
  5779.  
  5780.  
  5781. ΓòÉΓòÉΓòÉ 6.5. Online Documentation ΓòÉΓòÉΓòÉ
  5782.  
  5783. The following list describes manuals available online that might be of interest 
  5784. to users who develop applications for OS/2 Warp Version 3. The OS/2 Warp 
  5785. Version 3 Technical Library provides both guidance and reference information 
  5786. and can be used for OS/2 Warp Version 3 development. The library includes the 
  5787. following online books: 
  5788.  
  5789.      Bidirectional Language Support Dev. Guide and Reference 
  5790.      Control Program Guide and Reference 
  5791.      Debug Kernel Reference 
  5792.      Graphics Programming Guide and Reference 
  5793.      IBM Developer API Extensions for OS/2 Programming Guide 
  5794.      Information Presentation Facility Guide and Reference 
  5795.      Multimedia Application Programming Guide 
  5796.      Multimedia Programming Reference 
  5797.      Multimedia Subsystem Programming Guide 
  5798.      OpenDoc Programming Guide 
  5799.      OpenDoc Programming Reference 
  5800.      OpenDoc User Interface Guidelines 
  5801.      Open Scripting Architecture Guide and Reference 
  5802.      Presentation Manager Programming Guide and Reference 
  5803.      SOM Programmers Reference 
  5804.      SOM User's Guide 
  5805.      Tools Reference 
  5806.      Workplace Shell Programming Guide 
  5807.      Workplace Shell Programming Reference 
  5808.  
  5809.  These books are located in the \TOOLKIT\BOOK subdirectory. You can also access 
  5810.  them from the Desktop by opening the Toolkit folder and then the Toolkit 
  5811.  Information folder. 
  5812.  
  5813.  
  5814. ΓòÉΓòÉΓòÉ 6.5.1. Bidirectional Language Support Dev. Guide and Reference ΓòÉΓòÉΓòÉ
  5815.  
  5816. This book provides information about the interface (API) for the Arabic and 
  5817. Hebrew languages thus allowing programmers to create Arabic or Hebrew 
  5818. applications for this environment. 
  5819.  
  5820. The Bidirectional support in PM is provided in the Arabic and Hebrew language 
  5821. versions of the OS/2 operating system. The support is active/configured when 
  5822. the COUNTRY selection during OS/2 installation is Arabic or Hebrew in these 
  5823. versions. 
  5824.  
  5825.  
  5826. ΓòÉΓòÉΓòÉ 6.5.2. Control Program Guide and Reference ΓòÉΓòÉΓòÉ
  5827.  
  5828. This book provides the C-language syntax for each of the base operating-system 
  5829. application programming interface (API), including input and output parameters, 
  5830. data structures, data types, return codes, and example codes. Guidance 
  5831. information is also provided to assist you in developing applications using 
  5832. these items. API functions (indicated by the prefix "Dos") are presented by 
  5833. component; such as Error Management, Exception Management, and File System. The 
  5834. API functions, within each of the components to which they apply, are listed in 
  5835. alphabetic order. API functions also are available from a single alphabetic 
  5836. list. The online Control Program Guide and Reference contains the information 
  5837. of the Control Program Programming Guide and the Control Program Programming 
  5838. Reference books. 
  5839.  
  5840.  
  5841. ΓòÉΓòÉΓòÉ 6.5.3. Debug Kernel Reference ΓòÉΓòÉΓòÉ
  5842.  
  5843. This book provides details on the debug kernel, installation, debugging 
  5844. commands and syntax, and the debug PM interface. 
  5845.  
  5846.  
  5847. ΓòÉΓòÉΓòÉ 6.5.4. Graphics Programming Guide and Reference ΓòÉΓòÉΓòÉ
  5848.  
  5849. This book describes the concepts associated with graphical output--presentation 
  5850. spaces, device contexts, graphic primitives, fonts--and how to prepare 
  5851. graphical output for display and printing.  It provides the C-language syntax 
  5852. for all the graphical programming interface (GPI), including input and output 
  5853. parameters, data structures, data types, return codes, and example codes. 
  5854. Guidance information is also provided to assist you in developing applications 
  5855. using these items. GPI functions (indicated by the prefix "Gpi") are listed in 
  5856. alphabetic order. The online Graphics Programming Guide and Reference contains 
  5857. the information of the Graphics Programming Guide and the Graphics Programming 
  5858. Reference books. 
  5859.  
  5860.  
  5861. ΓòÉΓòÉΓòÉ 6.5.5. IBM Developer API Extensions for OS/2 Programming Guide ΓòÉΓòÉΓòÉ
  5862.  
  5863. The IBM Developer API Extensions for OS/2 Programming Guide provides 
  5864. information on the following topics: 
  5865.  
  5866.      What the IBM Developer API Extensions for OS/2 are and how they help you 
  5867.       either: 
  5868.  
  5869.         -  Migrate Windows code to OS/2 code 
  5870.         -  Write common source code for OS/2 and Windows 
  5871.  
  5872.      How to use the SMART tool to analyze Windows code and see how much effort 
  5873.       is involved to migrate it to OS/2 code 
  5874.  
  5875.      Differences in behavior between some IBM Developer API Extensions for 
  5876.       OS/2 functions and their Windows counterparts 
  5877.  
  5878.      Changes to the Resource Compiler due to IBM Developer API Extensions for 
  5879.       OS/2 
  5880.  
  5881.      The functions supported by the IBM Developer API Extensions for OS/2 
  5882.  
  5883.  
  5884. ΓòÉΓòÉΓòÉ 6.5.6. Information Presentation Facility Guide and Reference ΓòÉΓòÉΓòÉ
  5885.  
  5886. This book describes the concepts--help windows, hypertext linking, 
  5887. author-controlled viewports, dynamic data formatting--and the functions used 
  5888. for implementing help in OS/2 applications. It describes how to create online 
  5889. help and information. It also contains an alphabetic list of IPF tags, symbols, 
  5890. and control words. The IPFC error messages, window functions, dynamic data 
  5891. formatting functions, and help manager messages and functions are included. 
  5892.  
  5893.  
  5894. ΓòÉΓòÉΓòÉ 6.5.7. Multimedia Application Programming Guide ΓòÉΓòÉΓòÉ
  5895.  
  5896. This book describes the concepts associated with managing audio and video data 
  5897. and hardware using an extendable architecture that includes logical media 
  5898. devices (amplifier-mixer, waveform audio, MIDI sequencer, CD-audio, CD-XA, 
  5899. digital video, and videodisc) and I/O procedures for supporting various file 
  5900. formats. 
  5901.  
  5902.  
  5903. ΓòÉΓòÉΓòÉ 6.5.8. Multimedia Programming Reference ΓòÉΓòÉΓòÉ
  5904.  
  5905. This book describes the media control interface, PM graphic push buttons, 
  5906. secondary windows functions, multimedia I/O services, direct interface video 
  5907. extensions (DIVE), and subsystem services for synchronization and streaming. 
  5908.  
  5909.  
  5910. ΓòÉΓòÉΓòÉ 6.5.9. Multimedia Subsystem Programming Guide ΓòÉΓòÉΓòÉ
  5911.  
  5912. This book describes the subsystem components--media control driver, stream 
  5913. handler, and I/O procedure--that support a multimedia device. 
  5914.  
  5915.  
  5916. ΓòÉΓòÉΓòÉ 6.5.10. OpenDoc Programming Guide ΓòÉΓòÉΓòÉ
  5917.  
  5918. This guide is intended for application developers creating programs using the 
  5919. OpenDoc interface for OS/2 Warp who want to gain an understanding of the 
  5920. OpenDoc programming environment and to develop part editors. 
  5921.  
  5922.  
  5923. ΓòÉΓòÉΓòÉ 6.5.11. OpenDoc Programming Reference ΓòÉΓòÉΓòÉ
  5924.  
  5925. This book is a detailed technical reference for application programmers 
  5926. creating programs using the OpenDoc interface for OS/2 Warp. It gives reference 
  5927. information and code examples to enable you to write source code using 
  5928. Workplace classes and methods. 
  5929.  
  5930.  
  5931. ΓòÉΓòÉΓòÉ 6.5.12. OpenDoc User Interface Guidelines ΓòÉΓòÉΓòÉ
  5932.  
  5933. The OpenDoc User Interface Guidelines describe the human interface mechanisms 
  5934. and interactions essential to the OpenDoc software architecture. It combines a 
  5935. discussion of the philosophy of the OpenDoc Human Interface with the actual 
  5936. implementation of interface elements. In addition to text-based discussions, 
  5937. this document makes use of screen captures and user scenarios to further 
  5938. facilitate the developer's understanding of OpenDoc. 
  5939.  
  5940.  
  5941. ΓòÉΓòÉΓòÉ 6.5.13. Open Scripting Architecture Guide and Reference ΓòÉΓòÉΓòÉ
  5942.  
  5943. This reference is a detailed technical guide and reference for application 
  5944. programmers creating programs using OS/2 Warp. It gives reference information 
  5945. and code examples to enable you to write source code using OSA functions, 
  5946. classes, methods, and data types. 
  5947.  
  5948.  
  5949. ΓòÉΓòÉΓòÉ 6.5.14. OS/2 Tools Reference ΓòÉΓòÉΓòÉ
  5950.  
  5951. This book describes the tools that are included in the IBM Developer's Toolkit 
  5952. for OS/2 Warp. 
  5953.  
  5954.  
  5955. ΓòÉΓòÉΓòÉ 6.5.15. Presentation Manager Programming Guide and Reference ΓòÉΓòÉΓòÉ
  5956.  
  5957. This book provides the C-language syntax for the base operating-system 
  5958. application programming interface (API), including input and output parameters, 
  5959. data structures, data types, return codes, and example codes. API function 
  5960. prefixes include Drg (dragdrop), Ddf (dynamic data format), Prf (profile), Spl 
  5961. (spooler), and Win (window). Also included are application hooks and PM 
  5962. messages. The online Presentation Manager Programming Guide and Reference is a 
  5963. combination of the information found in the hardcopy Presentation Manager 
  5964. Programming Guide and Presentation Manager Programming Reference. 
  5965.  
  5966.  
  5967. ΓòÉΓòÉΓòÉ 6.5.16. REXX Program Reference ΓòÉΓòÉΓòÉ
  5968.  
  5969. This book provides detailed descriptions of the REXX functions. 
  5970.  
  5971.  
  5972. ΓòÉΓòÉΓòÉ 6.5.17. SOM Programmers Reference ΓòÉΓòÉΓòÉ
  5973.  
  5974. This book is a complete reference for each of the classes and methods used for 
  5975. the object-oriented programming environment. Also included are System Object 
  5976. Model (SOM) C-language and C++ bindings, the Object Interface Definition 
  5977. Language syntax, and the SOM compiler command syntax. 
  5978.  
  5979.  
  5980. ΓòÉΓòÉΓòÉ 6.5.18. SOM User's Guide ΓòÉΓòÉΓòÉ
  5981.  
  5982. This book explains how programmers using C, C++, and other languages can: 
  5983.  
  5984.      Implement class libraries that exploit the SOM library-packaging 
  5985.       technology 
  5986.  
  5987.      Develop client programs that use class libraries that were built using 
  5988.       SOM 
  5989.  
  5990.      Develop applications that use the frameworks supplied with the SOMobjects 
  5991.       Toolkit, class libraries that facilitate development of object-oriented 
  5992.       applications. 
  5993.  
  5994.  
  5995. ΓòÉΓòÉΓòÉ 6.5.19. Workplace Shell Programming Guide ΓòÉΓòÉΓòÉ
  5996.  
  5997. This book describes the concepts associated with object-oriented programming 
  5998. for the OS/2 operating system--SOM, Workplace Shell classes and methods--and 
  5999. how to create object-oriented applications for the OS/2 Desktop. 
  6000.  
  6001.  
  6002. ΓòÉΓòÉΓòÉ 6.5.20. Workplace Shell Programming Reference ΓòÉΓòÉΓòÉ
  6003.  
  6004. This book provides the detailed descriptions of the Workplace Shell 
  6005. object-oriented programming interface. 
  6006.  
  6007.  
  6008. ΓòÉΓòÉΓòÉ 6.5.21. How to Use Online Documents ΓòÉΓòÉΓòÉ
  6009.  
  6010. The online documents in the Warp Toolkit were developed with IPF. IPF displays 
  6011. information through a familiar user interface and lets you do the following: 
  6012.  
  6013.      View a table of contents from which you can quickly gain access to a 
  6014.       category 
  6015.      View the category and select related topics from a menu 
  6016.      View multiple windows of related information for comparison values 
  6017.      Search for a topic throughout the document 
  6018.      Copy the contents of a topic to the system clipboard for editing with the 
  6019.       OS/2 System Editor, the Enhanced Editor, or any other editor with this 
  6020.       capability 
  6021.      Copy the contents of a topic to a temporary file for editing with a text 
  6022.       editor. 
  6023.  
  6024.  When installed, the online documents are added to the Toolkit Information 
  6025.  folder. To access the online documents, double-click on the folder, then 
  6026.  select the appropriate book. A window that has a table of contents (Contents 
  6027.  window) will appear. 
  6028.  
  6029.  When the Contents window first appears, some categories have a plus sign (+) 
  6030.  beside them. The plus sign indicates that additional topics are available. 
  6031.  Using mouse button 1, click on the plus sign to expand the category. 
  6032.  
  6033.  For more information about using the Warp Toolkit online documents, refer to 
  6034.  the How to Use the Using Your Toolkit Book section. 
  6035.  
  6036.  
  6037. ΓòÉΓòÉΓòÉ 6.6. Try Me! ΓòÉΓòÉΓòÉ
  6038.  
  6039. The Try Me! component, formerly called NeatStuff, contains new tools or samples 
  6040. that execute on generally available versions of OS/2, such as OS/2 Warp Version 
  6041. 3. These tools and samples are provided to obtain feedback from you, our 
  6042. customers. We are considering adding these tools and samples to the Toolkit 
  6043. permanently. The content of this component can vary from volume to volume of 
  6044. The Developer Connection for OS/2. 
  6045.  
  6046. Try Me! is installed by default by the Developer's Toolkit for OS/2 
  6047. installation program, but the component can be deselected prior to installing 
  6048. to save space on your hard disk. All files installed via the Try Me! component 
  6049. are installed in the \TOOLKIT\BETA directory structure by default. 
  6050.  
  6051. Note:  These utilities are pre-release and unsupported versions, and are 
  6052.        provided on an "as is" basis for evaluation and demonstration. They are 
  6053.        not intended for use with production code. 
  6054.  
  6055.  
  6056. ΓòÉΓòÉΓòÉ 6.6.1. Development Tools ΓòÉΓòÉΓòÉ
  6057.  
  6058. This section describes the following tools provided to help you develop OS/2 
  6059. programs: 
  6060.  
  6061.      ALP - Assembly Language Processor 
  6062.      P2STRING 
  6063.      URE - Universal Resource Editor 
  6064.  
  6065.  
  6066. ΓòÉΓòÉΓòÉ 6.6.1.1. ALP ΓòÉΓòÉΓòÉ
  6067.  
  6068. ALP (Assembly Language Processor) is a macro assembler that runs under the 
  6069. 32-bit OS/2 operating system. In its initial form, ALP is designed as a 
  6070. functional replacement for the Microsoft Macro Assembler (MASM), Version 5.1. 
  6071. It accepts the full syntax of the Intel 80X86 architecture, and a subset of 
  6072. MASM's high-level directive language. ALP creates standard Object Module Format 
  6073. (.OMF) files that can be linked to produce DOS or OS/2 executables, and can 
  6074. generate line number debug information compatible with IBM's Presentation 
  6075. Manager Debugger. In addition, this tool offers a rich set of command line 
  6076. options, as well as a comprehensive listing file with user-tailored formatting, 
  6077. allowing a visual perspective not possible with other assemblers. 
  6078.  
  6079. ALP translates assembly language source files (typically having a filename 
  6080. extension of .ASM) into object (.OBJ) files. The LINK386 utility can then be 
  6081. used to combine multiple object files into a single executable file, dynamic 
  6082. link library, or device driver. 
  6083.  
  6084. While ALP is designed as a functional replacement for the Microsoft MASM 
  6085. assembler in terms of source code compatibility, it does not use the MASM 
  6086. command line syntax. ALP uses a free-form syntax, has a comprehensive set of 
  6087. options, and allows assembly of multiple input files with a single command line 
  6088. invocation. 
  6089.  
  6090. For each corresponding input source file, ALP can produce the following types 
  6091. of output files: 
  6092.  
  6093.      Object (.OBJ) files containing program data and executable code. 
  6094.      Listing (.LST) files which document the results of the assembly. 
  6095.      Message (.MSG) files which can contain all error, warning, and 
  6096.       informational messages produced during the assembly. 
  6097.  
  6098.  An online document, Assembly Language Processor Reference Guide, is available 
  6099.  in the Beta Information folder. You can access this folder by opening the 
  6100.  Toolkit folder and then opening the BETA folder. Online help is also available 
  6101.  from the command line for all ALP options. 
  6102.  
  6103.  
  6104. ΓòÉΓòÉΓòÉ 6.6.1.1.1. Starting ALP ΓòÉΓòÉΓòÉ
  6105.  
  6106. To start ALP from the command line, change to the TOOLKIT\BETA\BIN subdirectory 
  6107. and type: 
  6108.  
  6109.   ALP
  6110.  
  6111. Note:  ALP cannot be started from the Desktop. 
  6112.  
  6113.  
  6114. ΓòÉΓòÉΓòÉ 6.6.1.2. P2STRING ΓòÉΓòÉΓòÉ
  6115.  
  6116. P2STRING is used to test OS/2 multimedia subsystems through the media control 
  6117. interface string commands in OS/2 multimedia environment. This tool processes 
  6118. script files (containing string commands and tool directives) to test the 
  6119. behavior of subsystems in OS/2 multimedia.  P2STRING extracts the strings from 
  6120. the script files and processes the commands through the mciSendString function. 
  6121. Messages and error conditions of the processes included in the scripts are 
  6122. logged to an output file and displayed in windows. 
  6123.  
  6124. P2STRING provides subsystem developers with an effective testing and because it 
  6125. alleviates the need for extensive test code to be written. Developers can write 
  6126. script files to test all relevant scenarios, and it also aids in debugging 
  6127. using log files. 
  6128.  
  6129. Note:  Refer to the README file in the P2STRING subdirectory for information 
  6130.        about how to use P2STRING and how to create script files that it can 
  6131.        process. 
  6132.  
  6133.  
  6134. ΓòÉΓòÉΓòÉ 6.6.1.3. URE ΓòÉΓòÉΓòÉ
  6135.  
  6136. URE (Universal Resource Editor) provides a graphical user interface by which 
  6137. you can design dialogs, menus, and other OS/2 program resources. You can create 
  6138. binary resource files, resource scripts, and symbol definition files. 
  6139.  
  6140. For any new resource design, URE allows you to: 
  6141.  
  6142.      Select the applicable operating environment, file names and formats from 
  6143.       the New Design dialog. 
  6144.      Choose the type of presentation from the New Dialog/Window dialog. 
  6145.      Set the appearance of your window from the Window/Dialogue Styles dialog. 
  6146.      Select controls for your window from the Tools window. 
  6147.      Include multiple windows and file resources with any design. 
  6148.      Save your finished resource design to a binary file for later attachment 
  6149.       to an executable program. 
  6150.      Edit an existing resource design and copy parts from one design to 
  6151.       another. 
  6152.  
  6153.  This tool has been significantly enhanced with the following: 
  6154.  
  6155.      Double-byte character set (DBCS) support for input and output of 
  6156.       double-byte characters 
  6157.      Enhanced user interface and documentation 
  6158.  
  6159.  This level of URE runs on a Warp system but does not run in an OS/2 2.1 
  6160.  environment. The URE shipped with the Warp Toolkit on the Developer Connection 
  6161.  for OS/2, Volume 8 must be used to edit resource files defined for an OS/2 2.1 
  6162.  environment. 
  6163.  
  6164.  An online document, Universal Resource Editor for OS/2 User's Guide, is 
  6165.  available in the Try Me! folder. Online help is also available for menus, 
  6166.  buttons, and dialogs you use while running URE and related samples. 
  6167.  
  6168.  Note:  IBM supports the version of Dialog Editor in this release of the Warp 
  6169.         Toolkit, but will not be enhancing or otherwise changing Dialog Editor 
  6170.         in future releases. URE (Universal Resource Editor) will become the 
  6171.         editor of choice for creating and modifying dialogs and other 
  6172.         resources. 
  6173.  
  6174.  
  6175. ΓòÉΓòÉΓòÉ 6.6.1.3.1. Starting URE ΓòÉΓòÉΓòÉ
  6176.  
  6177. You can start URE in two ways: 
  6178.  
  6179.      From the command line, change to the TOOLKIT\BETA\BIN subdirectory and 
  6180.       type: 
  6181.  
  6182.               URE
  6183.  
  6184.       URE has a number of sample programs that are installed into 
  6185.       subdirectories below the TOOLKIT\BETA\SAMPLES\URE subdirectory path. 
  6186.  
  6187.      From the Desktop, open the Toolkit folder and then: 
  6188.  
  6189.         1. Open the Try Me! folder. 
  6190.  
  6191.         2. Double-click on Universal Resource Editor. 
  6192.  
  6193.  
  6194. ΓòÉΓòÉΓòÉ 6.6.1.3.2. Replacing DLGEDIT ΓòÉΓòÉΓòÉ
  6195.  
  6196. IBM supports the version of DLGEDIT (Dialog Editor) in this release of the Warp 
  6197. Toolkit, but will not be enhancing or otherwise changing the Dialog Editor in 
  6198. future releases. URE (Universal Resource Editor) will become the editor of 
  6199. choice for creating and modifying dialogs and other resources. 
  6200.  
  6201.  
  6202. ΓòÉΓòÉΓòÉ 6.6.2. OpenDoc Samples ΓòÉΓòÉΓòÉ
  6203.  
  6204. The following OpenDoc source code is provided as is: 
  6205.  
  6206.      Container Part 
  6207.      Public Utilities Library 
  6208.  
  6209.  
  6210. ΓòÉΓòÉΓòÉ 6.6.2.1. Container Part ΓòÉΓòÉΓòÉ
  6211.  
  6212. The \TOOLKIT\BETA\SAMPLES\OPENDOC\PARTS\CNTNRPRT subdirectory contain the 
  6213. source code for the Container part. This part handler demonstrates changing the 
  6214. menu, embedding other parts, and drag and drop. 
  6215.  
  6216. See Known Limitations for a list of items to consider when using the Container 
  6217. part. 
  6218.  
  6219.  
  6220. ΓòÉΓòÉΓòÉ 6.6.2.1.1. Known Limitations ΓòÉΓòÉΓòÉ
  6221.  
  6222. The Container part has the following known limitations. Note that the behavior 
  6223. described below will be exhibited by all samples which subclass from the 
  6224. Container part. 
  6225.  
  6226.      A SYS3175 error occurs when you select Open As->Details from the 
  6227.       Container part's View menu.  This error will close the document. 
  6228.  
  6229.      A SYS3175 error occurs when saving a document containing a selected 
  6230.       Container part inside a root Container part.  It will occur if the 
  6231.       selected part subclasses from the Container part.  This error does not 
  6232.       occur if the selected part, for example, is the Cookbook part. 
  6233.  
  6234.      The Container part's Show As menu selection from the View menu does not 
  6235.       work correctly. This selection will incorrectly change the view type of 
  6236.       selected parts, when it should only change the activated part's view 
  6237.       type. The correct way to change the view type of selected parts would be 
  6238.       to select Show selection as from the Edit menu. 
  6239.  
  6240.      The Move selection from the Edit menu is incorrectly enabled for an 
  6241.       activated part. The Move selection, like all Edit menu selections, are 
  6242.       for selected parts only. 
  6243.  
  6244.      A part that subclasses from the Container part may not have its intrinsic 
  6245.       content clipped correctly to the embedded parts.  The Container part 
  6246.       correctly handles the clipping of its embedded parts, but there is no way 
  6247.       for a part that subclasses from the Container part to tell the Container 
  6248.       part how to clip the embedded parts to its own content. Generally, the 
  6249.       subclass part's intrinsic content will write over the embedded parts. 
  6250.  
  6251.  
  6252. ΓòÉΓòÉΓòÉ 6.6.2.2. Public Utilities Library ΓòÉΓòÉΓòÉ
  6253.  
  6254. The Public Utilities Library is located in the 
  6255. \TOOLKIT\BETA\SAMPLES\OPENDOC\PUBUTILS directory. 
  6256.  
  6257. The Public Utilities Library is a static library built using the IBM C Set ++ 
  6258. compiler. If you are not using that compiler, you must recompile the library 
  6259. using your own C++ compiler in order for the functions in the library to work 
  6260. properly. 
  6261.  
  6262. See the OpenDoc Programming Guide for more information on the public utilities. 
  6263.  
  6264.  
  6265. ΓòÉΓòÉΓòÉ 6.6.3. OpenDoc Tools ΓòÉΓòÉΓòÉ
  6266.  
  6267. The following OpenDoc tool is available for you to try: 
  6268.  
  6269.      PartMeister Code Generation Tool 
  6270.  
  6271.  
  6272. ΓòÉΓòÉΓòÉ 6.6.3.1. PartMeister Code Generation Tool ΓòÉΓòÉΓòÉ
  6273.  
  6274. PartMeister is an easy to use tool for creating OpenDoc components from 
  6275. templates.  It ships with a template for a container parent component. 
  6276.  
  6277. New components can be generated with the IDL, CPP, make and resource files 
  6278. being created. 
  6279.  
  6280. New templates can be added, providing greater function for the tool. 
  6281.  
  6282. See the PartMeister User's Guide for more information.  (You can access this 
  6283. book from the Desktop by opening the Toolkit folder and then the Try Me! 
  6284. folder.) 
  6285.  
  6286. This version of PartMeister is full function with the exception of being able 
  6287. to add and remove templates. This function is available in the downloadable 
  6288. version. 
  6289.  
  6290. Updated versions of PartMeister and additional templates are available at 
  6291. http://www.software.ibm.com/clubopendoc/ on the World Wide Web. 
  6292.  
  6293.  
  6294. ΓòÉΓòÉΓòÉ 6.6.4. Online Documentation ΓòÉΓòÉΓòÉ
  6295.  
  6296. This section describes the online documentation (located in \TOOLKIT\BETA\BOOK) 
  6297. available via the Try Me! component. You can access these books from the 
  6298. Desktop by opening the Try Me! folder which is located within the Toolkit 
  6299. folder. 
  6300.  
  6301.      Assembly Language Processor Reference Guide 
  6302.      PartMeister User's Guide 
  6303.      Universal Resource Editor User's Guide 
  6304.  
  6305.  
  6306. ΓòÉΓòÉΓòÉ 6.6.4.1. Assembly Language Processor Reference Guide ΓòÉΓòÉΓòÉ
  6307.  
  6308. This book describes how to install and run the ALP assembler. It provides a 
  6309. complete description of the following: 
  6310.  
  6311.      Installation 
  6312.      Command line syntax 
  6313.      Environment variables 
  6314.      Assembler return codes 
  6315.      Message descriptions and recovery 
  6316.  
  6317.  
  6318. ΓòÉΓòÉΓòÉ 6.6.4.2. PartMeister User's Guide ΓòÉΓòÉΓòÉ
  6319.  
  6320. This book provides guidance for using the PartMeister Code Generation Tool. 
  6321. Information is provided on the following topics: 
  6322.  
  6323.      Installation and Configuration 
  6324.      Creating a Template 
  6325.  
  6326.  
  6327. ΓòÉΓòÉΓòÉ 6.6.4.3. Universal Resource Editor User's Guide ΓòÉΓòÉΓòÉ
  6328.  
  6329. This book provides information on the following URE features: 
  6330.  
  6331.      Using the tool bar, status window, and symbol definition window 
  6332.      Using all dialogs 
  6333.      Designing an application with URE 
  6334.      Adding backing code to a design 
  6335.      Running a prototype 
  6336.      Adding new elements to a process 
  6337.      Rebuilding an application 
  6338.      Using PM control extensions 
  6339.      Setting styles and CUA guidelines 
  6340.      Creating resource DLLs 
  6341.      Using accelerators in a resource design. 
  6342.  
  6343.  
  6344. ΓòÉΓòÉΓòÉ 6.7. BETA ΓòÉΓòÉΓòÉ
  6345.  
  6346. The BETA component contains new tools, samples, online documentation and API 
  6347. support for function in future versions of the operating system. Execution of 
  6348. these pieces will typically require additional runtime support provided by a 
  6349. Beta version of OS/2 Warp. In general, Beta versions of the operating system 
  6350. are available on The Developer Connection for OS/2. However, there will be 
  6351. cases, as in this volume's entertainment samples and tools, where the runtime 
  6352. support is included with the Developer's Toolkit for OS/2 Warp. 
  6353.  
  6354. The content of this component can vary from volume to volume of The Developer 
  6355. Connection for OS/2. This component is not installed by default by the 
  6356. Developer's Toolkit for OS/2 installation program, but the component can be 
  6357. selected prior to installing. All files installed via the BETA component are 
  6358. installed in the \TOOLKIT\BETA directory structure by default. 
  6359.  
  6360. In this release of the Warp Toolkit, the BETA component includes Entertainment 
  6361. Support. 
  6362.  
  6363.  
  6364. ΓòÉΓòÉΓòÉ 6.7.1. BRender Samples ΓòÉΓòÉΓòÉ
  6365.  
  6366. There is one BRender sample in this release: 
  6367.  
  6368.  ROBOT - Walking Robot
  6369.  
  6370.  
  6371. ΓòÉΓòÉΓòÉ 6.7.1.1. ROBOT ΓòÉΓòÉΓòÉ
  6372.  
  6373. Note:  You must read the Argonaut Non-Commercial License before using this 
  6374.        sample. 
  6375.  
  6376.  ROBOT demonstrates how to use the new OS/2 version of Argonaut's BRender 
  6377.  technology. The BRender technology allows for real-time, three-dimensional 
  6378.  (3D) manipulation of actors. An actor can be the actual object model, a 
  6379.  camera, or a light. The objects are composed of polygons. These polygons can 
  6380.  be moved independently or in conjunction with each other. 
  6381.  
  6382.  While BRender provides all the functions necessary for the 3D transformation 
  6383.  of the scene, it requires that system-specific code be used for blitting to 
  6384.  the screen.  There are two parts to the design. One is the use of BRender to 
  6385.  perform the 3D manipulations, and the other is the use of DIVE (DIVE provides 
  6386.  a faster method of blitting) to allocate and display the image buffer and to 
  6387.  do any palette manipulations. 
  6388.  
  6389.  ROBOT does the following: 
  6390.  
  6391.      Performs initialization 
  6392.      Imports data for models, materials and textures 
  6393.      Renders the scene 
  6394.      Modifies object positions and orientations via user interface. 
  6395.  
  6396.  This sample demonstrates a robot walking. The mouse can be used to zoom in and 
  6397.  out and also to rotate the robot in 3D space. 
  6398.  
  6399.  
  6400. ΓòÉΓòÉΓòÉ 6.7.1.1.1. Starting ROBOT ΓòÉΓòÉΓòÉ
  6401.  
  6402. You can start ROBOT in two ways: 
  6403.  
  6404.      From the command line, change to the TOOLKIT\BETA\BRENDER\SAMPLES\ROBOT 
  6405.       subdirectory and type: 
  6406.  
  6407.               ROBOT
  6408.  
  6409.      From the Desktop, open the Toolkit folder and then: 
  6410.  
  6411.         1. Open the BETA folder. 
  6412.  
  6413.         2. Open the BRender folder. 
  6414.  
  6415.         3. Open the BRender Samples folder. 
  6416.  
  6417.         4. Double-click on Robot. 
  6418.  
  6419.  
  6420. ΓòÉΓòÉΓòÉ 6.7.2. BRender Tools ΓòÉΓòÉΓòÉ
  6421.  
  6422. The following BRender tool is provided in this release: 3DS2BR 
  6423.  
  6424.  
  6425. ΓòÉΓòÉΓòÉ 6.7.2.1. 3DS2BR ΓòÉΓòÉΓòÉ
  6426.  
  6427. 3DS2BR is a DOS command line tool which runs in protected mode using a DOS/4GW 
  6428. extender.  It expects a minimum configuration of a 486DX-33 PC with 8 MB RAM. 
  6429. Some large 3DS files can require more memory. 
  6430.  
  6431. In general terms, 3DS2BR reads any 3DS Binary file and interprets all elements 
  6432. of the file that relate to triangle mesh geometry, materials (including texture 
  6433. mapping), object hierarchy, lights and cameras.  It completely ignores 
  6434. information in the file that it is not designed to understand, such as certain 
  6435. undocumented elements saved by 3D Studio Releases 3 and 4, but this extra data 
  6436. does not cause 3DS2BR to malfunction.  For a detailed breakdown of what 3DS 
  6437. information is and is not converted, see the 3D Studio to BRender Converter 
  6438. online documentation for a description of Studio binary file elements. 
  6439.  
  6440. 3DS2BR converts the interpreted information to its nearest BRender equivalent 
  6441. and then, depending on the command line flags you have set, saves any one, two 
  6442. or all three of the following BRender .DAT. files:  a file containing all the 
  6443. meshes in the model; another file containing all the materials in the model and 
  6444. a third containing a BRender actor hierarchy which ties them together. These 
  6445. are saved separately for convenience, but they can be safely concatenated 
  6446. together to form one single .DAT file if you do not need this separation. 
  6447.  
  6448.  
  6449. ΓòÉΓòÉΓòÉ 6.7.3. Entertainment Samples ΓòÉΓòÉΓòÉ
  6450.  
  6451. The entertainment samples provided with this release are categorized as 
  6452. follows: 
  6453.  
  6454.      Audio Samples 
  6455.      Input Device Sample 
  6456.      Network Sample 
  6457.      Video Samples 
  6458.  
  6459.  If you have a question that is specific to the Entertainment Support provided 
  6460.  with the Warp Toolkit, refer to the entertainment online documentation as a 
  6461.  first step. If you still need assistance, call 1-800-553-1623 for technical 
  6462.  support. 
  6463.  
  6464.  
  6465. ΓòÉΓòÉΓòÉ 6.7.3.1. Audio Samples ΓòÉΓòÉΓòÉ
  6466.  
  6467. There are two audio samples in this release: 
  6468.  
  6469.      DAUDIO - Direct Audio 
  6470.      MIDISAMP - Real Time MIDI 
  6471.  
  6472.  
  6473. ΓòÉΓòÉΓòÉ 6.7.3.1.1. DAUDIO ΓòÉΓòÉΓòÉ
  6474.  
  6475. DAUDIO (direct audio) demonstrates the use of the direct audio interface. This 
  6476. high speed audio interface allows an application to send audio data directly to 
  6477. the amp-mixer device. The sample demonstrates the steps required to set up and 
  6478. use this new interface for playing and recording digital audio data. 
  6479.  
  6480. Hardware requirements: 
  6481.  
  6482.      Computer capable of running OS/2 Warp 
  6483.      Sound card 
  6484.      Speakers or headphones 
  6485.  
  6486.  Software requirements: 
  6487.  
  6488.      OS/2 Warp 
  6489.      Multimedia support 
  6490.  
  6491.  Note:  Refer to the README file located in the 
  6492.         \TOOLKIT\BETA\SAMPLES\ENTOOLKT\AUDIO\DAUDIO subdirectory for 
  6493.         instructions on building and compiling the Direct Audio sample with 
  6494.         VisualAge C++. 
  6495.  
  6496.  
  6497. ΓòÉΓòÉΓòÉ 6.7.3.1.1.1. Installing DAUDIO ΓòÉΓòÉΓòÉ
  6498.  
  6499. This version of the entertainment samples and tools includes Beta versions of 
  6500. AMPMXMCD.DLL and AUDIOSH.DLL. The original versions of these files (located in 
  6501. MMOS2\DLL) must be replaced with the Beta files before any application 
  6502. utilizing the direct audio interface can work. The Beta versions of these .DLL 
  6503. files are located in the TOOLKIT\BETA\SAMPLES\ENTOOLKT\AUDIO\DAUDIO 
  6504. subdirectory. To replace these .DLL files: 
  6505.  
  6506.      Double-click on Sound located in the Multimedia folder and ensure Enable 
  6507.       system sound is not selected. 
  6508.  
  6509.      Shut down and restart your system. This will unlock the AMPMXMCD.DLL and 
  6510.       AUDIOSH.DLL files. 
  6511.  
  6512.      Back up the AMPMXMCD.DLL and AUDIOSH.DLL files. 
  6513.  
  6514.      Copy the AMPMXMCD.DLL and AUDIOSH.DLL files (located in 
  6515.       \TOOLKIT\BETA\DLL) to the MMOS2\DLL subdirectory. 
  6516.  
  6517.      Double-click on Sound located in the Multimedia folder and select Enable 
  6518.       system sounds. 
  6519.  
  6520.  
  6521. ΓòÉΓòÉΓòÉ 6.7.3.1.1.2. Starting DAUDIO ΓòÉΓòÉΓòÉ
  6522.  
  6523. You can start DAUDIO in two ways: 
  6524.  
  6525.      From the command line, change to the 
  6526.       TOOLKIT\BETA\SAMPLES\ENTOOLKT\AUDIO\DAUDIO subdirectory and type: 
  6527.  
  6528.               DAUDIO
  6529.  
  6530.      From the Desktop, open the Toolkit folder and then: 
  6531.  
  6532.         1. Open the BETA folder 
  6533.  
  6534.         2. Open the Beta Entertainment Samples folder. 
  6535.  
  6536.         3. Open the Audio Samples folder. 
  6537.  
  6538.         4. Double-click on Direct Audio. 
  6539.  
  6540.  
  6541. ΓòÉΓòÉΓòÉ 6.7.3.1.2. MIDISAMP ΓòÉΓòÉΓòÉ
  6542.  
  6543. MIDISAMP illustrates the use of the real-time MIDI support programming concepts 
  6544. and usage of the new real-time MIDI API. This sample program illustrates the 
  6545. use of the new real-time MIDI API by initializing and setting up a small MIDI 
  6546. node network and subsequently sending a MIDI message from an application node 
  6547. to a hardware node, thereby demonstrating MIDI playback. 
  6548.  
  6549. Hardware requirements: 
  6550.  
  6551.      Computer capable of running OS/2 Warp 
  6552.      Speaker or headphones 
  6553.      Sound card 
  6554.  
  6555.       Note:  The README for MIDISAMP contains specific information regarding 
  6556.              device driver installation for running MIDISAMP. (This README is 
  6557.              located in the TOOLKIT\BETA\SAMPLES\ENTOOLKT\AUDIO\MIDI 
  6558.              subdirectory.) 
  6559.  
  6560.       Software requirements: 
  6561.         -  OS/2 Warp 
  6562.         -  Multimedia support 
  6563.         -  Standard MIDI file 
  6564.  
  6565.  
  6566. ΓòÉΓòÉΓòÉ 6.7.3.1.2.1. Known Limitations ΓòÉΓòÉΓòÉ
  6567.  
  6568. Currently, MIDISAMP might halt when another process attempts to play a sound 
  6569. (including system sounds) while the sample is running. Therefore, you should 
  6570. disable system sound before running MIDISAMP. To disable system sound, 
  6571. double-click on Sound located in the Multimedia folder and ensure Enable system 
  6572. sound is not selected. 
  6573.  
  6574.  
  6575. ΓòÉΓòÉΓòÉ 6.7.3.1.2.2. Starting MIDISAMP ΓòÉΓòÉΓòÉ
  6576.  
  6577. You can start MIDISAMP in two ways: 
  6578.  
  6579.      From the command line, change to the 
  6580.       TOOLKIT\BETA\SAMPLES\ENTOOLKT\AUDIO\MIDI subdirectory and type: 
  6581.  
  6582.               MIDISAMP filename.mid
  6583.  
  6584.       where: 
  6585.  
  6586.       filename.mid  is a MIDI file. 
  6587.  
  6588.      From the Desktop, open the Toolkit folder and then: 
  6589.  
  6590.         1. Open the BETA folder. 
  6591.  
  6592.         2. Open the Beta Entertainment Samples folder. 
  6593.  
  6594.         3. Open the Audio Samples folder. 
  6595.  
  6596.         4. Double-click on MIDI Samp. 
  6597.  
  6598.  Sample MIDI files are located in the MMOS2\SOUNDS subdirectory. 
  6599.  
  6600.  
  6601. ΓòÉΓòÉΓòÉ 6.7.3.2. Input Device Sample ΓòÉΓòÉΓòÉ
  6602.  
  6603. There is one input device sample in this release: 
  6604.  
  6605. JOYSTICK
  6606.  
  6607.  
  6608. ΓòÉΓòÉΓòÉ 6.7.3.2.1. JOYSTICK ΓòÉΓòÉΓòÉ
  6609.  
  6610. JOYSTICK (OS/2 Joystick device driver) allows an OS/2 Warp application to 
  6611. access the machine's game port.  The driver provides an interface or a set of 
  6612. API function calls for reading the joysticks. 
  6613.  
  6614. The Joystick API is implemented within the OS/2 Joystick device driver. This 
  6615. sample code shows how to use the OS/2 Joystick API and supports any two 
  6616. standard joysticks or one joystick with an advanced feature, such as a hatch or 
  6617. throttle control. 
  6618.  
  6619. Currently, there are no high-level versions of access to these functions, 
  6620. except through the IOCtl interface. This sample issues DosDevIOCtl to request 
  6621. status or sends commands to the OS/2 Joystick device driver. The API function 
  6622. number, an input parameter to DosDevIOCtl, is defined by the OS/2 Joystick 
  6623. device driver. 
  6624.  
  6625. JOYSTICK registers with the OS/2 Joystick device driver via DosOpen, with the 
  6626. device name "GAME$". It sends commands to the Joystick device driver via 
  6627. DosDevIOCtl after opening the new GAME$ device. These commands or IOCtls are 
  6628. subfunctions that are issued through DosDevIOCtl. 
  6629.  
  6630. This sample passes proper parameters and required data buffers or data 
  6631. structures when calling the API. The returned data is examined and a proper 
  6632. message is displayed to the screen. If the call is unsuccessful, an error 
  6633. message will be displayed and the sample will be terminated. 
  6634.  
  6635. JOYSTICK shows how to interface with the OS/2 Joystick API via the following 
  6636. functions: 
  6637.  
  6638.      Get the version number of the driver, API function x'01'. 
  6639.      Get the device parameters, API function x'02'. 
  6640.      Set the device parameters, API function x'03'. 
  6641.      Get the calibration values, API function x'04'. 
  6642.      Get the current joystick status, API function x'10'. 
  6643.      Get the joystick status at next button press, API function x'11'. 
  6644.      Get the joystick status at next sample, API function x'12'. 
  6645.  
  6646.  It also accesses other OS/2 functions such as: 
  6647.  
  6648.      DosOpen 
  6649.  
  6650.       DosOpen function must be called first to open the device driver name 
  6651.       (GAME$) prior to any API function call to the OS/2 Joystick device 
  6652.       driver. 
  6653.  
  6654.      DosClose 
  6655.  
  6656.       When the program terminates, DosClose must be called to end the program 
  6657.       properly. 
  6658.  
  6659.  Hardware Requirements: 
  6660.  
  6661.      Joystick device 
  6662.  
  6663.  Software Requirements: 
  6664.  
  6665.      OS/2 Warp 
  6666.      IBM C Set ++ compiler 2.x or 3.x 
  6667.      Developer's Toolkit 3.0 
  6668.      GAMEDD.SYS driver 
  6669.  
  6670.       Note:  An error message will be displayed and the program will terminate 
  6671.              if the driver is not installed. 
  6672.  
  6673.  The design of this sample is based on the set of functions provided by the 
  6674.  OS/2 Joystick device driver. 
  6675.  
  6676.  The CONFIG.SYS should include the following statement: 
  6677.  
  6678.   DEVICE=pathname\GAMEDD.SYS
  6679.  
  6680.  where: 
  6681.  
  6682.  pathname  is the path where GAMEDD.SYS is located. 
  6683.  
  6684.  
  6685. ΓòÉΓòÉΓòÉ 6.7.3.2.1.1. Starting JOYSTICK ΓòÉΓòÉΓòÉ
  6686.  
  6687. You can start JOYSTICK in two ways: 
  6688.  
  6689.      From the command line, change to the 
  6690.       TOOLKIT\BETA\SAMPLES\ENTOOLKT\INPUT\JOYSTICK subdirectory and type: 
  6691.  
  6692.               JOYSTICK
  6693.  
  6694.      From the Desktop, open the Toolkit folder and then: 
  6695.  
  6696.         1. Open the BETA folder. 
  6697.  
  6698.         2. Open the Beta Entertainment Samples folder. 
  6699.  
  6700.         3. Open the Input Samples folder. 
  6701.  
  6702.         4. Double-click on Joytest. 
  6703.  
  6704.  
  6705. ΓòÉΓòÉΓòÉ 6.7.3.3. Network Sample ΓòÉΓòÉΓòÉ
  6706.  
  6707. There is one network sample in this release: 
  6708.  
  6709.  TICTAC - TicTacToe
  6710.  
  6711.  
  6712. ΓòÉΓòÉΓòÉ 6.7.3.3.1. TICTAC ΓòÉΓòÉΓòÉ
  6713.  
  6714. TICTAC (TicTacToe) demonstrates how to use networking functions to develop a 
  6715. multiplayer, networked game. 
  6716.  
  6717. These networking support functions are referred to as OS/2 Warp networking 
  6718. functions. These functions support multiple transports such as TCP/IP, SPX/IPX, 
  6719. and OEM stacks. The current functions implement support for TCP/IP transport 
  6720. only. 
  6721.  
  6722. This sample uses the Warp networking functions to illustrate a 2-player 
  6723. TicTacToe game, where two players play against each other. 
  6724.  
  6725. Software Requirements: 
  6726.  
  6727.      WARPNET.DLL 
  6728.      OS/2 TCP/IP Version 2.x or higher 
  6729.      OS/2 Warp 3.0 or higher 
  6730.  
  6731.  
  6732. ΓòÉΓòÉΓòÉ 6.7.3.3.1.1. Starting TICTAC ΓòÉΓòÉΓòÉ
  6733.  
  6734. You can start TICTAC in two ways: 
  6735.  
  6736.      From the command line, change to the 
  6737.       TOOLKIT\BETA\SAMPLES\ENTOOLKT\NETWORK\TICTAC subdirectory and type: 
  6738.  
  6739.               TICTAC
  6740.  
  6741.      From the Desktop, open the Toolkit folder and then: 
  6742.  
  6743.         1. Open the BETA folder. 
  6744.  
  6745.         2. Open the Beta Entertainment Samples folder. 
  6746.  
  6747.         3. Open the Network Samples folder. 
  6748.  
  6749.         4. Double-click on TicTac. 
  6750.  
  6751.  
  6752. ΓòÉΓòÉΓòÉ 6.7.3.3.1.2. Warp Networking Functions ΓòÉΓòÉΓòÉ
  6753.  
  6754. The Warp networking functions represent a standard application layer interface 
  6755. to OS/2 entertainment software for networked multiplayer support. These 
  6756. networking functions support multiple transports such as TCP/IP, SPX/IPX, and 
  6757. OEM stacks. Warp networking functions enable creation of multiplayer networked 
  6758. entertainment software, such as games. This first implementation of the Warp 
  6759. networking functions uses TCP/IP. 
  6760.  
  6761. Warp networking functions define a well known UDP port just for entertainment 
  6762. software. The Warp networking game server or the daemon monitors the well-known 
  6763. game port and routes packets received at this port to the application. 
  6764.  
  6765. Note:  The TCP/IP Services file (located in \TCPIP\ETC\SERVICES) must be 
  6766.        modified to include the well known Game port entry. The modification 
  6767.        would look similar to the following: 
  6768.  
  6769.                 GAMED 5022/UDP #Well Known UDP based Game Port.
  6770.  
  6771.  
  6772. ΓòÉΓòÉΓòÉ 6.7.3.3.1.3. Known Limitations ΓòÉΓòÉΓòÉ
  6773.  
  6774. Currently, the receive function (WarpnetPackRecv) for Warp networking can only 
  6775. receive header information with no packet data. 
  6776.  
  6777.  
  6778. ΓòÉΓòÉΓòÉ 6.7.3.4. Video Samples ΓòÉΓòÉΓòÉ
  6779.  
  6780. There are two video samples in this release: 
  6781.  
  6782.      BEEHIVE - Sprite Compiler 
  6783.      FSDIVE - Full Screen DIVE 
  6784.  
  6785.  
  6786. ΓòÉΓòÉΓòÉ 6.7.3.4.1. BEEHIVE ΓòÉΓòÉΓòÉ
  6787.  
  6788. BEEHIVE (sprite compiler) demonstrates the power of compiled sprites by 
  6789. comparing the performance of a typical sprite algorithm against a compiled 
  6790. sprite. When the application first starts, it will display a single sprite 
  6791. moving in a random path around the application window. The user can add sprites 
  6792. by holding down the H key. As the sprite count increases, the effects on the 
  6793. frame rate will become evident. The actual frame rate will be displayed on the 
  6794. title bar. The user will be able to switch the application from compiled 
  6795. sprites to normal sprites from a menu. As the number of sprites increases, the 
  6796. difference in performance from compiled to normal sprites will become more 
  6797. dramatic. 
  6798.  
  6799. While DIVE offers a high performance API for blitting images to the screen, it 
  6800. was not designed for implementing sprites. BEEHIVE demonstrates a technique for 
  6801. implementing high performance sprites in a Warp/DIVE environment. The source 
  6802. code provided offers a good starting point for building a high performance 
  6803. sprite engine. 
  6804.  
  6805.  
  6806. ΓòÉΓòÉΓòÉ 6.7.3.4.1.1. Starting BEEHIVE ΓòÉΓòÉΓòÉ
  6807.  
  6808. You can start BEEHIVE in two ways: 
  6809.  
  6810.      From the command line, change to the 
  6811.       TOOLKIT\BETA\SAMPLES\ENTOOLKT\VIDEO\BEEHIVE subdirectory and type: 
  6812.  
  6813.               BEEHIVE
  6814.  
  6815.      From the Desktop, open the Toolkit folder and then: 
  6816.  
  6817.         1. Open the BETA folder. 
  6818.  
  6819.         2. Open the Beta Entertainment Samples folder. 
  6820.  
  6821.         3. Open the Video Samples folder. 
  6822.  
  6823.         4. Double-click on Beehive. 
  6824.  
  6825.  
  6826. ΓòÉΓòÉΓòÉ 6.7.3.4.2. FSDIVE ΓòÉΓòÉΓòÉ
  6827.  
  6828. FSDIVE (full-screen DIVE) demonstrates the use of multimedia's direct interface 
  6829. video extensions (DIVE) by repeatedly displaying a short animation sequence. 
  6830. The animation is performed by sequentially displaying a series of up to 16 bit 
  6831. maps in a PM window. You can display the default bit maps, shipped with the 
  6832. sample, or specify the bit maps by passing the file names as command line 
  6833. parameters. 
  6834.  
  6835. After the application is started, you can move or resize the window and observe 
  6836. the effects on the frame rate of the animation (displayed on the title bar). 
  6837.  
  6838. The latest version of the DIVE interface has been enhanced to allow an 
  6839. application to take over the display and change the resolution. This allows an 
  6840. application to run in a full screen without paying the performance penalty of 
  6841. maintaining a high-resolution Desktop. 
  6842.  
  6843. Note:  Before the full-screen DIVE sample can run in full-screen mode, 
  6844.        full-screen support must be installed by running GSRVINST.EXE (located 
  6845.        in \TOOLKIT\BETA\SAMPLES\ENTOOLKT\VIDEO\FSDIVE). See the GAMESRVR.DOC 
  6846.        file in the same directory for more details. Once the game server DLL is 
  6847.        installed, full-screen DIVE can be activated by using the Alt+Home hot 
  6848.        key. 
  6849.  
  6850.  
  6851. ΓòÉΓòÉΓòÉ 6.7.3.4.2.1. Starting FSDIVE ΓòÉΓòÉΓòÉ
  6852.  
  6853. You can start FSDIVE in two ways: 
  6854.  
  6855.      From the command line, change to the 
  6856.       TOOLKIT\BETA\SAMPLES\ENTOOLKT\VIDEO\FSDIVE subdirectory and type: 
  6857.  
  6858.               FSDIVE
  6859.  
  6860.      From the Desktop, open the Toolkit folder and then: 
  6861.  
  6862.         1. Open the BETA folder. 
  6863.  
  6864.         2. Open the Beta Entertainment Samples folder. 
  6865.  
  6866.         3. Open the Video Samples folder. 
  6867.  
  6868.         4. Double-click on FS Dive. 
  6869.  
  6870.  
  6871. ΓòÉΓòÉΓòÉ 6.7.4. Entertainment Tools ΓòÉΓòÉΓòÉ
  6872.  
  6873. The following Beta entertainment tool is available with this release: 
  6874.  
  6875.  RINST2 - REXX Installation Aid for Games DOS Programs
  6876.  
  6877.  
  6878. ΓòÉΓòÉΓòÉ 6.7.4.1. RINST2 ΓòÉΓòÉΓòÉ
  6879.  
  6880. RINST2 is a REXX tool that assists you in installing any entertainment or DOS 
  6881. program. It creates a Workplace Shell program, associates an icon, and sets the 
  6882. DOS setting as appropriate. It also offers the chance to run a setup program as 
  6883. part of the installation. This tool can easily be used to install any type of 
  6884. program. 
  6885.  
  6886. Note:  OS/2 REXX must be installed and loaded prior to running this program. 
  6887.  
  6888.  
  6889. ΓòÉΓòÉΓòÉ 6.7.4.1.1. Starting RINST2 ΓòÉΓòÉΓòÉ
  6890.  
  6891. To start RINST2 from the command line, change to the TOOLKIT\BETA\BIN 
  6892. subdirectory and type: 
  6893.  
  6894.   RINST2
  6895.  
  6896.  
  6897. ΓòÉΓòÉΓòÉ 6.7.4.1.2. Using RINST2 ΓòÉΓòÉΓòÉ
  6898.  
  6899. To customize this tool, use a text editor and change the title, Raptor, and the 
  6900. program name, RAP.EXE, to meet your needs. 
  6901.  
  6902.   title = "Raptor"
  6903.   rc    = SysFileTree("RAP.EXE",fspec,"FO")
  6904.  
  6905.  
  6906. ΓòÉΓòÉΓòÉ 6.7.5. Entertainment Online Documentation ΓòÉΓòÉΓòÉ
  6907.  
  6908. The following entertainment online books are located in the \TOOLKIT\BETA\BOOK 
  6909. subdirectory: 
  6910.  
  6911.      3D Studio to BRender Converter 
  6912.      BRender Concise Guide 
  6913.      BRender Technical Reference 
  6914.      Direct Audio Interface 
  6915.      Entertainment Programming Guide and Reference 
  6916.      Real Time MIDI 
  6917.  
  6918.  You can also access these books from the Desktop by opening the Toolkit 
  6919.  folder, then the BETA folder, and then the Beta Toolkit Information folder. 
  6920.  
  6921.  
  6922. ΓòÉΓòÉΓòÉ 6.7.5.1. 3D Studio to BRender Converter ΓòÉΓòÉΓòÉ
  6923.  
  6924. 3DS2BR is a DOS command line program for converting Autodesk 3D Studio(TM) 
  6925. (3DS) objects in the .3DS binary file format to one or more BRender .DAT format 
  6926. files. This document briefly describes the Version 1.1 release, detailing: 
  6927.  
  6928.      A general overview of the program 
  6929.      The platform required to run the program 
  6930.      The command line options and their effects 
  6931.      Differences from the previous release, Version 1.0 
  6932.      Processing of palettes, shade tables and texture maps you must do 
  6933.      Which 3DS features the program converts to exact BRender equivalents 
  6934.      Which 3DS features it modifies during conversion, as no exact equivalent 
  6935.       exists 
  6936.      Which 3DS features are specifically ignored in the conversion process 
  6937.  
  6938.  
  6939. ΓòÉΓòÉΓòÉ 6.7.5.2. BRender Concise Guide ΓòÉΓòÉΓòÉ
  6940.  
  6941. This book describes the BRender Power Rendering System Application Programming 
  6942. Interface (API), shows how the components of the BRender system work as a 
  6943. whole, and gives some idea of the capabilities of this system. 
  6944.  
  6945.  
  6946. ΓòÉΓòÉΓòÉ 6.7.5.3. BRender Technical Reference ΓòÉΓòÉΓòÉ
  6947.  
  6948. This book provides documentation support for the BRender Power Rendering 
  6949. System, a real-time, 3D graphics software by Argonaut Technologies Ltd. 
  6950.  
  6951. Argonaut's BRender 3D graphics API is only distributed under Argonaut's 
  6952. end-user license. The BRender Sample provides a limited license permitting you 
  6953. to evaluate the product. Should you wish to include the BRender Power Rendering 
  6954. System in your entertainment software, you need to contact Argonaut for a 
  6955. commercial license. 
  6956.  
  6957.  
  6958. ΓòÉΓòÉΓòÉ 6.7.5.4. Direct Audio Interface ΓòÉΓòÉΓòÉ
  6959.  
  6960. This book provides an overview of the direct audio interface including 
  6961. descriptions of messages and associated data types. 
  6962.  
  6963.  
  6964. ΓòÉΓòÉΓòÉ 6.7.5.5. Entertainment Programming Guide and Reference ΓòÉΓòÉΓòÉ
  6965.  
  6966. This book is written for the developer interested in writing entertainment 
  6967. software for OS/2 Warp. It contains information about video support, audio 
  6968. support, networking, and input devices used specifically in entertainment 
  6969. development, such as: 
  6970.  
  6971.      OS/2 Joystick device driver 
  6972.      Full-screen DIVE (Direct Interface Video Extensions) 
  6973.      Multiplayer networking API 
  6974.  
  6975.  
  6976. ΓòÉΓòÉΓòÉ 6.7.5.6. Real Time MIDI ΓòÉΓòÉΓòÉ
  6977.  
  6978. This book provides a discussion of the new real-time MIDI architecture and 
  6979. introduces the real-time MIDI application programming interface (API) including 
  6980. detailed descriptions of the real-time MIDI functions and associated data 
  6981. types. 
  6982.  
  6983.  
  6984. ΓòÉΓòÉΓòÉ 7. Programming Considerations ΓòÉΓòÉΓòÉ
  6985.  
  6986. Programming considerations apply for the following areas of the OS/2 Warp 
  6987. Version 3 operating system: 
  6988.  
  6989.      Important Considerations 
  6990.      Kernel Debugger 
  6991.      IBM Developer API Extensions for OS/2 
  6992.      OpenDoc for OS/2 
  6993.      Presentation Manager 
  6994.      SOM 
  6995.      VisualAge (C Set ++ Compiler) 
  6996.      Workplace Shell 
  6997.  
  6998.  
  6999. ΓòÉΓòÉΓòÉ 7.1. Important Considerations ΓòÉΓòÉΓòÉ
  7000.  
  7001. Included in this section are important items that can affect your future 
  7002. development efforts when using the IBM Developer's Toolkit for OS/2 Warp. 
  7003.  
  7004.      Compiling with IBM C/2 
  7005.      Compiling with VisualAge (C Set ++) 
  7006.      Known Limitations for the Container Part 
  7007.      Known Limitations for DIVE 
  7008.      Known Limitations for MIDISAMP 
  7009.      Known Limitations for Warp Networking 
  7010.      Replacing DLGEDIT - Dialog Editor 
  7011.      Replacing IPFCBIDI - Bidirectional Information Presentation Facility 
  7012.       Compiler 
  7013.  
  7014.  
  7015. ΓòÉΓòÉΓòÉ 7.1.1. Compiling with IBM C/2 ΓòÉΓòÉΓòÉ
  7016.  
  7017. The Developer's Toolkit for OS/2 Warp is not intended to be used with the IBM 
  7018. C/2, Version 1.1 compiler. If you choose to use that compiler, you should use 
  7019. version 1.3 of the Toolkit. (An unsupported version of that Toolkit is 
  7020. available on The Developer Connection for OS/2 CD.) 
  7021.  
  7022. The Warp Toolkit is intended to be used with the IBM VisualAge C++ compiler. 
  7023.  
  7024.  
  7025. ΓòÉΓòÉΓòÉ 7.1.2. Compiling with VisualAge (C Set ++) ΓòÉΓòÉΓòÉ
  7026.  
  7027. The latest version of the C Set ++ compiler (now called VisualAge C++) has been 
  7028. released. VisualAge C++ is shipped with its own version of the Warp Toolkit 
  7029. which includes updated sample makefiles. Changes to the sample makefiles relate 
  7030. to the new linker (ILINK) and to the new library (CPPOM30.LIB). 
  7031.  
  7032. With this version of the Warp Toolkit, the same sample makefile changes have 
  7033. been made so that you can use VisualAge C++.  However, the IBM Developer's API 
  7034. Extensions (DAPIE) and OpenDoc samples are an exception; those sample makefiles 
  7035. use the IBM C Set++ compiler.  Use the following instructions to build the 
  7036. DAPIE and OpenDoc samples with VisualAge C++: 
  7037.  
  7038.      Replace LINK386.EXE with ILINK.EXE 
  7039.      Add the /nofree option to the ILINK.EXE step 
  7040.  
  7041.       Note:  This /nofree option must be the first option listed. 
  7042.  
  7043.      Insert spaces in between each ILINK flag. For example: 
  7044.  
  7045.               LFLAGS = /MAP /CO /NOD
  7046.  
  7047.      Add the library CPPOM30I.LIB to the list of libraries to be linked. 
  7048.  
  7049.  Note:  When using ILINK, the /batch switch is no longer supported and must be 
  7050.         removed or linking will fail. 
  7051.  
  7052.  There are several other link switches that have been dropped but they only 
  7053.  cause link warnings. Only /batch causes linking to fail. 
  7054.  
  7055.  For the samples shipped with the Warp Toolkit that use VisualAge C++, you can 
  7056.  compile those samples with C Set ++ (using LINK386) by changing any reference 
  7057.  to CPPOM30.LIB to: 
  7058.  
  7059.     DDE4MBS.LIB
  7060.  
  7061.  and changing any reference to ILINK to LINK386. Note that the /nofree option 
  7062.  must be removed from the LINK386 statement. 
  7063.  
  7064.  
  7065. ΓòÉΓòÉΓòÉ 7.1.3. Known Limitations for the Container Part ΓòÉΓòÉΓòÉ
  7066.  
  7067. The Container part has the following known limitations. Note that the behavior 
  7068. described below will be exhibited by all samples which subclass from the 
  7069. Container part. 
  7070.  
  7071.      A SYS3175 error occurs when you select Open As->Details from the 
  7072.       Container part's View menu.  This error will close the document. 
  7073.  
  7074.      A SYS3175 error occurs when saving a document containing a selected 
  7075.       Container part inside a root Container part.  It will occur if the 
  7076.       selected part subclasses from the Container part.  This error does not 
  7077.       occur if the selected part, for example, is the Cookbook part. 
  7078.  
  7079.      The Container part's Show As menu selection from the View menu does not 
  7080.       work correctly. This selection will incorrectly change the view type of 
  7081.       selected parts, when it should only change the activated part's view 
  7082.       type. The correct way to change the view type of selected parts would be 
  7083.       to select Show selection as from the Edit menu. 
  7084.  
  7085.      The Move selection from the Edit menu is incorrectly enabled for an 
  7086.       activated part. The Move selection, like all Edit menu selections, are 
  7087.       for selected parts only. 
  7088.  
  7089.      A part that subclasses from the Container part may not have its intrinsic 
  7090.       content clipped correctly to the embedded parts.  The Container part 
  7091.       correctly handles the clipping of its embedded parts, but there is no way 
  7092.       for a part that subclasses from the Container part to tell the Container 
  7093.       part how to clip the embedded parts to its own content. Generally, the 
  7094.       subclass part's intrinsic content will write over the embedded parts. 
  7095.  
  7096.  
  7097. ΓòÉΓòÉΓòÉ 7.1.4. Known Limitations for DIVE ΓòÉΓòÉΓòÉ
  7098.  
  7099. DIVE will not run in direct mode on some systems if the video card requires 
  7100. bank switching. To determine if your video card requires bank switching, select 
  7101. Query Caps from the Options menu of the DIVE sample. If the Screen access 
  7102. requires bank switch field is set to YES, setting a lower Desktop resolution in 
  7103. the System Setup may fix this. 
  7104.  
  7105. DIVE may not work on some systems when the Desktop is set to 16 million colors. 
  7106. If your system is set to 16 million colors and DIVE does not work properly, try 
  7107. setting the Desktop to fewer colors in the System Setup. 
  7108.  
  7109.  
  7110. ΓòÉΓòÉΓòÉ 7.1.5. Known Limitations for MIDISAMP ΓòÉΓòÉΓòÉ
  7111.  
  7112. Currently, MIDISAMP might halt when another process attempts to play a sound 
  7113. (including system sounds) while the sample is running. Therefore, you should 
  7114. disable system sound before running MIDISAMP. To disable system sound, 
  7115. double-click on Sound located in the Multimedia folder and ensure Enable system 
  7116. sound is not selected. 
  7117.  
  7118.  
  7119. ΓòÉΓòÉΓòÉ 7.1.6. Known Limitations for Warp Networking ΓòÉΓòÉΓòÉ
  7120.  
  7121. Currently, the receive function (WarpnetPackRecv) for Warp networking can only 
  7122. receive header information with no packet data. 
  7123.  
  7124.  
  7125. ΓòÉΓòÉΓòÉ 7.1.7. Replacing DLGEDIT ΓòÉΓòÉΓòÉ
  7126.  
  7127. IBM supports the version of DLGEDIT (Dialog Editor) in this release of the Warp 
  7128. Toolkit, but will not be enhancing or otherwise changing the Dialog Editor in 
  7129. future releases. URE (Universal Resource Editor) will become the editor of 
  7130. choice for creating and modifying dialogs and other resources. 
  7131.  
  7132.  
  7133. ΓòÉΓòÉΓòÉ 7.1.8. Replacing IPFCBIDI ΓòÉΓòÉΓòÉ
  7134.  
  7135. The Developer's Toolkit for OS/2 Warp on The Developer Connection for OS/2 now 
  7136. includes only one version of the IPF compiler:  IPFC.EXE. The bidirectional 
  7137. version of IPFC.EXE (IPFCBIDI.EXE) is not included as a separate program with 
  7138. this version of the Warp Toolkit. However, the bidirectional support in 
  7139. IPFCBIDI has been integrated into the American version of the program, 
  7140. IPFC.EXE.  It will be necessary for you to modify any makefiles that reference 
  7141. IPFCBIDI.EXE to reference IPFC.EXE instead. 
  7142.  
  7143.  
  7144. ΓòÉΓòÉΓòÉ 7.2. Kernel Debugger Considerations ΓòÉΓòÉΓòÉ
  7145.  
  7146. New kernel debug files are available.  If you are installing the Warp Toolkit 
  7147. from The Developer's Connection for OS/2, you have two options: 
  7148.  
  7149.      Install the kernel debug files directly from the CD. 
  7150.      Create diskettes from which you can later install the kernel debug files. 
  7151.  
  7152.  To install directly from the CD, choose the appropriate Kernel Debugger 
  7153.  product in the Developer Connection for OS/2 Catalog and install it. This will 
  7154.  run an installation program that installs the appropriate kernel debug files. 
  7155.  
  7156.  To create kernel debug diskettes, choose the appropriate Kernel Debugger 
  7157.  product in the Developer Connection for OS/2 Catalog and install it. This will 
  7158.  bring up a utility that will create the kernel debug diskettes for you. Once 
  7159.  you have created the diskettes, insert the first kernel debug diskette into a 
  7160.  diskette drive, switch to that drive, and type INSTALL at an OS/2 command 
  7161.  prompt. 
  7162.  
  7163.  
  7164. ΓòÉΓòÉΓòÉ 7.3. IBM Developer API Extensions for OS/2 Considerations ΓòÉΓòÉΓòÉ
  7165.  
  7166. The information in the following sections should be noted for the IBM Developer 
  7167. API Extensions for OS/2: 
  7168.  
  7169.      Functions 
  7170.      Messages 
  7171.      Child Window Controls 
  7172.      Installation of Win32 DLLs 
  7173.      MDI Windows Menu Differences 
  7174.      Programmable Job Properties with Printers 
  7175.      Superclassing of Preregistered Classes 
  7176.      Text Mode Applications 
  7177.      World Coordinate Transformations 
  7178.      IBM Developer API Extensions and OpenDoc Interoperability 
  7179.  
  7180.  
  7181. ΓòÉΓòÉΓòÉ 7.3.1. Functions ΓòÉΓòÉΓòÉ
  7182.  
  7183. Take the following into consideration when using these IBM Developer API 
  7184. Extensions functions: 
  7185.  
  7186.      CreatePolygonRgn and CreatePolyPolygonRgn 
  7187.  
  7188.       Regions created with these functions will not display on machines with a 
  7189.       VGA video driver. 
  7190.  
  7191.      Chord and Pie 
  7192.  
  7193.       Chords and pie slices can only be drawn with solid pens. This is a 
  7194.       limitation of the way that PM draws chords and pie slices. 
  7195.  
  7196.      CreatePatternBrush 
  7197.  
  7198.       If you try to create a pattern brush from a black bit map (size 5 x 5) 
  7199.       and then PatBlt using this brush, you get dots in the output pattern on 
  7200.       some display drivers. 
  7201.  
  7202.      DrawText 
  7203.  
  7204.       Do not use DrawText to write text to a printer device context (DC).  Use 
  7205.       TextOut to write text to a printer DC. 
  7206.  
  7207.      RegQueryInfoKey 
  7208.  
  7209.       If parameter 3 (lpcchClass) is set to 0 and parameter 2 is NULL, 
  7210.       ERROR_INVALID_PARAM is returned. However, if parameter 3 is set to 0 and 
  7211.       parameter 2 is not NULL, the size of the needed buffer is returned in 
  7212.       parameter 3 and ERROR_INSUFFICIENT_BUFFER is returned. 
  7213.  
  7214.  
  7215. ΓòÉΓòÉΓòÉ 7.3.2. Messages ΓòÉΓòÉΓòÉ
  7216.  
  7217. IBM Developer API Extensions for OS/2 does not support the following messages: 
  7218.  
  7219.       WM_NCACTIVATE 
  7220.       WM_NCCALCSIZE 
  7221.       WM_NCCREATE 
  7222.       WM_NCDESTROY 
  7223.       WM_NCPAINT 
  7224.  
  7225.  
  7226. ΓòÉΓòÉΓòÉ 7.3.3. Child Window Controls ΓòÉΓòÉΓòÉ
  7227.  
  7228. IBM Developer API Extensions for OS/2 does not support borders and other frame 
  7229. controls on non-frame child windows. 
  7230.  
  7231.  
  7232. ΓòÉΓòÉΓòÉ 7.3.4. Installation of Win32 DLLs ΓòÉΓòÉΓòÉ
  7233.  
  7234. Although you cannot load Win32 DLLs in OS/2, if you try to, you will get a 
  7235. successful return code.  The load of the DLLs will fail despite the successful 
  7236. return code. 
  7237.  
  7238.  
  7239. ΓòÉΓòÉΓòÉ 7.3.5. MDI Windows Menu Differences ΓòÉΓòÉΓòÉ
  7240.  
  7241. For Multiple Document Interface (MDI) applications, as MDI child windows are 
  7242. opened, their titles are added to the specified window's pop-up menu.  The OS/2 
  7243. pop-up menu is slightly different from Windows NT.  These differences are as 
  7244. follows: 
  7245.  
  7246.      On OS/2, the child windows are not numbered in the pop-up menu, so there 
  7247.       is no key sequence for selecting an entry.  Instead, you must highlight 
  7248.       the menu entry to select it. 
  7249.  
  7250.      On NT, only the first 9 windows opened will be in the pop-up menu.  If a 
  7251.       10th window is opened, a menu entry "More Windows" is added to the 
  7252.       pop-up.  When you select this, you are taken to a dialog box  containing 
  7253.       the names of all the open MDI child windows.  On OS/2, this will not 
  7254.       happen.  There is no limit to the number of window titles which will fit 
  7255.       under the OS/2 pop-up menu. 
  7256.  
  7257.  
  7258. ΓòÉΓòÉΓòÉ 7.3.6. Programmable Job Properties with Printers ΓòÉΓòÉΓòÉ
  7259.  
  7260. When using IBM Developer API Extensions for OS/2, if you want to use 
  7261. programmable (dynamic) job properties with printers, you need the following: 
  7262.  
  7263.      An OS/2 application that supports programmable job properties 
  7264.  
  7265.      IBM Developer API Extensions for OS/2 pack 
  7266.  
  7267.      Printer driver update 
  7268.  
  7269.  If you received the IBM Developer API Extensions for OS/2 update on CD-ROM, 
  7270.  the printer drivers are on the CD-ROM.  If you downloaded the IBM Developer 
  7271.  API Extensions for OS/2 from a bulletin board service (BBS), you must download 
  7272.  the printer driver update. 
  7273.  
  7274.  
  7275. ΓòÉΓòÉΓòÉ 7.3.7. Superclassing of Preregistered Classes ΓòÉΓòÉΓòÉ
  7276.  
  7277. IBM Developer API Extensions for OS/2 applications do not support superclassing 
  7278. of the preregistered classes. 
  7279.  
  7280.  
  7281. ΓòÉΓòÉΓòÉ 7.3.8. Text Mode Applications ΓòÉΓòÉΓòÉ
  7282.  
  7283. IBM Developer API Extensions for OS/2 does not support text mode applications. 
  7284. If you have a text mode application, it will not run; it simply returns. 
  7285.  
  7286.  
  7287. ΓòÉΓòÉΓòÉ 7.3.9. World Coordinate Transformations ΓòÉΓòÉΓòÉ
  7288.  
  7289. Regions in PM are defined in device coordinates.  Therefore, IBM Developer API 
  7290. Extensions for OS/2 applications are restricted in that simple scaling and 
  7291. translation transformations will work with regions, but other transformations 
  7292. such as shearing and rotating will not. 
  7293.  
  7294.  
  7295. ΓòÉΓòÉΓòÉ 7.3.10. IBM Developer API Extensions for OS/2 and OpenDoc Interoperability ΓòÉΓòÉΓòÉ
  7296.  
  7297. This version of OpenDoc for OS/2 does not support the Win32 API.  Therefore, 
  7298. the IBM Developer API Extensions for OS/2 cannot be used to develop an OpenDoc 
  7299. part. However, a user can run an application which was created using the IBM 
  7300. Developer API Extensions for OS/2 while simultaneously editing or viewing an 
  7301. OpenDoc for OS/2 document. 
  7302.  
  7303.  
  7304. ΓòÉΓòÉΓòÉ 7.4. OpenDoc for OS/2 Considerations ΓòÉΓòÉΓòÉ
  7305.  
  7306. The following lists covers aspects of OpenDoc development that you will need to 
  7307. consider: 
  7308.  
  7309.      OpenDoc returns an exception for errors which should be caught by your 
  7310.       part using the SOM_TRY, SOM_CATCH and SOM_ENDTRY macros. Passing bad or 
  7311.       illegal parameters results in either an exception or a trap. 
  7312.  
  7313.      The Bento subsystem returns exceptions not listed in ERRORDEF.IDL. 
  7314.  
  7315.      Shape::IsRectangular does not work correctly when the shape contains 
  7316.       colinear points. 
  7317.  
  7318.      The FocusLib public utility does not handle off-screen canvases. 
  7319.  
  7320.      Focusing to a non-existent property in a storage unit, creates a property 
  7321.       with that name. 
  7322.  
  7323.      The OD_PRINT message is not dispatched to monitors or dispatch modules. 
  7324.  
  7325.      The document property pName cannot be set by sending an OSAEvent to the 
  7326.       rootpart. 
  7327.  
  7328.      There is no default accessor for Icon property of cPart class. 
  7329.  
  7330.  
  7331. ΓòÉΓòÉΓòÉ 7.5. Presentation Manager Considerations ΓòÉΓòÉΓòÉ
  7332.  
  7333. Making modifications to Microsoft Windows programs to enable dynamic data 
  7334. exchange (DDE) communications with PM programs helps facilitate a gradual 
  7335. migration of applications to PM. Not all data formats are automatically 
  7336. converted when using DDE between Windows programs and PM programs (DDE set 
  7337. public). 
  7338.  
  7339. The following formats are converted automatically by the OS/2 operating system: 
  7340.  
  7341.  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7342.  Γöé PM Application       Γöé Windows Application  Γöé
  7343.  Γöé Data Format          Γöé Interpretation       Γöé
  7344.  ΓöéΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓöéΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓöé
  7345.  Γöé PM bit map           Γöé Windows DIB          Γöé
  7346.  Γöé PM private           Γöé Windows private      Γöé
  7347.  Γöé Text                 Γöé Text (codepage 819)  Γöé
  7348.  Γöé---------------------------------------------Γöé
  7349.  Γöé Windows Application  Γöé PM Application       Γöé
  7350.  Γöé Data Format          Γöé Interpretation       Γöé
  7351.  Γö£ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓöéΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓöñ
  7352.  Γöé Text (codepage 819)  Γöé Text                 Γöé
  7353.  Γöé Windows DIB          Γöé PM Bit map           Γöé
  7354.  Γöé Windows private      Γöé PM Private           Γöé
  7355.  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7356.  
  7357. Note:  Code page translation (Windows 819 to/from current PM code page) is 
  7358.        performed for topic name in all cases. 
  7359.  
  7360. When data conversion is not automatically performed, programs can still 
  7361. communicate using dynamic data exchange if the two programs are able to perform 
  7362. the data conversion and pass private data formats. 
  7363.  
  7364.  
  7365. ΓòÉΓòÉΓòÉ 7.6. SOM Considerations ΓòÉΓòÉΓòÉ
  7366.  
  7367. This version of the Warp Toolkit contains a subset of the SOMobjects 
  7368. Developer's Toolkit. The following SOM programming considerations are briefly 
  7369. described: 
  7370.  
  7371.      Distributed SOM 
  7372.      SNGLICLS.HH 
  7373.      SOM 1.0 OIDL 
  7374.      SOM Bindings 
  7375.      SOM Coding Styles 
  7376.      SOM Compiler 
  7377.      SOM DLLs 
  7378.      SOM and OpenDoc for OS/2 
  7379.  
  7380.  
  7381. ΓòÉΓòÉΓòÉ 7.6.1. Distributed SOM (DSOM) ΓòÉΓòÉΓòÉ
  7382.  
  7383. New features, known limitations, and restrictions pertain to the Distributed 
  7384. SOM (DSOM).  There are briefly described as follows: 
  7385.  
  7386.      DSOM now provides a PM version of the REGIMPL tool for registering 
  7387.       servers in the implementation repository. It is called PREGIMPL and is 
  7388.       similar in functionality to REGIMPL. To invoke the tool, type PREGIMPL on 
  7389.       a command line. Remember to select File Save before exiting to commit any 
  7390.       changes made. 
  7391.  
  7392.      You are now able to control the number of request threads created per 
  7393.       server. The environment variable SOMDNUMTHREADS is used to indicate the 
  7394.       maximum size of the thread pool. If this environment variable is not set, 
  7395.       a separate thread will be created for each request. 
  7396.  
  7397.      The OUT_LIST_MEMORY, IN_COPY_VALUE, and DEPENDENT_LIST flags, used with 
  7398.       the dynamic invocation interface, are not supported. 
  7399.  
  7400.      Concurrent updates to the implementation repository are currently not 
  7401.       properly serialized, and can conflict. 
  7402.  
  7403.      The is_nil method of SOMDObject has been changed from a true method to a 
  7404.       procedure, so that is_nil can be safely invoked on a NULL object pointer. 
  7405.       As a result, the syntax for invoking is_nil from C++ client programs has 
  7406.       changed. The new syntax is: 
  7407.  
  7408.                 obj->is_nil(obj,env);
  7409.  
  7410.       Rather than: 
  7411.  
  7412.                 obj->is_nil(env);
  7413.  
  7414.       where: 
  7415.  
  7416.       obj            Is an object pointer of type SOMDObject. 
  7417.       env            Is of type Environment. 
  7418.  
  7419.  
  7420. ΓòÉΓòÉΓòÉ 7.6.2. SNGLICLS.HH ΓòÉΓòÉΓòÉ
  7421.  
  7422. The Direct To SOM version of the SNGLICLS header file cannot be emitted with 
  7423. the version of the SOM Compiler shipped with this Toolkit.  Therefore, this 
  7424. file (SNGLICLS.HH) is provided as part of the SOM Direct To SOM headers. 
  7425.  
  7426.  
  7427. ΓòÉΓòÉΓòÉ 7.6.3. SOM 1.0 OIDL Users ΓòÉΓòÉΓòÉ
  7428.  
  7429. If you need to recompile an OIDL class that overrides somDumpSelf or 
  7430. somDumpSelfInt, you will need to change the data type of the level parameter in 
  7431. the function definition in your C source program from INT to LONG.  For 
  7432. example, if your original class source program had a somDumpSelfInt override 
  7433. procedure similar to: 
  7434.  
  7435.   SOM_Scope void SOMLINK somDumpSelfInt(
  7436.        <className> *somSelf, INT level)
  7437.   {
  7438.     ...
  7439.   }
  7440.  
  7441. Change it to read: 
  7442.  
  7443.   SOM_Scope void SOMLINK somDumpSelfInt(
  7444.        <className> *somSelf, LONG level)
  7445.   {
  7446.    ...
  7447.   }
  7448.  
  7449. Because both INT and LONG data types require 4 bytes on OS/2, this does not 
  7450. affect the binary interface of your class. 
  7451.  
  7452.  
  7453. ΓòÉΓòÉΓòÉ 7.6.4. SOM Bindings ΓòÉΓòÉΓòÉ
  7454.  
  7455. The XH and H files shipped with this Warp Toolkit will only work with the IDL 
  7456. files shipped with this Toolkit. You will need to generate new SOM bindings if 
  7457. you install a new version of SOM. This means that the XH and H files will need 
  7458. to be re-emitted if new versions of the IDL files are made available. There are 
  7459. two steps that you will need to take. 
  7460.  
  7461. If you install version 'Y' of SOM on top of version 'X', you will need to 
  7462. generate SOM bindings for version 'Y'. The version 'X' SOM bindings are not 
  7463. guaranteed to be compatible with version 'Y'. 
  7464.  
  7465.      Use the SOMSTARS.CMD file to generate the SOMSTARS version of the 
  7466.       bindings. 
  7467.  
  7468.      Use SOMCORBA.CMD to generate the SOMCORBA version of the bindings. This 
  7469.       will upgrade your SOM bindings. 
  7470.  
  7471.  The command file WPIDL2XH.CMD is provided to upgrade Workplace Shell bindings, 
  7472.  for developers that upgrade their SOMobjects Toolkit in the future. This 
  7473.  command file emits the .XH header files from the Workplace Shell .IDL files. 
  7474.  The file should be invoked upon each of the .IDL files from the Warp Toolkit 
  7475.  to regenerate the headers for C++. This is only necessary when you upgrade to 
  7476.  a new level of the SOMobjects Toolkit. Invoking the SOM compiler's .XH emitter 
  7477.  on the Workplace Shell .IDL will not emit .XH files for you, because the 
  7478.  Workplace Shell classes currently only maintain passthru sections for .H files 
  7479.  for C. 
  7480.  
  7481.  
  7482. ΓòÉΓòÉΓòÉ 7.6.5. SOM Coding Styles ΓòÉΓòÉΓòÉ
  7483.  
  7484. There are two possible forms of C bindings for SOM programming: 
  7485.  
  7486.  SOMCORBA       The strict CORBA-compliant form in which pointer references 
  7487.                 ('*'s) are NOT exposed in object references. 
  7488.  
  7489.  SOMSTARS       The OIDL-compatible C++ form in which pointer references ('*'s) 
  7490.                 are visible in object references. 
  7491.  
  7492.  The SOMSTARS form is more appropriate if you plan to move your class 
  7493.  implementations from C to C++ at some future point. This choice will determine 
  7494.  how object references will appear in all of your C programs. For example, to 
  7495.  declare a reference to an instance of class Foo, you would code either: 
  7496.  
  7497.     Foo afoo;   /* Strict CORBA compliant form          */
  7498.     OR
  7499.     Foo *afoo; /* C++ migration or OIDL-compatible form */
  7500.  
  7501.  If you later decide to switch from one SOM coding style to the other, you will 
  7502.  have to convert any C code that you have already written in one style to the 
  7503.  other style. 
  7504.  
  7505.  The Workplace Shell uses the SOMSTARS version of the SOM header files. 
  7506.  Therefore, the Warp Toolkit installs the SOMSTARS version of the header files. 
  7507.  
  7508.  The Workplace Shell interface definition language (IDL) files (WP*.IDL) are 
  7509.  the counterparts for the documented Workplace Shell classes' SC files provided 
  7510.  with the OS/2 2.1 Toolkit. The WP*.H and WP*.XH files emitted from the 
  7511.  Workplace Shell's IDL files by the SOM compiler are also provided. 
  7512.  
  7513.  The OS/2 makefiles for the Workplace Shell Warp Toolkit samples are written 
  7514.  assuming the SOMSTARS style of coding. If you have the SOMobjects Toolkit, the 
  7515.  C samples provided with the SOMobjects Toolkit use the SOMCORBA style of 
  7516.  coding (these samples are not part of the IBM Developer's Toolkit for OS/2). 
  7517.  
  7518.  
  7519. ΓòÉΓòÉΓòÉ 7.6.6. SOM Compiler ΓòÉΓòÉΓòÉ
  7520.  
  7521. New features, known limitations, and restrictions pertain to the SOM compiler. 
  7522. There are briefly described as follows: 
  7523.  
  7524.      Mutually recursive IDL struct and union are not currently supported. The 
  7525.       following is an example of unsupported mutual recursion: 
  7526.  
  7527.               struct X;
  7528.               struct Y
  7529.               {
  7530.                 sequence<X> indirectSelf;
  7531.               };
  7532.               struct X
  7533.               {
  7534.                 sequence<Y> indirectSelf;
  7535.               };
  7536.  
  7537.      The C bindings do not permit the use of multiple methods with the same 
  7538.       name that also take an argument of data type VA_LIST within the same 
  7539.       module. For example, the following legal IDL will result in incorrect C 
  7540.       usage bindings: 
  7541.  
  7542.               module X
  7543.               {
  7544.                 interface Y
  7545.                 {
  7546.                   void Foo (in LONG f, in VA_LIST ap);
  7547.                 };
  7548.                 interface Z
  7549.                 {
  7550.                   void Foo (in LONG f, in VA_LIST ap);
  7551.                 };
  7552.               };
  7553.  
  7554.      The SOM C++ language bindings are built assuming use of the OS/2 C Set ++ 
  7555.       compiler, but other C++ compilers should be able to use these bindings as 
  7556.       well. For example, to use BCOS2 (the Borland C++ compiler for OS/2), use 
  7557.       -DSOMLINK=_syscall on the compile line, and make sure that SOMobjects' 
  7558.       include directory is consulted before BCOS2/include (because 
  7559.       BCOS2/include contains older SOM.H include files). 
  7560.  
  7561.      If the SOM compiler is interrupted by the user (using Ctrl+C, for 
  7562.       example), it sometimes leaves a temporary file with a .CTN extension in 
  7563.       the temporary directory specified by the SMTMP environmental variable. 
  7564.       These should be removed periodically. 
  7565.  
  7566.      When direct references to SOMFOREIGN types are made in an IDL struct or 
  7567.       union, the C or C++ language bindings are generated incorrectly. To refer 
  7568.       to a SOMFOREIGN type (for example, "somId") in a struct  or union  it is 
  7569.       necessary to supply a secondary typedef for "somId". For example: 
  7570.  
  7571.               #include <somobj.idl>
  7572.               struct S1
  7573.               {
  7574.                 somId badId;    /* Generates incorrect */
  7575.               };                /* C/C++ bindings      */
  7576.               #include <somobj.idl>
  7577.               typedef somId somId2;
  7578.               struct S1
  7579.               {
  7580.                 somId2 badId;   /* OK                  */
  7581.               };
  7582.  
  7583.  
  7584. ΓòÉΓòÉΓòÉ 7.6.7. SOM Dynamic Link Libraries (DLLs) ΓòÉΓòÉΓòÉ
  7585.  
  7586. When SOMobjects 2.0 (NOT the version shipped with this Warp Toolkit) is 
  7587. installed on OS/2 Warp Version 3, the LIBPATH, PATH, and DPATH environment 
  7588. variables in CONFIG.SYS are changed to place the SOMobjects directories before 
  7589. the operating system directories in the search order for DLLs, EXEs, and data 
  7590. files. This will cause the Workplace Shell to encounter an unrecoverable error 
  7591. the next time the system is restarted because it requires the SOM DLLs that are 
  7592. contained in the \OS2\DLL subdirectory. 
  7593.  
  7594. In order to allow SOMobjects 2.0 Workstation applications to run successfully, 
  7595. you must edit CONFIG.SYS and change the LIBPATH, PATH, and DPATH statements 
  7596. before restarting the system. These statements must be changed to place the 
  7597. operating system directories before the SOMobjects directories. 
  7598.  
  7599. Note:  This only applies to SOMobjects Workstation applications, not Workgroup 
  7600.        applications. 
  7601.  
  7602.  The same problem will occur for any application that ships SOMobjects 2.0 DLLs 
  7603.  if the application places its DLL directory first in the LIBPATH. Once again, 
  7604.  the workaround is to assure that the \OS2\DLL subdirectory is before any other 
  7605.  directory that contains earlier versions of the SOM DLLs. Any changes made to 
  7606.  the PATH and DPATH environment variables by the application installation must 
  7607.  also be reversed. 
  7608.  
  7609.  
  7610. ΓòÉΓòÉΓòÉ 7.6.8. SOM and OpenDoc for OS/2 ΓòÉΓòÉΓòÉ
  7611.  
  7612. This version of OpenDoc for OS/2 uses the SOM programming model.  In it, the 
  7613. headers are replaced by CORBA-compliant IDL files.  (CORBA stands for Common 
  7614. Object Request Broker Architecture.)  The following general guidelines can be 
  7615. used for writing code using SOM: 
  7616.  
  7617.      Class implementers should probably avoid pass-by-value object parameters 
  7618.       for methods.  If a class implementer does introduce such a method, then 
  7619.       the comments for the method should make very clear the extent to which 
  7620.       the argument might be modified, allowing the user to decide whether or 
  7621.       not a copy should be passed (and then destroyed, after the method 
  7622.       returns). 
  7623.  
  7624.      Class users should avoid by-value object assignment.  This will not work 
  7625.       if either the left-hand side or the right-hand side is a DSOM proxy. 
  7626.  
  7627.      Class implementers should support all public data with attributes. Then, 
  7628.       all public data access will be through attributes, which is supported by 
  7629.       DSOM. 
  7630.  
  7631.      Class implementers should avoid direct access to instance data from 
  7632.       within static member functions.  This will not work on proxies. A useful 
  7633.       and important rule of thumb is that, in general, the only code that 
  7634.       should access instance data directly should be code that implements 
  7635.       virtual or nonstatic methods. 
  7636.  
  7637.      Class implementers should be aware of the fact that static member data is 
  7638.       machine- (and perhaps process-) local.  Thus, static member data might or 
  7639.       might not make sense, depending on the purpose for the data. 
  7640.  
  7641.  One technique allowed by C++ that is strongly discouraged in SOM programming 
  7642.  involves invoking an object's ancestor method directly, instead of letting 
  7643.  normal method resolution via inheritance take its course. 
  7644.  
  7645.  For example, consider the following class inheritance tree: 
  7646.  
  7647.            A   B
  7648.            \ /
  7649.            C
  7650.            |
  7651.            D
  7652.  
  7653.  A method pointing to an instance of D can, in C++, explicitly ask for the foo 
  7654.  method of A with syntax like "A::foo".  This avoids the normal inheritance and 
  7655.  method resolution that would occur when sending the foo message to an instance 
  7656.  of D.  That instance may well invoke the foo method defined by A, but it would 
  7657.  first try to invoke one defined by D or C. 
  7658.  
  7659.  This invocation will not work in SOM, particularly if you are planning to 
  7660.  distribute objects.  The "instance of D" described in the previous paragraph 
  7661.  might not, in fact, be an instance of D but a proxy to an instance of D. 
  7662.  Normally, SOM hides the difference from you and properly accesses the D 
  7663.  instance data members when needed.  When you go around normal message sending 
  7664.  and method resolution, however, the data members for the "instance of D" would 
  7665.  not be properly bound to the code in A::foo. 
  7666.  
  7667.  Note that ancestor method calls for the target object of the current 
  7668.  method--"this" in C++ or "self" in SOM--work fine.  Only when you try to call 
  7669.  an ancestor method of an object that is not the current target object is there 
  7670.  an issue. 
  7671.  
  7672.  In general, if you find yourself using this technique, it is a strong 
  7673.  indication that your class inheritance hierarchy needs to be redesigned.  In 
  7674.  particular, you have probably collapsed two very different capabilities into 
  7675.  one class.  Factoring out the capabilities will yield two class hierarchies, 
  7676.  in which there is no need to skip over some classes to get to the right 
  7677.  methods in others. 
  7678.  
  7679.  
  7680. ΓòÉΓòÉΓòÉ 7.7. Workplace Shell Considerations ΓòÉΓòÉΓòÉ
  7681.  
  7682. When including an OBJECTID=<....> keyname=value pair in a setup string, you 
  7683. must specify it at the end of the setup string. 
  7684.  
  7685.  
  7686. ΓòÉΓòÉΓòÉ 8. System Debug Support ΓòÉΓòÉΓòÉ
  7687.  
  7688. This section introduces you to the interface that installs the debug kernel, 
  7689. symbol files, and debug version of the PM. It also describes tools that support 
  7690. your debugging efforts. The tools are categorized as follows: 
  7691.  
  7692.      Communications 
  7693.      The Debug Files 
  7694.      Installing the Debug Installation Program 
  7695.      MAPSYM 
  7696.      T (Terminal Emulator) 
  7697.  
  7698.  Additional details on the debug kernel can be found in the online Kernel Debug 
  7699.  Reference in the Toolkit Information folder. 
  7700.  
  7701.  
  7702. ΓòÉΓòÉΓòÉ 8.1. Communications ΓòÉΓòÉΓòÉ
  7703.  
  7704. Local and remote debugging are the same, except for the location of the system 
  7705. to be debugged (also known as the system under test). If the system to be 
  7706. debugged is close to the debug terminal, use a null modem cable to connect 
  7707. them. If the system is physically distant, use modems. The default setup for 
  7708. the communication port of the debug kernel is: 
  7709.  
  7710.  Baud rate        9600 
  7711.  Parity           none 
  7712.  Data bits        8 
  7713.  Stop bits        1 
  7714.  
  7715.  
  7716. ΓòÉΓòÉΓòÉ 8.2. The Debug Files ΓòÉΓòÉΓòÉ
  7717.  
  7718. The files described in this section are referred to as either a retail or debug 
  7719. version. "Retail" refers to the files that came with your OS/2 operating 
  7720. system; "debug" refers to the files that are part of the Kernel Debugger 
  7721. product. 
  7722.  
  7723. Several versions of the Kernel Debugger product are available on The Developer 
  7724. Connection for OS/2. Look for the following in the Developer Connection for 
  7725. OS/2 Catalog under the Developer Toolkits category: 
  7726.  
  7727.       Kernel Debugger for OS/2 2.x and Warp (IBM):  CD Install 
  7728.  
  7729.       Kernel Debugger for OS/2 for SMP v2.11 (IBM):  CD Install 
  7730.  
  7731.       Kernel Debugger for OS/2 for SMP v2.11 (IBM):  Diskettes 
  7732.  
  7733.       Kernel Debugger for OS/2 Japan 2.1 CSD BJC006 (IBM):  CD Install 
  7734.  
  7735.       Kernel Debugger for OS/2 Japan 2.11 (IBM):  CD Install 
  7736.  
  7737.       Kernel Debugger for OS/2 ServicePak XR06300 v2.1 (IBM):  CD Install 
  7738.  
  7739.       Kernel Debugger for OS/2 2.11 (IBM):  Diskettes 
  7740.  
  7741.       Kernel Debugger for OS/2 Warp with WIN-OS2 (IBM):  Diskettes 
  7742.  
  7743.       Kernel Debugger for OS/2 Warp Version 3 (IBM):  Diskettes 
  7744.  
  7745.  
  7746. ΓòÉΓòÉΓòÉ 8.2.1. Debug Kernel ΓòÉΓòÉΓòÉ
  7747.  
  7748. The debug kernel, a special version of the OS/2 kernel, makes it possible to 
  7749. set breakpoints and trace programs. It also permits the use of symbolic 
  7750. addresses. You can interact with the debug kernel by using a modem or null 
  7751. modem and a second asynchronous debug terminal. 
  7752.  
  7753. Note:  You can only use the debug kernel files with the version of the OS/2 
  7754.        operating system with which they are associated. 
  7755.  
  7756.  
  7757. ΓòÉΓòÉΓòÉ 8.2.2. Debug Presentation Manager Interface ΓòÉΓòÉΓòÉ
  7758.  
  7759. The debug PM interface is a special version of the PM DLLs. The debugger 
  7760. detects errors in your PM application and issues messages to the terminal. This 
  7761. interface is not required to run the debug kernel. 
  7762.  
  7763.  
  7764. ΓòÉΓòÉΓòÉ 8.3. Installing the Debug Installation Program ΓòÉΓòÉΓòÉ
  7765.  
  7766. The menu-based debug installation program installs debug replacement files for 
  7767. the kernel and the PM interface. Once the program is installed, you can install 
  7768. other debug files, or restore retail files, from an OS/2 command prompt. 
  7769.  
  7770. During initial installation, two files are copied to the root directory of your 
  7771. specified installation drive: 
  7772.  
  7773.  DBINST.CMD               A command file that can be executed separately. This 
  7774.                           file calls DBUGINST.EXE with the requested 
  7775.                           installation drive as a command-line argument. 
  7776.  
  7777.  DBUGINST.EXE             This executable file is the user interface. The user 
  7778.                           can choose which parts of the debug system to 
  7779.                           install, or which parts to restore to the retail 
  7780.                           version. 
  7781.  
  7782.  
  7783. ΓòÉΓòÉΓòÉ 8.3.1. Selecting Installation Options ΓòÉΓòÉΓòÉ
  7784.  
  7785. The user interface consists of a menu that provides installation choices in 
  7786. three optional parts. It also provides the ability to restore two of those 
  7787. parts to their corresponding retail versions. 
  7788.  
  7789. The following is an illustration of the screen that appears: 
  7790.  
  7791. When prompted to enter a debug installation option, choose the options in the 
  7792. order they appear on the screen. 
  7793.  
  7794. Review Editing the CONFIG.SYS File after your selections are complete. 
  7795.  
  7796.  
  7797. ΓòÉΓòÉΓòÉ 8.3.2. Editing the CONFIG.SYS File ΓòÉΓòÉΓòÉ
  7798.  
  7799. When you complete the debug installation procedure, you may need to edit your 
  7800. CONFIG.SYS file. The following paragraphs explain: 
  7801.  
  7802. For the Debug Kernel: 
  7803.  
  7804. If you installed only the debug kernel, shutdown and restart your system. 
  7805.  
  7806. Restoring the Kernel: 
  7807.  
  7808. To restore the retail kernel, run the debug installation program and select the 
  7809. Restore retail kernel option. 
  7810.  
  7811. For the Debug Presentation Manager Interface: 
  7812.  
  7813. If you have installed the debug version of the PM interface, modify the DEVICE 
  7814. statement with the PMDD.SYS line as follows: 
  7815.  
  7816.   DEVICE=C:\OS2\DEBUG\DLL\PMDD.SYS  /Cn
  7817.  
  7818. The DEVICE statement includes the C drive as the installation drive and allows 
  7819. you to call the debug version of PMDD.SYS from the OS2\DEBUG\DLL subdirectory. 
  7820. The /C switch is set with n as the communication port for the debug output. 
  7821.  
  7822. Modify the LIBPATH statement by adding the DEBUG\DLL subdirectory as follows: 
  7823.  
  7824.   LIBPATH=C:\OS2\DEBUG\DLL; ...
  7825.  
  7826. Shut down and restart your system to have the changes take effect. 
  7827.  
  7828. Restoring the Presentation Manager Interface: 
  7829.  
  7830. To restore the retail PM, do the following: 
  7831.  
  7832.    1. Restore the device statement: 
  7833.  
  7834.               DEVICE=C:\OS2\PMDD.SYS
  7835.  
  7836.    2. Modify the LIBPATH statement by removing the DEBUG\DLL subdirectory. 
  7837.  
  7838.    3. Shut down and restart your system to have the changes take effect. 
  7839.  
  7840.  
  7841. ΓòÉΓòÉΓòÉ 8.4. MAPSYM ΓòÉΓòÉΓòÉ
  7842.  
  7843. MAPSYM is used to generate binary files that the debug kernel uses to associate 
  7844. a symbolic name with an address in memory. 
  7845.  
  7846.  
  7847. ΓòÉΓòÉΓòÉ 8.4.1. Starting MAPSYM ΓòÉΓòÉΓòÉ
  7848.  
  7849. MAPSYM creates public symbol (.SYM) files from map (.MAP) files. You must start 
  7850. MAPSYM from the directory in which the map file is located. An example of the 
  7851. syntax follows: 
  7852.  
  7853.   MAPSYM filename  [options]
  7854.  
  7855. where: 
  7856.  
  7857.  filename    Is the name of the map file. You do not have to type the .MAP 
  7858.              file-name extension. 
  7859.  
  7860.  options     Is the name of the MAPSYM option that modifies the action of 
  7861.              MAPSYM. 
  7862.  
  7863.  Note:  Be sure the .SYM files are in the same subdirectory as their 
  7864.         corresponding DLLs. 
  7865.  
  7866.  
  7867. ΓòÉΓòÉΓòÉ 8.5. T (Terminal Emulator) ΓòÉΓòÉΓòÉ
  7868.  
  7869. T is a terminal emulator and is used by the debug kernel to communicate with 
  7870. the system to be debugged. You can use any ASCII terminal emulator; the Warp 
  7871. Toolkit provides T. A terminal emulator allows a device, such as a personal 
  7872. computer, to enter and receive data from a computer system as if it were a 
  7873. particular type of attached terminal. For example, you use T to send and 
  7874. receive ASCII files. 
  7875.  
  7876. Hardware Requirements: 
  7877.  
  7878. Make sure your system has a properly installed asynchronous-port and 
  7879. communication-port driver, and that your CONFIG.SYS file has the following 
  7880. line: 
  7881.  
  7882.    DEVICE=C:\OS2\COM.SYS
  7883.  
  7884.  
  7885. ΓòÉΓòÉΓòÉ 8.5.1. Starting T ΓòÉΓòÉΓòÉ
  7886.  
  7887. You can start T at the command line by typing its executable name: 
  7888.  
  7889.   T
  7890.  
  7891. A blank screen appears. Press F1; a menu appears that allows you to: 
  7892.  
  7893.      Display function-key assignments 
  7894.      Set up communication-port parameters 
  7895.      Set the file name and start sending 
  7896.      View the text that has scrolled off the screen 
  7897.      Send the text that was written to a screen, to a file (capture mode) 
  7898.      Toggle to the capture mode 
  7899.      Set the file name or delete the current capture file 
  7900.      Exit from the terminal program. 
  7901.  
  7902.  Note:  Capture mode can be started automatically when T is executed by placing 
  7903.         the line: Capture=yes in the initialization file. 
  7904.  
  7905.  
  7906. ΓòÉΓòÉΓòÉ 9. Toolkit Support ΓòÉΓòÉΓòÉ
  7907.  
  7908. To ensure your success with the IBM Developer's Toolkit for OS/2 Warp, IBM 
  7909. offers you not only excellent online and printed documentation but also a 
  7910. "Getting Started" period. 
  7911.  
  7912. What kind of support can I expect? 
  7913.  
  7914. The IBM Developer's Toolkit for OS/2 Warp Technical Support Team can assist you 
  7915. with the following kind of activities during a 60-day period that we call your 
  7916. "Getting Started" period: 
  7917.  
  7918.      Installing and using the IBM Developer's Toolkit for OS/2 Warp 
  7919.      Reporting suspected system defects as a result of applying the IBM 
  7920.       Developer's Toolkit for OS/2 Warp. 
  7921.  
  7922.  When should I call? 
  7923.  
  7924.  As a first step, use the online or hardcopy guide and reference manuals. If 
  7925.  you still need assistance several options are available to you: 
  7926.  
  7927.      CompuServe: The dedicated Developer Connection section is located in the 
  7928.       IBM OS/2 Developer Forum 2. To obtain access to this section, please send 
  7929.       a note with your order number to the Developer Connection Administrator 
  7930.       at CompuServe user id 73423,2767. To access the forum: 
  7931.  
  7932.         1. Type GO OS2DF2 at the ! prompt 
  7933.  
  7934.         2. Select the Developer Connection section 
  7935.  
  7936.      Internet: Send questions or comments to devcon@vnet.ibm.com. 
  7937.  
  7938.      OS/2 BBS: The DEVCON CFORUM or OS2TLKIT CFORUM, under TalkLink, is a 
  7939.       feature under the IBMLink Commercial Services. 
  7940.  
  7941.      If you do not have access to either CompuServe, Internet, or OS/2 BBS, 
  7942.       then call us Monday through Friday between 8:00 a.m. and 5:00 p.m. your 
  7943.       time, excluding U.S. national holidays.  Here's how: 
  7944.  
  7945.         -  Locate your registration number for service entitlement on your 
  7946.            Customer Service and Support brochure. 
  7947.  
  7948.         -  Dial 1-800-992-4777. 
  7949.  
  7950.       You will be presented with pre-recorded help options. Request to speak to 
  7951.       a service representative who will make a note of your needs and dispatch 
  7952.       them to a technical support person. Your call will be returned before the 
  7953.       end of the next business day. 
  7954.  
  7955.  Your 60 days of "Getting Started" support begins with this call. 
  7956.  
  7957.  Note:  If you have a specific question regarding the Beta version 
  7958.         entertainment components, you can call 1-800-553-1623 for technical 
  7959.         support. 
  7960.  
  7961.  
  7962. ΓòÉΓòÉΓòÉ 9.1. OpenDoc for OS/2 Support ΓòÉΓòÉΓòÉ
  7963.  
  7964. This section explains how to access information about OpenDoc and provide 
  7965. feedback on the OpenDoc for OS/2 content of the Warp Toolkit. 
  7966.  
  7967.      CompuServe:  You can use CompuServe to provide feedback on OpenDoc. 
  7968.       Appends placed in this section will reach the OpenDoc development team. 
  7969.       To access the forum: 
  7970.  
  7971.         1. Type GO OS2DF1 at the ! prompt 
  7972.  
  7973.         2. Select "OpenDoc for OS/2," section 14. 
  7974.  
  7975.      Internet:  The Internet can also be used to send comments about OpenDoc. 
  7976.       Send comments to opendoc@austin.ibm.com. 
  7977.  
  7978.       Note:  This ID is not intended for technical support. 
  7979.  
  7980.      World Wide Web:  You can get more information about OpenDoc at 
  7981.       http://www.software.ibm.com/clubopendoc/ or http://www.cilabs.org/ on the 
  7982.       World Wide Web. 
  7983.  
  7984.      CI Labs:  CI Labs has a server on the Internet to provide mailing lists 
  7985.       and other services for members and anyone interested in CI Labs 
  7986.       activities. 
  7987.  
  7988.       The sections that follow explain how to use the information provided by 
  7989.       CI Labs: 
  7990.  
  7991.         -  Using CI Labs Lists 
  7992.         -  Subscribing to a List 
  7993.         -  Removing Yourself From a List 
  7994.         -  Accessing ListProc Live 
  7995.         -  Using CI Labs Files 
  7996.         -  Finding CI Labs Information 
  7997.  
  7998.       Note:  The CI Labs support described here applies only to OpenDoc. 
  7999.  
  8000.  
  8001. ΓòÉΓòÉΓòÉ 10. Ordering Information ΓòÉΓòÉΓòÉ
  8002.  
  8003. This section provides ordering information for the following: 
  8004.  
  8005.      Hardcopy documentation 
  8006.      Hyperwise 
  8007.      The Developer Connection for OS/2 
  8008.  
  8009.  
  8010. ΓòÉΓòÉΓòÉ 10.1. Hardcopy Documentation ΓòÉΓòÉΓòÉ
  8011.  
  8012. The hardcopy books can be ordered weekdays between 8 a.m. and 8 p.m. (Eastern 
  8013. time). 
  8014.  
  8015. For Canada and the United States, the following telephone or fax numbers can be 
  8016. used for placing orders: 
  8017.  
  8018.  Country             Telephone Number 
  8019.  Canada              1-800-465-1234 
  8020.  United States       1-800-879-2755 
  8021.  
  8022.  For Asia/Pacific, Brazil, Europe, Japan, and Mexico mail your order to the 
  8023.  following address: 
  8024.  
  8025.   IBM Software Manufacturing Solutions (ISMS)
  8026.   Attn:  Direct Services
  8027.   Sortemosevey 21
  8028.   DK-3450 Alleroed
  8029.   Denmark
  8030.  
  8031.  When placing an order, please provide the part number (for books), quantity, 
  8032.  and your credit card information ready. Charge your order to one of the 
  8033.  following credit cards: 
  8034.  
  8035.      American Express 
  8036.      Diners Club 
  8037.      Discover 
  8038.      MasterCard 
  8039.      VISA 
  8040.  
  8041.  Please allow one to two weeks for delivery of telephone orders. 
  8042.  
  8043.  The following list describes books available in hardcopy that might be of 
  8044.  interest to users who develop applications for OS/2 Warp Version 3. The OS/2 
  8045.  Warp Version 3 Technical Library provides both guidance and reference 
  8046.  information and can be used for OS/2 Warp Version 3 development. The library 
  8047.  includes the following printed books: 
  8048.  
  8049.      Control Program Programming Guide 
  8050.      Control Program Programming Reference 
  8051.      Graphics Programming Interface Programming Guide 
  8052.      Graphics Programming Interface Programming Reference 
  8053.      Information Presentation Facility Programming Guide and Reference 
  8054.      Multimedia Application Programming Guide 
  8055.      Multimedia Programming Reference 
  8056.      Multimedia Subsystem Programming Guide 
  8057.      Presentation Manager Programming Guide - The Basics 
  8058.      Presentation Manager Programming Guide - Advanced Topics 
  8059.      Presentation Manager Programming Reference 
  8060.      REXX User's Guide 
  8061.      REXX Reference 
  8062.      Tools Reference 
  8063.      Workplace Shell Programming Guide 
  8064.      Workplace Shell Programming Reference 
  8065.  
  8066.  Programming guide information is organized by topic and contains everything an 
  8067.  application developer needs--function details, data structures, and message 
  8068.  descriptions--to design, write, and build function into an OS/2 application. 
  8069.  
  8070.  Programming reference information provides detailed descriptions of the 
  8071.  application programming interface (API) and contains remarks and examples to 
  8072.  assist application developers in implementing each function. 
  8073.  
  8074.  Application developers can choose to order the complete set of books, or order 
  8075.  individual books separately. 
  8076.  
  8077.  The information available in hardcopy is basically the same as the information 
  8078.  in the online books contained in this Warp Toolkit. 
  8079.  
  8080.  
  8081. ΓòÉΓòÉΓòÉ 10.1.1. OS/2 Technical Library Publications ΓòÉΓòÉΓòÉ
  8082.  
  8083. The following figure presents you each book of the OS/2 Version 3 Technical 
  8084. Library with its associated part number. To order the full set use part number 
  8085. G25H-7116. 
  8086.  
  8087.  
  8088. ΓòÉΓòÉΓòÉ 10.1.2. Control Program Programming Guide ΓòÉΓòÉΓòÉ
  8089.  
  8090. This book describes the components of the OS/2 Control Program--file systems, 
  8091. interprocess communication, program execution and control, memory management, 
  8092. exception and error management, device I/O--and how to create an OS/2 
  8093. application using Dosxxx functions. 
  8094.  
  8095. A hardcopy version of this book is available separately with order part number 
  8096. G25H-7101. 
  8097.  
  8098.  
  8099. ΓòÉΓòÉΓòÉ 10.1.3. Control Program Programming Reference ΓòÉΓòÉΓòÉ
  8100.  
  8101. This book provides the detailed descriptions for the Dosxxx functions of the 
  8102. OS/2 Control Program. 
  8103.  
  8104. A hardcopy version of this book is available separately with order part number 
  8105. G25H-7102. 
  8106.  
  8107.  
  8108. ΓòÉΓòÉΓòÉ 10.1.4. Graphics Programming Interface Programming Guide ΓòÉΓòÉΓòÉ
  8109.  
  8110. This book describes the concepts associated with graphical output--presentation 
  8111. spaces, device contexts, graphic primitives, fonts--and how to prepare 
  8112. graphical output for display and printing, using Gpixxx functions. 
  8113.  
  8114. A hardcopy version of this book is available separately with order part number 
  8115. G25H-7106. 
  8116.  
  8117.  
  8118. ΓòÉΓòÉΓòÉ 10.1.5. Graphics Programming Interface Programming Reference ΓòÉΓòÉΓòÉ
  8119.  
  8120. This book provides the detailed descriptions for the Gpixxx functions of the 
  8121. Graphics Programming Interface. 
  8122.  
  8123. A hardcopy version of this book is available separately with order part number 
  8124. G25H-7107. 
  8125.  
  8126.  
  8127. ΓòÉΓòÉΓòÉ 10.1.6. Information Presentation Facility Programming Guide and Reference ΓòÉΓòÉΓòÉ
  8128.  
  8129. This book describes the concepts--help windows, hypertext linking, 
  8130. author-controlled viewports, dynamic data formatting--and the functions used 
  8131. for implementing help in OS/2 applications. It describes how to create online 
  8132. help and information. It also contains an alphabetic list of IPF tags, symbols, 
  8133. and control words. The IPFC error messages, window functions, dynamic data 
  8134. formatting functions, and help manager messages and functions are included. 
  8135.  
  8136. A hardcopy version of this book is available separately with order part number 
  8137. G25H-7110. 
  8138.  
  8139.  
  8140. ΓòÉΓòÉΓòÉ 10.1.7. Multimedia Application Programming Guide ΓòÉΓòÉΓòÉ
  8141.  
  8142. This book describes the concepts associated with managing audio and video data 
  8143. and hardware using an extendable architecture that includes logical media 
  8144. devices (amplifier-mixer, waveform audio, MIDI sequencer, CD-audio, CD-XA, 
  8145. digital video, and videodisc) and I/O procedures for supporting various file 
  8146. formats. 
  8147.  
  8148. A hardcopy version of this book is available separately with order part number 
  8149. G25H-7112. 
  8150.  
  8151.  
  8152. ΓòÉΓòÉΓòÉ 10.1.8. Multimedia Programming Reference ΓòÉΓòÉΓòÉ
  8153.  
  8154. This book describes the media control interface, PM graphic push buttons, 
  8155. secondary windows functions, multimedia I/O services, and subsystem services 
  8156. for synchronization and streaming. 
  8157.  
  8158. A hardcopy version of this book is available separately with order part number 
  8159. G25H-7114. 
  8160.  
  8161.  
  8162. ΓòÉΓòÉΓòÉ 10.1.9. Multimedia Subsystem Programming Guide ΓòÉΓòÉΓòÉ
  8163.  
  8164. This book describes the subsystem components--media control driver, stream 
  8165. handler, and I/O procedure--that support a multimedia device. 
  8166.  
  8167. A hardcopy version of this book is available separately with order part number 
  8168. G25H-7113. 
  8169.  
  8170.  
  8171. ΓòÉΓòÉΓòÉ 10.1.10. Presentation Manager Programming Guide - Advanced Topics ΓòÉΓòÉΓòÉ
  8172.  
  8173. This book describes the advanced features of a sophisticated OS/2 window 
  8174. application--font and file dialogs, containers, notebooks, hooks, dynamic data 
  8175. exchange, direct manipulation--and how to implement them, using Winxxx and 
  8176. other PM functions. 
  8177.  
  8178. A hardcopy version of this book is available separately with order part number 
  8179. G25H-7104. 
  8180.  
  8181.  
  8182. ΓòÉΓòÉΓòÉ 10.1.11. Presentation Manager Programming Guide - The Basics ΓòÉΓòÉΓòÉ
  8183.  
  8184. This book describes the components of a basic OS/2 window application--windows 
  8185. and message queues, window controls such as scroll bars, title bars, and 
  8186. menus--and how to create them using Winxxx functions. 
  8187.  
  8188. A hardcopy version of this book is available separately with order part number 
  8189. G25H-7103. 
  8190.  
  8191.  
  8192. ΓòÉΓòÉΓòÉ 10.1.12. Presentation Manager Programming Reference ΓòÉΓòÉΓòÉ
  8193.  
  8194. This book provides the detailed descriptions for Winxxx and other functions of 
  8195. the OS/2 PM. 
  8196.  
  8197. A hardcopy version of this book is available separately with order part number 
  8198. G25H-7105. 
  8199.  
  8200.  
  8201. ΓòÉΓòÉΓòÉ 10.1.13. REXX Reference ΓòÉΓòÉΓòÉ
  8202.  
  8203. This book provides detailed descriptions of the REXX functions. 
  8204.  
  8205. A hardcopy version of this book is available separately with order part number 
  8206. S10G-6268. 
  8207.  
  8208.  
  8209. ΓòÉΓòÉΓòÉ 10.1.14. REXX User's Guide ΓòÉΓòÉΓòÉ
  8210.  
  8211. This book describes the REXX programming language and provides examples for 
  8212. writing programs using REXX. 
  8213.  
  8214. A hardcopy version of this book is available separately with order part number 
  8215. S10G-6269. 
  8216.  
  8217.  
  8218. ΓòÉΓòÉΓòÉ 10.1.15. Tools Reference ΓòÉΓòÉΓòÉ
  8219.  
  8220. This book describes the tools that are included in the IBM Developer's Toolkit 
  8221. for OS/2 Warp. 
  8222.  
  8223. A hardcopy version of this book is available separately with order part number 
  8224. G25H-7111. 
  8225.  
  8226.  
  8227. ΓòÉΓòÉΓòÉ 10.1.16. Workplace Shell Programming Guide ΓòÉΓòÉΓòÉ
  8228.  
  8229. This book describes the concepts associated with object-oriented programming 
  8230. for the OS/2 operating system--System Object Model (SOM), Workplace Shell 
  8231. classes and methods--and how to create object-oriented applications for the 
  8232. OS/2 Desktop. 
  8233.  
  8234. A hardcopy version of this book is available separately with order part number 
  8235. G25H-7108. 
  8236.  
  8237.  
  8238. ΓòÉΓòÉΓòÉ 10.1.17. Workplace Shell Programming Reference ΓòÉΓòÉΓòÉ
  8239.  
  8240. This book provides the detailed descriptions of the Workplace Shell 
  8241. object-oriented programming interface. 
  8242.  
  8243. A hardcopy version of this book is available separately with order part number 
  8244. G25H-7109. 
  8245.  
  8246.  
  8247. ΓòÉΓòÉΓòÉ 10.2. Hyperwise ΓòÉΓòÉΓòÉ
  8248.  
  8249. IBM has announced Hyperwise Version 2.0.  Hyperwise is a WYSIWYG editor for 
  8250. development of OS/2 and Windows application helps and online books.  Its drag 
  8251. and drop methods are far superior to the old tagging methods. Hyperwise Version 
  8252. 2.0 runs on OS/2 Warp and incorporates audio, video, graphics and animation 
  8253. files into its helps and books.  The new features for version 2.0 are as 
  8254. follows: 
  8255.  
  8256.      Enhanced search 
  8257.      Enhanced performance and usability 
  8258.      HTML Export 
  8259.      RTF Import 
  8260.      Spellcheck 
  8261.      Tutor/2 (an interactive tutorial manager) 
  8262.  
  8263.  To obtain the latest pricing information or to order Hyperwise Version 2.0, 
  8264.  contact your IBM Authorized Remarketer, or IBM marketing representative. 
  8265.  Upgrade paths from Hyperwise Version 1.0 are also available from some 
  8266.  participating IBM Authorized Remarketers. 
  8267.  
  8268.  Hyperwise Version 2.0 
  8269.  Product Order Number          30H1731 
  8270.  Phone Number                  1-800-3IBMOS2 (1-800-342-6672) or Indelible Blue 
  8271.                                at 1-800-776-8284 
  8272.  
  8273.  
  8274. ΓòÉΓòÉΓòÉ 10.3. The Developer Connection for OS/2 ΓòÉΓòÉΓòÉ
  8275.  
  8276. The following telephone or fax numbers can be used for placing orders. 
  8277.  
  8278. When placing an order, please have your credit card information ready. Charge 
  8279. your order to one of the following credit cards: 
  8280.  
  8281.      American Express 
  8282.      Diners Club 
  8283.      Discover 
  8284.      MasterCard 
  8285.      VISA 
  8286.  
  8287.  Please allow one to two weeks for delivery of telephone orders. 
  8288.  
  8289.  For more information double-click mouse button 2 anywhere on the map. 
  8290.  
  8291.  
  8292. ΓòÉΓòÉΓòÉ 11. Give Us Your Feedback! ΓòÉΓòÉΓòÉ
  8293.  
  8294. We're interested in your feedback. Send us your comments and suggestions by 
  8295. taking the Toolkit Survey and sending us Book Comments. 
  8296.  
  8297.  
  8298. ΓòÉΓòÉΓòÉ 11.1. Toolkit Survey ΓòÉΓòÉΓòÉ
  8299.  
  8300.  
  8301. ΓòÉΓòÉΓòÉ 11.2. Book Comments ΓòÉΓòÉΓòÉ
  8302.  
  8303. If there is something you like or dislike about any of the Warp Toolkit books, 
  8304. please let us know! You can use one of the methods listed below to send your 
  8305. comments to IBM. Include the book title and the name of the topic you are 
  8306. commenting on. 
  8307.  
  8308. The comments you send should pertain only to the information in the book and 
  8309. its presentation. To request additional publications, ask questions, or make 
  8310. comments about the functions of IBM products or systems, talk to your IBM 
  8311. reseller or IBM marketing representative. 
  8312.  
  8313. When you send comments to IBM, you grant IBM a nonexclusive right to use or 
  8314. distribute your comments in any way it believes appropriate without incurring 
  8315. any obligation to you. 
  8316.  
  8317. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8318. ΓöéCompuServe          Γöé[72410,624]                   Γöé
  8319. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8320. ΓöéInternet            Γöédevcon@vnet.ibm.com           Γöé
  8321. Γöé                    Γöéos2books@vnet.ibm.com         Γöé
  8322. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8323. ΓöéIBMMAIL             ΓöéUSIB66YK at IBMMAIL           Γöé
  8324. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8325.  
  8326. In addition to sending us electronic mail, you can also participate in these 
  8327. forums monitored by IBM: 
  8328.  
  8329. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8330. ΓöéProvider            ΓöéForum name                                        Γöé
  8331. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8332. ΓöéCompuServe          ΓöéOS/2 Developer Forum 1 - Developer Documentation  Γöé
  8333. Γöé                    Γöé(GO OS2DF1)                                       Γöé
  8334. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8335. ΓöéOS/2 BBS            ΓöéDEVCON CFORUM                                     Γöé
  8336. ΓöéTalkLink            Γöé                                                  Γöé
  8337. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8338. ΓöéIBM Internal        ΓöéOS2PUBS FORUM                                     Γöé
  8339. Γöé                    Γöé(IBMPC Conferencing Facility)                     Γöé
  8340. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8341.  
  8342.  
  8343. ΓòÉΓòÉΓòÉ 12. Notices ΓòÉΓòÉΓòÉ
  8344.  
  8345. Fourth Edition (January 1996) 
  8346.  
  8347. The following paragraph does not apply to the United Kingdom or any country 
  8348. where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS 
  8349. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  8350. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  8351. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  8352. do not allow disclaimer of express or implied warranties in certain 
  8353. transactions, therefore, this statement may not apply to you. 
  8354.  
  8355. This publication could include technical inaccuracies or typographical errors. 
  8356. Changes are periodically made to the information herein; these changes will be 
  8357. incorporated in new editions of the publication. IBM may make improvements 
  8358. and/or changes in the product(s) and/or the program(s) described in this 
  8359. publication at any time. 
  8360.  
  8361. It is possible that this publication may contain reference to, or information 
  8362. about, IBM products (machines and programs), programming, or services that are 
  8363. not announced in your country.  Such references or information must not be 
  8364. construed to mean that IBM intends to announce such IBM products, programming, 
  8365. or services in your country. 
  8366.  
  8367. Requests for technical information about IBM products should be made to your 
  8368. IBM reseller or IBM marketing representative. 
  8369.  
  8370.  
  8371. ΓòÉΓòÉΓòÉ 12.1. Copyright Notices ΓòÉΓòÉΓòÉ
  8372.  
  8373. (C)Copyright International Business Machines Corporation 1995, 1996. All rights 
  8374. reserved. 
  8375. Note to U.S. Government Users - Documentation related to restricted rights - 
  8376. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  8377. Schedule Contract with IBM Corp. 
  8378.  
  8379.  
  8380. ΓòÉΓòÉΓòÉ 12.2. Disclaimers ΓòÉΓòÉΓòÉ
  8381.  
  8382. References in this publication to IBM products, programs, or services do not 
  8383. imply that IBM intends to make these available in all countries in which IBM 
  8384. operates. Any reference to an IBM product, program or service is not intended 
  8385. to state or imply that only that IBM product, program, or service may be used. 
  8386. Subject to IBM's valid intellectual property or other legally protectable 
  8387. rights, any functionally equivalent product, program, or service may be used 
  8388. instead of the IBM product, program, or service. The evaluation and 
  8389. verification of operation in conjunction with other products, except those 
  8390. expressly designated by IBM, are the responsibility of the user. 
  8391.  
  8392. IBM may have patents or pending patent applications covering subject matter in 
  8393. this document. The furnishing of this document does not give you any license to 
  8394. these patents. You can send license inquiries, in writing, to: 
  8395.  
  8396.       IBM Director of Licensing 
  8397.       IBM Corporation 
  8398.       500 Columbus Avenue 
  8399.       Thornwood, NY  10594 
  8400.       U.S.A. 
  8401.  
  8402.  Licensees of this program who wish to have information about it for the 
  8403.  purpose of enabling:  (i) the exchange of information between independently 
  8404.  created programs and other programs (including this one) and (ii) the mutual 
  8405.  use of the information which has been exchanged, should contact IBM 
  8406.  Corporation, Department RM1A, 1000 N.W. 51st Street, Boca Raton, FL 33431, 
  8407.  U.S.A.  Such information may be available, subject to appropriate terms and 
  8408.  conditions, including in some cases, payment of a fee. 
  8409.  
  8410.  
  8411. ΓòÉΓòÉΓòÉ 12.3. Trademarks ΓòÉΓòÉΓòÉ
  8412.  
  8413. The following terms are trademarks of the IBM Corporation in the United States 
  8414. or other countries or both: 
  8415.  
  8416.  AVC                      OS/2 
  8417.  C/2                      Presentation Manager 
  8418.  Common User Access       SOMobjects 
  8419.  C Set ++                 Ultimotion 
  8420.  CUA                      VisualAge 
  8421.  Hyperwise                WIN-OS2 
  8422.  IBM                      Workplace Shell 
  8423.  
  8424.  The following terms are trademarks of other companies: 
  8425.  
  8426.  1-2-3/G                  Lotus Development Corp. 
  8427.  American Express         American Express Incorporated 
  8428.  Ami Pro                  Lotus Development Corp. 
  8429.  Apple                    Apple Computer, Inc. 
  8430.  Bento                    Apple Computer, Inc. 
  8431.  Borland C++              Borland International, Inc. 
  8432.  BRender                  Argonaut Technologies Limited 
  8433.  C++                      American Telephone and Telegraph Company 
  8434.  CompuServe               CompuServe Incorporated 
  8435.  CORBA                    Object Management Group, Inc. 
  8436.  Diners Club              Diners Club of America 
  8437.  Discover                 Sears, Roebuck and Co. 
  8438.  MASM                     Microsoft Corporation 
  8439.  MasterCard               MasterCard International, Incorporated 
  8440.  Microsoft                Microsoft Corporation 
  8441.  OpenDoc                  Apple Computer, Inc. 
  8442.  VISA                     VISA International Services Association 
  8443.  Win32                    Microsoft Corporation 
  8444.  Windows NT               Microsoft Corporation 
  8445.  WinTV                    Hauppauge Computer Works, Inc. 
  8446.  WordPerfect              WordPerfect Corporation 
  8447.  
  8448.  Windows is a trademark of Microsoft Corporation. 
  8449.  
  8450.  Other company, product, and service names, which may be denoted by a double 
  8451.  asterisk (**), may be trademarks or service marks of others. 
  8452.  
  8453.  
  8454. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\BETA Subdirectories ΓòÉΓòÉΓòÉ
  8455.  
  8456.  BETA                         - Contains Beta versions of new
  8457.   Γöé                             tools, samples, and online books
  8458.   Γö£ΓöÇ\BIN                      - Beta versions of new tools
  8459.   Γö£ΓöÇ\BOOK                     - Beta versions of new online books
  8460.   Γö£ΓöÇ\BRENDER                  - BRender samples and tools
  8461.   Γöé   Γö£ΓöÇ\DAT                  - Miscellaneous data files for
  8462.   Γöé   Γöé                          BRender samples
  8463.   Γöé   Γö£ΓöÇ\INCLUDE              - BRender header files
  8464.   Γöé   Γö£ΓöÇ\LIB                  - BRender libraries
  8465.   Γöé   Γö£ΓöÇ\SAMPLES              - BRender samples
  8466.   Γöé   Γöé   ΓööΓöÇ\ROBOT            - Robot Walking sample
  8467.   Γöé   ΓööΓöÇ\TOOLS                - BRender tools (3DS2BR.EXE)
  8468.   Γö£ΓöÇ\DLL                      - Dynamic link library (.DLL) files
  8469.   Γö£ΓöÇ\H                        - C and C++ header files
  8470.   Γö£ΓöÇ\HELP                     - Help (.HLP) files
  8471.   Γö£ΓöÇ\ICON                     - Icon (.ICO) files
  8472.   Γö£ΓöÇ\LIB                      - Import library (LIB) files
  8473.   Γö£ΓöÇ\SAMPLES                  - Beta versions of new samples
  8474.   Γöé   Γö£ΓöÇ\ENTOOLKT             - Entertainment samples
  8475.   Γöé   Γöé   Γö£ΓöÇ\AUDIO            - Audio samples
  8476.   Γöé   Γöé   Γöé   Γö£ΓöÇ\DAUDIO       - Direct Audio sample
  8477.   Γöé   Γöé   Γöé   ΓööΓöÇ\MIDI         - Real Time MIDI sample
  8478.   Γöé   Γöé   Γö£ΓöÇ\INPUT            - Input Device sample
  8479.   Γöé   Γöé   Γöé   ΓööΓöÇ\JOYSTICK     - Joystick sample
  8480.   Γöé   Γöé   Γö£ΓöÇ\NETWORK          - Networking sample
  8481.   Γöé   Γöé   Γöé   ΓööΓöÇ\TICTAC       - TicTacToe sample
  8482.   Γöé   Γöé   ΓööΓöÇ\VIDEO            - Video sample
  8483.   Γöé   Γöé       Γö£ΓöÇ\BEEHIVE      - Sprite Compiler sample
  8484.   Γöé   Γöé       ΓööΓöÇ\FSDIVE       - Full-Screen DIVE sample
  8485.   Γöé   Γö£ΓöÇ\OPENDOC              - Contains OpenDoc samples
  8486.   Γöé   Γöé   Γö£ΓöÇ\PARTS            - Contains OpenDoc part handler samples
  8487.   Γöé   Γöé   Γöé   Γö£ΓöÇ\CNTNRPART    - Container part handler sample
  8488.   Γöé   Γöé   Γöé   ΓööΓöÇ\PUBLIC       - Common files for OpenDoc part
  8489.   Γöé   Γöé   Γöé                      handler samples
  8490.   Γöé   Γöé   ΓööΓöÇ\PUBUTILS         - Public utilities library source
  8491.   Γöé   Γöé                          code
  8492.   Γöé   ΓööΓöÇ\URE
  8493.   Γöé       Γö£ΓöÇ\3D         - 3D PM control URE sample
  8494.   Γöé       Γö£ΓöÇ\3DLINE     - 3D line PM control URE sample
  8495.   Γöé       Γö£ΓöÇ\CHKMARK    - Check mark PM control URE sample
  8496.   Γöé       Γö£ΓöÇ\CLRWHEEL   - Color wheel PM control URE sample
  8497.   Γöé       Γö£ΓöÇ\COMBOBOX   - Super combination box PM control URE sample
  8498.   Γöé       Γö£ΓöÇ\COMBOMIN   - Super minimized combination box PM
  8499.   Γöé       Γöé                control URE sample
  8500.   Γöé       Γö£ΓöÇ\CONTROL    - Custom PM control URE sample
  8501.   Γöé       Γö£ΓöÇ\DATEFLD    - Date entry field PM control URE sample
  8502.   Γöé       Γö£ΓöÇ\EXAMPLE    - Main entry point PM control URE sample
  8503.   Γöé       Γö£ΓöÇ\FRAME      - Shadowed frame PM control URE sample
  8504.   Γöé       Γö£ΓöÇ\IMAGEBTN   - Image button PM control URE sample
  8505.   Γöé       Γö£ΓöÇ\LIB        - URE import library (LIB) files
  8506.   Γöé       Γö£ΓöÇ\LISTBOX    - Super list box PM control URE sample
  8507.   Γöé       Γö£ΓöÇ\MULTIWIN   - Multiple window URE sample
  8508.   Γöé       Γö£ΓöÇ\NOTEBOOK   - Notebook URE sample
  8509.   Γöé       Γö£ΓöÇ\NOTEPAGE   - Super notebook custom PM control URE sample
  8510.   Γöé       Γö£ΓöÇ\PATTERN    - Pattern PM control URE sample
  8511.   Γöé       Γö£ΓöÇ\RESOURCE
  8512.   Γöé       Γöé   ΓööΓöÇ\386    - Contains assembly language code for URE
  8513.   Γöé       Γöé                resource-only samples
  8514.   Γöé       Γö£ΓöÇ\SPINBTN    - Super spin button PM control URE sample
  8515.   Γöé       Γö£ΓöÇ\STATBAR    - Status bar PM control URE sample
  8516.   Γöé       Γö£ΓöÇ\SUPPORT    - Window controls support code
  8517.   Γöé       Γö£ΓöÇ\TESTBED    - Test bed URE application sample
  8518.   Γöé       ΓööΓöÇ\TIMEFLD    - Time entry field PM control URE sample
  8519.   ΓööΓöÇ\SYS                - System (.SYS) files
  8520.  
  8521.  
  8522. ΓòÉΓòÉΓòÉ <hidden> Ordering Information - Supplement ΓòÉΓòÉΓòÉ
  8523.  
  8524. When calling from the following countries: 
  8525.  
  8526. The Developer Connection for OS/2 can be ordered from the following countries. 
  8527. For Asia/Pacific, please ensure that you dial the international access code 
  8528. applicable to your country before the listed phone number. Note that 61 is the 
  8529. country code for Australia. 
  8530.  
  8531.  Country                Telephone Number 
  8532.  Asia/Pacific           61 2 3547684 
  8533.    Fax                  61 2 3547766 
  8534.  Canada                 1-800-561-5293 (Toll free) 
  8535.  Germany                0 130 812177   (Toll free) 
  8536.  United States          1-800-6DEVCON 
  8537.                         (Toll free: 1-800-633-8266) 
  8538.   Fax                   1-303-330-7655 
  8539.  
  8540.  In Central and South America: 
  8541.  
  8542.  Country                Telephone Number 
  8543.  Argentina              01-313-0014 
  8544.  Bolivia                02-351840 
  8545.  Brazil                 0800-111205  (Toll free) 
  8546.    Fax                  011-886-3222 
  8547.  Chile                  02-633-4400 
  8548.  Colombia               01-257-0111 
  8549.  Costa Rica             223-6222 
  8550.  Dominican Republic     566-5161 
  8551.  Ecuador                02-565100 
  8552.  El Salvador            02-985011 
  8553.  Guatemala              02-315859 
  8554.  Honduras               32-2319 
  8555.  Mexico                 91-800-00316  (Toll free) 
  8556.   Mexico City           (525) 627-1111 
  8557.  Panama                 02-639977 
  8558.  Paraguay               021-444094 
  8559.  Peru                   014-366345 
  8560.  Uruguay                02-923617 
  8561.  Venezuela              02-908-8901 
  8562.  
  8563.  In Europe: 
  8564.  
  8565.  The Developer Connection for OS/2 can be ordered direct from IBM SPC in 
  8566.  Denmark (45 is the country code) if you are calling outside the countries 
  8567.  listed above. Please ensure that you dial the international access code 
  8568.  applicable to your country before dialing the appropriate phone number. This 
  8569.  applies to both telephone and fax orders. Operators speaking the following 
  8570.  languages are available: 
  8571.  
  8572.  Language               Telephone 
  8573.  Spoken                 Number 
  8574.  Danish                 45 4 8101300 
  8575.  Dutch                  45 4 8101400 
  8576.  English                45 4 8101500 
  8577.  Finnish                45 4 8101650 
  8578.  French                 45 4 8101200 
  8579.  German                 45 4 8101000 
  8580.  Italian                45 4 8101600 
  8581.  Norwegian              45 4 8101250 
  8582.  Spanish                45 4 8101100 
  8583.  Swedish                45 4 8101150 
  8584.  Fax                    45 4 8142207 
  8585.  
  8586.  
  8587. ΓòÉΓòÉΓòÉ <hidden> Using CI Labs Lists ΓòÉΓòÉΓòÉ
  8588.  
  8589. The CILABS-ANNOUNCE list carries announcements from CI Labs. CILABS-INTEREST is 
  8590. a forum for interested parties to discuss CI Labs issues. Other lists discuss 
  8591. specific CI Labs technologies, requirements for additional technologies, or 
  8592. component software in general. 
  8593.  
  8594. The following CI Labs lists are open to the public: 
  8595.  
  8596.  CILABS-ANNOUNCE          A read-only list with announcements regarding 
  8597.                           Component Integration Laboratories (CI Labs). 
  8598.  
  8599.  CILABS-INTEREST          Open forum for nontechnical discussion of CI Labs 
  8600.                           plans and charter. 
  8601.  
  8602.  OPENDOC-ANNOUNCE         A read-only list with announcements of broad 
  8603.                           interests regarding OpenDoc. 
  8604.  
  8605.  OPENDOC-INTEREST         Open forum for discussion of OpenDoc, a compound 
  8606.                           document architecture. 
  8607.  
  8608.  BENTO-ANNOUNCE           A read-only list with announcements of broad 
  8609.                           interests regarding Bento. 
  8610.  
  8611.  BENTO-INTEREST           Open forum for discussion of Bento, a persistent 
  8612.                           object storage format. 
  8613.  
  8614.  
  8615. ΓòÉΓòÉΓòÉ <hidden> Subscribing to a List ΓòÉΓòÉΓòÉ
  8616.  
  8617. To subscribe to a list, send either of the following commands in the first line 
  8618. (not on the "Subject:" line) of the body of e-mail addressed to 
  8619. ListProc@CILABS.ORG: 
  8620.  
  8621.   subscribe <PUT-LIST-NAME-HERE> <Your full name>
  8622.  or 
  8623.  
  8624.   join <PUT-LIST-NAME-HERE> <Your full name>
  8625.  For example: 
  8626.  
  8627.   subscribe OPENDOC-INTEREST Jane Doe
  8628.   join OPENDOC-INTEREST Jane Doe
  8629.  
  8630. ListProc only requires your name, and will take your e-mail address from the 
  8631. header information.  After ListProc@CILABS.ORG processes your request, you will 
  8632. receive a "Welcome" message that will give you more information on the list, 
  8633. information on other resources that might be available to you, and a password 
  8634. for use with a live session. (See Accessing ListProc Live for more 
  8635. information.) 
  8636.  
  8637. The line following your request may need to read, "end" to prevent confusion if 
  8638. your mailer adds a signature to your message. 
  8639.  
  8640.  
  8641. ΓòÉΓòÉΓòÉ <hidden> Removing Yourself From a List ΓòÉΓòÉΓòÉ
  8642.  
  8643. If you do not feel that you should be on this list, or later want to remove 
  8644. yourself from a list, send the following command in the first line (not on the 
  8645. "Subject:" line) of the body of an e-mail to ListProc@CILABS.ORG: 
  8646.  
  8647.   which PARTIAL-EMAIL-ADDRESS
  8648.  
  8649. ListProc@CILABS.ORG will return an email with a list of all of the lists to 
  8650. which you currently subscribe. Then send either of the following commands in 
  8651. the first line of the body of an e-mail to ListProc@CILABS.ORG for each list 
  8652. you wish to unsubscribe: 
  8653.  
  8654.   unsubscribe PUT-LIST-NAME-HERE
  8655.  or 
  8656.  
  8657.   signoff PUT-LIST-NAME-HERE
  8658.  For example: 
  8659.  
  8660.   unsubscribe OPENDOC-INTEREST
  8661.  
  8662. The line following the your request may need to say "end" to prevent confusion 
  8663. if your mailer adds a signature to your message. 
  8664.  
  8665. If you are sending your unsubscribe request from the same account that you 
  8666. subscribed with, you will receive an acknowledgement from ListProc@CILABS.ORG 
  8667. that you have been unsubscribed.  If you unsubscribe from a different account, 
  8668. the list administrators will receive an unsubscribe approval request that might 
  8669. take a day or so to process. 
  8670.  
  8671. If you have trouble unsubscribing, you can send the command HELP to 
  8672. ListProc@CILABS.ORG, or send mail to CILABS@CILABS.ORG, and we will be glad to 
  8673. manually unsubscribe you from any lists that you do not wish to belong to. 
  8674.  
  8675.  
  8676. ΓòÉΓòÉΓòÉ <hidden> Accessing ListProc Live ΓòÉΓòÉΓòÉ
  8677.  
  8678. In addition to being able to subscribe, unsubscribe, and set list options 
  8679. through mail, ListProc allows subscribers to connect and modify their list 
  8680. options. 
  8681.  
  8682. In order to connect, you will require an ILP (Interactive ListProcessor) 
  8683. client. As clients are developed, we will make them available on the CILABS.ORG 
  8684. server. Announcements of new client releases will be sent to the 
  8685. CILABS-ANNOUNCE mailing list. 
  8686.  
  8687. If you have an ILP client, simply type: 
  8688.  
  8689.   ilp cilabs.org
  8690.  
  8691. You will be asked to provide an email address and the password sent to you upon 
  8692. initial subscription to CI Labs lists.  Once connected as a subscriber, you 
  8693. will be able to set preferences for how you wish to receive your mail, get list 
  8694. statistics, and, of course, subscribe to and unsubscribe from lists. 
  8695.  
  8696.  
  8697. ΓòÉΓòÉΓòÉ <hidden> Using CI Labs Files ΓòÉΓòÉΓòÉ
  8698.  
  8699. CI Labs also maintains a number of files on FTP.CILABS.ORG, including 
  8700. information on OpenDoc, Bento specifications, and other information on CI Labs. 
  8701. These files are available via anonymous FTP at FTP.CILABS.ORG, via Mosaic or 
  8702. World Wide Web at ftp://ftp.cilabs.org/pub/, or via FTPMail. 
  8703.  
  8704. To request information on how to use FTPMail, send a message to 
  8705. FTPMAIL@CILABS.ORG with the single word HELP in the body of the message (again, 
  8706. commands in the "Subject:" line are not processed). 
  8707.  
  8708. If you are having difficulties finding information on CILABS.ORG, or have 
  8709. additional questions regarding how to access information from the 
  8710. FTP.CILABS.ORG server, please send mail to CILABS@CILABS.ORG. 
  8711.  
  8712. In the interim, we encourage you to add your name to one of CI Labs electronic 
  8713. mail information lists at CILABS.ORG or to download files from our server at 
  8714. FTP.CILABS.ORG. 
  8715.  
  8716.  
  8717. ΓòÉΓòÉΓòÉ <hidden> Finding CI Labs Information ΓòÉΓòÉΓòÉ
  8718.  
  8719. If for some reason you are unable to get files from our server, you can get an 
  8720. information packet by sending your mailing address to CILABS@CILABS.ORG or to 
  8721. this U.S. mail address: 
  8722.  
  8723.      Component Integration Laboratories, Inc.
  8724.      PO Box 61747
  8725.      Sunnyvale, CA 94088-1747
  8726.      (408) 864-0300 Telephone
  8727.      (408) 864-0380 Fax
  8728.  
  8729.  
  8730. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SOM Subdirectories ΓòÉΓòÉΓòÉ
  8731.  
  8732.   SOM              - SOM subdirectories
  8733.    Γöé
  8734.    Γö£ΓöÇ\BIN          - SOM executable (.EXE) files
  8735.    Γö£ΓöÇ\COMMON       - SOM common-file subdirectories,
  8736.    Γöé   Γöé             which contains the runtime files
  8737.    Γöé   Γö£ΓöÇ\DLL        common with OS/2 Warp Version 3
  8738.    Γöé   Γö£ΓöÇ\ETC
  8739.    Γöé   Γö£ΓöÇ\INSTALL
  8740.    Γöé   ΓööΓöÇ\SYSTEM
  8741.    Γö£ΓöÇ\INCLUDE      - SOM .IDL, .SC, .H, .XH, .HC, .HS,
  8742.    Γöé                 and .EFW header files
  8743.    Γö£ΓöÇ\LIB          - SOM library (.LIB & .DLL) files
  8744.    ΓööΓöÇ\MSG          - SOM message (.MSG) file
  8745.  
  8746.  
  8747. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES Subdirectories ΓòÉΓòÉΓòÉ
  8748.  
  8749.  \SAMPLES      - Contains common information for all
  8750.     Γöé            samples, as well as SAMPLES.DOC
  8751.     Γöé
  8752.     Γö£ΓöÇ\BIDI    - Bidirectional (BIDI) samples
  8753.     Γö£ΓöÇ\DAPIE   - IBM Developer API Extensions for OS/2 samples
  8754.     Γö£ΓöÇ\MM      - Multimedia samples
  8755.     Γö£ΓöÇ\OPENDOC - OpenDoc samples
  8756.     Γö£ΓöÇ\OS2     - Control Program samples
  8757.     Γö£ΓöÇ\PM      - Presentation Manager samples
  8758.     Γö£ΓöÇ\REXX    - Common information for the C-language REXX samples
  8759.     ΓööΓöÇ\WPS     - Workplace Shell samples
  8760.  
  8761.  
  8762. ΓòÉΓòÉΓòÉ <hidden> \SAMPLES ΓòÉΓòÉΓòÉ
  8763.  
  8764. \SAMPLES
  8765.   Γö£ΓöÇ\BIDI
  8766.   Γö£ΓöÇ\DAPIE
  8767.   Γö£ΓöÇ\MM
  8768.   Γö£ΓöÇ\OPENDOC
  8769.   Γö£ΓöÇ\OS2
  8770.   Γö£ΓöÇ\PM
  8771.   Γö£ΓöÇ\REXX
  8772.   ΓööΓöÇ\WPS
  8773.  
  8774.  
  8775. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\BIDI Subdirectories ΓòÉΓòÉΓòÉ
  8776.  
  8777.  \BIDI           - Contains the bidirectional (BIDI) samples
  8778.    Γö£ΓöÇ\ARABIC      - Contains the Arabic-specific BIDI samples
  8779.    Γöé   Γö£ΓöÇ\STYLE   - Arabic Style sample
  8780.    Γöé   ΓööΓöÇ\TELDIR  - Arabic Telephone Directory sample
  8781.    ΓööΓöÇ\HEBREW      - Contains the Hebrew-specific BIDI samples
  8782.        Γö£ΓöÇ\STYLE   - Hebrew Style sample
  8783.        ΓööΓöÇ\TELDIR  - Hebrew Telephone directory sample
  8784.  
  8785.  
  8786. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\MM Subdirectories ΓòÉΓòÉΓòÉ
  8787.  
  8788.  \MM            - Contains the Multimedia samples,templates,
  8789.    Γöé              and command tables
  8790.    Γö£ΓöÇ\ADMCT     - Waveform Audio Media Control Driver sample
  8791.    Γö£ΓöÇ\ASYMREC   - Asymmetric Recording sample
  8792.    Γö£ΓöÇ\AVCINST   - AVC I/O Procedure Installation sample
  8793.    Γö£ΓöÇ\CAPDLL    - Caption sample support files (DLL)
  8794.    Γö£ΓöÇ\CAPSAMP   - Caption sample
  8795.    Γö£ΓöÇ\CAPTION   - Caption Creation Utility program
  8796.    Γö£ΓöÇ\CASECONV  - Case Converter I/O procedure sample
  8797.    Γö£ΓöÇ\CDMCIDRV  - CD Audio Media Control Driver sample
  8798.    Γö£ΓöÇ\CF        - Control File templates
  8799.    Γö£ΓöÇ\CLOCK     - Memory Playlist sample
  8800.    Γö£ΓöÇ\CODEC     - Compressor/Decompressor sample
  8801.    Γö£ΓöÇ\DIVE      - Direct Interface Video Extensions sample
  8802.    Γö£ΓöÇ\DOUBPLAY  - Double Buffering Playlist sample
  8803.    Γö£ΓöÇ\DUET1     - Streaming Device Duet sample
  8804.    Γö£ΓöÇ\DUET2     - Streaming and Non-Streaming Device Duet sample
  8805.    Γö£ΓöÇ\FSSHT     - File System Stream Handler sample
  8806.    Γö£ΓöÇ\MCDTBL    - Media Control Driver (MCD) command tables
  8807.    Γö£ΓöÇ\MCDTEMP   - Media Control Driver (MCD) template
  8808.    Γö£ΓöÇ\MCISPY    - Message Monitoring sample
  8809.    Γö£ΓöÇ\MCISTRNG  - Media Control Interface String Test sample
  8810.    Γö£ΓöÇ\MMBROWSE  - Image Browser sample
  8811.    Γö£ΓöÇ\MMIOPROC  - M-Motion I/O procedure sample
  8812.    Γö£ΓöÇ\MOVIE     - Movie sample
  8813.    Γö£ΓöÇ\RECORDER  - Audio Recording sample
  8814.    Γö£ΓöÇ\SHORTCF   - Control File templates (subset of the \CF directory)
  8815.    Γö£ΓöÇ\SHRCFILE  - Stream Handler Resource File sample
  8816.    Γö£ΓöÇ\TUNER     - TV Tuner sample
  8817.    Γö£ΓöÇ\ULTIEYES  - Non-Linear Video sample
  8818.    ΓööΓöÇ\ULTIMOIO  - Ultimotion I/O procedure sample
  8819.  
  8820.  
  8821. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\OS2 Subdirectories ΓòÉΓòÉΓòÉ
  8822.  
  8823.  \OS2             - Contains the Control Program samples
  8824.    Γö£ΓöÇ\CONSOLIO    - Console I/O sample (Worms)
  8825.    Γö£ΓöÇ\DLLAPI      - Dynamic Link Library sample
  8826.    Γö£ΓöÇ\EAEDIT      - Extended Attributes Editor sample (EAS)
  8827.    Γö£ΓöÇ\HANOI       - Multithreaded sample (Towers of Hanoi)
  8828.    Γö£ΓöÇ\NPIPE       - Named Pipes sample
  8829.    Γö£ΓöÇ\QUEUES      - Interprocess Communication Queue sample
  8830.    Γö£ΓöÇ\SEMAPH      - Semaphore sample
  8831.    Γö£ΓöÇ\SORT        - Multithreaded sample (Sorting Algorithm)
  8832.    Γö£ΓöÇ\TIMESERV    - Timer Services sample (Clock)
  8833.    ΓööΓöÇ\VMM         - Virtual Memory Management sample
  8834.  
  8835.  
  8836. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\PM Subdirectories ΓòÉΓòÉΓòÉ
  8837.  
  8838.  \PM              - Contains the Presentation Manager samples
  8839.    Γö£ΓöÇ\BMPSAMP     - Bit map Manipulation sample (Jigsaw)
  8840.    Γö£ΓöÇ\CLIPBRD     - Clipboard sample
  8841.    Γö£ΓöÇ\CONTROLS    - PM Controls sample (Style)
  8842.    Γö£ΓöÇ\DIALOG      - Introductory Dialog Box sample
  8843.    Γö£ΓöÇ\DRAGDROP    - Direct Manipulation (Dragdrop) sample
  8844.    Γö£ΓöÇ\GRAPHIC     - Non-retained Graphic sample
  8845.    Γö£ΓöÇ\IPF         - Information Presentation Facility sample
  8846.    Γö£ΓöÇ\PALETTE     - Palette Manager sample
  8847.    Γö£ΓöÇ\PORTING     - PM 16-bit to 32-bit Porting sample (Image32)
  8848.    Γö£ΓöÇ\PRINT       - Printer sample
  8849.    Γö£ΓöÇ\STDWND      - Standard Window sample (Hello)
  8850.    ΓööΓöÇ\TEMPLATE    - Application Template sample
  8851.  
  8852.  
  8853. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\REXX Subdirectories ΓòÉΓòÉΓòÉ
  8854.  
  8855.  \REXX              - Contains REXX samples
  8856.    Γö£ΓöÇ\API           - Contains the REXX API samples
  8857.    Γöé   Γö£ΓöÇ\CALLREXX  - REXX Interpreter Invocation sample
  8858.    Γöé   Γö£ΓöÇ\DEVINFO   - REXX Variable Pool Interface sample
  8859.    Γöé   Γö£ΓöÇ\PMREXX    - Presentation Manager REXX Interface sample
  8860.    Γöé   Γö£ΓöÇ\REXXCALC  - Presentation Manager REXX Calculator sample
  8861.    Γöé   Γö£ΓöÇ\REXXUTIL  - REXX Utility Functions sample
  8862.    Γöé   ΓööΓöÇ\RXMACDLL  - External Functions in REXX Macrospace sample
  8863.    Γö£ΓöÇ\SOM           - Contains the REXX SOM interface samples
  8864.    Γöé   ΓööΓöÇ\ANIMAL    - SOM class sample
  8865.    ΓööΓöÇ\WPS           - Contains the REXX WPS interface samples
  8866.  
  8867.  
  8868. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\WPS Subdirectories ΓòÉΓòÉΓòÉ
  8869.  
  8870.  \WPS             - Contains the Workplace Shell samples
  8871.    Γö£ΓöÇ\BROWSE      - ASCII/Hex File Browser sample
  8872.    Γö£ΓöÇ\CAR         - WPDataFile Subclass (C) sample
  8873.    Γö£ΓöÇ\CARPP       - WPDataFile Subclass (C++) sample
  8874.    Γö£ΓöÇ\TEXTFLDR    - Text Folder sample
  8875.    Γö£ΓöÇ\WPSTUTOR    - Tutorial sample
  8876.    ΓööΓöÇ\WSFILE      - Workplace File object sample
  8877.  
  8878.  
  8879. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\OPENDOC Subdirectories ΓòÉΓòÉΓòÉ
  8880.  
  8881.  \OPENDOC          - Contains the OpenDoc samples
  8882.    ΓööΓöÇ\PARTS        - OpenDoc part handler samples
  8883.        Γö£ΓöÇ\COOKBOOK - Cookbook part handler sample
  8884.        Γö£ΓöÇ\HELLO    - Hello World part handler sample
  8885.        Γö£ΓöÇ\PUSHBTN  - Push Button part handler sample
  8886.        Γö£ΓöÇ\TTAPE1   - Ticker Tape 1 part handler sample
  8887.        ΓööΓöÇ\TTAPE2   - Ticker Tape 2 part handler sample
  8888.  
  8889.  
  8890. ΓòÉΓòÉΓòÉ <hidden> \TOOLKIT\SAMPLES\DAPIE Subdirectories ΓòÉΓòÉΓòÉ
  8891.  
  8892.  \DAPIE             - IBM Developer API Extensions for OS/2 samples
  8893.    Γö£ΓöÇ\BROWSER       - Browser Sample (Windows version)
  8894.    Γö£ΓöÇ\BROWSER2      - Browser Sample (OS/2 version)
  8895.    Γö£ΓöÇ\DLLENTRY      - DLL initialization entry point
  8896.    Γö£ΓöÇ\HIWORLD       - HiWorld sample (Windows version)
  8897.    Γö£ΓöÇ\HIWORLD2      - HiWorld sample (OS/2 version)
  8898.    Γö£ΓöÇ\TOYBOX        - Bitmap Manipulation Sample (Windows version)
  8899.    Γö£ΓöÇ\TOYBOX2       - Bitmap Manipulation Sample (OS/2 version)
  8900.    ΓööΓöÇ\WINMAIN       - WinMain wrapper function
  8901.