                  Welcome to Borland C++ for OS/2
                  -------------------------------

  This README file contains important information about Borland C++.  For
  the latest information about Borland C++ and its accompanying programs
  and manuals, read this file in its entirety.

  For useful information on working with the Borland Debugger, see the
  online file README.TD in the DOC subdirectory of your Borland C++
  installation.


TABLE OF CONTENTS
-----------------
  I. How to Get Help
 II. Installation
III. Features
 IV. Important Information


  I. HOW TO GET HELP
--------------------
  If you have any problems, please read this file, the online help,
  and other files in your DOC subdirectory, and the Borland C++
  manuals first. If you still have a question and need assistance,
  help is available from the following sources:

  1. Type

        GO BORLAND

     on the CompuServe bulletin board system for instant access to
     the Borland forums with their libraries of technical information
     and answers to common questions.

     If you are not a member of CompuServe, see the enclosed
     special offer, and write for full details on how to receive
     a free IntroPak containing a $15 credit toward your first
     month's on-line charges.

  2. Check with your local software dealer or users' group.

  3. Borland's TECHFAX service. Call (800) 822-4269 for a FAX 
     catalog of entries.

  4. If you have an urgent problem that cannot wait and you have
     sent in the license agreement that came with the package,
     you may call the Borland Technical Support Department at
     (408) 461-9133. Please have the following information ready
     before calling:

     a. Product name and serial number on your original distribution
        disk.  Please have your serial number ready or we will be unable
        to process your call.

     b. Product version number. The version number for Borland C++
        can be displayed by pressing Alt-H/A in the IDE.

     c. Computer brand, model, and the brands and model numbers of any
        additional hardware.

     d. Operating system and version number. (The version number can
        be determined by typing SYSLEVEL at the OS/2 shell prompt.)

     e. Contents of your CONFIG.SYS file.


 II. INSTALLATION
-----------------

  To install Borland C++, just type;

    A:INSTALL

  in an OS/2 window, assuming A: is a 3.5" floppy drive. Or click on the
  "Drive A" prompt on the desktop, and double-click the Install icon.  You
  can then select installation options, or click on the install button to
  begin installing immediately.

  Please note that the install reports that 40 Mbytes are required on a
  full install for unpacking and help file creation.  After the install is
  complete, only 31 Mbytes are actually used.

  For CD-ROM users, the RTL source files have been included and can be found
  in the \BCOS2\SOURCE\RTL directory.  Simply copy them onto your harddisk to
  install.

  As part of updating your config.sys file, the install will add the line
  SET IPFC=c:\bcos2\ipfc when the line doesn't alreay exist.  If config.sys
  already has a "SET IPFC" line, install will append c:\bcos2\ipfc to the
  end of this line even though IPF.exe will only look in the first directory
  for its support files.  If you want to use the IPF support files provided
  by Borland, delete the first directory path from the "SET IPFC" line and
  reboot.  For example, change SET IPFC=c:\tookit\ipfc;c:\bcos2\ipfc to
  SET IPFC=c:\bcos2\ipfc ("c:\bcos2" is replaced with your specified path if
  different).

  NOTE: If you do not expect to use the IBM Help Viewer to access the *.INF
        files and you selected them to be installed, you may delete them
        from the BCOS2\BIN directory and save substantial disk space.  The
        reference files you may want to keep include TASM.INF, IPFC20.INF,
        IPFCEXMP.INF, and GUIREF20.INF.

        If you selected Borland OS/2 help files and did not install the IDE,
        Debugger, or Resource Workshop, you may delete the *.HLP files from
        the BCOS2\BIN directory to save additional disk space.


III. FEATURES
-------------

  - A visual object Browser to view class inheritance
  - Support for C++ Exceptions and RTTI
  - Presentation Manager Custom Control library
  - An IDE for Presentation Manager with integrated debugging
  - A standalone debugger that runs under Presentation Manager
  - Extensive context-sensitive online help
  - Resource Workshop for OS/2, a tool for resource creation and editing
  - TCREF: A cross reference utility for assembly language programs

