home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 30 fixes_v / 30-fixes_v.zip / c16_b.zip / README.B < prev    next >
Text File  |  1994-01-11  |  53KB  |  1,338 lines

  1.  
  2.           ****************
  3.           ** C Compiler **
  4.           ****************
  5.  
  6.     Put full path of file name into debugging information so
  7.     that the debugger can find the source file without having
  8.     to use 'set source'.
  9. ===========================================================
  10.  
  11.     /bt=netware turns on /fpr switch
  12. ===========================================================
  13.  
  14.     The floating point constant 0129.5 was not properly
  15.     parsed (compiler thought that it was an octal constant
  16.     and complained when it saw the '9' digit).
  17. ===========================================================
  18.  
  19.           ********************
  20.           ** Code Generator **
  21.           ********************
  22.  
  23.     recognizes more numeric operations as dangerous for purposes of hoisting
  24.     (POW, MOD etc).
  25. ===========================================================
  26.  
  27.     bug in handling of large, overlapped moves was fixed
  28. ===========================================================
  29.  
  30.     would GP-fault when running low on memory and trying to
  31.     optimize
  32. ===========================================================
  33.  
  34.     The following C++ code would use an incorrect offset for 
  35.     the string literal "BAD" when compiled with the -ml -zc
  36.     switches:
  37.  
  38.     class A {
  39.     public:
  40.         virtual char * add( void ) { return "BAD"; }
  41.     };
  42.     
  43.     int main() {
  44.     
  45.     A * it = new A;
  46.     it->add();
  47.     return 0;
  48.     }
  49. ===========================================================
  50.  
  51.     The compiler no longer GPFaults when fixing up certain types
  52.     of one iteration loops (loops which will go around exactly one time).
  53. ===========================================================
  54.  
  55.     Do not generate needless runtime calls to compare code pointers
  56.     against NULL.
  57. ===========================================================
  58.  
  59.     A loop which was going to execute exactly one time followed by
  60.     another loop (without intervening code) would cause incorrect code
  61.     to be generated.
  62. ===========================================================
  63.  
  64.     Fixed a bug which caused data to be ejected into the wrong spot
  65.     in a code segment when compiling with debugging optimization.
  66. ===========================================================
  67.  
  68.     When unrolling a loop we would not assign locations to temps on
  69.     occassion which would result in an internal compiler error #30.
  70. ===========================================================
  71.  
  72.     Debugging information would cause problems with instruction scheduling.
  73. ===========================================================
  74.  
  75.     Fixed access of virtual function tables in large-code programs
  76.     which were compiled with /zc.
  77. ===========================================================
  78.  
  79.     Under circumstances too complex to explain, bad code would be
  80.     generated causing all sorts of stuff to happen.
  81. ===========================================================
  82.  
  83.     A loop which had an induction variable whose initial and final
  84.     values were known and in which the induction variable was not
  85.     updated on every time through the loop would sometimes get thrown
  86.     out.
  87.  
  88. ===========================================================
  89.  
  90.     Arithmetic operations on signed 16-bit integers would not be
  91.     properly folded, resulting in bogus values.
  92. ===========================================================
  93.  
  94.     Output from the C++ compiler would sometimes not reference
  95.     the correct offset for string literals if -zc -ml was
  96.     specified.
  97. ===========================================================
  98.  
  99.     Constant folding of operations which use the EDX:EAX forms
  100.     of mulitply would generate an ICE #28.
  101. ===========================================================
  102.  
  103.     The code generator would propagate the result of a conversion
  104.     from a temp to another temp into another convert on the same
  105.     operand even though the conversions were being carried out in
  106.     different manners.
  107. ===========================================================
  108.  
  109.     Assignments of incompatible types to bit-fields would not
  110.     get converted properly.
  111. ===========================================================
  112.  
  113.     Floating point compares would not be handled correctly if
  114.     they were not used as part of an if statement (possible
  115.     if fortran).
  116. ===========================================================
  117.  
  118.           ***************
  119.           ** C Library **
  120.           ***************
  121.  
  122.     Windows NT CLIB:
  123.     - fixed dup() so that new handle is inheritable
  124.     - fixed dup2() so that new handle is inheritable
  125.     - fixed dup2() so that if 0, 1, or 2 are changed then
  126.       Windows NT is notified so that POSIX redirection
  127.       idioms work properly
  128. ===========================================================
  129.  
  130.     Windows NT CLIB: fixed _fullpath so that
  131.     _fullpath( "con" ) works properly to get around a
  132.     Windows NT bug  (Microsoft has been notified and
  133.     will fix NT for a future release)
  134. ===========================================================
  135.  
  136.     added _fileno() to <stdio.h>
  137. ===========================================================
  138.  
  139.     added POSIX errors to <errno.h>
  140. ===========================================================
  141.  
  142.     Corrected OS/2 1.x library to remove extraneous
  143.     reference to ___FPE_int.
  144.  
  145.     Fixed Floating point exception support in 16-bit DOS library.
  146. ===========================================================
  147.  
  148.     Fixed fseek() function to report an error condition when
  149.     attempting to flush buffers before seeking yields an error.
  150. ===========================================================
  151.  
  152.     Fixed signal handling of SIGINT and SIGBREAK under
  153.     extended DOS for Rational and Pharlap extenders.
  154. ===========================================================
  155.  
  156.     Windows NT CLIB: corrected a problem where the
  157.     POSIX file handle table was not initialized early
  158.     enough for C++ static initializers to execute properly
  159. ===========================================================
  160.  
  161.     fixed abort() for 386 -3s model for DOS4G and NT environments
  162. ===========================================================
  163.  
  164.     Mixing C and FORTRAN in Windows NT applications did not
  165.     work correctly.
  166. ===========================================================
  167.  
  168.     The bsearch function could segment violate if it was
  169.     given an array which contained only one element and
  170.     the element size was very large.
  171. ===========================================================
  172.  
  173.     The mktime() function did not properly handle some
  174.     unrepresentable values.
  175. ===========================================================
  176.  
  177.     Windows NT CLIB: Fixed dup2() to close the destination
  178.     handle before aliasing the source handle to it.
  179. ===========================================================
  180.  
  181.     Windows NT CLIB: Fixed utime() to set file time to
  182.     local time rather than GMT time.
  183. ===========================================================
  184.  
  185.     __WinLines_sem had incorrect underscores in NT -3s library
  186. ===========================================================
  187.  
  188.     Added cover function for EnumFontFamilies in 386 Windows library
  189. ===========================================================
  190.  
  191.     The atanh function returned the negative of the correct
  192.     value.
  193. ===========================================================
  194.  
  195.     Windows NT CLIB:
  196.     - fixed opendir/readdir/closedir to match size
  197.       constants in <direct.h>
  198.     - fixed _dos_findfirst/_dos_findnext to match size
  199.       constants in <dos.h>
  200. ===========================================================
  201.  
  202.     Windows NT CLIB: Fixed opendir/readdir/closedir to
  203.     return dates in local time rather than GMT
  204. ===========================================================
  205.  
  206.     Windows NT CLIB: Fixed stat/fstat to return
  207.     dates in local time rather than GMT
  208. ===========================================================
  209.  
  210.     Windows NT CLIB: Fixed _dos_setftime/_dos_getftime to
  211.     deal in local DOS times rather than GMT
  212. ===========================================================
  213.  
  214.     printf() with the 'G' format for floating point output
  215.     did not correctly determine when to use the 'E' format
  216.     if the exponent was negative.
  217. ===========================================================
  218.  
  219.     fread() of TEXT mode files did not properly handle
  220.     reads going past the end of the file's buffer.
  221. ===========================================================
  222.  
  223.     Windows NT CLIB: Fixed kbhit() so that it doesn't
  224.     think a key is in the buffer when the mouse moves,
  225.     focus changes, or the user touches the ctrl key
  226. ===========================================================
  227.  
  228.     In the OS/2 2.x C libraries, if a thread created using
  229.     _beginthread() called a 16-bit function, the code that
  230.     performed the 32 to 16-bit thunking could crash.  The
  231.     thunking code imposed some stack overhead that is now
  232.     automatically supplied.
  233. ===========================================================
  234.  
  235.     Optimize fseek() for SEEK_CUR with negative offsets.
  236. ===========================================================
  237.  
  238.     Fixed a problem where floating point exceptions under
  239.     Pharlap would not be properly caught if the exception
  240.     handler offset was > 64K.
  241. ===========================================================
  242.  
  243.     Fixed freopen() for standard streams under default
  244.     windowing applications.
  245. ===========================================================
  246.  
  247.     Modified OS/2 2.x signal() function to consider SIGINT
  248.     and SIGBREAK to be the same thing.
  249. ===========================================================
  250.  
  251.     Fixed WILDARGV.C so that it can be compiled as a C++
  252.     source file.
  253. ===========================================================
  254.  
  255.     Fix scanf() family of functions to not modify the user
  256.     variable if no match for the format string is found in
  257.     the input stream.
  258. ===========================================================
  259.  
  260.     Fix return code from __exit() under 3s for 32 bit Windows.
  261. ===========================================================
  262.  
  263.     Fix fread() to always attempt to fill user buffer.
  264. ===========================================================
  265.  
  266.     The memory allocator has been improved for DOS/4GW.  DPMI memory
  267.     blocks will now be given back to the DPMI host when possible.
  268.     'realloc' will try to expand a DPMI memory block if possible
  269.     rather than allocating a new DPMI memory block and copying the
  270.     old memory block to the new memory block.
  271. ===========================================================
  272.  
  273.     Startup code for Rational DOS extender no longer zeros the
  274.     entire BSS, since the DOS extender will zero the pages when
  275.     they are first created. This will speed up loading of applications
  276.     that have large uninitialized arrays.
  277. ===========================================================
  278.  
  279.           ******************
  280.           ** C++ Compiler **
  281.           ******************
  282.  
  283.     dead code warnings leave dead code status alone now.
  284. ===========================================================
  285.  
  286.     static class temporaries caused problems during
  287.     initialization of static items.
  288. ===========================================================
  289.  
  290.     __cdecl and __pascal don't force extern "C" semantics
  291.     anymore (necessary for MFC 2.0 code).
  292. ===========================================================
  293.  
  294.     -dmacro#contents works properly now.
  295. ===========================================================
  296.  
  297.     The number of arguments was not checked properly for
  298.     function pointer calls in all cases.
  299. ===========================================================
  300.  
  301.     locations improved for various error messages.
  302. ===========================================================
  303.  
  304.     access checking for file scope member definitions
  305.     has been corrected.
  306.     e.g.,
  307.         class S {
  308.         enum { SIZE = 10 };
  309.         static int a[SIZE];
  310.     };
  311.     int S::a[SIZE];
  312.              ^^^^ - used to diagnose as access to private
  313. ===========================================================
  314.  
  315.     complex class template processing (nested class template
  316.     expansions that occurred during a file scope member
  317.     definition) could cause a compiler fault in certain
  318.     circumstances.
  319. ===========================================================
  320.  
  321.     allow some anachronisms to function (necessary for MFC 2.0
  322.     to function properly).  Note that the current ISO/ANSI C++
  323.     draft disallows this kind of code.  The portability and
  324.     semantics of these constructs is questionable.
  325.  
  326.         int address_of_parm_ref( X &r )
  327.         {
  328.         return &r != NULL;
  329.         }
  330.         int address_of_local_ref( X *p )
  331.         {
  332.         X &r = *p;
  333.         return &r != NULL;
  334.         }
  335.         int S::NULL_this_check()
  336.         {
  337.         return this ? 0 : field;
  338.         }
  339. ===========================================================
  340.  
  341.     fixed scanning of floating point constants that start
  342.     with:
  343.  
  344.     [0-7]*[89]
  345.  
  346.     This looks like an octal constant but turns into a
  347.     floating constant once we hit the '8' or '9'.
  348. ===========================================================
  349.  
  350.     Fixed the __stdcall calling convention to properly
  351.     save EBX.
  352. ===========================================================
  353.  
  354.     LibMain and WinMain are default extern "C" functions now
  355.     (MS C++ compatibility)
  356. ===========================================================
  357.  
  358.     - anonymous unions were not brace '{}' initialized
  359.       properly
  360.     - diagnosing too many initializers for anonymous unions
  361.       did not work properly
  362. ===========================================================
  363.  
  364.     overload of class specific operator new incorrectly
  365.     allowed some expressions if there was only one operator
  366.     new declared in the class.  A diagnostic is now issued
  367.     for incorrect new expressions in this case.
  368. ===========================================================
  369.  
  370.     prevent compiler from faulting if errors were detected
  371.     during class template instantiation and the type of the
  372.     incorrectly compiled class was used subsequently.
  373. ===========================================================
  374.  
  375.     fixed a compiler page fault that was caused by a
  376.     class consisting of only one data member (if it
  377.     was an array of classes with a constructor).
  378. ===========================================================
  379.  
  380.     fixed a problem with destructing temporaries that
  381.     are created during processing of the ctor initializer
  382.     list in a constructor
  383. ===========================================================
  384.  
  385.     made it easier to mix C and C++ code by importing the
  386.     C++ run-time library in modules where there is a
  387.     extern "C" definition (this allows users to use a
  388.     main() compiled with the C compiler)
  389. ===========================================================
  390.  
  391.     fixed semantic checks for <expr>.~T() and <expr>->~T()
  392. ===========================================================
  393.  
  394.     The -nm switch did not allow all the legal filename
  395.     characters to be used in the module name.
  396. ===========================================================
  397.  
  398.     Fixed a problem with #pragma aux (alias) name handling
  399.     of parameter lists.
  400. ===========================================================
  401.  
  402.     Tweaked compiler to move function modifiers in
  403.     circumstances where the modifier can unambiguously
  404.     be applied to a function type (this previously
  405.     generated semantic errors).
  406.     e.g., typedef int (* __pascal PF)( int, int );
  407.       ==> typedef int __pascal (* PF)( int, int );
  408.  
  409. ===========================================================
  410.  
  411.     Fixed a page fault in the compiler that was caused by
  412.     multiple identical unnamed structs that required
  413.     destructors.
  414. ===========================================================
  415.  
  416.     Made error messages regarding conflicting storage classes
  417.     dump the previous symbol's location.
  418. ===========================================================
  419.  
  420.     if not compiling strict ANSI C++, an undeclared file-scope
  421.     friend function can be static.
  422. ===========================================================
  423.  
  424.     - fixed default alignment of segments to be int
  425.     - fixed alignment of symbols to depend on -ot
  426.     (both fixes bring C++ in line with C semantics)
  427.  
  428. ===========================================================
  429.  
  430.     - fixed a problem with some error messages not printing
  431.       in strict ANSI C++ mode
  432.     - made binding of a temporary to a non-const reference
  433.       a level 1 warning
  434. ===========================================================
  435.  
  436.     - fixed a problem with -oe<n> not generating code for
  437.       functions in some circumstances
  438.     - fixed a problem that caused extra inline functions to
  439.       have their code generated out of line
  440. ===========================================================
  441.  
  442.     fixed a page fault in the compiler when it was fed:
  443.  
  444.     template <class T>
  445.     struct S {
  446.         struct N {
  447.         static int a;
  448.         }
  449.     };
  450.  
  451.     // template <class T>
  452.     int S<T>::N::a = 1;
  453. ===========================================================
  454.  
  455.     Fixed line number processing for #line <n> "file"
  456.     directives.
  457. ===========================================================
  458.  
  459.     Fixed diagnosing of situations where an overload of
  460.     a constructor could not be performed because there
  461.     were no constructors with the right number of arguments
  462.     and the number of available constructors was one
  463. ===========================================================
  464.  
  465.     Bumped a couple of annoying warnings up a couple of
  466.     levels because there are no source code changes that
  467.     can remove them short of #pragma-ing them out.
  468.     - mangled name truncated (WATCOM C++ automatically
  469.       generates a better name that will fit by chopping
  470.       and adding a hash so this is purely informational)
  471.     - cast causes ptr truncation (<i86.h> contained this)
  472.     - defining pure virtual destructors (container classes)
  473. ===========================================================
  474.  
  475.     Fixed a problem where a default operator = was generated
  476.     by the compiler even though the source code never tried
  477.     to do an assignment of any classes.  If the default op=
  478.     could not be generated (because of access errors), this
  479.     results in the rejection of correct code by the compiler.
  480.  
  481.     Example:
  482.     struct A {
  483.     private:
  484.         void operator=(const A &);
  485.     };
  486.     
  487.     struct B : A {
  488.         void operator=(int i);
  489.     };
  490.     
  491.     void fn( int i )
  492.     {
  493.         B x;
  494.         x = i;
  495.     }
  496. ===========================================================
  497.  
  498.     Added check for assigning into a function type with
  499.     +=, -=, etc.
  500. ===========================================================
  501.  
  502.     Fixed check in some pointer conversions to treat "char"
  503.     as a unique type.  Fixed function pointer conversion
  504.     checks to handle enums and chars properly as unique
  505.     types.
  506. ===========================================================
  507.  
  508.     Fixed the compiler so that the following initialization
  509.     works properly:
  510.  
  511.     void foo()
  512.     {
  513.     char a[10];
  514.     char *p[1] = { a };
  515.     }
  516. ===========================================================
  517.  
  518.     Fixed template function binding for the case of non-reference
  519.     function parameters and constant arguments.
  520.  
  521.     Example:
  522.  
  523.     template <class Q>
  524.         struct S {
  525.         int a;
  526.         };
  527.     
  528.     template <class T>
  529.         void foo( S<T> x )
  530.         {
  531.         }
  532.     
  533.     void ack( const S<int> &r )
  534.     {
  535.         foo( r );
  536.     }
  537.  
  538. ===========================================================
  539.  
  540.     Fixed catch type analysis so that enums are considered
  541.     as unique types.
  542. ===========================================================
  543.  
  544.     Fixed a problem with user-defined conversion function
  545.     access declarations incorrectly modifying access to
  546.     related user-defined conversions.
  547. ===========================================================
  548.  
  549.     Suppress compiler generated names from lists of class
  550.     members and local variables in debugging information.
  551. ===========================================================
  552.  
  553.     Fixed base class operator =() calls in compiler generated
  554.     operator = functions to match Borland and CFRONT when
  555.     the base class operator =() is virtual.
  556. ===========================================================
  557.  
  558.     Added extension that allows zero sized arrays to be
  559.     declared at the end of structures for C compatibility.
  560.     e.g.,
  561.         struct S {
  562.         int a;
  563.         int b;
  564.         char c[];
  565.         };
  566. ===========================================================
  567.  
  568. The following bugs were fixed:
  569.  
  570.     A break in dead code could cause extra "missing return" warnings
  571.     to be issued or could result in missing "dead code" diagnostics.
  572.  
  573.     Some always-TRUE or always-FALSE expressions were not being diagnosed
  574.     as constant boolean expressions.
  575.  
  576.     Integral truncations during conversions were not being diagnosed.
  577.  
  578.     Compiler error 70 could be generated for virtual destructors or
  579.     virtual operator= when some special calling conventions were present.
  580.  
  581.     Throwing member pointers or function names did not always work
  582.     properly.
  583.  
  584.     An uncalled function whose address was taken, could be diagnosed
  585.     as being unreferenced.
  586.  
  587.     When the expressions for some mem-initializers could be eliminated,
  588.     they were not analysed and so errors could be missed.
  589.  
  590.     Objects passed to catch handlers were not always destructed properly.
  591.  
  592.     Spurious error messages could be generated for initialization of
  593.     non-const objects with the ":" operator.
  594.  
  595.     Missing virtual destructor or operator= functions were not always
  596.     detected at link time.
  597.     
  598. ===========================================================
  599.  
  600.     Fixed code generator informational messages to be warnings
  601.     rather than errors.
  602. ===========================================================
  603.  
  604.     Changed /oe default to better match the C compiler
  605.     in optimization semantics.
  606. ===========================================================
  607.  
  608.     Ignore memory model modifiers enclosed within a typedef
  609.     when declaring an automatic variable (this allows some
  610.     function template code to work properly in the presence
  611.     of based/near/far memory model modifiers)
  612.     example:
  613.     template <class T>
  614.         void swap( T &l, T &r )
  615.         {
  616.         T t; t = l; l = r; r = t;
  617.         }
  618.  
  619.     int __far x, __far y;
  620.     ...
  621.     swap( x, y );
  622.     ...
  623. ===========================================================
  624.  
  625.  
  626.     The -oe option did not allow for an equal sign between
  627.     it and the number the way it should.
  628. ===========================================================
  629.  
  630.           *****************
  631.           ** C++ Library **
  632.           *****************
  633.  
  634.     void operator delete( void * ) now checks for a NULL
  635.     pointer before it calls free().  This is necessary
  636.     because in some environments free() may be replaced
  637.     with a non-ANSI conforming free() that will not
  638.     accept a NULL pointer (problem was detected in a
  639.     Autodesk ADS C++ application because free() is
  640.     overridden by ADS.LIB).
  641. ===========================================================
  642.  
  643.     cout object has ios::unitbuf format flag set by default
  644.     to support better mixing of C++ iostream and C stdio.
  645. ===========================================================
  646.  
  647.     istream::getline() function corrected to set
  648.     ios::failbit on return if no characters have been stored
  649.     into the callers buffer.
  650. ===========================================================
  651.  
  652.     corrected logic in filebuf destructor to discern if
  653.     associated file should be closed.
  654. ===========================================================
  655.  
  656.     string::operator >> now respects the ios::skipws format
  657.     flag.
  658. ===========================================================
  659.  
  660.     corrected length computation in string::operator()()
  661.     for extracting substrings.
  662. ===========================================================
  663.  
  664.     corrected a problem with termination error messages
  665.     causing problems in -3s 386 models
  666. ===========================================================
  667.  
  668.     Fixes to list iterator append and insert which were inserting
  669.     the new entry at the beginning of the list after an iterator error
  670.     have been made.
  671.     
  672.     Pointer and Value single and double linked list find, findLast and
  673.     get member functions now work with empty lists.  An index_range
  674.     exception will be thrown if enabled.  If not, a value list will
  675.     return a default initialized object, and a pointer list will
  676.     return an unintialized pointer.
  677.     
  678.     A problem was fixed for double linked list iterators over lists
  679.     containing only one element.
  680.     
  681.     
  682.     Iterators now have the following semantics (some semantics were
  683.     previously undocumented):
  684.       If an iterator is constructed without a list being passed to the
  685.       constructor and is not reset with a list, only the reset
  686.       member function is valid.  All other operators or member functions
  687.       will throw an undef_iter exception or return 0 (except for current
  688.       which returns an default initialized object for value list iterators,
  689.       and return an uninitialized pointer for pointer list iterators).
  690.     
  691.       After an iterator is reset or for a newly constructed iterator, the
  692.       iterator is positioned before the first element in the list.
  693.       
  694.       When the iterator is positioned before the first element in the
  695.       list, only the following operators/member functions are valid:
  696.       operator(), operator++, operator+=, container and reset
  697.       The first increment positions the iterator at the first element in
  698.       the list.
  699.     
  700.       If the iterator is incremented past the last element in the list
  701.       using operator(), operator++, operator+= then 0 will be returned.
  702.       Attempts to further increment the iterator using operator(),
  703.       operator++ or operator+= will throw an undef_iter exception
  704.       if it is enabled, or return 0 if it is not.  The iterator will
  705.       then be positioned after the last element in the list.  When an
  706.       iterator for a double linked list is past the end of the list,
  707.       operator-- and operator-= are valid, with the first decrement
  708.       positioning the iterator to the last element in list.
  709.     
  710.       If the iterator for a double linked list is decremented before
  711.       the first element in the list using operator-- or operator-=
  712.       then 0 will be returned.  Further attempts to decrement the
  713.       iterator (or attempting to decrement an iterator which was reset
  714.       or newly constructed) using operator-- or operator -= will throw an
  715.       undef_iter exception if it is enabled, or return 0 if it is not.
  716.       The iterator will then be positioned before the first element in
  717.       the list.
  718.     
  719.       The following member functions have the following error semantics
  720.       when an iterator is positioned before the first element or after
  721.       the last element in the list:
  722.     
  723.     current: throw an undef_item exception if enabled, and
  724.          return 0 in the intrusive iterator, a default
  725.          initialized object in the value case, and an
  726.          uninitialized pointer in the pointer case.
  727.     append: throw an indef_iter exception if enabled, and
  728.         return 0.
  729.     insert: (double linked list iterators only) throw an
  730.         undef_iter if enabled, and return 0.
  731.     
  732.     
  733.     A new exception, out_of_memory was added to WCListExcept and is
  734.     thrown, if enabled, when an insert or append fails.
  735.     
  736.     If the insert and append member functions fail, they will throw
  737.     the out_of_memory exception if enabled for the list, and return 0.
  738.     Non-zero is returned on success.  This applies to all list classes
  739.     and list iterator classes.
  740. ===========================================================
  741.  
  742.     Fixed the ifstream,ofstream,fstream constructors to
  743.     handle the case where the user specifies an openmode
  744.     bit but leaves off an indication of either ios::in or
  745.     ios::out.  The ios::in and ios::out are implied in the
  746.     type of fstream being instantiated.
  747. ===========================================================
  748.  
  749.     Fixed the istream::getline() function to set ios::failbit
  750.     if the read terminates because the buffer is full before
  751.     the delimeter is seen.
  752. ===========================================================
  753.  
  754.     Fixed the string::alloc_mult_size() member function to
  755.     properly set the new allocation size.
  756. ===========================================================
  757.  
  758.     Added following const member functions to the String class:
  759.     String::operator char const * () const;
  760.     char const & String::operator () ( size_t __pos ) const;
  761.     char const & String::operator [] ( size_t __pos ) const;
  762. ===========================================================
  763.  
  764.     Changed istream::getline() and istream::get() functions
  765.     to not set ios::failbit if no characters have been stored
  766.     into the user buffer *and* the delimiting character has
  767.     been seen.
  768. ===========================================================
  769.  
  770.     Fixed ifstream constructor to not implicitly create
  771.     files when ios::in specified.
  772. ===========================================================
  773.  
  774.     Added ios::sync_with_stdio(). It is an obsolete function
  775.     but has been added for compatibility.
  776. ===========================================================
  777.  
  778.     The strstream::seekoff() function has been fixed to handle
  779.     ios::in|ios::out style seeks.  It returns the new position of
  780.     the put pointer.
  781. ===========================================================
  782.  
  783.     The strstream::strstream() constructor which takes an
  784.     ios::openmode parameter now handles ios::atend or ios::append
  785.     properly to only position the put pointer to the end of the buffer.
  786. ===========================================================
  787.  
  788.     The ifstream::ifstream() constructor that takes an
  789.     ios::openmode parm implicitly has the ios::in bit turned
  790.     on in all cases.
  791.     The ofstream::ofstream() constructor that takes an
  792.     ios::openmode parm implicitly has the ios::out bit turned
  793.     on in all cases.
  794. ===========================================================
  795.  
  796.     Multi-threaded applications where more than one thread
  797.     could throw an exception at the same time could
  798.     go into an infinite loop in the C++ runtime.
  799. ===========================================================
  800.  
  801.     Multi-threaded NLM's sometimes failed to destroy static
  802.     objects.
  803.  
  804. ===========================================================
  805.  
  806.     Fixed Complex::operator-(double,complex) to properly
  807.     set the sign of the imaginary component.
  808. ===========================================================
  809.  
  810.           *************
  811.           ** DOS4/GW **
  812.           *************
  813.  
  814.   All of the DOS/4GW error messages have been reorganized and renumbered.
  815.   There is currently no document that describes all the conditions under
  816.   which the errors can occur.
  817.   
  818.   The familiar "unexpected interrupt" message has been revised for clarity.
  819.   It now gives both the exception number and a brief description of the
  820.   exception.
  821.   
  822.   On a transfer stack overflow, the error message now includes the number of
  823.   the interrupt that provoked the overflow and the address at which the
  824.   interrupt occurred.
  825.   
  826.   Setting DOS4G=NULLP now catches attempts to read from the null pointer as
  827.   well as attempts to write to it.
  828.   
  829.   The virtual memory manager will now silently accept bad configuration
  830.   options.
  831.   
  832.   An incompatibility with cheap clone IDE disk controllers has been fixed.
  833.   Some of these controllers, when installed in machines with clock speeds
  834.   relatively fast for their processors, and with other cards on the bus,
  835.   randomly generate interrupt 0Fh even if configured to use a different IRQ.
  836.   On a computer with one of these hardware configurations, DOS/4GW would
  837.   crash at random points while loading or running; the problem would never
  838.   occur in a Windows DOS box.
  839.   
  840.   We have worked around a bug in the EMM386 distributed with DOS 6.0, which
  841.   cropped up only without the NOEMS and NOVCPI options. If another
  842.   application that allocated expanded (EMS) memory ran beforehand, DOS/4GW
  843.   would hang on startup.
  844.   
  845.   DOS/4GW on Fujitsu FMR series computers no longer causes the system to
  846.   crash on an interrupt F3h.
  847.   
  848.   The SS and ESP are no longer reported as zero on a recoverable stack fault.
  849.   
  850.   DOS/4GW is less susceptible to recursive faults while reporting an
  851.   exception. It will detect most recursive fault conditions and terminate
  852.   immediately.
  853.   
  854.   The trap flag is now properly preserved if a hardware interrupt or
  855.   processor exception occurs while single-stepping in a debugger. This bug
  856.   caused debuggers to occasionally "run away" during stepping for no obvious
  857.   reason.
  858.   
  859.   A bug in handling exceptions when ESP was slightly greater than an even
  860.   multiple of 10000h has been corrected.
  861.   
  862.   A bug that caused the system to reboot on INT 31/0001 (Free Descriptor)
  863.   when DS and ES contained the segment register being cancelled is fixed.
  864.   
  865.   An obscure bug in INT 31/0002 (Segment to Descriptor) has been fixed.
  866.   
  867.   INT 31/0100 (Allocate DOS Memory Block) and INT 31/0102 (Resize DOS Memory
  868.   Block) will now properly return the number of available paragraphs in BX
  869.   when more memory is requested than is actually available.
  870.   
  871.   Several bugs in INT 31h/601h (Unlock Linear Region) have been corrected.
  872.   
  873.   Two bugs in INT 31h/800h (Physical Address Mapping), one with mapping more
  874.   than 64K at a time and one with multiple mappings, have been corrected.
  875.   
  876.   INT 2 (the non-maskable interrupt) is once again passed down.
  877.   
  878.   DOS/4GW will now return carry clear on any attempt to unlock memory that
  879.   isn't managed by the virtual memory manager (for example, low memory).
  880.   
  881.   An off-by-one-page bug in calculating the maximum address managed by VMM
  882.   has been fixed.
  883.   
  884.   A bug that reduced application performance on 80486 machines, even when all
  885.   code and data fit into physical memory, has been corrected.
  886.   
  887.   DOS/4GW is now more careful about recognizing the names of programs which
  888.   require special treatment, for example DOS4GW.EXE. It is now possible to
  889.   name your program something like XXDOS4GW.EXE.
  890.   
  891.   DOS/4GW once again opens programs using DOS "compatibility mode". This
  892.   change allows multiple users to read the executable simultaneously. For
  893.   example, WVIDEO can read the debugging information even if the .EXE file
  894.   has been kept open for demand loading. Ironically, we switched away from
  895.   compatibility mode to support an earlier version of WVIDEO.
  896.   
  897.   A bug in handling 16-bit relocations in 32-bit code that prevented programs
  898.   from loading has been corrected.
  899.   
  900.   Freeing a descriptor that happens to be in the FS or GS registers now works
  901.   properly. The value in FS or GS will be zeroed.
  902.   
  903.   Chaining to a previously installed interrupt handler will now correctly
  904.   return the zero and carry flags.
  905.   
  906.   A bug where the EAX register was corrupted on a switch from real mode to
  907.   protected mode has been fixed. This bug was only a problem in the absence
  908.   of a VCPI or DPMI memory manager, when VMM was running, and when DOS STACKS
  909.   was not set to 0,0.
  910. ===========================================================
  911.  
  912.           *************************
  913.           ** FORTRAN 77 Compiler **
  914.           *************************
  915.  
  916.     Passing a character array that was a field within a
  917.     structure did not work correctly.
  918. ===========================================================
  919.  
  920.     It was possible for the compiler to crash when scanning
  921.     code similar to the following:
  922.  
  923.         IF( X..AND. )
  924. ===========================================================
  925.  
  926.     There was a problem with character variables in common
  927.     when the /automatic switch was specified.
  928. ===========================================================
  929.  
  930.     The compiler would not evaluate the following expression
  931.     correctly.
  932.  
  933.     'A'//B.C//'D'
  934.  
  935.     B is a structure that contains a character field C.
  936. ===========================================================
  937.  
  938.     The usage message for WFC specified WFC386.
  939. ===========================================================
  940.  
  941.     Specifying the /d2 and /nodescriptor options would cause
  942.     a compiler error 3 for CHARACTER*(*) arrays.
  943. ===========================================================
  944.  
  945.     The wrong error message would be issued when data
  946.     initialization in a DATA statement contained more
  947.     constants than data items or vice versa.
  948. ===========================================================
  949.  
  950.     The compiler could crash if the FUNCTION statement starting
  951.     a function subprogram had a syntax error.
  952. ===========================================================
  953.  
  954.     The error file would not be closed if the only error was an
  955.     invalid command line (i.e. an invalid option).
  956. ===========================================================
  957.  
  958.     A compiler error 2 and/or 3 would be issued when in-lining
  959.     statement functions (with the /oi or /ox options).  This
  960.     would only occur if the statement function was of type
  961.     complex and the expression for the statment function was
  962.     a scalar (and vice versa).
  963. ===========================================================
  964.  
  965.     String descriptors for character variables were not being
  966.     allocated on the stack when the /automatic switch was
  967.     specified.
  968. ===========================================================
  969.  
  970.     A character select expression, other than a simple
  971.     character variable, caused the compiler to crash.
  972. ===========================================================
  973.  
  974.     Fixed a problem with the /or (instruction scheduling)
  975.     option and variables used in the IOSTAT= specifier of
  976.     I/O statements.
  977. ===========================================================
  978.  
  979.     An incorrect warning message was being issued specifying
  980.     that a character variable was used but not defined when
  981.     the character variable was being defined by a substring
  982.     operation as in the following example.
  983.  
  984.         CHARACTER*10 CH
  985.     CH(1:5) = '12345'
  986.     PRINT *, CH(1:5)
  987.     end
  988. ===========================================================
  989.  
  990.     Compiler generated incorrect code for formatted i/o when
  991.     format specification was a character variable and /format
  992.     option was specified.
  993. ===========================================================
  994.  
  995.           ************************
  996.           ** FORTRAN 77 Library **
  997.           ************************
  998.  
  999.     IARGC() and IGETARG() did not work in the default
  1000.     windowing environment for Windows.
  1001. ===========================================================
  1002.  
  1003.     There were problems linking OS/2 2.x multithreaded
  1004.     applications when using "option caseexact".
  1005. ===========================================================
  1006.  
  1007.     There was a problem printing a character string when
  1008.     the last byte of the string was the first byte of a
  1009.     double-byte character.  Double-byte character processing
  1010.     is performed when one of the /japanese, /chinese or
  1011.     /korean options is specified.
  1012. ===========================================================
  1013.  
  1014.     It was not possible to detect integer overflows detected
  1015.     during a read operation (i.e. converting character data
  1016.     to integer data) by using ERR= or IOSTAT=.
  1017. ===========================================================
  1018.  
  1019.     Printing complex numbers using free format could cause
  1020.     *'s in the output field if the real/imaginary parts were
  1021.     negative and had 3-digit exponents.
  1022. ===========================================================
  1023.  
  1024.     Fixed a problem reading binary files using non-character
  1025.     arrays.  Binary files are files opened using
  1026.     ACCESS='SEQUENTIAL', FORM='UNFORMATTED' and RECORDTYPE='FIXED.
  1027. ===========================================================
  1028.  
  1029.     Fixed a problem with DLL's where an open file would not
  1030.     get closed when the DLL terminated.
  1031. ===========================================================
  1032.  
  1033.     If an OPEN statement failed, the unit would remain
  1034.     connected even if the unit was previously not connected.
  1035. ===========================================================
  1036.  
  1037.     Fixed a problem with NAMELIST-directed I/O.  Under certain
  1038.     circumstances, array names beginning with the letter 't' were
  1039.     interpreted as the value .TRUE. resulting in a "type mismatch"
  1040.     error being issued.
  1041. ===========================================================
  1042.  
  1043.     Added SEEKUNIT() function that allows the programmer to
  1044.     seek a binary file.  Binary files are files opened with
  1045.     ACCESS='SEQUENTIAL', FORM='UNFORMATTED' and RECORDTYPE='FIXED'.
  1046.     SEEKUNIT() is an integer function that returns zero if
  1047.     the operation succeeded and non-zero if it failed.  It
  1048.     requires three integer arguments.  The first is the unit
  1049.     number, the second is the offset within the file, and the
  1050.     third is SEEK_SET (seek from the beginning of the file) or
  1051.     SEEK_CUR (seek from the current position in the file).  SEEK_SET
  1052.     and SEEK_CUR are defined in FSUBLIB.FI in the SRC\FORTRAN
  1053.     directory  of the directory in which the software was installed.
  1054. ===========================================================
  1055.  
  1056.     Invalid unformatted sequential files were created when an i/o
  1057.     list item spanned a physical record.  For example, if the physical
  1058.     record length was 10 (the default is 256) and three integers
  1059.     were displayed (each integer requires 4 bytes), the last integer
  1060.     would not fit in the physical record and causes incorrect
  1061.     information to be placed in the file.
  1062.  
  1063.           **********************
  1064.           ** Graphics Library **
  1065.           **********************
  1066.  
  1067.     Made _remappalette go faster in 16 and 256 colour modes.
  1068. ===========================================================
  1069.  
  1070.     Added support for VESA devices in 386 protected mode.
  1071. ===========================================================
  1072.  
  1073.     Improved the speed of the palette initialization in _setvideomode
  1074.     by making use of the faster _remappalette code.
  1075. ===========================================================
  1076.  
  1077.     Added support for the FlashTek DOS extender.
  1078. ===========================================================
  1079.  
  1080.           ********************
  1081.           ** C Header Files **
  1082.           ********************
  1083.  
  1084.     Fixed NetWare 4.0 header file <stdlib.h> so that it
  1085.     works properly with -oi when compiled as C++.
  1086. ===========================================================
  1087.  
  1088.           ***************
  1089.           ** Librarian **
  1090.           ***************
  1091.  
  1092.     The last two elements of the ++ operator description
  1093.     on the help screen were reversed.
  1094. ===========================================================
  1095.  
  1096.     The librarian now places COMDEF and COMDAT symbols into
  1097.     the library dictionary. This allows C++ template functions
  1098.     to be properly found and extracted from a library by
  1099.     the linker.
  1100. ===========================================================
  1101.  
  1102.     When creating an import library for an Windows NT
  1103.     DLL, the librarian would crash if the total length
  1104.     of all the exported names was greater than 4K.
  1105. ===========================================================
  1106.  
  1107.     Fixed check for overflowing library files under NT.
  1108. ===========================================================
  1109.  
  1110.           ************
  1111.           ** Linker **
  1112.           ************
  1113.  
  1114.     The file specified by "option resource" for QNX executables
  1115.     was being opened for read/write access rather than just
  1116.     read.
  1117. ===========================================================
  1118.  
  1119.     The OPTION INTERNALRELOCS directive did not work properly.
  1120. ===========================================================
  1121.  
  1122.     There was a bug in option eliminate that occured when a PUBDEF
  1123.     record redefined a COMDAT record that was a virtual function in a
  1124.     base class, and the inheriting class was instantiated the virtual
  1125.     function was referenced _after_ the comdat was redefined. (phew)
  1126.     This could be made to happen with lots of templates.
  1127. ===========================================================
  1128.  
  1129.     For files that only contain templated code, the debugging
  1130.     information was slightly out of whack
  1131. ===========================================================
  1132.  
  1133.     The linker will not search library dictionary for uninitialized
  1134.     communal variables now.  (Needed so we can put communal variable
  1135.     definitions into the library dictionaries)
  1136. ===========================================================
  1137.  
  1138.     In some cases it was possible for OS/2 1.x and Windows NT DLLs to
  1139.     lose a bit of uninitialized data.
  1140. ===========================================================
  1141.  
  1142.     Added "format windows nt pharlap" and "runtime dosstyle"
  1143.     for the PharLap TNT dos extender.
  1144. ===========================================================
  1145.  
  1146.     changed the message "DLL COMENT record invalid when not in OS2"  to
  1147.     "export and import records not valid for %f" since the old message
  1148.     is rather archaic.  (more than just OS2 supports DLLs now!)
  1149.     As well, disabled this warning message for the win386 extender.
  1150. ===========================================================
  1151.  
  1152.     made the libfile command work with the LIB environment variable.
  1153. ===========================================================
  1154.  
  1155.     put out linear addresses in qnx flat map files
  1156. ===========================================================
  1157.  
  1158.     option rwr would not work if you compiled with /d2 but did not use
  1159.     debug all in the link file
  1160. ===========================================================
  1161.  
  1162.           **********
  1163.           ** Make **
  1164.           **********
  1165.  
  1166.     WMAKE for NT was compiled with DOS file component
  1167.     constants so it only allowed 8.3 file names.
  1168. ===========================================================
  1169.  
  1170.     WMAKE now handles c: commands for OS/2 and NT.
  1171. ===========================================================
  1172.  
  1173.     WMAKE correctly touches files to the current time under NT
  1174. ===========================================================
  1175.  
  1176.     always build targets if any of their dependents are
  1177.     updated with commands
  1178. ===========================================================
  1179.  
  1180.     execute .error command list for .symbolic and .precious
  1181.     targets if an error occurs during the command list
  1182. ===========================================================
  1183.  
  1184.           ***********************
  1185.           ** Windows SDK Tools **
  1186.           ***********************
  1187.  
  1188.    Fixed a resource compiler bug where Preload resources were sometimes
  1189.    corrupted when a fastload section was created in a large Windows
  1190.    executable.
  1191. ===========================================================
  1192.  
  1193.     Fixed a resource compiler bug where double byte characters were
  1194.     not being properly translated to UNICODE for NT .res files.
  1195. ===========================================================
  1196.  
  1197.     Fixed the resource compiler so it will not GP fault if there
  1198.     is no INCLUDE environment variable
  1199. ===========================================================
  1200.  
  1201.     Fixed the resource compiler so it handles \a characters correctly
  1202.     in MENUITEM statements.
  1203. ===========================================================
  1204.  
  1205.     Fixed the resource compiler so it handles custom controls
  1206.     in NT dialog boxes correctly.
  1207. ===========================================================
  1208.  
  1209.     Fixed a resource compiler bug where windows executables were
  1210.     sometimes corrupted when run through the resource compiler
  1211.     without adding resources
  1212. ===========================================================
  1213.  
  1214.           ************************
  1215.           ** Windows Supervisor **
  1216.           ************************
  1217.  
  1218.     Objects > 1MB in size were not handled properly.  This most
  1219.     frequently shows up with large bitmaps.
  1220. ===========================================================
  1221.  
  1222.     Added code to check selector values before restoring DS and ES
  1223.     upon return from a DLL function call in case the DLL function
  1224.     ends up freeing the memory that the selector points to.
  1225. ===========================================================
  1226.  
  1227.     The mmioOpen function is allowed to pass in a NULL pointer as
  1228.     the second parameter. The extender was causing an exception by
  1229.     trying to reference a field in this structure without checking
  1230.     to see if the pointer was NULL.
  1231. ===========================================================
  1232.  
  1233.           ************
  1234.           ** WVIDEO **
  1235.           ************
  1236.  
  1237.     If you were in a function that had 2 or more local variables
  1238.     which only differed in case and the debugger was set to
  1239.     perform case insensitive lookups (the default) then an
  1240.     attempt to reference one of the local variables would cause
  1241.     the debugger to fault. E.g.:
  1242.  
  1243.         foo()
  1244.     {
  1245.         int c, C;
  1246.     }
  1247.  
  1248.      And attempt to print the value of 'c' or 'C'.
  1249. ===========================================================
  1250.  
  1251.     The QNX pmd.trp file did not properly access memory
  1252.     through the data selector when processing a dump
  1253.     file from a 32-bit flat model program.
  1254. ===========================================================
  1255.  
  1256.     Make debug registers work when debugging a DOS4G application.
  1257. ===========================================================
  1258.  
  1259.     The debugger would sometimes attempt to access a C++
  1260.     member before a routine's prologue had completed execution.
  1261.     An error message is now issued in this case.
  1262. ===========================================================
  1263.  
  1264.     If an error occurred parsing the command line options
  1265.     right at the end of the command line (e.g. "wvideo /" )
  1266.     then a strange character would be displayed in the error
  1267.     message on some systems.
  1268. ===========================================================
  1269.  
  1270.     Fixed a bug in WVPMHELP that could hang PM when
  1271.     a break point was hit in a dialog callback.
  1272. ===========================================================
  1273.  
  1274.     The variable display window could not properly follow
  1275.     more than one level of pointer fields.
  1276. ===========================================================
  1277.  
  1278.     Fixed the OS/2 hosted version of the debugger so that
  1279.     it works properly under PharLap's 286|DOS-Extender.
  1280.     In an OS/2 2.x DOS box you have to specify the
  1281.  
  1282.         /TRAP=STD16
  1283.  
  1284.     option to force the use of the OS/2 1.x debugging
  1285.     interface code.
  1286. ===========================================================
  1287.  
  1288.     Pressing the right mouse button did not work properly
  1289.     under OS/2.
  1290. ===========================================================
  1291.  
  1292.     Comments in multi-line command lists (from invoke files)
  1293.     did not terminate properly at the end of line.
  1294. ===========================================================
  1295.  
  1296.     Fixed some problems with asynchronous interruption
  1297.     of programs under DOS4G/W.
  1298. ===========================================================
  1299.  
  1300.     Support use of ALT-<number> under OS/2 to allow entering
  1301.     any keyboard code.
  1302. ===========================================================
  1303.  
  1304.     The default profile was using a colour scheme which
  1305.     did not look good on monochrome display adaptors.
  1306. ===========================================================
  1307.  
  1308.           **************************************
  1309.           ** IBM WorkFrame/2 Support Programs **
  1310.           **************************************
  1311.  
  1312.     Fixes to WorkFrame/2, available in version 1.1, now make
  1313.     it possible to support automatic make file creation.  The
  1314.     language profiles for WATCOM languages have been changed
  1315.     to use IBM's make facility.
  1316.  
  1317. ===========================================================
  1318.  
  1319.     WorkFrame/2 would crash when "link" was selected in the
  1320.     actions menu.
  1321. ===========================================================
  1322.  
  1323.           ************
  1324.           ** WTOUCH **
  1325.           ************
  1326.  
  1327.     Fixed so that setting dates and times under Windows/NT
  1328.     works correctly if the machine is not in the GMT timezone.
  1329. ===========================================================
  1330.  
  1331.     Fixed a weird problem for Windows/NT that was caused
  1332.     by NT not letting us touch an existing file but letting
  1333.     us truncate it!  The truncation is a result of WTOUCH
  1334.     trying to create a 0-length file because it assumes if
  1335.     it can't change the time-stamp, the file doesn't exist.
  1336.     Now we do not try to create a file if it already exists.
  1337. ===========================================================
  1338.