WATCOM C/C++ Version 10.6 - README
----------------------------------

Welcome to WATCOM C/C++ version 10.6.  This README provides helpful hints
found during testing as well as updated information that was not available
at the time the documentation was produced.


Installation suggestions:
-----------------------------------------------------------------
Installing Watcom C/C++ 10.6

If you have installed a previous version of Watcom C/C++ then you should 
install Watcom C/C++ 10.6 into the same path. It will
examine a previous installation to determine what features were previously
installed.  It will use this information to establish default settings for
the installation that you are about to attempt.  Of course, you can add or
remove features as you progress through the installation steps.

If you are installing both Watcom C/C++ and Watcom FORTRAN 77 products, we
recommend that you install Watcom C/C++ and Watcom FORTRAN 77 in the same
directory.  

If you are installing only one of the Watcom C/C++ or Watcom FORTRAN 77
products and you have an older version of the other product, we do NOT
recommend that you install the new product into the same directory as the
old product. 
See the Getting Started Helpfile (READC10.HLP) for more information.

When you install Watcom C/C++ and Watcom FORTRAN 77 in the same directory,
you should not deselect any options when running the second installation;
otherwise the second product's install may remove files that were installed
(and are required) by the first product's install.  

If you wish to create a backup of your previous version, please do so before
installing Watcom C/C++ 10.6.

You may wish to run Watcom C/C++ under more than one operating system on the
same personal computer.  For every operating system that you use, simply
start up the operating system and run the corresponding install procedure.

To install from CD-Rom, run "SETUP" under all operating systems except OS/2;
under OS/2 run "INSTALL".
    

Note: %DstDir% represents the directory in which WATCOM C/C++ was installed.
      %WinSysDir% represents your Windows 3.x system directory.
   
1.  When debugging a 32-bit Phar Lap, TNT or DOS/4GW application, make sure
    that "run386.exe", "tnt.exe", or "dos4gw.exe" respectively, are in your
    path.  Failure to do so, may cause your computer to hang.
   
2. When using the GUI debugger to debug Windows 3.x applications, certain
   Windows applications may cause the debugger to behave in an unpredictable
   way.  Typically, this occurs when debugging certain messages in window
   callback functions.  For example, hitting a breakpoint in a window
   function that is processing a WM_INITDIALOG message will crash the system.
   If this happens, the character-mode version of the debugger should be
   used.
   
3. When debugging the Windows 3.x MFC 2.52 samples contained in
   "%DstDir%\samples\mfc\v252" enter the following in the source path to 
   see the MFC source in the debugger source window:
   
   	%DstDir%\src\mfc\v252\*.cpp
	
   Similarly, when debugging the Windows NT MFC 3.2 samples contained in
   "%DstDir%\samples\mfc\v32" enter the following in the source path to 
   see the MFC source in the debugger source window:
   
   	%DstDir%\src\mfc\v30\*.cpp
   
   The source path can be changed by selecting "Source Path" in the "File"
   menu.

4. In order to use CodeWright with our IDE, you will need to change the
   "cwright.ini" file.  This file contains the following line.

	;LibPreload=cwdde.dll

   Uncomment this line by removing the ';' character.  This is required to
   enable communication between the IDE and CodeWright when "weditcw.dll"
   is selected as the editor interface DLL from the IDE.
    
5. If you choose to not install help files onto your hard disk, you will not
   be able to get help on the C library or MFC library from the editor.
    
6. Parallel remote debug servers do not work in an OS/2 session.  They can
   be used in an OS/2 DOS session.
    
7. When configuring the browser to use the CodeWright editor interface, you
   must specify "weditcw.dll" as the editor DLL, save the new options, exit
   the browser, and restart the browser.  Failure to do this will cause an
   exception to occur in the CodeWright interface DLL.
   
8. Under OS/2, if you are debugging a DOS application from the IDE, you
   must ensure that %DstDir%\binw is in your DOS path so that when the IDE
   starts a DOS session to debug your application, the remote server can find
   its support files.
   
9. Under OS/2, you must ensure that the "Comet cursor" desktop setting is
   disabled if you want to debug PM applications.  By default, this setting
   is disabled.

10. Some of the components of this install do not appear in the installed 
    image on the CD-Rom.  These components are still included with the
    package but must be installed on your harddrive to be used.
    This is the case because there is not enough space on the CD-ROM to
    fit uncompressed versions of all of the software.
    The affected components are:
    	MFC sample programs and source
	OS2 Toolkit 2.X sample programs
    	SOM Toolkit 

   