IDE
---
  - Local popup menus for most IDE desktop objects: editor, transcript,
    project, and others
  - Drag & drop support from project to IDE desktop and PM to IDE desktop
  - Background compiling and Transfer features
  - A speedbar with icons for compilation, debugging, and editor actions
  - Easy access to all configuration options via the Settings notebook by
    choosing the Project|View Settings menu command
  - Buttons to revert to default settings in notebooks
  - Syntax highlighting for increased code readability
  - Configurable key bindings for the editor using the Editor Key Bindings
    setting in the Environment|Preferences subsection of the Settings
    notebook
  - Printing support under File|Print
  - Context-sensitive help on most objects and keywords
  - Extensive integrated debugging

TLINK
-----
  - The following switches are new:

    /Gm    Write mangled names in map file
    /n     No default libraries

    The IOPL and NOIOPL (control CODE segment I/O priviledge) options
    in the CODE statement are no longer supported.


 IV. IMPORTANT INFORMATION
--------------------------

  This version of Borland C++ for OS/2 is designed to run under the
  shipping version of OS/2 v2.1 or "OS/2 for Windows" installed.

OS/2 Issues
-----------
  - OS/2 provides a master index file you can use to access the Presentation
    Manager reference online help file.  In order to access this index, you
    must add the following lines to your CONFIG.SYS file:

      SET PMREF=PMFUN.INF+PMGPI.INF+PMHOK.INF+PMMSG.INF+PMREL.INF+
                PMWIN.INF+PMWKP.INF 
      SET HELPNDX=EPMKWHLP.NDX

    Then at the OS/2 prompt type "VIEW PMREF".  You can reference the entire
    Presentation Manager online reference from this single index.

  - OS/2 has problems with 64k multiples for a stack, we suggest that you try
    62k multiples or less.

  - DosExit() utilization is not recommend in OS/2 applications.  We recommend
    that you use exit() instead due to required RTL initialization / cleanup.

Compiler
--------
  The following is a summary of new (or changed) compiler switches:

  -an  Align to n: 1 = Byte, 2 = Word, 4 = Double Word boundaries.

  -xd  Enables destructor cleanup so that destructors are called for all
       automatically declared objects between the scope of the catch and
       throw statements when an exception is thrown.  Note that destructors
       aren't automatically called for dynamic objects and dynamic objects
       aren't automatically freed.

  -xf  Expand function initilization inline.  Normally, the prolog of a
       function with any exception handling constructs will contain a call
       to a run-time library function to initialize exception handling for
       the function.  The -xf option expands this code inline in the prolog
       of each function providing slightly faster code execution, but at the
       expense of code size.  This option can be used selectively for only
       the most time-critical functions.

  -xp  Enables exception location information that makes available run-time
       identification of exceptions by providing the line numbers in the
       source code where the exception occurred.  This lets the program query
       the file and line number from where a C++ exception occurred.

  -Hc  Cache precompiled headers. Must be used with -H or -Hxxx.  This option
       is useful when compiling more than one precompiled header.

  -H"xxx"  Stop compiling precompiled headers at file "xxx".  This must be
       used with -H, -Hu, or -H=filename.

  -R   Include browser information in generated .OBJ files.  ObjectBrowser
       reference information in OBJs includes browser information when the
       compiler generates .OBJ files; this lets you inspect the application
       using the IDE's integrated ObjectBrowser.  When this option is off,
       you can link larger .OBJ files. This option doesn't affect execution
       speed, but it does affect compile time.

  -RT  Enable run-time type information.

  The following is a summary of new (or changed) compiler features:

  - Support for ANSI C++ exception handling, structured exception handling
    under C, and mixed C/C++ exception handling
  - Additional optimizations and faster compile time
  - Support for ANSI C++ operator new[] and operator delete[]
  - Runtime Library support for the ANSI C++ string class
  - Support for ANSI C++ runtime type identification (RTTI)
  - Support for ANSI C++ new style casts dynamic_cast, static_cast,
    const_cast, and reinterpret_cast

  This compiler supports the three distinct character types specified in
  section r.3.6.1 of the Second Edition of "The C++ Programming Language",
  by Bjarne Stroustrup.  This means that calls to some functions taking
  char which were legal and unambiguous in Borland C++ v3.1 will now cause
  an ambiguity error.

  Use of the -K2 option, casting, using the compiler option to change the
  default char handling, or supplying functions for the three types are some
  ways to resolve these errors.

  Another change from the October ANSI C++ draft supported is support for
  virtual functions differing in return type.  Section 10.2 specifies that
  the return type for an overriding function can be a pointer or reference
  to any class publicly derived from the base class used as the overridden
  return type:

    struct X{};
    struct Y: public X{};
    class B
    {
      ...
      public:
       virtual X* xFunc();
    };

    class D : public B
    {
      ...
      public:
        Y* xFunc();  // now legal: returns pointer to derived class
    };

  This compiler supports 16-bit wide characters, which increases the range
  of codes for the wchar_t type.  Size-dependent definitions may be affected
  by this change.  Specifically, use 

     L"abc"             for wchar_t strings, and
     L'a'               for wchar_t characters.

  Enum operator overloading is also supported in this compiler.

  The compiler now supports the AT&T CFRONT 3.0 template function
  overloading resolution extensions.

  Note, these extensions are disabled if the strict ANSI compliance
  compiler switch (-A for the command line, Options|Source|Ansi for the
  IDE) is enabled.

  When searching for an exact match for template function parameters;

  1) Trivial conversions are now considered exact matches.  For example:

     template<class T> void foo(const T a) {
       ...
     }
     ...
     foo(0);   //  This is illegal under ANSI C++: unresolved foo(int).
               //  However, Borland C++ now allows foo(const int) to be
                   called.

  2) Derived class pointer or references arguments are permitted to
     match their public base classes.  For example:

     template<class T>
     class B {
       ...
     };

     template<class T>
     class D : public B<T> {
       ...
     };

     template<class T> void foo(B<T> *b) {
       ...
     }
     ...
     foo(new D<int>); // This is illegal under ANSI C++: 
                      // unresolved foo(D<int> *).
                      // However, Borland C++ now allows
                      // foo(B<int> *) to be called.

     The conversion from derived class to base class is allowed only for
     template parameters, non-template parameters still require exact
     matches.  For example:

  class B {
    ...
  };

  class D : public B {
     ...
  };

  template<class T> void bar(T ignored, B *b) {
     ...
  }
  ...
  bar(0, new D);  // Illegal under CFRONT 3.0, ANSI C++ and Borland C++:
                  // unresolved external bar(int, D *), D * -> B * is not
                  // considered an exact match.

