home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v2.zip / OS2CPP / READ.ME < prev    next >
Text File  |  1993-10-21  |  49KB  |  1,155 lines

  1. ===============================================================================
  2.      IBM* C Set ++* read.me file:
  3.  
  4.      IBM C Set ++  Version 2.1
  5.      (C) Copyright IBM Corp. 1993. All Rights Reserved.
  6.      US Government Users Restricted Rights - Use, duplication or disclosure
  7.      restricted by GSA ADP Schedule Contract with IBM Corp.
  8. ===============================================================================
  9.  
  10. This README file contains information pertaining to the C/C++ Tools
  11. components of C Set ++.  For the most recent information on the WorkFrame/2*
  12. product and OS/2* 2.1 Developer's Toolkit, please refer to their individual
  13. READ.ME files, found in the main installation directory for each product.
  14.  
  15. The following items are trademarks of the IBM Corporation.  They are denoted
  16. by an asterisk (*) when they first appear in the text.
  17.  
  18.     C Set ++
  19.     C Set ++ FirstStep
  20.     C Set/2
  21.     IBM
  22.     IBMLink
  23.     OS/2
  24.     Presentation Manager
  25.     WorkFrame/2
  26.     WorkPlace Shell
  27.     XGA
  28.  
  29. The following items are trademarks of other corporations in the United States
  30. or other countries.  They are denoted by a double asterisk (**) when they
  31. first appear in the text.
  32.  
  33.     Microsoft
  34.     Windows
  35.  
  36.  
  37.  
  38. IBM C SET ++ INSTALLATION
  39. _________________________
  40.  
  41.  
  42. To install and run WorkFrame/2 V2.1, you require:
  43.  
  44. o   OS/2 V2.1
  45. o   21WPSF fix for the OS/2 WorkPlace Shell*
  46.  
  47. To obtain the 21WSPF fix, call 1-800=237-5511 with your customer number.
  48.  
  49. If you are installing WorkFrame/2 V2.1, the correct order to install the
  50. components is:
  51.  
  52. 1.  Toolkit
  53. 2.  WorkFrame/2
  54. 3.  C/C++ Tools
  55.  
  56. This is not the order described in the Read Me First: Installing and Getting
  57. Started booklet.
  58.  
  59. If you installed the WorkFrame/2 before the Toolkit, you will need to
  60. manually add the NMAKE action to the default actions profile (if you install
  61. the Toolkit first, this is done for you).  For instructions on how to add an
  62. action, see the WorkFrame/2 READ.ME file.
  63.  
  64. If you are installing both V1.1 and V2.1 of the WorkFrame/2, install V1.1
  65. first.  Note that both versions have a READ.ME file with the same name.  If
  66. you install both versions in the same directory, the second installation will
  67. overwrite the first installation's READ.ME file.  To avoid this, either
  68. install them in different directories, or rename the READ.ME file from the
  69. first installation before installing the second version.
  70.  
  71. Follow the other installation instructions from the Read Me First booklet.
  72.  
  73. A full installation of the C Set ++ files requires approximately 58MB of disk
  74. space, broken down in the following manner:
  75.  
  76. Toolkit                 25.4MB
  77. WorkFrame/2 V1.1        1.8MB
  78. WorkFrame/2 V2.1        2.7MB
  79. C/C++ Tools             30MB
  80.  
  81. When you install each component, the installation program tells you how much
  82. space you have available on the selected drive and how much space is required
  83. for the options you select.
  84.  
  85. To effectively use the C/C++ Tools compiler and debugger, you need a minimum
  86. of 8M of RAM for C applications and 12M for C++ applications.
  87.  
  88. INSTALLATION NOTES
  89.  
  90. 1.  If problems occur, make sure the HELP environment variable points to the
  91.     d:\OS2\HELP directory (where "d" is the startup drive).
  92.  
  93. 2.  If you installed Version 1.0 of the C Set/2* product, C Set ++ Version
  94.     2.0, or C Set ++ FirstStep*, make sure that the directories for C Set ++
  95.     Version 2.1 come before their earlier counterparts in the following
  96.     statements in your CONFIG.SYS file:
  97.  
  98.     o   PATH
  99.     o   DPATH
  100.     o   LIB
  101.     o   INCLUDE
  102.     o   LIBPATH
  103.     o   BOOKSHELF
  104.     o   HELP
  105.  
  106.     If you change these environment variables frequently, you may want to
  107.     erase the earlier versions of the files to ensure you do not access them
  108.     before the 2.1 versions.
  109.  
  110. 3.  Add the d:\TOOLKT21\CPLUS\OS2H directory to your INCLUDE variable,
  111.     ensuring it either replaces or precedes the d:\TOOLKT21\C\OS2H directory.
  112.  
  113. 4.  Ensure that you are using the LINK386 linker from the Developer's Toolkit
  114.     2.1.
  115.  
  116. 5.  To use the context-sensitive help feature in EPM, you must either add the
  117.     d:\TOOLKT21\BOOK directory to your DPATH variable or copy the
  118.     EPMKWHLP.NDX file to a directory specified in your DPATH.
  119.  
  120. 6.  Do not delete the file DDE4FIX.DLL.
  121.  
  122. 7.  The C/C++ Tools installation program shows a negative value if the space
  123.     available is greater than or equal to 2GB.
  124.  
  125. 8.  The C Set ++ folder icon created by the installation is not immediately
  126.     displayed on the OS/2* 2.0 operating system.  It should display after the
  127.     operating system is restarted.  This does not happen with the OS/2 2.0
  128.     Service Pack, Pre-installed OS/2 2.0, or OS/2 2.1.
  129.  
  130. 9.  C/C++ Tools 2.01 and WorkFrame/2 1.1 installations do not support the
  131.     HPFS file names with imbedded spaces.
  132.  
  133.  
  134. IF YOU HAVE THE CD-ROM VERSION
  135. ______________________________
  136.  
  137. If you have the CD-ROM version of C Set ++, you can create diskettes from the
  138. CD-ROM for backup purposes, or to allow you to install on a workstation
  139. without a CD-ROM drive.  For more information on how to do this, see the READ
  140. ME file in the IMAGES directory of the CD-ROM.
  141.  
  142. NOTE:  Refer to the License Information document to ensure that you observe
  143. licensing restrictions when creating and using the diskette images.
  144.  
  145.  
  146.  
  147. NEW FEATURES AND LATE DOCUMENTATION CHANGES
  148. ___________________________________________
  149.  
  150.  
  151. This section lists the new features that have been added to each component
  152. and the changes that have been made which could not be incorporated into the
  153. documentation.
  154.  
  155.  
  156. C/C++ COMPILER
  157. ______________
  158.  
  159. 1.  The documentation states that you cannot call a destructor between a
  160.     longjmp and the corresponding setjmp in a stack frame.  This restriction
  161.     no longer exists.  However, you should only call setjmp from within C
  162.     compiled code; otherwise, the destructor may delete automatic objects in
  163.     the function that contains the setjmp call.
  164.  
  165. 2.  The I/O Stream library is not available for subsystem development.  The
  166.     Programming Guide incorrectly says that it is.
  167.  
  168. 3.  On OS/2 2.0, when you use code pages other than 437, messages retrieved
  169.     using DosGetMessage are prefixed with "SYS" instead of the correct prefix
  170.     "EDC".
  171.  
  172. 4.  If your DLLs export any functions that could be a match for template
  173.     functions, you must build an import library.
  174.  
  175. 5.  16-bit functions have been labelled in the .DEF files.  If you want to
  176.     build a pure 32-bit DLL, delete all of the 16-bit exports and refer to
  177.     the chapter "Building DLLs" in the IBM C/C++ Tools Programming Guide.
  178.  
  179.  
  180. PRECOMPILED HEADER FILES
  181.  
  182. WHEN TO USE THEM
  183.  
  184. Precompiled header files improve compile-time performance for headers that
  185. are included many times in an application.  This improvement is achieved by
  186. converting the header to a form that the compiler can process more
  187. efficiently.
  188.  
  189. When used together, the precompiled header options /Fi and /Si provide
  190. automatic maintenance of up-to-date precompiled headers.  You should use
  191. these options once the headers in the application are relatively stable
  192. because:
  193.  
  194. o   A new precompiled version of a header is created every time it is
  195.     changed.  If headers change with each compilation, then the compilation
  196.     time may increase.
  197.  
  198. o   Debugging is more difficult.  Listings are not available for these
  199.     headers and coordinates provided by compiler error messages are less
  200.     accurate.
  201.  
  202. The compiler options are all that is required to use precompiled header
  203. files.  No additional rules are required in your make files for keeping the
  204. precompiled headers up to date.  The compiler does this automatically.
  205.  
  206. Keep in mind that precompiled header files occupy space in your file system.
  207. Typically, the size of a precompiled header is close to the size of the
  208. original.
  209.  
  210. NOTE:  When creating precompiled headers, you must have write access to the
  211. subdirectory where the precompiled headers will be placed (CSET2PRE under the
  212. directory where the normal headers reside).  If you are using C/C++ Tools
  213. from a LAN and do not have write access, ask the system administrator to
  214. precompile the headers for you.  Then you need only specify the /Si option to
  215. use the precompiled headers; you do not need to specify /Fi.
  216.  
  217. PERFORMANCE
  218.  
  219. The improvement in compile time using precompiled headers varies between
  220. applications.  Factors that influence the amount of improvement include:
  221.  
  222. o   The amount of code in headers and the amount of code in the source file.
  223.     Because only the headers are precompiled, large source files show less
  224.     improvement in compile time.
  225.  
  226. o   The language (C or C++).
  227.     Because C++ is more complex to compile, C applications generally show
  228.     more compile-time improvement than C++ applications.
  229.  
  230. Using preprocessor conditional compilation to protect header files is of
  231. particular benefit when you use precompiled headers.  Preprocessor
  232. conditionals are coded as in the following example:
  233.  
  234.      #ifndef UNIQUE_HEADER_ID
  235.      #define UNIQUE_HEADER_ID
  236.  
  237.         /* Header contents */
  238.  
  239.      #endif
  240.  
  241. Header files protected in this way get maximum precompilation benefit when
  242. they are included more than once during a compilation.
  243.  
  244.  
  245. NEW OPTIONS AND #PRAGMA DIRECTIVES
  246.  
  247. This section lists compiler options and #pragma directives that have been
  248. added, deleted, or changed.  These changes are reflected in the Online
  249. Language Reference (DDE4LRM.INF), but are not included in the hardcopy
  250. documentation.
  251.  
  252.  
  253. Compiler Options
  254.  
  255. The following options have been added:
  256.  
  257. /Om  Limit the amount of memory used by the compiler's optimizer and code
  258.      generator to approximately 35MB (as measured by swapper growth).
  259.  
  260.      NOTE:  Because /Om may cause the inliner to avoid some inlining
  261.      opportunities, the code generated with /Om may be less efficient than
  262.      code generated with /Om-.
  263.  
  264. /Tl  Control preloading of compiler components.  Note that if you are running
  265.      the OS/2 Version 2.0 operating system, you must have the Service Pack
  266.      installed for this option to have any effect.
  267.  
  268. /Tm  Enable the debug versions of the memory management functions for both C
  269.      (malloc family) and C++ (new and delete).  See the C Library Reference
  270.      (DDE4CLIB.INF) for a description of the C debug memory management
  271.      functions.  For a description of the debug versions of new and delete,
  272.      see the Online Language Reference.
  273.  
  274. /Ts  This option has been removed.  It generated code for the debugger to
  275.      maintain the call stack.  The debugger now provides equivalent function
  276.      without compiler support.
  277.  
  278.  
  279. #pragma Directives
  280.  
  281. The following #pragma directives have been changed or modified:
  282.  
  283. #pragma disjoint
  284.      This directive will be parsed, but has no effect.  It has been removed
  285.      from the Online Language Reference.
  286.  
  287. #pragma isolated_call
  288.      This directive will be parsed, but has no effect.  It has been removed
  289.      from the Online Language Reference.
  290.  
  291. #pragma margins
  292.      This directive is valid for C code only.
  293.  
  294. #pragma sequence
  295.      This directive is valid for C code only.
  296.  
  297. #pragma sourcedir
  298.      Defines a new path to the directory containing the original source from
  299.      which the compiler generates files in the TEMPINC directory.  This
  300.      directive is only valid for C++ code.
  301.  
  302.  
  303. DEBUGGER
  304. ________
  305.  
  306. When you step over a throw statement, the debugger runs to the end of the
  307. program, unless you set a break point in the catch clause or at some point
  308. after the catch clause.
  309.  
  310.  
  311. EXECUTION TRACE ANALYZER (EXTRA)
  312. ________________________________
  313.  
  314. 1.  The IBM C/C++ Tools:  Execution Trace Analyzer Introduction states on
  315.     page 9 that "EXTRA" is the name of the executable.  The name of the
  316.     executable is "IXTRA".
  317.  
  318. 2.  In Figure 1 on page 4 of the EXTRA Introduction, the name of the library
  319.     link into the samples is shown as as "doscall".  The name should be
  320.     "_doscall".
  321.  
  322. 3.  The Execution Density window allows movement of the current column
  323.     indicator anywhere in the client area.  Double-clicking on a column that
  324.     is not currently selected moves the current column indicator to the
  325.     appropriate column.  Double-clicking on the currently selected column
  326.     brings up the search dialog.  You can drag the current column indicator
  327.     only if you choose the current column indicator.
  328.  
  329.  
  330. BROWSER
  331. _______
  332.  
  333. 1.  Arrows in a Graph window inheritance graph now point upwards, towards the
  334.     base classes.  An illustration in the Browser Introduction shows the
  335.     arrows pointing downwards.
  336.  
  337. 2.  Dotted lines in a Graph window indicate a virtual relationship between
  338.     classes.  Black lines indicate a private relationship.
  339.  
  340. 3.  Ring icons are now available in the Text window so you can access the
  341.     Next and Previous controls for rotating through the list of occurrences.
  342.  
  343. 4.  Occasionally the browser is unable to display information about variables
  344.     used in functions generated from templates.
  345.  
  346.  
  347. C LIBRARY
  348. _________
  349.  
  350. The _msize function has been added.  This function is documented in the
  351. online C Library Reference (DDE4CLIB.INF), but is not in the hardcopy
  352. documentation.
  353.  
  354.  
  355. STANDARD CLASS LIBRARY
  356. ______________________
  357.  
  358. The hardcopy version of the IBM C/C++ Tools Standard Class Library Reference
  359. states that all output operators  <<  reset ios::x_width to 0.  In fact, only
  360. the numeric and string output operation reset ios::x_width to 0.
  361.  
  362. For example,
  363.  
  364.      cout.width(5)
  365.      cout << '{' << 12 << '}' ;
  366.  
  367. generates the following:
  368.  
  369.      {   12}
  370.  
  371. This error has been corrected in the online version (DDE4SCL.INF).
  372.  
  373.  
  374. COLLECTION CLASS LIBRARIES
  375. __________________________
  376.  
  377. 1.  The following changes are reflected in the online Collection Class
  378.     Library Reference (DDE4CCL.INF), but not in the hardcopy version.
  379.  
  380.     a.  User-defined individual memory management cannot be used with the
  381.         Tabular and Diluted sequences.  Global operators new and delete are
  382.         used with these.
  383.  
  384.     b.  The functions unionWith, intersectionWith, differenceWith, addUnion,
  385.         addIntersection, and addDifference are not provided for
  386.         EqualitySequences.
  387.  
  388.     c.  The functions unionWith, addUnion, addIntersection, and addDifference
  389.         do not throw IIdenticalCollectionException when the identical
  390.         collection is provided as a function argument (the addAllFrom
  391.         function throws this exception).  Instead, the functions behave in
  392.         the mathematical sense as described for union, intersection, and
  393.         difference.
  394.  
  395.     d.  The <iglobals.h> file does not contain the definitions for the type
  396.         Boolean and the Boolean values "True" and "False".  Instead, the
  397.         following definitions are found in <isynonym.hpp>:
  398.  
  399.              typedef int Boolean;
  400.              typedef int IBoolean;
  401.  
  402.              typedef enum {
  403.              false         = 0,
  404.              False         = 0,
  405.              true          = 1,
  406.              True          = 1
  407.              };
  408.  
  409.     e.  Functions locateOrAdd and locateOrAddElementWithKey return "True" if
  410.         the element was located.  They return "False" if the element could
  411.         not be located but was added.
  412.  
  413. 2.  Dynamic Link Library
  414.  
  415.     In addition to the static library IBMCPP\LIB\DDE4CC.LIB, there is a .DLL
  416.     file called IBMCPP\DLL\DDE4CC.DLL with the corresponding import library
  417.     IBMCPP\LIB\DDE4CCI.LIB.
  418.  
  419. 3.  Samples Provided
  420.  
  421.     The IBMCPP\SAMPLES\ICLCC directory contains samples to familiarize you
  422.     with the Collection class library.  Use NMAKE (from the Toolkit) to
  423.     create the executable files from the source provided.  The correct output
  424.     from the executable files is provided in the .XPC files in the same
  425.     directory.
  426.  
  427. 4.  Tutorial Files
  428.  
  429.     A number of files have been provided in IBMCPP\TUTORIAL\ICLCC to get you
  430.     started with the Collection classes.  These files contain blank spaces
  431.     for you to fill in.  The complete versions of the files are also included
  432.     in the SOLUTION directory.
  433.  
  434. 5.  Support for Translatable Messages
  435.  
  436.     Exception Messages are read from a message file that can be specified by
  437.     setting the environment variable ICLCCMSG.  The default is the US English
  438.     message file DDE4C01E.MSG.
  439.  
  440.  
  441. USER INTERFACE CLASS LIBRARY
  442. ____________________________
  443.  
  444. 1.  The version of User Interface library code in this product has been
  445.     identified with two macros that are defined in <ibase.hpp>:
  446.  
  447.      IC_MAJOR_VERSION is defined to 201
  448.      IC_MINOR_VERSION is defined to 0
  449.  
  450.     You can use these macros in your programs to conditionally use the new
  451.     and changed interfaces introduced in this product.  For example:
  452.  
  453.           #if IC_MAJOR_VERSION >= 201
  454.           //  code using new interfaces
  455.           #endif
  456.  
  457. 2.  IContainerColumn::iconOffset will be removed in future releases.
  458.  
  459.  
  460. WORKFRAME/2 V1.1 SUPPORT
  461. ________________________
  462.  
  463. If you are migrating projects from C Set/2 and WorkFrame/2 V1.0 to
  464. WorkFrame/2 V1.1:
  465.  
  466. 1.  The first time you invoke an action on the migrated project, a message
  467.     box appears and asks if you want to convert the project.  If you select
  468.     "Yes", the program traps (select "Cancel" instead).  To work around this
  469.     problem, before you invoke any action on the project, open its Compiler
  470.     Options dialog instead.  A message box appears and asks if you want to
  471.     convert the project.  Select "Yes", the new option dialogs appear.  You
  472.     can make changes if you want, but you do not need to.  Save the options.
  473.     The project is then converted, and you can invoke actions on it.
  474.  
  475. 2.  The WorkFrame/2 interface has been modified slightly from V1.0 to V1.1.
  476.     On the Linker Options dialog, there is a button that also brings up the
  477.     compiler options.  The options are always saved with the project (the
  478.     SAVE WITH PROJECT button has been removed), in the extended attributes of
  479.     the project.  These options are retrieved to compile the templates.  The
  480.     last setting of the options is always used.
  481.  
  482.  
  483. WORKFRAME/2 V2.1 SUPPORT
  484. ________________________
  485.  
  486. When you migrate projects from C Set/2 or C/C++ Tools V2.0, the names of the
  487. compiler and linker options DLLs are not changed.  The projects continue to
  488. use the DLLs from the earlier version of the product.  You can use
  489. WorkFrame/2 V2.1 with these migrated projects, but the full V2.1 capabilities
  490. will not be available.  For example, because C/C++ Tools V2.0 option DLLs
  491. (for WorkFrame/2 V1.1) stored information in the extended attributes of a
  492. project, under WorkFrame/2 V2.1 you can have only one Compile and one Link
  493. action for the project.  To have multiple Compile or Link actions, you must
  494. change the project to use the C/C++ Tools V2.01 options DLLs (DDE4ICC2.DLL
  495. for compiler and DDE4ICL2 for linker options).
  496.  
  497. To change the options DLLs, you can either modify the Options page of the
  498. migration project's actions profile, or you can drag the WorkFrame/2 V2.1
  499. Default Actions Profile and drop it on the project.  Note that when you
  500. change the DLLs, you will need to reset your options.
  501.  
  502.  
  503. DOCUMENTATION
  504. _____________
  505.  
  506. 1.  If you are running on OS/2 2.0 GA or OS/2 2.0 with the Service Pack, you
  507.     may encounter a problem with the cross-document links in the .INF files.
  508.     In some cases, Help Manager does not interpret these links properly and,
  509.     instead of going to the right panel, it opens a second instance of the
  510.     document being viewed and pops up a "Link not found" message.  If this
  511.     happens, close the extra copy of the .INF file; otherwise, you may end up
  512.     with a number of copies open and run out of memory.  To get to the panel
  513.     you wanted to see, go through the Table of Contents, or use the Search
  514.     facility.
  515.  
  516. 2.  In the C/C++ Tools Programming Guide:
  517.  
  518.     o   In Appendix E, "Component Files", some of the file names listed are
  519.         incorrect.  The names of the Collection class libraries should be
  520.         DDE4CC.LIB and DDE4CCI.LIB (import library); the DLL is DDE4CC.DLL.
  521.  
  522.         The names of the User Interface libraries should be DDE4MUIB.LIB,
  523.         DDE4MUIC.LIB, DDE4MUID.LIB, and DDE4MUII.LIB (import library); the
  524.         DLL is DDE4MUI.DLL.
  525.  
  526.         The names of the .NDX files should be DDE4CCL.NDX, DDE4CLIB.NDX,
  527.         DDE4LRM.NDX, DDE4SCL.NDX, and DDE4UIL.NDX.
  528.     o   In Chapter 3, "An Introduction to Using the C/C++ Tools Compiler",
  529.         the names of the sample programs should be SAMPLE1A\PMLINES.C and
  530.         SAMPLE1B\PMLINES.CPP, instead of SAMPLE1A.C and SAMPLE1B.CPP.
  531.     o   In Chapter 17, "Developing Subsystems", it states that the I/O Stream
  532.         library can be used for subsystem development.  This is not the case.
  533.  
  534.  
  535.  
  536. RELEASE CONSIDERATIONS AND NOTES
  537. ________________________________
  538.  
  539.  
  540. This section lists information that is necessary to you in running the
  541. C Set ++ product.
  542.  
  543.  
  544. C/C++ COMPILER
  545. ______________
  546.  
  547. 1.  When compiling C++ code, you may encounter a trap screen from a detached
  548.     process, indicating that a trap occurred in DDE4CPP.EXE.  This is caused
  549.     by preloading the compiler and can be ignored; compilation of your
  550.     program is not affected.  In order to avoid receiving the trap screen,
  551.     you can either use the /Tl- compiler option (to not preload the compiler)
  552.     or set AUTOFAIL=YES in your CONFIG.SYS file (to not display trap
  553.     screens).
  554.  
  555. 2.  You cannot use the intermediate code linker to link C++ files that are
  556.     compiled with the /Gu option and that contain variables that have been
  557.     renamed using #pragma map.
  558.  
  559.     Intermediate code linking of such files without /Gu is supported.
  560.  
  561. 3.  Programs that use templates cannot be compiled with the intermediate code
  562.     linker and the /Gu+ option.  Using them together may cause the
  563.     intermediate code linker to remove any unused symbols as part of the
  564.     intermediate code linker optimization process, and you may get error
  565.     messages about unresolved symbols.  Using the intermediate code linker
  566.     without specifying /Gu+ will yield the expected results.
  567.  
  568. 4.  When you link C++ code, a common linker error is:
  569.  
  570.          X::virtual-fcn-table-ptr: undefined symbol
  571.  
  572.     where "X" is the name of a class, or "ñXçY", where both "X" and "Y" are
  573.     class names.
  574.  
  575.     The missing "virtual-fcn-table" for a class is a compiler-generated data
  576.     structure that is used to implement virtual function calls for that
  577.     class.  The compiler has to determine which compilation unit it should
  578.     generate each table in.  Often, the compiler generates the table in the
  579.     compilation that contains your definition of a selected virtual function.
  580.     If you never define that function, the table is never generated, and the
  581.     result is this linker error.
  582.  
  583.     Recompile your code with the /Wvft+ option.  The compiler will produce an
  584.     informational message as follows:
  585.  
  586.          EDC3281: informational The virtual function table for X will be
  587.          defined where X::foo() is defined.
  588.  
  589.     You will likely find that the function "X::foo()" has not been defined
  590.     anywhere.
  591.  
  592. 5.  The compiler reserves OS/2 exceptions with a facility code of 2 (that is,
  593.     exceptions 0x00020000 to 0x0002FFFF) for its own use.  The generation or
  594.     handling of these exceptions may lead to unpredictable and undefined
  595.     behavior.
  596.  
  597. 6.  If you receive the following message:
  598.  
  599.                    DDE4MNCH: cannot run "lib.exe"
  600.  
  601.     one of the following has occurred:
  602.  
  603.     o   LIB.EXE is not on your specified PATH.
  604.     o   There is a network error with a directory on your PATH before the
  605.         directory for LIB.EXE.
  606.  
  607.  
  608. DEBUGGER
  609. ________
  610.  
  611. This section contains notes on the debugger functions.
  612.  
  613. o   PREPARATION
  614.  
  615.     1.  IPMD.EXE requires fixed-pitch bitmapped fonts, which are part of the
  616.         OS/2 installation.
  617.     2.  Debugging of code generated with the /G5 option is not supported.
  618.         However, the only current problem that has been noted is a failure to
  619.         produce a disassembly or mixed view for some programs.
  620.     3.  Although debugging optimized code is supported, there is some loss of
  621.         function because of the nature of optimized code.  If you single-step
  622.         through the source, it may result in seemingly erratic movements of
  623.         the current line.  It may not be possible to display the value of
  624.         variables, or to set line breakpoints accurately.  However, you can
  625.         set breakpoints at function entry and exit.
  626.     4.  Although debugging inlined code is supported, inlined code may have a
  627.         different appearance than non-inlined code when it is being debugged.
  628.         Calls to inlined functions may appear as non-executable statements.
  629.         When you step through the inlined call, the source view changes to
  630.         show the statements of the inlined function, and you step through the
  631.         statements.  You may not be able to set breakpoints at the function
  632.         entry, or on lines within an inlined function.
  633.  
  634. o   ENVIRONMENT VARIABLES
  635.  
  636.     1.  A new environment variable has been added, PMDTABGRID, which can be
  637.         used to define tab stops at a particular interval for the Source
  638.         display windows.  For example, setting SET PMDTABGRID=5 will cause
  639.         text after a tab to begin in columns 6, 11, 16, 21, 26 and so on.
  640.  
  641. o   EXECUTION CONTROL
  642.  
  643.     STEP
  644.  
  645.     1.  Programs that use floating-point instructions and run on a machine
  646.         without a math coprocessor cannot single step consistently across
  647.         floating-point instructions.
  648.     2.  Do not use Step Debug (Ctrl-D) over a DosReleaseMutexSem or a
  649.         DosRequestMutexSem.  Use Step Over(Ctrl-O).
  650.  
  651.     MONITORS/REGISTERS/STACK/STORAGE
  652.  
  653.     1.  The pointer-to-member operator is not supported.
  654.     2.  To typecast a pointer in a monitor window, the type must have been
  655.         defined using a typedef.  A variable can only be cast to a type that
  656.         has been referenced in the object module.
  657.     3.  When you view the stack, only the stack associated with the current
  658.         ring will be shown.  Therefore, if the application is stopped in ring
  659.         2, the stack of ring 3 stack is not shown.
  660.  
  661.     SOURCE WINDOW
  662.  
  663.     The debugger now supports executable code in included files.  The source
  664.     can be viewed as a notebook, with the source file names on the tabs.
  665.     There is an option to turn off the notebook (in the Source Window
  666.     Properties window).  However, if the program stops because of a
  667.     breakpoint or exception in an included file, the source window will be
  668.     displayed as a notebook to show the current line, regardless of the
  669.     notebook option selected.  Similarly, if a routine is on the stack, and
  670.     that routine has code in an included file, double-clicking on the routine
  671.     name brings up the source window in the notebook format.
  672.  
  673.  
  674. OPERATING SYSTEM NOTES
  675.  
  676. 1.  When debugging a Presentation Manager application, it is possible that
  677.     IPMD will display the message "PM Resource Interlock" or "DosDebug
  678.     Error".  This is due to a design limitation in OS/2.  OS/2 applications
  679.     have access to system semaphores, and when the application stops (such as
  680.     when a breakpoint is hit), a system semaphore contention problem can
  681.     develop within the operating system.  Some IPMD users have received the
  682.     PM Resource Interlock message on OS/2 2.1 while debugging applications
  683.     that did not have the condition on OS/2 2.0.
  684.  
  685.     Work is in progress on a fix to OS/2 that will alleviate this problem in
  686.     some situations, particularly for drag/drop and scroll operations.  The
  687.     fix is unlikely to prevent all possible PM Resource Interlock conditions.
  688.     You may be able to work around the problem by moving breakpoints around
  689.     slightly, or by toggling the PM Debugging Mode (changing from synchronous
  690.     to asynchronous, or vice versa).
  691.  
  692. 2.  If you are debugging with an XGA* display, the window from which you
  693.     invoked IPMD.EXE may not return to the OS/2 prompt when you close the
  694.     debugger.  To recover, select any OS/2 full screen prompt to free up the
  695.     window.
  696.  
  697. 3.  If a program uses DosRaiseException to raise an exception, the debugger
  698.     will not run the exception handlers.  A selective fix is available for
  699.     the OS/2 2.0 Service Pack.  Call 1-800-237-5511 with your customer number
  700.     and reference PJ05512 to obtain the selective fix.  You must set the
  701.     environment variable PMDOS21 (SET PMDOS21=1) to take advantage of this
  702.     fix.
  703.  
  704. 4.  The Message Queue Monitoring Function has an automatic column resizing
  705.     option from the display style dialog.  This menu item is not available on
  706.     OS/2 2.0.
  707.  
  708. 5.  Certain combinations of display drivers and fonts can result in a blank
  709.     source window.  If this occurs, change the font size.
  710.  
  711. 6.  If you are using OS/2 2.0 GA and a Service Pack, there is a problem with
  712.     the storage window being in insert mode.  Set the environment variable
  713.     PMDOSSP (SET PMDOSSP=1) to eliminate the problem.
  714.  
  715. 7.  When debugging a Presentation Manager application in synchronous mode,
  716.     other multithread Presentation Manager applications running in the
  717.     background that send messages between threads may experience problems.
  718.     Avoid running programs like EXTRA while debugging.
  719.  
  720. 8.  The Debug Session Control window gives you a list of object files for
  721.     your executable.  There is a known linker problem that can cause a
  722.     filename to have invalid characters in it.  This problem is infrequent
  723.     and does not cause the debugger problems.
  724.  
  725. 9.  If the Desktop Automatic Lockup feature is enabled and the debugger is
  726.     active, the system will permanently lock up when the timer expires.
  727.     Currently, the only solution is to reboot.
  728.  
  729. 10. If you use a screen saver program, it may be necessary to disable it to
  730.     allow use of IPMD.
  731.  
  732. 11. If you installed MMPM/2, you may have problems running IPMD on
  733.     applications that use sound.  You may need to de-install the sound
  734.     portion of MMPM/2 using DINSTSND.CMD.
  735.  
  736.  
  737. HINTS AND SUGGESTIONS
  738.  
  739. 1.  Debugging Child Processes
  740.  
  741.     To debug a child process, start the debugger with the name of the child
  742.     as the argument (that is, change "DosExecPgm <child>" to "DosExecPgm ipmd
  743.     <child>").
  744.  
  745. 2.  Debugging REXX DLLs
  746.  
  747.     a.  Start IPMD.EXE with the command line:
  748.  
  749.              ipmd cmd.exe /K <your rexx.cmd>"
  750.  
  751.     b.  When IPMD.EXE displays the code for CMD.EXE, set a load type
  752.         breakpoint to stop when the DLL is loaded.
  753.     c.  Run.
  754.     d.  When the breakpoint is hit, open the desired component in the DLL and
  755.         set breakpoints.
  756.  
  757. 3.  Debugging WorkPlace Shell Objects
  758.  
  759.     a.  Replace the RUNWORKPLACE line in your CONFIG.SYS file with:
  760.  
  761.              SET RUNWORKPLACE=C:\OS2\CMD.EXE
  762.  
  763.     b.  In an OS/2 window, type:
  764.  
  765.              ipmd c:\os2\pmshell
  766.  
  767.     c.  Set a load-type breakpoint for the DLL containing the WPS program.
  768.     d.  When the breakpoint is hit, open the desired component in the DLL and
  769.         set breakpoints.
  770.  
  771. 4.  Printing debugger screens
  772.  
  773.     If you have an active printer driver loaded under OS/2 and the printer
  774.     can print in graphics mode, you can print the focussed debugger screen by
  775.     pressing the Print Screen key.
  776.  
  777. 5.  The debugger uses DosStartSession to start the program being debugged.
  778.     DosStartSession may give error messages which you do not see when the
  779.     program is run outside the debugger.  Two common errors are:
  780.  
  781.     "PROGRAM NOT LOADED.  DOSSTARTSESSION FAILED (RC=2)."
  782.        This error indicates that DosStartSession could not find one of the
  783.        DLLs referenced in your program.
  784.  
  785.     "PROGRAM NOT LOADED.  DOSSTARTSESSION FAILED (RC=127)."
  786.        This error indicates that DosStartSession found the DLL but could not
  787.        find one of the exported entry points.
  788.  
  789.        It may mean that the LIB does not match the DLL, or that /IGNORECASE
  790.        was used improperly.  The loader is case-sensitive, and it may fail to
  791.        find an entry if you are running the linker as case-insensitive.
  792.  
  793.  
  794. EXECUTION TRACE ANALYZER (EXTRA)
  795. ________________________________
  796.  
  797. This section contains notes on the EXTRA functions.
  798.  
  799. PROGRAM PREPARATION
  800.  
  801. 1.  Remember to install DDE4XTRA.SYS in your CONFIG.SYS file.  If you do not
  802.     install this file, EXTRA cannot run the target application.
  803.  
  804. 2.  If you want to trace "Dos" calls or Presentation Manager "Win" or "Gpi"
  805.     calls, add the EXTRA intercept libraries to your link step.
  806.  
  807. RUNTIME NOTES
  808.  
  809. 1.  If you use the Application Termination Window to stop your application
  810.     before it places the initialization data in the trace file, EXTRA
  811.     produces a corrupted trace file.  This can happen only if you terminate
  812.     your application immediately after EXTRA begins tracing.
  813.  
  814. 2.  If you have written customized setjmp or longjmp functions to replace the
  815.     C Set ++ library versions, EXTRA will not function correctly.
  816.  
  817. 3.  A user event can be created as a constant character string or can be
  818.     specified as an area into which a character string has been built.  After
  819.     the application has terminated, EXTRA accesses the data area of the
  820.     target application so that the user events can be written to disk.
  821.     Therefore, each user event must occupy a unique storage location.
  822.  
  823. 4.  EXTRA's timing counter wraps after approximately one hour of program
  824.     execution.  If your application runs longer than one hour, the time
  825.     stamps are not accurate.
  826.  
  827. 5.  When loading a large executable or large trace files, EXTRA does not
  828.     change the mouse pointer to a clock to indicate that it is still working.
  829.  
  830. 6.  The call stack may not be accurate near thread switches.  Also, EXTRA's
  831.     timing of thread switches is approximate.
  832.  
  833. 7.  If you minimize the Trace Generation Window, the window of the target
  834.     application remains in its original state.
  835.  
  836. 8.  If you minimize the Overview Window in the Dynamic Call Graph, it does
  837.     not appear in the Task List.
  838.  
  839. 9.  Although you can attach annotations to user events, EXTRA does not
  840.     display the annotations.
  841.  
  842. 10. File access calls are not traced for I/O flush operations that occur
  843.     after the target application has finished.  They are not included in the
  844.     function-called counts for those file accesses.
  845.  
  846. 11. In the Name Trace File option of the Trace Generation window, you can
  847.     enter a path and file name of up to 256 characters, but the program uses
  848.     only the first 32 characters entered.
  849.  
  850. 12. If the last event of a trace file in the time-scale diagrams (Time Line
  851.     and Execution Density) appears to be missing, adjust the scale of the
  852.     diagram.
  853.  
  854. LIMITATIONS
  855.  
  856. 1.  EXTRA traces only the first 16 threads in your application.  It does not
  857.     trace additional threads.
  858.  
  859. 2.  EXTRA can trace and analyze applications generated by the IBM C Set ++
  860.     compiler.  You cannot use EXTRA to trace files produced by other 16-bit
  861.     or 32-bit compilers.
  862.  
  863. 3.  EXTRA cannot generate or analyze trace data for child processes in a
  864.     multi-process application.
  865.  
  866. 4.  Dynamically-loaded DLLs cannot be traced.
  867.  
  868. 5.  If you do not install the device driver DDE4XTRA.SYS, EXTRA cannot run
  869.     the target application.
  870.  
  871. 6.  Do not trace applications that are currently being debugged by IPMD.EXE
  872.     or analyzed by EXTRA in another session.  Unpredictable results may
  873.     occur.
  874.  
  875.  
  876. OPERATING SYSTEM NOTES
  877.  
  878. 1.  If you are using the XGA device driver on OS/2 2.0, printing does not
  879.     work.  The device driver support has been improved with OS/2 2.1 to
  880.     support the print function in EXTRA.
  881.  
  882. 2.  The Dynamic Call Graph does not function if a program that uses
  883.     WinLockInput is also running under OS/2.  The design of WinLockInput does
  884.     not allow messages to be sent between threads.
  885.  
  886. 3.  In the Dynamic Call Graph, when you move the cross hair by using the
  887.     keyboard, the cross hair may leave an after image on slower machines.
  888.     This can be corrected by repainting the window with the RE-LAY GRAPH menu
  889.     option or by resizing the window.
  890.  
  891. 4.  EXTRA uses DosStartSession to start the program being traced.
  892.     DosStartSession may give error messages which you do not see when the
  893.     program is run outside EXTRA.  Two common errors are:
  894.  
  895.     "PROGRAM NOT LOADED.  DOSSTARTSESSION FAILED (RC=2)."
  896.        This error indicates that DosStartSession could not find one of the
  897.        DLLs referenced in your program.
  898.  
  899.     "PROGRAM NOT LOADED.  DOSSTARTSESSION FAILED (RC=127)."
  900.        This error indicates that DosStartSession found the DLL but could not
  901.        find one of the exported entry points.
  902.  
  903.        It may mean that the LIB does not match the DLL, or that /IGNORECASE
  904.        was used improperly.  The loader is case-sensitive, and it may fail to
  905.        find an entry if you are running the linker as case-insensitive.
  906.  
  907. 5.  In the Call Nesting diagram, any change in the System Proportional font
  908.     style is displayed inconsistently with the view of STYLE in the sample
  909.     window.
  910.  
  911. 6.  Point sizes for certain fonts are displayed one size greater than
  912.     actually selected in the font dialogs.
  913.  
  914.  
  915. BROWSER
  916. _______
  917.  
  918. 1.  The browser can now display the tutorial even if the tutorial is
  919.     installed in a directory with a plus (+) sign (for example, x:\IBMC++\).
  920.  
  921. 2.  The browser List window container has a limit of 64K.  If this limit is
  922.     exceeded, the first 64K worth of data is retained and a warning message
  923.     is displayed.  If a Find operation is performed on the truncated list and
  924.     the target is beyond the 64K limit, the cursor scrolls to the end of the
  925.     list.
  926.  
  927. 3.  Unless you specify the /S option, the Text window searches for source
  928.     files in the directories they were in when the browser file was created.
  929.     If the /S option is specified, the Text window searches for source files
  930.     only in the directories specified in the /S option.
  931.  
  932.     If you rename a source file after its corresponding browser files have
  933.     been created, you can still perform searches and queries on program
  934.     components contained in the source file, but the browser cannot display
  935.     the text of the source file in the Text window.
  936.  
  937. 4.  If you did not install C Set ++ in the default directory, C:\IBMCPP,
  938.     specify the /S<path> option when browsing the sample programs in the
  939.     x:\IBMCPP\SAMPLES directory to indicate the location of the sample files.
  940.  
  941.     For example, if the C/C++ Tools product is installed in the D:\COMPILER
  942.     directory, type the following command to to browse the sample programs
  943.     included with the browser:
  944.  
  945.          ibrs /Sd:\compiler\samples\browser *.brs
  946.  
  947.     You can also recompile the sample programs to obtain browser files
  948.     containing the updated source file paths.
  949.  
  950.  
  951. STANDARD CLASS LIBRARY
  952. ______________________
  953.  
  954. 1.  To ensure that the correct stack tracebacks are generated for the task
  955.     library, you must compile the modules that are derived from the task
  956.     library with the following options (these are all defaults):
  957.  
  958.     /Op-      Disable all stack pointer optimization.
  959.     /O-       Disable optimization.
  960.     /Gh-      Disable profiler hook.
  961.  
  962.     You may get unpredictable results if you do not compile your module with
  963.     these options.
  964.  
  965. 2.  There is no restriction on using #pragma handler within the task library.
  966.     Exception handling is done on a task-by-task basis.  An exception handler
  967.     registered in one task will not be registered in any other task.
  968.     Register an exception handler for each task that needs one.
  969.  
  970. 3.  There is no longer a restriction on calling exit from within a task.
  971.  
  972.  
  973. COLLECTION CLASS LIBRARY
  974. ________________________
  975.  
  976. 1.  The online Collection Class Library Reference now includes a section on
  977.     troubleshooting.  Refer to Appendix, "Problem Determination" for
  978.     solutions to common problems you may encounter when using the Collection
  979.     classes.  Note that this appendix does not appear in the hardcopy version
  980.     of this document.
  981.  
  982. 2.  When you use the Collection class library, compile your code with /Sp4
  983.     option to align structures and unions along 4-byte boundaries (this is
  984.     the default).  If you use a different /Sp option, you must use #pragma
  985.     pack around the #include directives for the Collection class header files
  986.     to ensure that they are aligned correctly.  For example:
  987.  
  988.          #pragma pack(4)
  989.          #include <iset.h>
  990.          #pragma pack()
  991.  
  992. 3.  If you intend to use the extensive compiler diagnostic messages (using
  993.     the /Wgrp compiler option or the #pragma info directive), use #pragma
  994.     info to suppress the generation of warning messages from the included
  995.     Collection class library code.  For example:
  996.  
  997.          #pragma info(none)
  998.          #include <iset.h>
  999.          #pragma info(restore)
  1000.  
  1001.  
  1002. USER INTERFACE CLASS LIBRARY
  1003. ____________________________
  1004.  
  1005. 1.  If you have existing programs that use the User Interface class library,
  1006.     you must recompile and relink them with Version 2.01 of the library in
  1007.     order to run them with the updated DDE4MUI.DLL.  This is because of
  1008.     changes in the interface.  See the Summary of Changes section in either
  1009.     the User Interface Class Library Reference for a list of the interface
  1010.     changes and new functions.
  1011.  
  1012. 2.  The procedure for building your own runtime libraries, described in
  1013.     "Building Dynamic Link Libraries" in the C/C++ Tools Programming Guide,
  1014.     does not apply to the User Interface class libraries.  For instructions
  1015.     on how to rebuild DDE4MUI.DLL, see the file DLLREBLD.DOC under the HELP
  1016.     subdirectory.
  1017.  
  1018. 3.  If you are using OS/2 2.0, you may encounter false out-of-stack errors at
  1019.     run time.  For this reason, we recommend programs written using the User
  1020.     Interface class library on OS/2 2.1 or OS/2 2.0 with fix PJ06959 applied
  1021.     (you can obtain this fix on Service Pack 2, or by calling 1-800-237-5511
  1022.     with your customer number and the fix number).
  1023.  
  1024. 4.  There are several OS/2 or Presentation Manager problems that you may
  1025.     encounter when you use the User Interface class library:
  1026.  
  1027.     ICheckBox
  1028.        The right focus border disappears if the text assigned to a check box
  1029.        is too large to be displayed within the check box.  This happens if
  1030.        the text is too long, the size of the check box is too small, or the
  1031.        check box is using a font that is too large.
  1032.  
  1033.     IContainerControl
  1034.  
  1035.        a.  Under OS/2 2.0:
  1036.  
  1037.            o   The expandTree and collapseTree functions do not work.
  1038.            o   You cannot apply source emphasis (with showSourceEmphasis) to
  1039.                an object in a container with the orderedTargetEmphasis
  1040.                attribute.
  1041.  
  1042.        b.  When you drag an OS/2 desktop object over a container created with
  1043.            the User Interface library, a system hang might occur.  This is an
  1044.            OS/2 problem.  You can prevent this problem by statically linking
  1045.            to the OS/2 drag DLL, which you can do by putting any drag call
  1046.            (for example, DrgAccessDragInfo) in your code.
  1047.  
  1048.     IDDE* clases
  1049.        There are various OS/2 problems establishing conversations and
  1050.        exchanging data with Microsoft** Windows** applications on OS/2 2.0.
  1051.        These problems have been corrected in OS/2 2.1.
  1052.  
  1053.     IFont
  1054.  
  1055.        o   If you construct an IFont from a pointer to an IMultiLineEdit
  1056.            control, the IFont is not initialized with the font currently used
  1057.            by the MLE.  This is due to a PM limitation.
  1058.        o   When you construct an IFont from a pointer to a Control, any Bold,
  1059.            Italic, or Underscore attribute in the Control font is not picked
  1060.            up by the resulting IFont.  This is due to a PM limitation.
  1061.  
  1062.     IMultiCellCanvas
  1063.  
  1064.        a.  The layout produced by an IMultiCellCanvas with expandable columns
  1065.            may have an expected appearance when the canvas is not wide enough
  1066.            for those columns to be expanded.  This is also true for an
  1067.            IMultiCellCanvas with expandable rows when the canvas is not tall
  1068.            enough for the rows to be expanded.
  1069.        b.  When
  1070.            o   More than one child window has the same starting column in an
  1071.                IMultiCellCanvas
  1072.            o   The child windows span different numbers of columns
  1073.            o   The minimum size of the longest child window exceeds the
  1074.                summed minimum sizes of the columns that it occupies
  1075.            the width of the starting column may be increased in such a way
  1076.            that the other child windows end up larger than expected.
  1077.  
  1078.            Similarly, when
  1079.            o   More than one child window has the same starting row
  1080.            o   The child windows span different numbers of rows
  1081.            o   The minimum size of the tallest child window exceeds the
  1082.                summed minimum sizes of the rows that it occupies
  1083.            the height of the starting row may be increased, causing the child
  1084.            windows to be larger than expected.
  1085.  
  1086.     IProgressIndicator
  1087.  
  1088.        a.  Various repaint problems can occur when the control is resized
  1089.            using sizeTo or moveSizeTo and the width of the window is less
  1090.            than the width of the entire control.  This typically happens when
  1091.            tick spacing has been specified on the constructor; otherwise the
  1092.            control is able to resize itself.
  1093.        b.  Using moveArmToTick can result in an exception if the control
  1094.            window has no size and if tick spacing has been specified on the
  1095.            constructor.
  1096.        c.  The arm position may not be set to the same tick position when the
  1097.            control window is resized.  This typically occurs when the control
  1098.            is on a canvas and the default for tick spacing is taken from the
  1099.            constructor.  The arm ends up at the same pixel offset from home.
  1100.            instead of at the same relative position.
  1101.  
  1102.     ISlider
  1103.        When increment buttons are attached to the left side on an ISlider
  1104.        object, the setShaftPosition function actually sets the lower-left
  1105.        corner of the button, not the shaft, to the specified point.
  1106.  
  1107.     ISpinButton
  1108.  
  1109.        a.  The following problems occur under OS/2 2.0, but are fixed
  1110.             OS/2 2.1:
  1111.  
  1112.            o   The range function causes a trap.
  1113.            o   The setInputType function does not change the spin button from
  1114.                alphanumeric to numeric and vice versa.
  1115.  
  1116.        b.  Calling the setLimit function with a limit that does not allow all
  1117.            numbers in the spin button range to be displayed causes erratic
  1118.            results when you spin the button.  For example, if the range is 1
  1119.            to 100 and the limit is set to 2, the spin button spins up to 99
  1120.            and then wraps to 10 instead of 1.  Spinning down, the button
  1121.            wraps from 1 to 10.  This is an OS/2 problem.
  1122.  
  1123.  
  1124.  
  1125. SUPPORT
  1126. _______
  1127.  
  1128.  
  1129. We are delighted to offer you IBM's comprehensive product support services.
  1130. If you come across a problem when using C Set ++, get in touch with us
  1131. through our NON-DEFECT SUPPORT CHANNELS:
  1132.  
  1133. *  COMPUSERVE  If you are already a CompuServe member, type GO OS2DF1 at the
  1134.                ! prompt to access the OS2DF1 forum.  For information on
  1135.                becoming a member, call 1-800-848-8199, press 1, and ask for
  1136.                Representative 239.
  1137.  
  1138. *  INTERNET    For WorkFrame/2 questions, send a note to
  1139.                  workframe@vnet.ibm.com
  1140.                For other C Set ++ questions, send a note to
  1141.                  cset2@vnet.ibm.com
  1142.  
  1143. *  TALKLink    Through IBMLink* - OS/2 Bulletin Boards
  1144.  
  1145. If you believe you have found a PRODUCT DEFECT:
  1146.  
  1147. *   Call our Defect Support line at 1-800-237-5511 - 24 hours a day, 7 days a
  1148.     week.
  1149.  
  1150. Included with the C Set++ product is a "HELP and how to get it" brochure that
  1151. gives further information on all the support channels provided.
  1152.  
  1153. ENJOY!!
  1154.  
  1155.