Using Blue Sky Visual Programmer 2.0
------------------------------------

The following outlines the steps required to create a Visual Programmer
application.

1. Run the Watcom IDE.

2. From the File menu, select the New project menu item.

3. The "Project Filename" dialog will appear.  Choose a project file name and
   directory.
   
	Example: c:\tmp\test.wpj
	
   Press <OK>.

4. The "New Target" dialog will appear.   
   Click the "MFC - 32-bit (3.0)" button or the "MFC - 16-bit (2.5)" button to
   choose the target type.
   Type the target file name.  This is the name of the executable you want to
   build.
   
	Example: c:\tmp\test.exe
	
   Press <OK>.
    
5. Run Visual programmer by selecting the Visual Programmer option from the
   Targets menu.
    
6. The Visual Programmer "New" dialog will appear.  Select an application
   template as a starting place for your application.  The working directory
   and file name are determined by the target location specified in the
   Watcom IDE.  Press <OK> when you are done.
    
7. Use Visual Programmer to develop the application.    

   See Visual Programmer Help for more details.
	
   Be sure to try out the "Quick Run" option.  This tests the appearance of
   the program without actually having to generate any code.
    
8. Return to the IDE by pressing the <Return to Watcom IDE> toolbar button.
   Do not shut down Visual programmer until you have finished generating code.

9. Press the <Make the Current Target> toolbar button or, from the Target
   menu, select the Make option.
    
10. A Visual Programmer Message box will prompt you:

    "Save and Generate code for current design"
    
    Press <Yes>.  This is the same as choosing the V.P. "Save & Generate code"
    option.

11. The Visual Programmer window will come to the front and the application
    code will generated.

12. The IDE window will then come back to the front and will finish the 
    process of compiling and linking the program to create the executable
    file.
   
What's new in 10.6  -- Bug Fixes and Enhancements( since 10.5 A ) 
-----------------------------------------------------------------
          ****************
          ** C Compiler **
          ****************

    redirection of stderr no longer prevents a .err file from being opened
    use -fr to prevent an .err from being made 
===========================================================

    non ansi preproc directives will not give warnings when being
    skipped over by a #if
===========================================================

    _stdcall_support macro now present
===========================================================

    pre-compiled headers somtimes causing sym errors
===========================================================

    inlining of functions that had inline asm that referenced local vars
    caused compiler transgressions. 
===========================================================

    __declspec( dllimport ) & intrinsic of a function caused a
    undesirable mixing of calling conventions.
    intrinsic or inline asm now takes precendence for a call. 
   
===========================================================

    casting arrays object to int in static initialization
    caused a GPF. 
===========================================================

    spurious incompatible type message in -d2  "?" operator with cast of
    typedef of array  v.s an address of var of that type. 
===========================================================

    __declspec( dllexport ) on declaration remembered for definition.
===========================================================

    based pointer not working for most cases might be a bit better now
===========================================================

    added -br switch for dll versions of library
===========================================================

    accept struct{ ..;;..} i.e ; with no member defn
===========================================================

    better checking of func decl with further decls
===========================================================

    Relaxed rules on forward use of fn and defn
===========================================================

    A func decl followed by a var decl followed by a func decl of
    the same name caused an exception. 
===========================================================

    added type checking to static initialization.
    fixed typecast string in init bug
===========================================================

    added const truc checking for bitfield assignment.
===========================================================

    Fixed union{ int a:2, b:1; } not overlapping members.
===========================================================

    added -ai switch to silence array init warnings and errors
    to compensate for type checking now being done.
===========================================================

          ********************
          ** Code Generator **
          ********************

    Fixed a bug in loopopts which would cause an internal compiler
    error 28.
===========================================================
    Fixed
    unsigned short = 0xffff
    if( unsigned short == -1 ) being true for 386 compiler
===========================================================

          ***************
          ** C Library **
          ***************

    The ftell() function could return an incorrect file
    position for a stream with buffer data for writing and
    opened for append.
===========================================================

    The command line processing under WIN32 did not allow
    for embedded whitespace characters in the name of the
    current executable.
===========================================================

    The shutdown code for OS/2 and WIN32 could fail when
    invoked in a multi-threaded environment by other than
    the primary thread.
===========================================================

    Memory allocations on 32bit platforms now ensure that
    the pointer returned is 8byte (64bit) aligned.
===========================================================

    The stat() function on WIN32 did not handle console 
    devices.
===========================================================

    atexit() processing modified to ensure that functions 
    only get called once.