Libraries and Startup Code
--------------------------
  The following global variables have been renamed:

  Obsolete global     Old name     New name       Header file
        variables   -----------------------------------------
                      daylight     _daylight      time.h
                      directvideo  _directvideo   conio.h
                      environ      _environ       stdlib.h
                      sys_errlist  _sys_errlist   errno.h
                      sys_nerr     _sys_nerr      errno.h
                      timezone     _timezone      time.h
                      tzname       _tzname        time.h
                    -----------------------------------------

  Link with OBSOLETE.LIB to get the obsolete global variables.

  The old names of the following functions are available.
  However, the compiler will generate a warning that 
  you are using an obsolete name. Future versions of Borland
  C++ might not provide support for the old function names.

  The following function names have been changed:

                      Old name     New name       Header file
                    -----------------------------------------
                      _chmod       _rtl_chmod     io.h
                      _close       _rtl_close     io.h
                      _creat       _rtl_creat     io.h
                      _heapwalk    _rtl_heapwalk  malloc.h
                      _open        _rtl_open      io.h
                      _read        _rtl_read      io.h
                      _write       _rtl_write     io.h
                    -----------------------------------------

Changes to the Class Libraries
------------------------------
  Only the version of the class library implemented with C++ templates 
  is distributed and directly supported in Borland C++ v1.5.

  The class library "object-based" include files are provided in the
  \BCOS2\INCLUDE\CLASSLIB\OBSOLETE subdirectory.  The object-based
  libraries themselves are not supplied, but can be built using the
  instructions found in the \BCOS2\SOURCE\CLASSLIB makefile (see the
  comments located there).

  Use Generate Makefile for \BCOS2\EXAMPLES\CLASSLIB samples programs for
  command line usage.

