                    Welcome to Turbo C++ for Windows
                    --------------------------------

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

TABLE OF CONTENTS
-----------------
1.  How to Get Help
2.  Installation
3.  Features
4.  Important Information
5.  Testing Your Expanded Memory
6.  Corrections to the Documents


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

  1. Type GO BPROGB 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) 438-5300. 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 Turbo
        C++ for Windows can be displayed by pressing Alt-H/A.

     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 VER at the MSDOS prompt, or
        use the Windows utility WINVER for the Windows version.)

     e. Contents of your AUTOEXEC.BAT file.

     f. Contents of your CONFIG.SYS file.


 2. INSTALLATION
----------------

  You MUST use the INSTALL program to install Turbo C++ for
  Windows. The files on the distribution disks are all archived
  and have to be properly assembled.  You cannot do this by hand!

  Turbo C++ for Windows includes a Windows installation program
  that will create the appropriate subdirectories and copy the
  software on to your hard disk. To run the installation program
  from Drive A type

      WIN A:INSTALL

  or, if Windows is active, select the program manager's File|Run
  command and type

      A:INSTALL

  Note that this version of the installation program runs under
  Windows standard or 386 Enhanced modes only. After
  installation, make sure you insert \TCWIN\BIN - or whatever you
  selected as your BIN directory - into your DOS path
  so the DLL and executable files can be found.

  If you use a screen saver such as After Dark or Borland's Screenery,
  you should disable it before running the INSTALL program.

  -  Note: The list of files is contained in a separate file
     called FILELIST.DOC, which will appear in the target
     directory you specify during installation.

  -  Make sure you select the "LAN Windows configuration" option
     if Windows is executed from your network.

  -  If you have previously installed Resource Workshop, make sure
     that you remove the directory of that version from your path. The
     version included on these disks supercedes previous versions.

  -  If you use a Windows command shell other than Program Manager,
     you may not get a Turbo C++ group installed for Windows. If
     you don't, use File|New in Program Manager (or the equivalent
     command in your shell) to add items for the following files:

            Description    EXE file       Default path
            -----------    --------       ------------
            TURBO C++      TCW.EXE        C:\TCWIN\BIN
            WORKSHOP       WORKSHOP.EXE   C:\TCWIN\BIN
            IMPORT LIB     IMPLIBW.EXE    C:\TCWIN\BIN
            DEBUG          TDW.EXE        C:\TCWIN\BIN
            FCONVERT       FCONVERT.EXE   C:\TCWIN\BIN


  You should read the rest of this README file to get further
  information about this release before you do the installation.


 3. FEATURES