===========================================================

    When using the default windowing system, using read()
    to get a newline character from fileno(stdin) did not
    work correctly.
===========================================================

    Added OS/2 support for _dos_getdiskfree().
===========================================================

    The WIN32 close() function could corrupt the heap if passed
    a negative value for the file handle.
===========================================================

    The DOS and OS/2 stat() functions sometimes failed when
    returning information about devices.
===========================================================

    The WIN32 spawn() functions did not recover gracefully
    from a strange NetWare provided error code when attempting
    to invoke and executable from an Novell Server.
===========================================================

          ******************
          ** C++ Compiler **
          ******************

    fixed a problem where dtors were being called for
    objects that were not constructed (objects were
    temporaries in ?:, &&, and || exprs)
    
===========================================================

    Fixed processing of -fhq option to match the
    C compiler.  Added option '=' to -t option.
    
===========================================================

    Fixed some #line problems.
    
    (1) if "file" string contained \xhhh or \0ddd, the line
        number would get set to an incorrect value
    (2) if -plc option is used, #line in output for
        #line nn "file" input was one line off
    
===========================================================

    Fixed compiler so that some warnings and errors in
    preprocessing directives would only come out if they
    were not being skipped.
    
    Example:
        // no errors or warnings should be emitted
        #if 0
        #if 0
        #% // not a directive
        #else junk
        #endif more junk
        #endif
    
===========================================================

    Fixed generation of debugging info for functions that
    follow a class template member function.
    
    Example:
        template <class T>
            struct S {
                int foo( T );
            };
        
        template<class T>       // debugger thought that
            int S<T>::foo (T n) // 'main' started here!
            {
                return n << 1;
            }
        
        main() {
            static int i;
        
            while( i < 10 ) {
                ++i;
            }
            while( i < 20 ) {
                ++i;
            }
            while( i < 40 ) {
                ++i;
            }
            return i;
        }
    
===========================================================

    Added _STDCALL_SUPPORTED macro to 386 C++ compiler.
    
===========================================================

    Fixed __declspec(dllimport) classes when a virtual
    function table is laid out in memory.
    
===========================================================

    Fixed address of __declspec(dllimport) names so that
    they are not statically initialized.
    
===========================================================

    Fixed output of browser information for
    __based(__segname("_XXX")) types.
    
===========================================================

    Throw of 0 was not being caught by a catch block with
    int.  
    
    Work around: Re-code to not use 0.

===========================================================

    Fixed initialization of anonymous structs.
    
===========================================================

    Fixed handling of specific instantiations of class
    templates after the class has been declared.
    Example:
	template <class T>
	    struct S;
	
	void foo( S<char> );
	
	struct S<char> {
	    S<char> *p;
	    char d;
	};
	struct S<int> {
	    S<int> *p;
	    int i;
	};
	
	template <class T>
	    struct S {
		T x;
	    };
	
	void ack( S<char> & x ) {
	    foo( x );
	}
    
===========================================================

          *****************
          ** C++ Library **
          *****************

    The istream::getline() function used to set ios::failbit
    if the buffer was filled before the delimeter was seen.
===========================================================

    Fixed run-time support for construction of arrays to
    check the allocation against NULL.
===========================================================

          *************************
          ** FORTRAN 77 Compiler **
          *************************

    Fixed a problem where incorrect option information was
    being displayed in the listing file.
===========================================================

    Added LSHIFT and RSHIFT intrinsic functions.  These
    functions take two arguments; the first being the value
    to shift and the second being the number of bits to shift. 
===========================================================

    Added /MAngle switch which takes the name of a common block,
    say XXX, and places it in segment _COMMON_XXX and class
    _COMMON_XXX_DATA.  This prevents naming collisions between
    common block segments and other compiler-generated segments.
===========================================================

    The following statement caused the compiler to incorrectly
    issue an error.
    
    	INTEGER*1  I*2
===========================================================

    Added /IPromote switch to promote INTEGER*1 and INTEGER*2
    arguments to intrinsic functions to INTEGER*4.
===========================================================

    Added /SEPcomma switch which allows a comma separator to
    be used in formatted input.
===========================================================

    Fixed a problem where memory was not being properly freed
    by the compiler.  A "memory not freed" message was being
    issued.
===========================================================

    The /INCPATH= option now concatenates paths if this option
    appears more than once on the command line.
===========================================================

          ************************
          ** FORTRAN 77 Library **
          ************************

    Fixed output formatting problems with scaling using D or
    E edit descriptors with numbers near 10**100.
