home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-10-29 | 61.2 KB | 1,575 lines |
- ===============================================================================
- IBM* C/C++ for OS/2* read.me file:
- IBM WorkFrame/2* read.me file:
-
- IBM C/C++ for OS/2 V2.0 Beta Driver 1
- (C) Copyright IBM Corp., 1991, 1992. All Rights Reserved.
- IBM WorkFrame/2 Version 1.00B
- (C) Copyright IBM Corp., 1991, 1992. All Rights Reserved
- US Government Users Restricted Rights - Use, duplication or disclosure
- restricted by GSA ADP Schedule Contract with IBM Corp.
-
- This product contains Unix Systems Laboratories (USL) copyrighted
- material which is being reproduced with permission.
- ===============================================================================
-
- NOTE: This beta driver has only been tested on the OS/2 2.0 operating
- system at the GA level. We will test this driver on the OS/2 Service
- Pack as soon as it is available, and inform our beta customers of the
- results through the OS2DEV forum on CompuServe.
- We anticipate several advantages to using our product with the
- Service Pack:
-
- - LINK386 fixes and upgrades
- - new operating system support leading to increased debugger
- stability
- - Protected Dynamic Link Library (PDLL) support
-
-
- IMPORTANT:
- The class libraries provided on this CD-ROM demonstrate the power
- and complexity of the compiler and provide a base from which to use
- and test the C/C++ for OS/2 compiler and the tools associated with it.
- If you are migrating existing C++ applications, you should be aware
- that the standard USL classes (such as iostream, complex, and task),
- referred to in this product as the Basic Class Library or basic classes,
- are NOT included on this CD-ROM. Code containing a #include directive
- for any of the header files for the basic classes will not compile
- compile correctly and will generate the following error message:
-
- This is an information version of the header file you have
- referenced in the #include. Please refer to the README
- file in the compiler root directory for further instructions.
-
- These classes will be an integral part of the final C/C++ for OS/2
- product, but because of USL licensing restrictions they are being made
- available separately for this beta release. To obtain the Basic Class
- Library, please follow the instructions on the C++ information card
- included with this CD-ROM. The documentation for the Basic Class
- Library has been included on this CD-ROM.
-
-
- INSTALLATION
- _____________
-
- INSTALLATION PROCEDURE:
-
- The installation procedure will vary slightly depending on the medium
- you are using to install from. You can install directly from the CD-ROM
- or you can create diskettes using the diskette images on the CD-ROM.
-
- If you are also installing the Developer's Toolkit, and/or WorkFrame/2, the
- products should be installed in the following order:
-
- - Developer's Toolkit
- - WorkFrame/2
- - IBM C/C++ for OS/2 V2
-
- 1. From an OS/2 window or full screen, change the current drive and
- directory to the drive and directory where this file is located. Type
- INSTALL
- and press Enter. If you have not disabled the logo display from the
- operating system, the IBM logo appears. Click on the OK button or
- press Enter to proceed. A dialog box appears, instructing you to
- wait. Another dialog box appears to inform you that no online help
- is available. A dialog box with the installation option
- appears. The IBM-supplied defaults are preselected.
-
- 3. Choose the options you want to install. Some options are not
- available in this driver and have been disabled in the dialog box.
- Help is currently not available for the option fields or
- pushbuttons.
-
- NOTE: You do not have to install all the options now. You can use
- the installation program any time to reinstall or install
- additional options. At the installation of each option, the
- installation program informs you of the amount of disk space
- which will be used.
-
- 4. When you have chosen the installation options you want, select OK
- or press Enter. If you are installing from diskettes, the program
- prompts you for the proper diskettes during the installation.
- A window appears and shows you the status of the installation
- program, including which files are being installed and the
- percentage of the total bytes that has been installed. This window
- can be hidden by clicking on the Hide button and re-opened by
- selecting Option from the menu bar and clicking on the Status button.
-
- 5. If you chose to have your CONFIG.SYS file modified, or are updating
- a previous installation, the installation program creates a backup
- file. A dialog box appears with the default backup name, which you
- can keep, or you can create a new backup file name.
- Then select OK or press Enter.
-
- NOTE: If you do not have the installation program update your
- CONFIG.SYS file, a command file CSETENV.CMD is created,
- which sets up the environment for you, except that
- you must add the DLL subdirectory to your
- LIBPATH statement. For the full path of this subdirectory,
- see the File Structure diagram. To use the Execution Trace
- Analyzer, you must add
- DEVICE = X:\CSETV2\SYS\PROFIT.SYS
- to your CONFIG.SYS file, where X: is the drive where the
- product is installed.
-
- 6. When the installation is complete, a message box appears. Select OK
- to return to the main installation window, and then select Exit from
- the Options pull-down menu to end the installation program.
-
- 7. If your CONFIG.SYS file was modified, reboot the system to make the
- changes take effect.
-
- NOTE: Ensure that:
- 1) On any system where the Service Pack is not installed,
- your PATH variable is set to point to the compiler's BIN
- directory before the Toolkit's OS2BIN directory or the operating
- system's OS2 directory. This ensures that the linker
- (LINK386.EXE) shipped with the compiler is used, rather than
- the linker shipped with the Toolkit or operating system.
- 2) Your INCLUDE variable is set to point to the compiler's INCLUDE
- directory before the Toolkit's INCLUDE directory. This ensures
- that all the correct header files are used. You must also
- ensure that you include os2.h and only os2.h when you use
- OS/2 APIs.
- 3) The TMP environment variable is set. The install program currently
- does not set this variable. The TMP variable contains the path
- where temporary files are placed.
-
- 8. If you install the Execution Trace Analyzer, its device driver must
- reside in a local directory, meaning that it cannot be in a LAN
- directory. If you are installing on a LAN, when the installation is
- complete, copy PROFIT.SYS to a directory on your workstation and
- ensure that your CONFIG.SYS file contains the statement:
- DEVICE = X:\dir\PROFIT.SYS
- where X:\dir is the drive and directory where you placed PROFIT.SYS
- It is recommended you put PROFIT.SYS in X:\CSETV2\SYS.
-
-
- FILE STRUCTURE:
-
- The subdirectory CSETV2 (or the name you gave in the Target Path
- field) is created automatically by the installation program, and
- contains all other subdirectories and files.
-
- If you install all the options, the file structure is as follows:
-
- ---CSETV2
- |---IBMCLASS
- |---LIB
- |---DLL
- |---BIN
- |---HELP
- |---INCLUDE
- | +---SYS
- | LOCALE
- | SYS
- | SAMPLES
- | |---SAMPLE01
- | |---SAMPLE02
- | |---SAMPLE03
- | |---SAMPLE04
- | |---SAMPLE05
- | |---SAMPLE06
- | |---BBXX
- | |---PROFIT
- | +---ICLUI
- | |---TESTCNR
- | |---TESTDRG
- | |---TESTMENU
- | +---TESTWIN
- +---WKFRAME
- |---PMLINES
- |---GREP
- |---TOUCH
- +---MAHJONGG
-
-
- NOTE: The WKFRAME directory contains sample WorkFrame/2 projects for the
- IBM C/C++ Compiler for OS/2. Do not install WorkFrame/2 in this
- directory.
-
-
- NEW FEATURES
- _____________
-
- COMPILER:
-
- IMPORTANT: Any features mentioned in the documentation accompanying
- this driver that are not mentioned in this list have not yet been
- implemented.
-
- 1. C++
-
- A native 32-bit C++ compiler is now available. It is based on the
- ANSI working paper, X3J16/92-0060, of June 5, 1992, and also
- implements features of CFRONT 3.0, including template and exception
- handling support.
-
- 2. Precompiled Headers
-
- Precompiled header files are available in this driver, but must be
- written to and read from an HPFS drive. The FAT file system is not
- yet supported.
-
- 3. Diagnostic Messages
-
- The diagnostic messages have been revised, along with the
- compiler options and #pragma directives that control them,
- to give the user more control over which diagnostics are to be
- performed. Some messages have been reduced in severity
- from warning to informational.
-
- 4. Virtual Device Driver Support
-
- Support for building virtual device drivers has been added,
- including support for the _Far32 _Pascal calling convention
- and 48-bit function pointers. This support is only available in
- C programs. See the Programming Guide for details.
-
- 5. Inlining User Code
-
- Inlining of user code is supported with the /Oi option and the
- _Inline keyword. Note that the /Oi option only is supported for
- C++ programs. See the Programming Guide and the C Language
- Reference for more information.
-
- 6. Anonymous Unions
-
- Anonymous unions are now supported for C programs. See the
- C Language Reference for details.
-
- 7. Compiler Options
-
- The following compiler options have been modified:
-
- /K - All /K options, which control diagnostic messages, are now
- mapped to the /Wgrp options. They will not be supported at all
- in future releases of the IBM C/C++ for OS/2 product.
- /La - Now includes a layout of struct and union variables referenced
- by the user. In C Set/2 V1.0, it included all structures and unions.
- NOTE: This option is only available for C programs.
- /Lx - Generates a cross-reference table of all external variables
- referenced by the user. In C Set/2 V1.0, it generated
- a cross-reference of all names global and external variables,
- plus all local variables referenced by the user.
- NOTE: This option is only available for C programs.
- /Sm - Controls compiler interpretation of 16-bit keywords. Does not
- set the migration language level. See point 9 about the
- removal of migration mode.
-
- The following compiler options are new:
-
- /Fi - Controls creation of precompiled header files.
- /Gp - generates code for inclusion in a PDLL. See point 11.
- /G5 - Optimizes code for use with a Pentium** processor.
- /Lb - Includes a layout of all struct and union variables.
- NOTE: This option is only available for C programs.
- /Ly - Generates a cross-reference table of all global and external
- variables, plus all local variables referenced by the user.
- NOTE: This option is only available for C programs.
- /Nd - Specifies names of default data and constant segments.
- /Nt - Specifies name of default text segments.
- /Oi - Controls inlining of user code.
- /Pe - Removes #line directives in preprocessor output.
- /Si - Controls use of precompiled header files.
- /Su - Controls size of enum variables (1, 2, or 4 bytes).
- NOTE: For C++ programs, /Su can specify only 1 or 4 bytes.
- /Sv - Enables memory file support.
- NOTE: This option is currently not supported for C++.
- /Tc - Tells icc to compile the following file as a C file.
- /Tdc - Tells icc to compile all following source files as C files.
- /Tdp - Tells icc to compile all following source files as C++ files.
- /Tp - Tells icc to compile the following file as a C++ file.
- /Wgrp - Controls diagnostic messages.
-
- The /Gd+ option can be used for C++ programs; however, only
- C library functions are available.
-
- 8. #pragma Directives
-
- The following #pragma directives have been added or modified:
-
- checkout - Is now mapped to #pragma info. Is not supported for
- C++ files and will not be supported in future releases.
- entry - Specifies entry point to the program being built.
- NOTE: This directive is supported for C programs only.
- info - Controls diagnostic messages. Replaces the #pragma
- checkout directive.
-
- 9. New Functions
-
- The following low-level functions for port input and output have
- been implemented:
-
- _inp - Reads a byte from an input port.
- _inpd - Reads a doubleword from an input port.
- _inpw - Reads an unsigned short value from an input port.
- _outp - Writes a byte to an output port.
- _outpd - Writes a doubleword to an output port.
- _outpw - Writes a unsigned short value to an output port.
-
-
- 10. Removal of Migration Mode
-
- There is no longer a migration language level. All migration
- features have been moved under extended mode (/Se). The migration
- libraries have been merged with the standard libraries. The /Sm
- option no longer sets the language level; it enables migration
- support, such as ignoring unsupported keywords.
-
-
- 11. Optimization
-
- Optimization has been improved. Among the improvements is the
- utilization of the instruction scheduler. To invoke the scheduler,
- use the /Ys option. THIS IS A TEMPORARY OPTION ONLY.
- NOTE: If you encounter problems with optimization, try turning
- optimization on and inlining off (/O+ /Oi-).
-
-
- 12. Protected Dynamic Link Libraries (PDLL's)
-
- DLL protection prevents EXEs and non-protected DLLs
- from accidentally accessing data within a protected DLL.
- This is especially important if there is data within the protected
- DLL that is shared among different processes. A DLL contains shared
- data if the module definition file for the DLL contains
- DATA SINGLE SHARED or if it contains the SHARED attribute for one or
- more segments listed under the SEGMENTS keyword.
-
- Although data in a DLL is usually referred to only by the code
- in the DLL, it is possible for the process calling the DLL to write
- to a DLL data segment. Because this data segment is in the
- addressable range of the calling process, the process can overwrite
- data in the shared data segment without receiving an error.
- Other processes using the shared data segment can then
- have unexpected results because of the changes to the data.
-
- To create a protected DLL, use the /Gp+ compiler option when you
- compile the DLL source code. When you specify /Gp+, the
- IBM C/C++ for OS/2 compiler generates special instructions
- in the prolog and epilog of the module. The calling process can
- then use the data segment through the functions in the DLL, but
- cannot access the segment directly. If the calling process tries
- to access data within the protected DLL, then a general protection
- exception is raised.
-
- The special instructions are generated for all external functions
- within the DLL. If a function is not being exported from
- the DLL, you should make it static if possible. This will
- prevent the compiler from generating the special instructions in
- the prolog and epilog of that function.
-
- NOTE: It is really only necessary to create a protected DLL
- if the DLL contains data segments that will be shared
- by multiple processes. If your module definition file contains
- DATA MULTIPLE NONSHARED and doesn't contain any named shared
- segments, then data being overwritten by one process
- will not affect any other process.
-
- This support is available only with the OS/2 Service Pack.
-
-
- DEBUGGER:
-
- 1. Enhancements
-
- The following features have been added to the debugger:
-
- 1) A list of entry names is provided for the compilation unit.
- 2) You can now do a case-insensitive search on entry names
- and case-insensitive searches within source.
- 3) Support for FileList has been added.
- 4) Support for executable code in header files has been added.
- 5) A new Register window has been added.
- 6) Breakpoint support is provided for overloaded entry names.
- 7) C++ Class Inheritance View
- 8) C++ Class Details Notebook
- 9) C++ class monitors
- 10) PM Window Analysis
- 11) Toolbar for run, step, registers, stack, and storage
- 12) Message Queue Monitoring
- 13) Improved Stack walking
- 14) C - typecast expressions
- 15) New font dialog
-
-
- EXECUTION TRACE ANALYZER:
-
- 1. Added Support
-
- The following features have been added to this driver:
- 1) C++ support
- 2) Contextual help (to be completed in a later driver)
- 3) File access support
- 4) Buffer wrap support
- 5) Support for multiple trigger procedures
-
- NOTE: Both /Ti and /Gh must be specified to use the execution
- trace analyzer.
-
- 2. CUA* Conformance
-
- Some changes have been made to the panels in the interface to follow
- the CUA '91 guidelines. More changes will appear in future drivers.
-
-
- IBM CLASS LIBRARIES: COLLECTION CLASSES:
-
- 1. Samples Provided
-
- The CSETV2\SAMPLES\BBXX directory contains samples to familiarize you
- with the IBM Class Libraries: Collection Classes. Use NMAKE to
- create the executable files from the source provided. The correct
- output from the executable files is provided in the .xpc files in
- the same directory.
-
-
- IBM CLASS LIBRARIES: USER INTERFACE:
-
- 1. Prerequisites
-
- The IBM Class Libraries: User Interface is 32-bit code and only
- supports the IBM C/C++ for OS/2 compiler that it is shipped with.
- Applications built using the library will only run on the OS/2
- 2.0 operating system. Portions of the library use collection classes
- provided by the IBM Class Libraries: Collection Classes library,
- which is also shipped with the IBM C/C++ for OS/2 compiler.
-
- 2. Classes to Replace the OS/2 Developer's Toolkit
-
- Header files from the Developer's Toolkit are not required to use
- the IBM Class Libraries: User Interface classes. Note that if
- your application needs to call OS/2 or Presentation Manager
- (PM) APIs directly or if it uses typedefs or #defines provided by the
- Developer's Toolkit, you will need to use the Toolkit header files.
-
- Several classes are used to encapsulate constructs typically used
- from the Toolkit header files. These classes are:
-
- 1) Handle classes (for example, IWindowHandle to represent HWND
- values). These provide automatic conversions to and from the
- corresponding OS/2 types.
-
- Class hierarchy:
- ----------------
-
- IHandle - abstract base class
- |-- IAccelTblHandle - HACCEL
- |-- IAnchorBlockHandle - HAB
- |-- IBitmapHandle - HBITMAP
- | +-- ISysBitmapHandle - HBITMAP for system-provided bitmaps
- |-- IModuleHandle - HMODULE
- |-- IMsgQueueHandle - HMQ
- |-- IPointerHandle - HPOINTER
- | +-- ISysPointerHandle - HPOINTER for system-provided icons
- |-- IPresSpaceHandle - HPS
- |-- IProcAddressHandle - PID
- |-- IProcessID - PID
- |-- IProfileHandle - HINI
- |-- ISemaphoreHandle - HSEM
- |-- IStringHandle - HSTR
- |-- IThreadID - TID
- +-- IWindowHandle - HWND
-
- 2) Style class objects to represent PM window styles and attributes
- (for example, IWindow::visible for WS_VISIBLE). More details
- follow later.
-
- 3) Other classes represent the typedefs for MPARAM and MRESULT.
-
- Class hierarchy:
- ----------------
-
- IEventParam - MPARAM
- IEventResult - general MRESULT
- |-- IBooleanResult - Boolean MRESULT
- |-- IPairResult - IPair MRESULT
- |-- IPointResult - IPoint MRESULT
- |-- ISizeResult - ISize MRESULT
- +-- IUnsignedLongResult - unsigned long MRESULT
-
- 4) Color classes represent the PM CLR_xxx constants.
-
- Class hierarchy:
- ----------------
-
- IColor - RGB and color indexes
- |-- IDeviceColor - device-independent colors (for
- | example, default, background, and
- | neutral)
- +-- IGUIColor - system colors
-
- 3. Application and Thread Classes
-
- The IApplication class represents the application. Other classes
- represent various units of execution and use reference counting to
- support multiple uses of these functions.
-
- Class hierarchy:
- ----------------
-
- IApplication - process
- +-- ICurrentApplication - current process
-
- ICritSec - OS/2 critical section
-
- IReference - reference counting
- IRefCounted
- +-- IThreadFn - function to be executed on a thread
- +-- IThreadMemberFn - class member function run on a thread
-
- IThread - thread
- |-- ICurrentThread - current thread
-
- Below is an example of how main() could be coded using the
- IApplication class:
-
- void main()
- {
- IApplication app = IApplication(0);
- MyFrameWindow frame(ID_FRAME, 0, 0, IRectangle());
- // desktop is parent/owner
- app.current.run();
- }
-
- 4. Handler Classes
-
- The IBM Class Libraries: User Interface library has adopted an
- event-dispatching architecture called handlers. This architecture
- provides the ability to reuse event processing code. Most importantly,
- this architecture provides the ability to dispatch a new event when
- extending the library.
-
- The IWindow class provides a setHandler() function to allow handler
- objects to be "registered" for a window/control object. All handler
- objects for a window are added to a list; new handlers are always
- added to the front of the list. A window event is dispatched to each
- of the handlers for the window until it is processed. If the event is
- not processed by any of the handlers in the list, it is then passed to
- the window's handleWindowEvent() function. If still not processed, it
- is passed to the default window procedure.
-
- Handlers provide virtual functions (callbacks) for event processing.
- Derived classes must override these functions to process an event.
- In most cases, an event class is passed as an argument to the event
- handler functions. The event handling callback functions return a
- Boolean value, which is used to indicate if the handler object
- processed the event or if the event should be passed on. A return
- value of true indicates that an action has been taken and that the
- class library should stop dispatching the event.
-
- Member functions in IEvent can be used to set the return result for
- an event (an MRESULT to the system, as in the case of WM_FORMATFRAME).
-
- Control notification messages (WM_CONTROL) and the owner-draw control
- messages (WM_MEASUREITEM and WM_DRAWITEM) are dispatched first to the
- handlers for the control object, then if not processed, to the handlers
- for the owner of the control.
-
- Usage:
- ------
- To handle an event you must subclass the handler class and override
- the appropriate event handling function.
-
- You may subclass by multiply inheriting from the window and handler
- classes. For example:
-
- MyWindow : public IFrameWindow, public ICommandHandler
- {
- //my window class definition
- }
-
- You could also define a new class derived from the handler class
- to provide your event handling processing code. If the processing
- code can be used in more than one window, for example, editing and
- processing entry-field input, defining a new class may be a better
- approach. If you take this approach, you must manage your objects
- between the window class and the handler class.
-
- You can either reuse the class and create multiple instances of the
- handler objects to add to the windows, or reuse a single instance of
- the handler object for all windows. In the latter case, you might
- have to switch on the window ID or an object in IEvent to control
- your processing logic.
-
- Class hierarchy:
- ----------------
-
- IHandler - abstract base class
- |-- ICnrEditHandler - container edit events
- |-- ICnrHandler - common container events
- |-- ICommandHandler - WM_COMMAND, WM_SYSCOMMAND
- |-- IDragSourceHandler - drag events
- | +--IDragDropEFHandler - drag entry field text
- |-- IDragTargetHandler - drag events
- | +--IDragDropEFHandler - drag entry field text
- |-- IEditHandler - edit (data change) events for
- | IComboBox, IEntryField, IMLE, ISlider
- |-- IFontHandler - font dialog events
- |-- IFocusHandler - set and lose focus control for
- | IListBox, IMultiLineEdit,
- | IContainerControl, ISlider, ISpinButton
- |-- IHelpHandler - help events
- |-- IKeyboardHandler - WM_CHAR
- |-- IMenuHandler - menu events
- |-- IMouseClickHandler - mouse button events
- |-- IPageHandler - page size change, page selection, and
- | page deletion events for INoteBook
- |-- IPaintHandler - WM_PAINT
- |-- IResizeHandler - WM_SIZE
- |-- IScrollHandler - scroll bar events
- |-- ISelectHandler - select/deselect, Enter key and
- | double-click of IComboBox
- | IContainerControl, IListBox, and
- | non-push-button buttons
- |-- IShowListHandler - show list event for IComboBox
- +-- ISpinHandler - spinning events for ISpinButton
-
- 5. Event Classes
-
- The event classes represent PM messages and are the input to
- handler objects. Classes derived from IEvent typically contain
- specialized member functions to easily obtain information
- specific to that type of event.
-
- Note: IEvent does not support non-window-handle messages.
-
- Class hierarchy:
- ----------------
-
- IEvent - base class for general events
- |-- IBeginDragEvent - drag/drop
- |-- ICnrEvent - general container event
- | |-- ICnrEditEvent - edit event
- | | |-- ICnrBeginEditEvent - text to be edited event
- | | |-- ICnrEndEditEvent - text edited event
- | | +-- ICnrReallocStringEvent - text edited event
- | |-- ICnrEmphasisEvent - emphasis change event
- | |-- ICnrEnterEvent - enter/double-click event
- | |-- ICnrHelpEvent - help event
- | +-- ICnrQueryDeltaEvent - query event
- |-- ICommandEvent - WM_COMMAND and WM_SYSCOMMAND
- |-- IControlEvent - WM_CONTROL
- +-- IPageEvent - notebook page selection
- |-- IDragOperationEvent - drag/drop
- | |-- IDragOverEvent - drag/drop
- | +-- IDropOnEvent - drag/drop
- |-- IEndConversationEvent - drag/drop
- |-- IPaintEvent - WM_PAINT
- |-- IKeyboardEvent - WM_CHAR
- |-- IMouseClickEvent - mouse click messages
- |-- IRenderEvent - drag/drop
- | +-- IRenderCompleteEvent - drag/drop
- |-- IResizeEvent - WM_SIZE
- |-- IScrollEvent - WM_VSCROLL, WM_HSCROLL
- +-- IUDragDropRender - drag/drop
-
- 6. Window Classes
-
- The window class hierarchy has been structured to support handlers,
- frame extensions, and an explicit client area.
-
- IDialogWindow allows you to encapsulate a dialog box created from
- a resource file.
-
- IFrameWindow allows you to create all standard windows.
- This class provides an addControl() function to allow IBM Class
- Library: User Interface control classes to be added as extensions
- to the frame, and a function to set an explicit client area control.
- For example, setting an IContainerControl as the client area will
- create a main container window.
-
- Primary, secondary and child windows are created by specifying the
- appropriate parent and owner of the IFrameWindow or IDialogWindow
- being created. ITitle, IActionBarMenu, and setIcon() in the
- IApplicationWindow class allow you to set standard parts of a
- standard window.
-
- Class hierarchy:
- ----------------
-
- IWindow - abstract base class
- +-- IApplicationWindow - abstract base class
- |-- IDialogWindow - dialogs
- | +-- IFontDialog - font dialog
- +-- IFrameWindow - standard windows
-
- 7. Control Classes
-
- Window control classes provide three types of constructors:
-
- - to construct a C++ object and a PM control with any window as
- parent and/or owner
- - to construct a C++ object from a PM control on a dialog
- (the constructor takes the id of the control)
- - to construct a C++ object from a PM control on a window
- (the constructor takes the handle of the control)
-
- Class hierarchy:
- ----------------
-
- IWindow - abstract base class
- |-- IControl - abstract base class for controls
- | |-- IBitmapControl
- | |-- IContainerControl
- . .
- . .
- . .
-
- 8. IBitFlag, Styles, and Attributes
-
- When you construct a control, do not specify window and control
- styles as unsigned long values. You must pass in a Style object
- instead. Generic window and control styles are listed in
- iwindow.hpp and icontrol.hpp. These are:
-
- IWindow::noStyle IWindow::visible
- IWindow::disabled IWindow::clipChildren
- IWindow::clipSiblings IWindow::parentClip
- IWindow::saveBits IWindow::synchPaint
- IControl::group IControl::tabstop
-
- In general Style and Attribute objects are scoped to a window
- class. That is, the definitions of the class (done with a macro
- defined in ibitflag.hpp) and the objects are nested within a
- window class definition. As an example, the definition of the
- IEntryField class in ientryfd.hpp contains the following macro
- which defines a Style class:
-
- INESTEDBITFLAGCLASSDEF2(Style, IEntryField, IWindow, IControl);
-
- Although Style objects can only be constructed from existing Style
- objects, they can be combined using the operator | if the Style
- objects are compatible. The above macro allows an IEntryField::Style
- object to be combined (using |) with any IEntryField::Style,
- IWindow::Style, or IControl::Style object, but not with any other
- objects (for example, not with an ICheckBox::Style).
-
- The following examples show how Style objects can be used when
- constructing an entry field:
-
- a) IEntryField(ID_EF1, this, this, IRectangle(10, 10, 100, 20),
- IWindowStyle::visible | IControl::tabstop |
- IControl::group | IEntryField::margin |
- IEntryField::autoscroll);
-
- b) IEntryField::Style efsStyle = (IWindowStyle::visible |
- IControl::tabstop |
- IControl::group |
- IEntryField::margin |
- IEntryField::autoscroll);
- IEntryField(ID_EF2, this, this, IRectangle(10, 40, 100, 20),
- efsStyle);
-
- c) IEntryField(ID_EF3, this, this, IRectangle(10, 70, 100, 20),
- IEntryField::defStyle | IControl::tabstop |
- IControl::group);
-
- d) IEntryField::setDefaultStyle(IWindowStyle::visible |
- IControl::tabstop |
- IControl::group |
- IEntryField::margin |
- IEntryField::autoscroll);
- IEntryField(ID_EF4, this, this, IRectangle(10, 100, 100, 20));
-
- Example (d) shows an entry field being constructed with the default
- style. The example also shows how the default style provided by
- the class library can be replaced by a user-chosen default in the call
- to setDefaultStyle().
-
- After a control has been constructed, you can query and set its styles
- only through member functions, for example, through the isDisabled(),
- disable() and enable() functions. Note that not all member functions
- have been yet been added.
-
- Class hierarchy:
- ----------------
-
- IBitFlag - abstract base class for bitwise styles
- | and attribute flags
- |-- Style \
- |-- Frame \ generally, nested classes
- . /
- . /
- .
-
- 9. Menu Classes
-
- The menu classes let you construct an action bar or system menu for
- a standard window, or a popup menu for any window. The ISubMenu
- class provides functions for dynamically changing a menu.
- Just before an IPopUpMenu is displayed it is wrapped in an
- ISubMenu object by IMenuHandler which then calls the overridden
- version of menuShowing(). This call passes a pointer to the newly
- created ISubMenu wrapper. You can then use any of the ISubMenu
- member functions to dynamically refresh the IPopUpMenu before it is
- displayed. When the popup is dismissed, the IMenuHandler calls
- ISubMenu::refresh() to return the IPopUpMenu to its original state.
-
- Class hierarchy:
- ----------------
-
- IMenu - abstract base class
- |-- IActionBarMenu
- |-- IPopUpMenu
- |-- ISubMenu
- +-- ISystemMenu
-
- 10. Application Resource Library
-
- The IResourceMgr class represents an application resource library.
- The IResourceId class represents a specific resource in a resource
- library. The default resource library for an IResourceId object
- is supplied by the IApplication::current.resourceLib() function.
-
- Reference counting is provided for all bitmaps and icons to
- support multiple uses of these resources.
-
- Examples:
- ---------
- Given the following function foo:
- foo(const IResourceId&);
-
- a) if the resource is in the default location (see
- IApplication::current.setResourceLib()), you can call:
- foo(ID_MY_RESOURCE);
-
- b) if the resource is in a DLL (not the default location), call:
- IDynamicLinkLibrary dll("mydll");
- foo(IResourceId(ID_MY_RESOURCE, dll));
-
- Class hierarchy:
- ----------------
-
- IResourceLibrary - resource library
- |-- IDynamicLinkLibrary - .dll resource library
-
- IResourceId - resource in a resource library
-
- 11. Exception Handling
-
- Classes for exception handling are provided and are used throughout
- the class library.
-
- The IBM Class Libraries: User Interface library has adopted the
- philosophy that exception handling is error handling. This strategy
- does not attempt to address OS/2 exception processing (signals),
- because they do not fit the C++ exception handling model. Note that
- a stack-exhausted situation is an out-of-stack exception, and
- therefore is not addressed.
-
- All exceptions should be derived from the base exception class
- IException, which contains the following information:
-
- - A severity (defined as an enumeration) of recoverable or
- unrecoverable.
- - An error code defined by OS/2, PM, the user, or a library. The
- error code is OPTIONAL.
- - A "stack" of text strings providing detailed information about
- the exception. This stack captures low-level system information
- about the failure, as well as high-level text that is more
- suitable as message-box text for the end user. This field is
- OPTIONAL but highly recommended.
- - The module name, function name, and line where the exception is
- thrown and re-thrown. You can obtain this information with
- IASSERT and ITHROW macros. You can also call the addLocation
- function yourself to get the same information.
-
- The exception handling component has been designed to integrate
- seamlessly with the exception handling component of the IBM Class
- Libraries: Collection Classes library.
-
- Usage:
- ------
- The exception handling component has been split into 3 header files:
-
- 1) iexcbase.hpp
- Contains IException, IExceptionLocation, and derived classes of
- IException. The IASSERT, ITHROW, IRETHROW, and IEXCEPTIONLOCATION
- macros are also in this header. The header has no dependencies on
- any other classes.
-
- 2) iexcept.hpp
- Used to support exception handling in the IBM Class Library: User
- Interface library, and includes iexcbase.hpp. IExceptionText,
- IErrorInfo (abstract), IGUIErrorInfo, and ISystemErrorInfo are
- "helper" classes in this file. IExceptionText is used to retrieve
- text from a resource file. The other classes retrieve the error ID
- and error text from either PM or the OS/2 system.
-
- 3) bexcept.hpp
- Contains all of the information specific to the IBM Class Libraries:
- Collection Classes library, primarily their subclasses of
- IException. These are all collection-specific exception types.
- The exception subclasses in iexcbase.hpp are used for all other
- exception types.
-
- The ITHROW or IASSERT macro should be used to throw an exception.
- IASSERT takes a test expression argument. If evaluation of the test
- returns 0, an IAssertionFailure exception will be thrown with the
- ITHROW macro. You can use IASSERT conditionally so that the
- assertions are not delivered in production-level code. Unconditional
- versions of these checks should be implemented using the
- IInvalidParameter and IInvalidRequest exception classes.
-
- ITHROW takes an exception instance as its only argument. It captures
- the current location information, and log this information along
- with the rest of the available instance data. Use IRETHROW to
- re-throw an exception. You must provide an instance variable in the
- catch statement to log information about where the exception is
- caught and re-thrown, in addition to the original failure information.
-
- Following are all of the constructors necessary to create and throw
- exceptions, followed by some examples.
-
- IException(const char* msg,
- unsigned long errorId = 0,
- ExceptionSeverity sev = unrecoverable);
-
- IExceptionText(const IResourceId& resid);
-
- IGUIErrorInfo(const char* GUIFunctionName = 0);
-
- ISystemErrorInfo(unsigned long sysErrorId,
- const char* sysFunctionName = 0);
-
- Examples:
- ---------
- a) Load the message text from a resource file:
-
- Boolean bSuccess = WinBroadcastMsg(IWindowHandle((unsigned long)hCl),
- ulClEvtId, epCl1, epCl2, ulCmd);
- if (bSuccess == false)
- {
- IInvalidRequest ex(IExceptionText(IResourceId(IC_BROADCASTMSGFAIL,
- IIBMClass::resource())),
- IC_BROADCASTMSGFAIL,
- recoverable);
- ITHROW(ex);
- }
-
- b) Use the system-provided text for an error detected by PM:
-
- void* pv = WinQueryWindowPtr(hCl, sThisPtrOffset);
- if (pv == 0)
- {
- IGUIErrorInfo err("WinQueryWindowPtr");
- IInvalidRequest ex(err.text(), err.errorId(), recoverable);
- ITHROW(ex);
- }
-
- c) Use the system-provided text for an error detected by OS/2:
-
- unsigned long ulErrorCode = DosFreeModule(hmodClResource);
- if(ulErrorCode != 0)
- {
- ISystemErrorInfo errinf(ulErrorCode, "DosFreeModule");
- IAccessError exc(errinf.text(), errinf.errorId(), recoverable);
- ITHROW(exc);
- }
-
- Note: You may want to provide your own message loaded from a
- resource file for an OS/2 or PM error as in example a).
- You should also use the IGUIErrorInfo or ISystemErrorInfo
- as appropriate to retrieve the error ID and pass it in on
- the constructor of the exception.
-
- Class hierarchy:
- ----------------
-
- IException - base class
- |-- IAccessError - logical, for example, resource not found
- |-- IAssertionFailure - generated by the IASSERT macro
- |-- IDeviceError - for example, hardware problem
- |-- IInvalidParameter - out of range, null pointer, or
- | value not valid
- |-- IInvalidRequest - for the object's current state
- |-- IResourceExhausted
- |-- IOutOfMemory
- |-- IOutOfSystemResource
- |-- IOutOfWindowResource
-
- 12. Resource locking
- The IResourceLock class represents OS/2 semaphores.
-
-
- WORKFRAME/2:
-
- 1. This version will function properly in a DBCS codepage.
-
- 2. In the Program Type group, a radio button labeled "Windows"
- has been added. You can use this button to install Windows-based
- tools in the Tools pulldown menu. However, the tool can only
- be started in Windows full-screen mode.
-
- 3. A special program and sample language profile have been provided to
- help users whose compilers experience "out-of-file-handles" problems
- during compilation. The WCL.EXE program has been customized to
- invoke CL.EXE by default. To override the compiler invoked, set the
- WCL environment variable to your compiler before you start the
- WorkFrame/2 product.
- NOTE: When the compiler is running outside of the WorkFrame/2
- product, this solution will not help.
-
- 4. If you use tools (compilers, linkers, or other tools) that
- are DOS-hosted, output from these tools are sent to a DOS
- session. Therefore you cannot select or drag an error
- message to an editor session to see the context of the error
- or get help for it. However, if your tool is an OS/2 tool
- with DOS as the target environment, this restriction does not
- apply.
-
- 5. Special considerations when using hidden windows and the
- Switch list pulldown:
-
- Windows or folders that are hidden (not minimized) appear
- in the Configure Switch List dialog as visible / jumpable, just
- as they would if they were minimized.
-
- However, if you select a hidden window or folder in the Configure
- Switch List dialog so that it will appear in the Switch
- list pull-down menu, selecting that menu item from the Switch
- List will not resurface the window or folder.
-
- Hidden windows and folders must be resurfaced from the OS/2
- Window List.
-
- Alternatively, you can use the Window page of the Settings
- notebook to change the minimized button behavior for the window
- or folder.
-
- 6. Default Editor
-
- This version of the WorkFrame/2 product automatically sets up
- the OS/2 Enhanced editor as the default editor. To change
- the default editor, select Configure->Editor... from the
- main action bar.
-
- 7. User Interface
-
- The user interface in this version is identical to the WorkFrame/2
- V1.0 product. Upcoming versions will contain significant changes
- to this user interface.
-
-
-
- RELEASE CONSIDERATIONS:
- _______________________
-
- COMPILER IN GENERAL:
-
- 1. Predefined Macros
-
- The __TIMESTAMP__ macro is not supported in this driver for C or
- C++ programs. If this macro is used, it will expand to the wrong
- value. The __DATE__ and __TIME__ macros are fully supported.
-
- 2. chmod() Function
-
- chmod() will permit you to change the access mode of a directory
- that is under a FAT file system. This is due to a malfunction in
- the OS/2 API DosSetPathInfo which will be fixed in later releases
- of the OS/2 operating system.
-
- 3. Restrictions on Freeing Memory
-
- When you use the debug memory management functions (defining the
- __DEBUG_ALLOC__ macro), you must use the normal version of free()
- to free the memory for the following functions:
-
- asctime strdup
- _fullpath tempnam
- getcwd tmpnam
- _getdcwd
-
- To ensure the correct version of free is called, place parentheses
- around the function call.
-
- 4. #pragma alloc_text
-
- In programs containing both #pragma alloc_text and #pragma data_seg,
- all #pragma data_seg directives must precede the #pragma alloc_text
- directives.
-
- #pragma data_seg applies only to 32-bit data segments. Data
- placed in 16-bit segments because of the /Gt option or
- #pragma seg16 are not affected by #pragma data_seg, and are
- placed in 16-bit data segments.
-
- #pragma alloc_text is not yet supported for use in C++ programs.
-
-
- 5. Bit-Fields and Postfix Operators
-
- Programs containing post-increment or post-decrement operations
- on bit-fields will not compile correctly.
-
- 6. Stack Probes
-
- The code to provide stack probes may not be generated when stack
- frames contain more than 2KB of automatic storage but less than 4KB
- of automatic storage. The code generated for stack probing may be
- incorrect.
-
- 7. Binding Runtime Messages
-
- You can use the MSGBIND utility from the OS/2 2.0 Developer's
- Toolkit to bind the C/C for OS/2 run-time messages to your application.
- To do so, you must use the message identifiers, not the message
- numbers listed in the IBM C/C++ for OS/2 Online Reference. To get
- the identifiers from the message numbers, change the EDC prefix to
- DDE, and subtract 5000 from the message number. For example, to
- bind message EDC5101 to your application, use DDE0101 in your
- message bind file.
-
- 8. 48-bit Function Pointers
-
- You cannot convert other types to a 48-bit function pointer, and
- you cannot return a 48-bit function pointer that is a structure
- or union member.
-
- 9. Listing Files
-
- The line and column numbers given in listing files may not be
- correct. Use the coordinates from the console files instead.
-
-
- FOR C++ PROGRAMS:
-
- 1. Compiler Options
-
- /Fd - You must compile ALL files with the /Fd+ option. You can
- specify this option on the command line or using the ICC
- environment variable.
-
- /G3 - You must compile C++ files with this option (it is the default).
- The /G4 and /G5 options are not available for C++ files in
- this driver.
-
- 2. Multithread Support
-
- The multithread library provides multithread versions of the C
- runtime and iostream libraries ONLY. The C++ runtime library remains
- single-thread.
-
- 3. Template Support
-
- There are two ways to structure your program using templates:
-
- 1) Include the function template definition in all files that may
- reference the corresponding template functions.
-
- 2) Include the declaration for a function template in all files that may
- reference the corresponding template functions, but only include
- the function definition in one file.
-
- These methods use DDE4MNCH (see the DDE4MNCH.DOC file in the HELP
- subdirectory for more information).
-
- The following example uses 2 files to illustrate both methods:
-
- File stack.h:
- #ifndef _STACK_TPL_H
- #define _STACK_TPL_H
-
- template<class T>
- class stack
- {
- private:
- T* v;
- T* p;
- int sz;
-
- public:
- stack( int );
- ~stack();
- void push( T );
- };
- #endif
- File stackdef.h
- #include "stack.h"
-
- template<class T> stack<T>::stack( int s )
- {
- v = p = new T[sz=s];
- }
-
- template<class T> stack<T>::~stack()
- {
- delete [] v;
- }
-
- template<class T> void stack<T>::push( T a )
- {
- *p++ = a;
- }
-
- To instantiate a stack of 50 objects of type int, declare
- stack<int> intStack(50);
- in each source file.
-
- For method 1), each source file using the template would include both
- stack.h and stackdef.h.
- For method 2), each source file would include stack.h but only one
- of the files would include stackdef.h.
-
- For more information on using templates, see the IBM C/C++ for
- OS/2 C++ Language Reference.
-
- NOTE:
- a) You should explicitly initialize static data members of a
- template class for each instance of the template,
- rather than using a template initializer. The following
- example demonstrates this point:
-
- template <class T> X {
- static int thing;
- };
-
- template <class T> int X<T>::thing = 1; // linker error
-
- X<char> anXOfChar;
-
- int X<char>::thing = 1; // OK
-
- b) A virtual non-inlined member function X defined in a template
- that is included in more than one compilation unit may result
- in multiply-defined symbols at link time. A way around this
- problem is to define the function X as inlined. The following
- example demonstrates the problem and a workaround:
-
-
- // file: Object.h
- //---------------------------------------------------------
- //
- #ifndef _OBJECT_H
- #define _OBJECT_H
-
- template<class T> struct BaseStack
- {
- virtual void push( T ) {};
- };
-
-
- template<class T> struct stack : public BaseStack<T>
- {
- virtual void push( T ); // This will produce the error
- /*
- virtual inline void push( T );
- // This will not produce the error
- */
- };
-
-
- template<class T>
- void stack<T>::push( T a ) {} // This will produce the error
- /*
- template<class T>
- inline void stack<T>::push( T a ) {}
- // This will not produce the error
- */
-
- class TestObject
- {
- stack<int> stack1;
- };
- #endif
-
-
- // file: Object1.cpp
- //------------------------------------------------------
- //
- #include "object.h"
-
- void func1() { }
-
-
- // file: Object2.cpp
- //------------------------------------------------------------
- //
- #include "object.h"
-
- void main() { }
-
-
-
- 4. Memory and Space Requirements
-
- The current driver requires a large amount of memory. Compiling the
- compiler produces swap files of up to 12M.
-
- Including debug information (with the /Ti+ option) can greatly
- increase the size of your object and executable files.
-
- 5. System Header Files
-
- New versions of several system header files have been provided
- for C++ support. These files are: os2.h, bsedos.h, and os2def.h.
- Ensure that the CSETV2\INCLUDE directory appears before the Toolkit's
- INCLUDE directory so you include the correct header files.
- You must also ensure that you include os2.h and ONLY os2.h when you
- use system APIs.
-
- 6. Nested Parentheses
-
- You can use approximately 25 levels of nested parentheses. After
- that level, the compiler runs out of stack space and traps.
-
- 7. static Keyword
-
- The keyword static cannot be used with prototypes that contain
- linkage keywords.
-
- 8. TMP Environment Variable
-
- The compiler will not work if the TMP environment is not set.
-
- DEBUGGER:
-
- 1. Unsupported C++ Constructs
-
- The following C++ constructs are not supported in this driver:
-
- 1) The pointer to member operator.
-
- 2) Static members.
-
- 3) The && and || operators are not supported in expressions.
-
- 4) Assignments are not supported and will not be supported in
- an expression. Assignments within an expression will cause
- the debugger to terminate abnormally.
-
- 5) Data members within member functions cannot be monitored.
-
- 6) Pointers within a class cannot be dereferenced.
-
- 7) Nested classes are only partially supported. They can be
- displayed in the monitor of the enclosing class, but you cannot
- monitor expressions involving elements of the nested class.
-
- 8) Data displayed for virtual base classes is incorrect.
-
- 2. Problems with Views
-
- The inheritance and class details views do not provide the correct
- information. The inheritance view graph has nodes that are blank.
- Double-clicking on the blank nodes or any node connectected
- to a blank node will cause the debugger to terminate abnormally.
-
- 3. Templates
-
- Templates are partially supported in this driver.
- It is possible to step in all views, source, disassembly, and
- annotated. Local variables are supported. Monitor popups are
- not always supported. Line breakpoints are not supported.
-
- 4. Message Queue Monitoring
-
- Message Queue Monitoring cannot be enabled until after
- the PM message queue has been created. The message queue
- monitoring must be closed before the message queue is
- deleted.
-
- 5. Breakpoint Dialogs
-
- New breakpoint dialogs are under development and are not yet
- fully functional. Only the SET and LIST functions currently work.
-
-
- EXECUTION TRACE ANALYZER:
-
- 1. Execution Density Diagram
-
- At very high scale setting, the Execution Density Diagram (PEXCDENS)
- may end abnormally and return to the command prompt.
-
- 2. Response Delay
-
- When you invoke the display program, the system response may be
- delayed. For large trace files, the system might lock up for up
- to 1 minute.
-
- 3. Dynamic Call Graph Display
-
- In the dynamic call graph display, the data representing the number
- of calls between functions may not be correct. The other data
- representations in this display are correct.
-
- 4. Permanent Restrictions
-
- The following restrictions for the analyzer are permanent:
-
- 1) The Execution Trace Analyzer only works for applications generated
- by the IBM C/C++ for OS/2 compiler. Executables and DLLs produced
- by other compilers (including 16-bit) cannot be used.
-
- 2) The analyzer can trace up to 16 threads per application.
-
- 3) The analyzer cannot generate or analyze trace data for child
- processes in a multiprocess application.
-
- 4) Dynamically-loaded DLLs cannot be traced.
-
-
- IBM CLASS LIBRARIES: COLLECTION CLASSES:
-
- 1. Using Multiple Compilation Units
-
- Using the Collection Classes in more than one compilation unit
- results in multiply-defined symbols at link time.
-
- For information on other restrictions, please refer to the chapter
- 'Current Restrictions' in the IBM Class Libraries: Collection Classes
- Reference.
-
-
- IBM CLASS LIBRARIES: USER INTERFACE:
-
- 1. DLL Support
-
- The class library is currently shipped only in the form of object
- libraries; there are no DLLs. To build an executable module (.EXE),
- you must statically link object modules from the shipped .LIB files.
- In a future driver, both DLLs and object libraries will be provided.
-
- 2. Collections
-
- The set and link list classes currently provided by the class library
- will be removed in a future driver. Of these, only the IGSet1
- template class is externalized by the rest of the library (the other
- set and link list classes are only used internally). These
- externalized uses of IGSet1, primarily in the container and drag/drop
- classes, will be changed to use the IGSet template class provided by
- the IBM Class Libraries: Collection Classes library.
-
- To ease the migration from IGSet1 to IGSet, functions provided in
- the IGSet1 class have interfaces that are identical to the IGSet
- classes provided by the IBM Class Libraries: Collection Class
- library. Note, however, that not all functions supported by IGSet
- are supported by IGSet1 (for example, iterators). The other set and
- link list classes should not be used because no migration path will
- be provided to the IBM Class Libraries: Collection Class library
- when they are removed.
-
- 3. Control Classes
-
- Some control classes are missing member functions to query and change
- individual styles.
-
- 4. Container Restrictions
-
- The following restrictions apply to containers:
- - The drag and drop interface is not yet supported.
- - Popup menus are not yet supported.
- - ICnrSelectActionHandler has not yet been implemented.
-
- 5. Missing Classes
-
- The following classes were planned for, but are missing from this
- driver:
-
- IFileDialog, IFilePkg, IFontPkg, IComboBox,
- ISlider, IProgressIndicator
-
- 6. NLS/DBCS Support
-
- At this time, full NLS and DBCS is not yet provided.
-
- 7. Future Changes
-
- The class names, function names and function arguments are subject
- to change. Changes may result from IBM Quality and Usability reviews,
- function corrections, fixes to bugs, or feedback from beta users.
-
-
- WORKFRAME/2:
-
- 1. Library Manager
-
- The Library Manager (LIB) cannot access read-only object files.
-
- 2. Window Positions
-
- If you save the window positions while the main WorkFrame/2 window
- is maximized, the main window will not appear the next time you
- start the WorkFrame/2 program. If the main window and its action
- bar are not visible when you start the program, select the Action
- Log window and press Ctrl-F6 followed by Ctrl-F5 until the main
- window is restored.
-
-
- DOCUMENTATION
- _____________
-
- The following documentation is provided with this driver in .INF format.
- Use the view command to read these files:
-
- DDE4CLRM.INF - C Language Reference
- DDE4CPP.INF - C++ Language Reference
- DDE4CLIB.INF - C Library Reference
- DDE4BCL.INF - Basic Class Library Reference
- DDE4CCL.INF - IBM Class Libraries: Collection Classes Reference
- DDE4UIL.INF - IBM Class Libraries: User Interface Library Reference
-
- The C++ Language Reference and Basic Class Library Reference are
- undergoing a change in format and are not yet finished. For this
- reason, they are also provided in their original format and can be
- printed on a PostScript printer.
-
- The following documentation is provided in PS or LISTPS format and
- can be printed on a PostScript printer:
-
- DDE4PG - Programming Guide
- DDE4RSUM - Reference Summary
- DDE4CPP - C++ Language Reference
- DDE4BCL - Basic Class Library Reference
- DDE4DEBG - Debugger Introduction
- DDE4XANL - Execution Trace Analyzer Introduction
- DDE3WINT - WorkFrame/2 Introduction
- DDE3WAPI - WorkFrame/2 API Guide
-
- These documents are also available in BookManager* READ format in the
- BOOKS directory on the CD-ROM, and can be read using the IBM Library Reader.
-
- IMPORTANT: BookManager books will NOT be shipped with IBM C/C++ for OS/2
- when the product becomes generally available. They will be
- separately orderable from the product.
-
-
- SUPPORT
- _______
-
- Support is on a best-effort basis and will most likely result in a fix
- being provided in a subsequent driver. Please report all problems, questions,
- suggestions, and so on to the OS2DEV forum on CompuServe.
-
- Please include a complete description of the problem as well as a small
- (up to 100 lines if possible) testcase that demonstrates the problem.
-
-
- Enjoy,
-
- Your IBM Development Team
-
-
- TRADEMARKS AND SERVICE MARKS:
- _____________________________
-
- The following items are trademarks of the IBM Corporation and are
- indicated by an asterisk the first time they appear in the text:
-
- BookManager
- C Set/2
- CUA
- IBM
- OS/2
- Presentation Manager
- WorkFrame/2
-
- The following item is a trademark of the Intel Corporation and is
- indicated by a double asterisk the first time it appears in the text:
-
- Pentium
-