        Copyright (C) 1995 MetaWare Incorporated; All Rights Reserved.

             +--------------------------------------------------+
             | Information for Users Upgrading from Version 1.x |
             +--------------------------------------------------+

This README describes the major differences between Version 1.x and later
versions.  Some sections are relevant only if you are upgrading from
Version 1.6 or earlier.

Review the chapters Command-Line Option Reference, Toggle Reference, and 
Using Compiler Pragmas in the High C/C++ Programmer's Guide to see
what command-line options, toggles, and pragmas are in the current version
of High C/C++.  See the chapter New Compiler Controls in New Information! 
for controls that have been added or removed since the previous version.

If you want to combine Version 1.x code and Version 3.x code, see the
chapter Compatibility and Portability in the High C/C++ Programmer's Guide.


About the bin Subdirectory
--------------------------

All executables and configuration files included with the distribution 
are installed in subdirectory bin, off the High C/C++ root directory.  

WARNING:  DO NOT MOVE THE COMPILER EXECUTABLES.

The compile-and-link driver and its associated configuration files must 
all reside in the same directory.  

WARNING:  If you move the driver, you must also move the configuration files 
and modify the value of a configuration variable.  See the Installation 
Guide for directions.

The driver processes its own file name to determine which programs to 
invoke.  

WARNING:  DO NOT RENAME THE COMPILERS, THE DRIVER, OR THE DRIVER 
CONFIGURATION FILES.


The Compile-and-Link Driver
---------------------------

NOTE:  If you are upgrading from Version 1.6 or earlier, read this section
carefully.  

YOU CAN NO LONGER INVOKE THE COMPILER DIRECTLY.

Versions 1.7 and later include a configurable driver program that invokes
the compiler and then the linker.

This version of the High C/C++ compiler must be invoked with the
compile-and-link driver.

*  The Driver Configuration File:

   You can modify driver configuration file hc386set.cnf to alter the
   default values of some controls or to preset command-line options.  For
   a discussion of the variables you can set in hc386set.cnf, see the
   appendix Configuring the Driver in the High C/C++ Programmer's Guide.

   1.x versions of High C included a configuration program that operated on 
   the compiler executable to alter compiler defaults.  This functionality 
   has been incorporated into the driver configuration file, making the 
   configuration program unnecessary.
   
*  Compiler Options versus Driver Options:

   Many of the options you supply on the driver command line have a syntax
   different from those that were passed to the compiler itself.  Do not 
   try to invoke the driver (hc386) with options intended for the compiler; 
   the driver does not recognize the options, and passes them along to the 
   linker.
   
   For instance, with earlier 1.x versions of High C you could specify the
   number of lines per page in a source listing by invoking the compiler
   with the option -lines nn.  The equivalent driver option is -Hlines=nn. 
   If you try to supply -lines nn to the driver, it does not recognize the
   option and passes it to the linker.
   
   In many cases you can use the method shown in the following table, for
   a hypothetical option -alpha and argument beta, to convert old compiler 
   options into new driver options.
   
   Table: Changing Compiler Options to Driver Options  
   
   Old Compiler Option        New Driver Option
   --------------------------------------------
   -alpha                     -Halpha
   -alpha beta                -Halpha=beta
   --------------------------------------------
   
   WARNING:   Be sure to read the chapter in the High C/C++ Programmer's
   Guide that describes the driver command-line options.  Some options no
   longer exist or have been replaced by new options.
   
   The following table shows the old configurable compiler options and
   their driver equivalents.

   Table: Compiler Options versus Driver Options  
   
   Old Compiler Option        New Driver Option
   --------------------------------------------
   -[no]ansi                 -Hansi
   -[no]asm                  -Hasm
   -[no]debug                -g
   -def macros               -Dmacro
   -gac attributes           -Hgac=attributes
   -ipname name              -Hipname=name
   -kanji                    -Hkanji
   -l library                -llibrary
   -lines_per_page nn        -Hlines=nn
   -list filename            -Hlist=filename
   -make                     -Hmake
   -mm model                 -Mmodel
   -[no]object [filename]    -Hnoobject
   -o filename               -o filename
   -off toggle               -Hoff=toggle
   -on  toggle               -Hon=toggle
   -pcc                      -Hpcc
   -[no]profile [filename]   -H[no]pro[=filename]
   -retwc                    -Hretwc
   -undef macros             -Umacro
   -----------------------------------------------