===========================================================

    Add FNEXTRECL() library function which allows the user
    to determine the length of the next record in a file
    opened for unformatted sequential access.
===========================================================

    Add FTRACEBACK() library function which allows the user
    to cause a run-time traceback to be generated.
===========================================================

    Fixed default windowing problems with the PAUSE statement.
===========================================================

    Fixed an output problem that occurred when the /CC option
    was used and a run-time error message was displayed.
===========================================================

    Fixed some problems with DLL support under Windows NT.
===========================================================

          ********************
          ** C Header Files **
          ********************

    Keywords in #pragmas now have '__' prepended to ensure
    they don't collide with the user namespace.
===========================================================

          ****************
          ** WATCOM IDE **
          ****************

    IDE now supports debugging DOS4GW, PHARLAP, TNT under win95.
    
===========================================================

          ************
          ** Linker **
          ************

    problem aligning overlay sections could cause large model
    overlaying to fail.
===========================================================

    op objalign now applicable to all formats.
    op offset extended to ELF format as well.
    Error message 
	"Phar Lap offset option must be a multiple of 4K"
    changed to
	"Offset option must be a multiple of %l"
    and error message 
	"OS/2 offset option must be a multiple of 64K" 
    is no longer used.
    
===========================================================

    make sure data addresses in dwarf are properly linearized
===========================================================

          **********
          ** Make **
          **********

    added "move" as a shell command for NT.
===========================================================

          *********************
          ** WATCOM Debugger **
          *********************

    Eliminated a 256 byte PATH length restriction under NT, 
    Windows 95.
===========================================================

    Fixed a problem with symbol addresses being wrong when
    using DWARF debugging information on a DOS4/GW application.
===========================================================

    Worked around a problem in the Windows 95 SPX/IPX protocol
    stack to allow remote debugging by the Novell remote link
    (NOVSERV, /TRAP=NOV).
===========================================================

          **********************
          ** WATCOM Assembler **
          **********************

    Made WASM accept the -d3 option (acts the same as -d1).
===========================================================

    A "LOOP FOO" instruction, where "FOO" is a forward branch
    caused WASM to incorrectly issue an "Invalid instruction operands" 
    error message.
===========================================================

    WASM did not allow:
    
    		LIDT	[eax]
		LGDT	[eax]
		
    The problem could be worked around by putting a type
    specifier in. E.g.:
    
    		LIDT	pword ptr [eax]
===========================================================

    WASM did not properly encode the JECXZ instruction when
    in a USE16 segment.
===========================================================

    WASM did not properly encode:
    
    		MOV [BX], sym
		
    when 'sym' was a segment or group name.
===========================================================

    A PROC directive with EXPORT visibility did not properly
    generate a PUBDEF record, and if there was an explicit
    PUBLIC directive for the symbol, the export comment record
    would be omitted from the object file.
===========================================================

    The offsets of local symbols in a procedure would be
    off if there were any local arrays.
===========================================================

    A statement of the form:
    
    	FOO	DB
	
    did not report an error as it should.
===========================================================

    Generating more than 64K of code/data into a single 
    segment caused an incorrect object file to be created.
===========================================================

    An ALIGN directive would not report an error if it was
    used outside of any segment.
===========================================================

          **********************
          ** Resource Editors **
          **********************

    - the double quote ( " ) is properly escaped in resource scripts
    
    Dialog Editor
    	- fixed bug where "defining" a control loses changes
	- "transparent" controls ( group boxes, frames, etc )
	  no longer obscure other controls
	- can now edit symbols if no dialog is being displayed
	  but a resource is open
	- CTRL-dragging controls assigns new id's to the newly
	  created controls
	- size to text accounts for &'s in strings
	- can now tab to "vertical" edit box for "grid" in Edit->Options
	
    Resource Editor
    	- changes to memory options no longer ignored
	- Menu Editor properly escapes '\' character
	
    Image Editor
    	- long and skinny bitmaps can be editted properly
	  ( ie 70x400 pixels )
	- fixed problems where the caption of the edit
	  window would not properly reflect the file name 
	  of the image
	- got rid of flashing when "Maximize Window Size" is selected  
	- fixed problem where another app can be activated during a 
	  screen select 
===========================================================

    Dialog Editor
    	- fixed bug where selecting a common control tool from 
	the menu under Win 3.x and there are no common controls
	on the toolbar would cause a GPF.
	- fixed problem where closing a resource window with
	unsaved changes would GPF
===========================================================