------------

  Turbo C++ for Windows 3.0 includes complete support for Windows
  programming, as well as big speed and capacity gains.  Here are
  some important features:

  - A Windows hosted IDE (TCW.EXE), including a class hierarchy 
    browser.

  - Turbo Debugger support for breakpoints with multiple conditions
    and for viewing selectors.

  - C++ 2.1 support, including the new nested class specifications,
    and support of C++ 3.0 templates.

  - Added library functions for compatibility with other runtime 
    libraries, and addition of support for long double parameters
    in math functions. (Please see the Library Reference for details.)

  - EasyWin, which includes library support for stdio.h and
    conio.h functions under Windows. (Please see the Turbo C++
    for Windows User's Guide for details.)

  - FCONVERT.EXE -  Converts OEM to ANSI Character Set

      DOS text files use the OEM character set; Windows text
      files generally use the ANSI character set. The demo
      program, FCONVERT.EXE converts data back and forth between
      these formats. The only text files that will be affected
      are those containing international characters (ASCII values
      above 128) like the umlaut, etc. Not all OEM characters are
      present in the ANSI character set, and vice versa. 
      Therefore, converting between these character sets may
      produce a mapping that is not reversible.  Refer to your
      Windows documentation for further information about ANSI
      vs. OEM character sets.

  - IMPLIBW.EXE, a Windows-hosted import librarian.

  - ObjectWindows Library, an application framework that will ease
    the development of applications for Windows.

 4. IMPORTANT INFORMATION
-------------------------

  - Turbo C++ for Windows only supports Protected Mode Windows target
    files.

  - If you get a "floating point formats not linked" message at
    runtime, put the following somewhere in your source files:

        extern void _floatconvert();
        #pragma extref _floatconvert

    This will force inclusion of floating point formats, which
    may not be linked to reduce executable size.

  - Make sure that you use the Options|Compiler|Entry|
    Windows <DLL> explicit functions exported when using the
    fastcall modifier. The same applies when using the fastcall
    compilation option (Options|Compiler|Entry|Register.)


  COMPILER

  - Note that the Generate COMDEFs choice under
    Options|Compiler|Code Generation is only supported in the C
    language. Linker errors will result if you attempt to use a
    communal variable in C++.

  - The macros min() and max() are not defined when stdlib.h is
    compiled as C++ (to allow their use in 3rd party libraries,
    etc.).

  - Note that SYMDEB creates .SYM files for use in debugging;
    Turbo C++ for Windows creates .SYM files for pre-compiled
    headers. They are not compatible and collisions should be
    avoided by setting the name of the pre-compiled header file
    (using -H=filename).

  - There is now full support of distance modifiers (near and
    far) used for class member pointers. Here are two sample
    declarations and their meanings:

       void (A::* far var) ();

    this is a far variable 'var' of type 'void (A::*)()';

       void (far A::* var) ();

    this is a 'default distance' variable 'var' of type
	'void (far A::*)()'

  - You must use "smart callbacks" - Options|Compiler|Entry/Exit
    Code|Windows smart callbacks - if your application uses
    classes whose code is in a DLL. This applies especially in
    the case of a class implemented in an EXE which is derived
    from another implemented in a DLL, which normally applies for
    users of OWL and other object-oriented class libraries.

  IDE

  - If you run File|Printer setup from the IDE (or another Windows
    application which has printer setup support) under the Windows
    3.0 debugging kernel, you will get a System Error from Windows.
    You must switch to the NODEBUG version to run this option.

  EXAMPLE PROGRAMS

  - When you are running any example programs that come with .PRJ
    files, if you didn't use the standard directories when you
    installed Turbo C++ for Windows you will have to change the
    .PRJ file to reflect your actual directory setup.  Do this
    from inside Turbo C++ for Windows with Alt-O/D.


  LINKING C++ WITH C

  - Linking C++ modules with C modules requires the use of a
    linkage specification.  Prototypes for C functions within C++
    modules must be in one of the following forms:

        extern "C" declaration
        extern "C" { declarations }

    For example, if a C module contains these functions:

        char *SCopy(char*, char*);
        void ClearScreen(void)

    they must be declared in a C++ module in one of the
      following ways:

        extern "C" char *SCopy(char*, char*);
        extern "C" void ClearScreen(void);

      or

         extern "C" {
            char *SCopy(char*, char*);
            void ClearScreen(void);
         }

    Failure to do so will result in "Undefined symbol" errors
      during link. For further examples, see the standard header
      files.


  TURBO DEBUGGER

  - You cannot set a window message breakpoint by using a window
    handle in an ObjectWindows application. You can, however, set
    window message breakpoints with ObjectWindows applications:
    enable ObjectWindows support (use TDWINST and choose
    Options|Source Debugging|OWL Window Messages), then use
    window object names to set message breakpoints.

  - The first time a program is run under TDW, mouse messages are
    processed normally. However, on every subsequent execution of
    that program, you must press a key on the keyboard before
    mouse messages can be processed.


  Super VGA support
  =================

  TDW handles most of the popular 2, 4, and 16-color high-
  resolution Super VGA modes. If your card isn't supported
  correctly, or if you want to debug in a 256-color mode, you'll
  need to use a special Super VGA DLL.

  Currently, the following DLLs are supplied with your language
  compiler to support these SVGA cards and modes:

    TSENG.DLL  (TSENG ET-3000 /ET-4000 based cards)
       640x480x256
       800x600x256
       1024x768x256


    ATI.DLL  (ATI VGA Wonder card)
       640x480x256    (See the NOTE below)
       800x600x256

  To use a Super VGA DLL, copy the appropriate DLL file into the
  directory that contains the TDW executable (usually the BIN
  subdirectory of your language compiler directory) and rename it
  to TDVIDEO.DLL.

  TDW, upon loading, looks for TDVIDEO.DLL in the same directory
  that harbors TDW.EXE. If it finds the file, TDW accesses the
  DLL as it's needed. TDW makes calls to the DLL to handle the
  entire video screen switching context. The DLL accomplishes the
  screen switching by allocating a buffer as it gets loaded.
  Graphic screen contents are then saved to this buffer as TDW
  enters text mode. The DLL restores the graphics screen from
  this buffer as TDW exits text mode. Memory allocated for the
  buffer is freed when the DLL is unloaded.

  If there is an error loading TDVIDEO.DLL, or if the DLL doesn't
  support the selected card or mode, TDW will report the error in
  a Windows dialog box. When this happens, TDW will unload
  TDVIDEO and exit. If this situation occurs, delete TDVIDEO.DLL,
  or select a mode that is supported by the DLL.

  If you're debugging an application that's been built with
  EasyWin, you may see incorrect screen painting as you step over
  lines of code that make calls to STDIO functions. In this case,
  edit the TDVIDEO.INI file and set the Int2FAssist option to
  "yes" (see the NOTE below).

  NOTE: The ATI mode 640x480x256 and EasyWin applications may
    require some special handling. An option called Int2FAssist
    in the TDVIDEO.INI file allows this mode to work correctly on
    most systems. The behaviour is as follows: When you set
    "Int2FAssist=yes", TDVIDEO makes Windows tell all sub-windows
    on the screen to re-paint themselves as the DLL is loaded.
    This allows the user screen to be viewed when Stepping,
    Tracing, or Running your application. It will not, however,
    switch to the user screen when you press <Alt-F5> since TDW
    is still in control (it doesn't allow Windows to process any
    messages). If you also set "SaveWholeScreen=yes", then <Alt-
    F5> will show the user screen (TDVIDEO will now copy the
    screen for you). The drawback to enabling SaveWholeScreen is
    that it will take longer to Step or Trace if TDW needs to
    switch back to the user screen for that particular
    instruction. Also, extra messages are getting passed to your
    application that normally would not be passed. This may
    effect the debugging of certain pieces of code (like finding
    a bug in an owner-draw procedure). In these cases, you will
    not want to use this video mode.


  TDVIDEO.INI
  -----------

  You can create the file TDVIDEO.INI with any ASCII text editor.
  This file is used to control how TDVIDEO.DLL functions.
  TDVIDEO.INI must be located in WINDOW's main directory (usually
  C:\WINDOWS). The options in TDVIDEO.INI are handled by the DLL
  itself and are therefore subject to change with newer versions
  of the DLLs. The DLLs use the following options, written in any
  order, under the heading [VideoOptions]:

    SaveWholeScreen --    default = 'no'
    Int2FAssist     --    default = 'no'
    DebugFile       --    default = ''  (no logging will occur)

  The SaveWholeScreen and Int2FAssist can be set to either 'yes'
  or 'no'. DebugFile can be either blank, or it can be set to a
  specific filename.

  *** SaveWholeScreen ***

    This option, normally set to 'no', determines whether the
    entire screen (512k - 64k from 8 planes) will be saved (the
    entire graphics screen is cleared when switching to it) or if
    only the top 32K of planes 0 through 3 will be saved (the
    entire screen is NOT cleared when switching modes.)

    Saving the whole screen is rarely needed, but is provided in
    case you're using a nonstandard card that needs the whole
    screen to be saved.

  *** Int2FAssist ***

    This option, normally set to 'no', tells TDVIDEO, to make a
    special Int 2F call before switching video modes. This call
    tells the current Windows screen driver (VGA.DRV for standard
    VGA mode) what's happening. The desired side-effect of this
    call is to make Windows tell all of its child windows to re-
    paint themselves. This option is provided only for support on
    an ATI Super VGA video mode and for applications built using
    EasyWin (see NOTE above). However, be aware, that this option
    can affect the other supported modes if it's enabled (use
    this option only if absolutly necessary).

  *** DebugFile ***

    TDVIDEO.DLL normally doesn't save any debugging information.
    If you're having problems using a special DLL, the DebugFile
    option can be used to specify the path and filename of a log
    file. Information logged to this file can be used if you need
    to contact Borland's Technical Support. Information logged
    consists of the Date/Time, the version of the DLL, the name
    of the Windows screen driver that is currently in use, the
    state of all .INI options, and a listing of all the calls to
    the DLL's functions.

    For example, if you want your DLL to save the entire screen
    and log information to a file named C:\WINDOWS\TDVIDEO.LOG,
    create a file called TDVIDEO.INI in the WINDOWS directory
    that contains the following commands:

      [VideoOptions]
      SaveWholeScreen=yes
      DebugFile=c:\windows\tdvideo.log


  CLASS LIBRARY

  - If you used the add(), addAt(), or getItemsInContainer()
    member functions of the Array class in Turbo C++ for Windows
    2.0 applications, note that their behavior has changed
    slightly. The following rules apply to these and related
    functions:

      1. add() will insert its argument at the lowest available
         location in the Array.  This location is known as the
         "insertion point".

      2. detach() will remove its argument from the Array, and if
         that Object is located below the insertion point, it
         will move the elements above the Object being removed
         and below the insertion point down one position, so that
         the elements below the insertion point remain
         contiguous.  The insertion point, of course, moves down
         one.

      3. if the location specified in a call to addAt() is below
         or at the insertion point, the elements above the
         specified location and below the insertion point are
         moved up one position, and the Object is inserted.  The
         insertion point moves up one.

      4. if the location specified in a call to addAt() is above
         the insertion point, the Object is inserted at that
         location, replacing any Object that may have been placed
         there previously.

      5. getItemsInContainer() returns the number of elements
         below the current insertion point.  If you use addAt()
         to add elements above the insertion point, they will not
         affect the value returned by getItemsInContainer(). 
         This is a change from the behavior in the previous
         version of the class library.

  - Only the small and dynamic link class libraries are supplied
    in this release. If you need other models, use the project
    files supplied under the CLASSLIB\OBJS subdirectories to
    build them. For instance, to build a medium model library
    without templates, create a directory called M under
    \CLASSLIB\OBJS, and copy the TCLASSL.PRJ file from the L
    directory to a file called TCLASSM.PRJ in your new M
    directory. Then load TCW.EXE, used Project|Open to open
    TCLASSM.PRJ, and change Options|Compiler|Code generation|
    Model to Medium.

  OWL

  - You must rebuild the class libraries in the appropriate model
    for the intended OWL model if they don't already exist - see
    paragraph above.

  - Note that you must use the TWindow member function AssignMenu
    to assign a window's Attr.Menu member and to load a menu for
    that window.

 6.  CORRECTIONS TO THE DOCUMENTS
---------------------------------

ObjectWindows User's Guide
--------------------------
  Chapter 2, "Stepping through Windows"
  -------------------------------------
    Page 22
    -------
      The sentence that begins "These libraries are located in the library 
      directories listed in the following table..." should instead read
      "Table 2.2 lists the file names of the static ObjectWindows library 
      and static container class library for each supported memory model."

  Chapter 11, "Dialog objects"
  ----------------------------
    Page 151
    --------
      In the TSampleWindow::GetName fragment shown, a line is in error. 
      The line that begins
         if ( ExecDialog(new TInputDialog(this...
      should read
         if ( GetApplication()->ExecDialog(new TInputDialog(this...

  Chapter 12, "Control objects"
  ----------------------------
    Page 158+
    ---------
      Although it doesn't specifically state so, TListBox and its member
      functions can be used with both single- and multiple- selection
      list boxes.