Command-Line Options
--------------------

The following options have been changed or removed since Version 1.6:

   Table: Changes to Command-Line Options
   
   Option                    Status
   -----------------------------------------------
   -486r                     removed
   -c                        changed
   -Haipath                  removed
   -[no]cram                 removed
   -Hobject                  removed
   -Htmpxx                   removed
   -Htpages                  removed
   -HVhost                   removed
   -Hxref                    removed
   -ipath                    removed
   -llibrary                 changed
   -o filename               changed
   -----------------------------------------------


Toggles
-------

The following toggles have been changed or removed since Version 1.6.

   Table: Changes to High C/C++ Toggles
   
   Toggle                    Status
   -------------------------------------------------------
   1167                      removed
   3167                      removed
   Align_labels              changed
   Align_members             changed
   Callee_pops_when_possible changed
   Codeview                  removed
   Emit_line_table           removed
   Flexview                  removed
   FP_tos                    removed
   Make_externs_global       removed
   Optimize_for_space        changed
   Optimize_xjmp             renamed to Cross_jump
   Optimize_xjmp_space       removed
   Print_reg_vars            removed
   Public_var_warnings       removed
   Remove_BP                 renamed to Use_frame_pointer
   Quiet                     removed
   Struct_by_value_warnings  removed
   ------------------------------------------------------


Pragmas
-------

The following pragmas have been removed:

   Hshift:  This pragma is omitted because Versions 2.3 and later do not
            support huge objects.
            
   WTRSVD1: This pragma set the first nonvolatile Weitek ABACUS register. 
            High C/C++ no longer supports Weitek ABACUS coprocessors.

Pragma Data:  Versions 2.3 and later support two classes of data segments: 
COMMON and LOCAL; Version 1.x supports just COMMON. Thus:

   pragma Data(LOCAL,"local");
      static int a, b;
   pragma Data();

maps variables a and b into local segment "local".

Versions 2.3 and later permit public variables within common segments;
Version 1.x did not.  Thus, in the following example, x and y would be
public under Versions 2.3 and later, but local under Version 1.x. 
Variable z would be local under both.

   pragma Data(COMMON,"common");
      int x, y;
      static int z;
   pragma Data();


Floating-Point Instructions
---------------------------

In Version 1.6 and earlier, the following toggles were used with options
-Hon and -Hoff for generating floating point:

   -Hoff=Floating_point
   -Hon=Floating_point
   -Hon=387
   -Hon=1167
   -Hon=3167

Version 1.7 and later use the following options for generating floating
point:

   -fsoft
   -f287
   -f387

There is no equivalent for -Hon=1167 and -Hon=3167, because High C/C++
no longer supports the Weitek ABACUS coprocessors.

By default, Version 1.x always returned floating-point results in
registers, with either emulation or inline x87 instructions.  Version 2.3
and later versions use the more efficient convention of returning values on
top of the coprocessor stack for inline x87 code.


Compiler-Generated Temporary Files
----------------------------------

The option used to relocate compiler-generated temporary files changed
between Versions 1.x and 2.x.  Compiler-generated temporary files can now
be relocated only as a group using TMPPREFIX.  See the appendix Configuring
the Driver in the High C/C++ Programmer's Guide for more information.


Run-Time Libraries
------------------

High C/C++ includes new run-time libraries.  See the chapter Building a
Program in the High C/C++ Programmer's Guide for details.


Linking with High C 1.x-Compiled Libraries
------------------------------------------

For guaranteed compatibility when you are upgrading from Version 1.x to
Version 3.x, we recommend that you recompile your 1.x code with the 3.x
compiler.

See command-line options -Hloc and -Hloclib and the chapter Compatibility
and Portability in the High C/C++ Programmer's Guide for more information
on compatibility between Version 1.x and Versions 3.x.



Document number:  RM-4706-002