IDE
---
  Differences from the Borland C++ Version 3.x interface:

  - Transfer tools are no longer listed under a special system menu, but
    are instead listed under a new Tools menu.  This menu also includes all
    message management actions.  Transfer items are installed through the
    Transfer section of the Settings notebook. Open the Settings notebook
    by choosing the Project|View Settings menu command.

  - The message window and modal compile dialog have been combined into the
    new modeless Transcript Window.  This enhancement supports background
    compilation.

  - The Options menu has been replaced with the Project Settings Notebook;
    the notebook is accessed through the Project|View Settings menu item.
    The notebook contains sections and pages which correspond to the nested
    menus and dialogs accessed from the original Options menu.

    Note that the Project Settings notebook works like other notebooks in
    Presentation Manager: changes made to controls take effect immediately
    rather than pending confirmation as in dialogs; the notebook is modeless.

    Searching in selected text with the Settings notebook environment editor
    "Persistent Blocks" option set to OFF is not possible.  The block is
    removed before the search is attempted; therefore the search will fail.

    Occasionally  doing Help | Topic search on a valid help topic will fail
    on machines running the OS/2 Service pak from October 1992.  Access the
    Help via the Help|Contents menu item.	

  Integrated debugging:

  - "Return from function" under the Run menu will run the current function
    at full speed until it returns to the function which called it.  The
    Breakpoints detail view keeps track of changes made to source modules
    containing breakpoints by inserting the new line number information along
    side the original breakpoint information.

  - Debugging a process the second time may result in old information
    displayed in the Breakpoints or Disassembly view if the Project Settings 
    notebook environment preferences "Auto Save Editors" is set to OFF.
    Saving changed files before restarting a debugging session fixes the
    problem.

  - If you experience very slow stepping while a DOS window is open, you
    should set IDLE_SENSITIVITY under Settings|Session|DOS settings to a low
    value.  This also applies to standalone debugging.

Turbo Debugger GX
-----------------
  For useful information on working with the Borland Debugger, see the
  online file README.TD in the DOC subdirectory of your Borland C++
  installation.

DLLs
----
  When creating a DLL which will be loaded by either a non-Borland built
  executable, or explicitly loaded by calling DosLoadModule, the global
  variable _multidll must be set as follows to ensure initialization of the
  DLL.

    extern int _multidll = 0;

  This statement should be placed globally in some module being linked into
  the DLL.

  When _multidll is set to zero, the DLL initializes itself when it is 
  loaded by the operating system.   When _multidll is set to one, executables
  built using Borland tools initialize the DLL after the DLL is loaded by the
  operating system.

  Under OS/2 2.1 there is no guarantee that interdependent DLL's will be
  initialized in the correct order.  An example of interdependent DLL's 
  would be a DLL containing a global class instance where that class' 
  constructor makes a call to some Runtime Library (RTL) function.  If the
  dynamic version of the RTL was linked to the DLL, the RTL DLL would need 
  to be initialized first.

  By default, DLLs built using Borland tools let Borland-built executables
  do the initialization.  This works only if the DLL was loaded implicitly
  when the executable was loaded.  If the DLL was loaded with the kernel
  function DosLoadModule, the DLL would need to initialize itself by setting 
  _multidll to one.

Resource Workshop
-----------------
  - The text editor included in Resource Workshop is limited to ASCII
    representations of resources that are no greater than 32K in length.

  - View|Show items or View|Show identifiers may give "Too many defines to
    view" or "Too many items to view" message if there are more than 1800 or
    so items in your project.  You will always get this if your project
    includes a header file with many items in it, such as OS2.H.
    Temporarily excluding such a file will allow you to use these View menu
    facilities.

  - There is no comprehensive way to import Windows resources and projects
    into the OS/2 version of Resource Workshop.  However it is possible,
    under WIN-OS/2, to copy a Windows bitmap resource to the OS/2 clipboard 
    and then paste the resource into the bitmap editor in Resource Workshop 
    for Presentation Manager.

  - Due to the graphical nature of many tasks performed in Resource Workshop
    for Presentation Manager, there are a variety of painting and display
    problems that can occur as a result of the video driver being used in a
    particular configuration.  If you encounter these types of problems,
    check with your video card supplier to see if there is a newer driver
    provided for the setup you are using.  Note that SVGA driver services
    currently seem to have more limitations than VGA.

  NOTE: The ComboBox for the Controls | New dialog box is not initialized.
        Simply press the down arrow control to list available controls.
