home *** CD-ROM | disk | FTP | other *** search
/ Der Mediaplex Sampler - Die 6 von Plex / 6_v_plex.zip / 6_v_plex / DISK6 / OS_20 / WATF32_A.ZIP / README.A < prev    next >
Text File  |  1993-09-23  |  47KB  |  1,197 lines

  1. NOTE: Since the BPATCH.EXE program itself is being patched in this release,
  2. the patching process should not be done from an OS/2 command prompt. Issue
  3. the APPLYA command from a DOS box instead.
  4.  
  5.           *****************
  6.           ** C Compiler  **
  7.           *****************
  8.  
  9.     Added the -ri switch. This switch causes functions that
  10.     are declared as returning char's or short's to return
  11.     int's instead. The return value in the calling function
  12.     is still treated as the correct type. This switch is to
  13.     help old, incorrect code which defines functions as
  14.     returning 'char' or 'short' but does not declare the return
  15.     type in other files (so that the compiler assumes that
  16.     the function returns 'int'). This switch should only
  17.     be used as a last resort. WATCOM strongly recommends
  18.     that functions be properly declared in all source
  19.     files.
  20. ===========================================================
  21.  
  22.     If there was a function in the middle of an expression
  23.     that was marked as "#pragma aux <func> aborts", the compiler
  24.     would generate an internal compiler error 3. E.g.:
  25.  
  26.         #include <stdlib.h>
  27.     #include <stdio.h>
  28.  
  29.     foo( int a )
  30.     {
  31.         if( a ) printf( "bad\n" ), exit( 1 );
  32.     }
  33. ===========================================================
  34.  
  35.     Compiler was translating double-byte characters found in normal
  36.     character constants and literal strings to UNICODE with -zk0u
  37.     option. Compiler should only do this translation for wide
  38.     character constants (L'abc') and wide character strings (L"abc").
  39. ===========================================================
  40.  
  41.     Some floating-point values that are integral did not generate
  42.     the correct floating-point representation because of some
  43.     rounding errors.
  44. ===========================================================
  45.  
  46.     Changed the behaviour of the -bd switch to emit correct
  47.     library references when building Dynamic Link Libraries
  48.     for Windows.
  49. ===========================================================
  50.  
  51.     The -pc option was not properly suppressing comments
  52.     in conditional compilation blocks that were being
  53.     excluded.
  54. ===========================================================
  55.  
  56.     Removed mapping of 5c (\) to unicode a5 (Yen symbol) since it
  57.     made specification of paths impossible (e.g. \\boot\penpoint).
  58. ===========================================================
  59.  
  60.     The program:
  61.  
  62.         char foo[60u*1024];
  63.  
  64.     main()
  65.     {
  66.         printf( "%d\n", sizeof sizeof foo );
  67.     }
  68.  
  69.     would print 4 with the 16 bit compiler rather than 2 as
  70.     it should have (the type of "sizeof foo" was "long" rather
  71.     than "unsigned int").
  72. ===========================================================
  73.  
  74.     Preprocessing directives were not scanned properly if the
  75.     previous line consisted of white space followed by line
  76.     continuation character '\'.
  77. ===========================================================
  78.  
  79.     Several problems with based pointers have been resolved.
  80. ===========================================================
  81.  
  82.     The compiler did not always handle out of memory
  83.     conditions properly.
  84. ===========================================================
  85.  
  86.     The compiler did not delete its temporary work file
  87.     if the code generator issued a fatal error message.
  88. ===========================================================
  89.  
  90.           *********************
  91.           ** Code Generator  **
  92.           *********************
  93.  
  94.     The compiler would generate an internal compiler error #81
  95.     when compiling a call to pow() if inline 80x87 functions were enabled
  96.     and the /fpr switche was used.
  97. ===========================================================
  98.  
  99.     If the address of a struct/array was taken, the loop optimizer
  100.     could lost this information, and incorrectly treat a field/element
  101.     as a loop invariant variable
  102.  
  103. ===========================================================
  104.  
  105.     The 32-bit code generator did not generate the correct
  106.     frame information for fixups of __far16 items under
  107.     OS/2 2.x.
  108. ===========================================================
  109.  
  110.     When the expression being switched on was volatile, the code
  111.     generated would sometimes load the value to test against for
  112.     the default case then load it again to index into the jump table.
  113.     This was bad if the value changed in between references.
  114. ===========================================================
  115.  
  116.     The inline assembler for the 386 compilers would incorrectly
  117.     prepend an operand size prefix (0x66) to software interrupt
  118.     instructions (e.g. int 0x21).
  119. ===========================================================
  120.  
  121.     Internal compiler error #40 fixed. Occured when transforming
  122.     "movzx eax,xxx" into "mov al,xxx; and eax,0ffh"
  123. ===========================================================
  124.  
  125.     Codegen would GP-fault sometimes when doing some very
  126.     obvious branch folding.
  127. ===========================================================
  128.  
  129.     #pragma aux foo="<code>" parm caller []; would not
  130.     have parm popping code generated when inlined.
  131. ===========================================================
  132.  
  133.     Incorrect code was being generated for loops involving an
  134.     indexed access to a static array. During strength-reduction,
  135.     the optimizer would try to reduce a multiply by a relocatable
  136.     constant into a series of shifts and adds.
  137. ===========================================================
  138.  
  139.     Arithmetic expressions involving a relocatable constant and an
  140.     absolute constant would not get folded properly.
  141. ===========================================================
  142.  
  143.     When doing common subexpression elimination, the code generator
  144.     would sometimes get confused and propagate a constant into an
  145.     index in the wrong manner. This could lead to code such as
  146.     array[k++] = 10;
  147.     array[k++] = 19;
  148.     being compiled into something which resembled
  149.     mov    +00[ebp], 10
  150.     mov    +10[ebp], 19    ; 10 comes from last instruction
  151. ===========================================================
  152.  
  153.     After having split a large move into a pair of smaller moves,
  154.     one of the resulting moves would not be generated because of
  155.     an incorrect calculation of the temp's location.
  156. ===========================================================
  157.  
  158.     Fixed handling of volatile structure members in loops.
  159.     Codegen would erroneously hoist compares involving the
  160.     volatile members.
  161. ===========================================================
  162.  
  163.     Codegen would try to save value of constant global|static symbols
  164.     across function calls if it had cached the value in a register.
  165. ===========================================================
  166.  
  167.     Don't emit __loadds stuff if DS is not pegged. If DS is not
  168.     pegged, then the value of DS just doesn't matter.
  169. ===========================================================
  170.  
  171.     Fix a bug which caused the segment override to be left off of
  172.     instructions which were generated by splitting up another instruction.
  173. ===========================================================
  174.  
  175.     When performing constant folding on <expr> * 0 or other similar
  176.     constructs, <expr> would be tossed even if it had side effects.
  177. ===========================================================
  178.  
  179.     The code generator did not produce the correct symbolic (-d2)
  180.     information for the symbol 'b' in the following C++ code:
  181.  
  182.     int a;
  183.     static int & b = a;
  184.     
  185. ===========================================================
  186.  
  187.     Calling a far16 function which takes a parameter by reference
  188.     in FORTRAN could cause incorrect code to be generated. The
  189.     optimizer did not realize that the call could modify
  190.     the reference parameter.
  191. ===========================================================
  192.  
  193.     Inlining code which contained stack checks would cause a
  194.     GP fault.
  195. ===========================================================
  196.  
  197.     Under certain rare circumstances that are too complex
  198.     to explain, the code generator would sometimes duplicate
  199.     a push register instruction.
  200. ===========================================================
  201.  
  202.           ****************
  203.           ** C Library  **
  204.           ****************
  205.  
  206.     Default windowing system didn't work properly when single
  207.     characters were output.
  208. ===========================================================
  209.  
  210.     SetWindowsHookEx was not set up properly for Windows extender.
  211. ===========================================================
  212.  
  213.     improved speed of itoa and ltoa
  214. ===========================================================
  215.  
  216.     Updated the 16-bit windows library so that users of the
  217.     default windowing system do not have to explictly mention
  218.     COMMDLG.LIB when linking.
  219. ===========================================================
  220.  
  221.     %s in a printf format string will print nothing if a NULL
  222.     pointer is fed in as the argument.
  223. ===========================================================
  224.  
  225.     _beginthread for NetWare had a race condition which would
  226.     modify stack space belonging to another process.
  227. ===========================================================
  228.  
  229.     The fwrite function would always set errno to ENOSPC
  230.     if an error occured and more data than would fit into
  231.     the FILE * buffer was being written out.
  232. ===========================================================
  233.  
  234.     The localtime function did not work for time == 0 when
  235.     time zone is west of UTC.  It should have reported a date
  236.     in 1969 (e.g., Dec. 31, 1969 19:00) but instead reported
  237.     a date far in the future.  Also fixed a similar problem
  238.     with mktime.
  239. ===========================================================
  240.  
  241.     NetWare version changed so that all memory allocations
  242.     done by the library are attributed to a thread group
  243.     belonging to the NLM containing the library, not
  244.     the thread making the request.
  245. ===========================================================
  246.  
  247.     Floating-point output conversions introduced some
  248.     rounding errors when converting integral values to strings.
  249. ===========================================================
  250.  
  251.     wstart3r.asm and wstart3s.asm now contain the
  252.     __DLLstart_ symbol to allow use of the -bd switch when
  253.     building 32-bit Windows Dynamic Link Libraries.
  254. ===========================================================
  255.  
  256.     fixed lseek() and tell() for DOS 16/32 bit systems so
  257.     that negative offsets and offsets >2GB work properly
  258. ===========================================================
  259.  
  260.     fixed startup code so that it could handle an empty
  261.     environment properly
  262. ===========================================================
  263.  
  264.     The text for the title bar of a default windowing application
  265.     was moved to a separate module and placed in a global array
  266.     called __WinTitleBar so that the user can define his own copy
  267.     of this array with an appropriate title for his application.
  268.     e.g.
  269.       char __WinTitleBar[] = "My Windows Application";
  270. ===========================================================
  271.  
  272.     The _heapenable function has been added to the library.
  273.     The prototype is in malloc.h and is:
  274.  
  275.         extern int _heapenable( int __enabled );
  276.  
  277.     If a zero is passed as a parameter then all further
  278.     allocations which would normally go to the operating system for
  279.     more memory will instead fail and return NULL. Passing a one
  280.     will re-enable the system allocation requests. The return
  281.     value is the previous state of the system allocation flag. 
  282. ===========================================================
  283.  
  284.     Fixed the fread function to interact better with interactive
  285.     devices.
  286. ===========================================================
  287.  
  288.     fdopen() for NetWare always returned with "access denied"
  289. ===========================================================
  290.  
  291.     Fixed local time functions for Windows NT to use local
  292.     time rather than GMT time
  293. ===========================================================
  294.  
  295.     Added far pointer support to the 32 bit printf() and
  296.     scanf() functions in the OS/2 2.x and QNX 4.2 libraries.
  297. ===========================================================
  298.  
  299.     NOVH\stdio.h fileno() macro removed.
  300. ===========================================================
  301.  
  302.           ******************
  303.           ** C++ Compiler **
  304.           ******************
  305.  
  306.     Overloading of functions taking member pointers to
  307.     functions did not work properly.  Pointers to members
  308.     of unrelated classes were considered convertable.
  309. ===========================================================
  310.  
  311.     Include directives did not handle null extensions on
  312.     file names properly.
  313.  
  314.     i.e. #include "abc"
  315.          Would attempt to open "abc.h" and "abc.hpp" but
  316.      not "abc".
  317. ===========================================================
  318.  
  319.     Compiler was translating double-byte characters found in normal
  320.     character constants and literal strings to UNICODE with -zk0u
  321.     option. Compiler should only do this translation for wide
  322.     character constants (L'abc') and wide character strings (L"abc").
  323. ===========================================================
  324.  
  325.     fixed problem with -d2 debugging info generation
  326.  
  327. ===========================================================
  328.  
  329.     fixed problem with name mangling of names that make use
  330.     of an undefined template class
  331.  
  332. ===========================================================
  333.  
  334.     improved diagnostics for ctor initializers, member pointers,
  335.     and syntax error recovery
  336.  
  337. ===========================================================
  338.  
  339.     added -zp16 and -zdl options
  340.  
  341. ===========================================================
  342.  
  343.     fixed a problem with template function analysis
  344.  
  345. ===========================================================
  346.  
  347.     fixed scalar analysis for ':' portion of ternary operator
  348.     with enumerated types
  349.  
  350. ===========================================================
  351.  
  352.     static objects are linkage "C++"
  353.  
  354. ===========================================================
  355.  
  356.     fixed template function binding problem with trivial conversions
  357.  
  358. ===========================================================
  359.  
  360.     #line directive caused a problem when #include depth exceeded
  361.     the available number of file handles
  362.  
  363. ===========================================================
  364.  
  365.     inline reference parm optimization failed in some rare cases
  366.  
  367. ===========================================================
  368.  
  369.     fixed alignment of segments to take into account the
  370.     maximum alignment of any data item defined in the
  371.     segment
  372.  
  373. ===========================================================
  374.  
  375.     fixed import of near variables in large data models
  376.  
  377. ===========================================================
  378.  
  379.     fixed return code to be non-zero when -we is specified
  380.     and a source file contains only warnings
  381.  
  382.     return code is now 0-7 with the following bits:
  383.  
  384.     0x01 - warnings occurred with -ze specified
  385.     0x02 - errors occurred
  386.     0x04 - fatal error occurred
  387.  
  388. ===========================================================
  389.  
  390.     new expressions like "new int(expr)" and
  391.     "new (placement) double(expr)" (i.e., scalars) did not
  392.     initialize the raw storage properly and/or have a value
  393.     equal to the pointer value in some cases
  394.  
  395. ===========================================================
  396.  
  397.     Some floating-point values that are integral did not generate
  398.     the correct floating-point representation because of some
  399.     rounding errors.
  400. ===========================================================
  401.  
  402.     Changed the behaviour of the -bd switch to emit correct
  403.     library references when building Dynamic Link Libraries
  404.     for Windows.
  405. ===========================================================
  406.  
  407.     Fixed problem with internal compiler error #24 caused by
  408.     "construct once" checks for static function variables
  409. ===========================================================
  410.  
  411.     Added extension to C++ language parsed by WATCOM C++ to
  412.     accept more than one pointer declarator in a user-defined
  413.     conversion function id.  i.e.,  operator int **();
  414. ===========================================================
  415.  
  416.     Fixed problem with virtual table entries not being correct
  417.     in certain hierarchies with virtual bases. e.g.,
  418.  
  419.         X vf1,vf2
  420.           // \\
  421.       vf1 A   B vf2
  422.            \ /
  423.             D
  424. ===========================================================
  425.  
  426.     Fixed a problem with the sizeof operator when applied to
  427.     multiple string literals.  The compiler incorrectly
  428.     returned the size of the first string literal instead
  429.     of the size of the result.  e.g., sizeof( "1234" "5678" )
  430. ===========================================================
  431.  
  432.     Fixed a problem with generated copy constructors for
  433.     classes with bitfields.
  434. ===========================================================
  435.  
  436.     Fixed instantiation of member functions in nested classes
  437.     of class templates.
  438. ===========================================================
  439.  
  440.     The -j switch was affecting the name mangling algorithm
  441.     for the type 'char'.  Programs compiled with -j could
  442.     not link with the standard libraries as a result.
  443. ===========================================================
  444.  
  445.     Fixed <int_expr> *= <float_expr> and
  446.     <int_expr> /= <float_expr> to properly perform the
  447.     arithmetic in type 'double' or 'float'.
  448. ===========================================================
  449.  
  450.     Fixed destructor tables for static variables in functions.
  451. ===========================================================
  452.  
  453.     Fixed incorrect warning about an unreferenced static
  454.     function when it had default arguments and all calls
  455.     in the module made use of default arguments.
  456.     i.e.,
  457.         static void foo( int = 0 );
  458.  
  459.         void fn()
  460.         {
  461.         foo();
  462.         }
  463. ===========================================================
  464.  
  465.     Fixed generated code for a "..." function that returns
  466.     a class.
  467. ===========================================================
  468.  
  469.     Fixed segment allocation under big data memory models
  470.     to assume external data with size less than the data
  471.     threshold is contained in DGROUP.
  472.  
  473. ===========================================================
  474.  
  475.     fixed problem with complex declarations involving more
  476.     than one function declarator declaring arguments of
  477.     the wrong declarator when a ( void ) declarator was
  478.     the first declarator e.g.,
  479.  
  480.     int (*fn())( int a, int b );
  481.  
  482.     incorrectly declared 'a' and 'b' as function arguments
  483. ===========================================================
  484.  
  485.     Removed mapping of 5c (\) to unicode a5 (Yen symbol) since it
  486.     made specification of paths impossible (e.g. \\boot\penpoint).
  487. ===========================================================
  488.  
  489.     fixed type of sizeof() operator for large sizes to be
  490.     unsigned long
  491. ===========================================================
  492.  
  493.     fixed allocation of segments for huge static items to
  494.     be paragraph aligned
  495. ===========================================================
  496.  
  497.     adjusted some warning levels from 1 to 3 that were
  498.     annoying people with older code
  499. ===========================================================
  500.  
  501.     Preprocessing directives were not scanned properly if the
  502.     previous line consisted of white space followed by line
  503.     continuation character '\'.
  504. ===========================================================
  505.  
  506.     fixed switch statements with consecutive case values
  507.     that had ranges of values that changed sign.
  508. ===========================================================
  509.  
  510.     fixed formatting of names in error messages for the
  511.     case of functions with default arguments combined
  512.     with ...
  513. ===========================================================
  514.  
  515.     fixed formatting of names in error messages for the
  516.     case of functions with default arguments with a
  517.     return type that has function declarators (i.e.,
  518.     a function that returns a pointer to a function)
  519. ===========================================================
  520.  
  521.     fixed a problem when the compiler runs out of memory
  522.     during initialization
  523. ===========================================================
  524.  
  525.     fixed a problem with diagnosing mismatched arguments
  526.     with a single function with default arguments
  527. ===========================================================
  528.  
  529.     fixed a problem where the base type of a bit-field was
  530.     an enum or an unadorned char and the bitfield was used
  531.     as an argument to a function; the type of the bitfield
  532.     expression was not correct
  533. ===========================================================
  534.  
  535.     string literals are now lvalues
  536. ===========================================================
  537.  
  538.     local variables in destructors could be destructed
  539.     after base classes (same problem occured with
  540.     constructors if an exception occured during the
  541.     constructor and the constructor had local variables
  542.     with destructors)
  543. ===========================================================
  544.  
  545.     some based pointer problems were corrected
  546. ===========================================================
  547.  
  548.     compiler-generated operator =() functions did not
  549.     function properly if the entire hierarchy had no
  550.     data and there were base class op= functions defined
  551. ===========================================================
  552.  
  553.     accept multiple ';'s in a class definition
  554.     e.g.,
  555.     struct S { int a;;;; };
  556. ===========================================================
  557.  
  558.     make C++ compiler less pedantic about the check for the
  559.     'size_t' argument's type in operator new and delete
  560. ===========================================================
  561.  
  562.     fixed a problem with brace initialization of nested
  563.     structures with bitfields
  564. ===========================================================
  565.  
  566.     added diagnostic for function modifiers being applied
  567.     to variables
  568. ===========================================================
  569.  
  570.     fixed diagnosis of some abstract class hierarchies
  571.     (improved general diagnostics for abstract classes)
  572. ===========================================================
  573.  
  574.     fixed allocation of virtual function tables to be in
  575.     the code segment for -ml-zc or -mf-zc
  576. ===========================================================
  577.  
  578.     Some based pointer bug fixes (__self based pointers).
  579. ===========================================================
  580.  
  581.     Fixed passing of parameters to __pascal member functions
  582.     (fix applies to any reverse argument calling convention).
  583. ===========================================================
  584.  
  585.     The following function is correctly used as a copy
  586.     constructor.
  587.  
  588.     struct S {
  589.     S( S const &, ... );
  590.     };
  591. ===========================================================
  592.  
  593.     Source file is expanded to its full path for inclusion
  594.     into the object file.  This helps debugging and minimizes
  595.     the problems with WVIDEO not finding source files.
  596. ===========================================================
  597.  
  598.     8087-specific inline version of fabs() had a slight
  599.     problem in -fpi87 compiles.
  600. ===========================================================
  601.  
  602.     throwing or catching an exception in an extern "C"
  603.     function would not work if it was the first time
  604.     in the source file the exception was described
  605.     (exception data has linkage "C" when it should have
  606.      had linkage "C++")
  607.     e.g.,
  608.         struct Exception1 {};
  609.     extern "C" void x1( int ) {
  610.         throw Exception1();
  611.     }
  612.     void x2() {
  613.         try {
  614.         foo(1);
  615.         } catch( Exception1 & ) {    // would not work
  616.         }
  617.     }
  618.         struct Exception2 {};
  619.     void x3() {
  620.         throw Exception2();
  621.     }
  622.     extern "C" void x4() {
  623.         try {
  624.         x3();
  625.         } catch( Exception2 & ) {    // works fine
  626.         }
  627.     }
  628. ===========================================================
  629.  
  630.           *****************
  631.           ** C++ Library **
  632.           *****************
  633.  
  634.     The filebuf class did not flush pending output on an
  635.     attached file when destructing.
  636. ===========================================================
  637.  
  638.     The istream::getline() member function did not consume
  639.     and discard the delimiter character.
  640. ===========================================================
  641.  
  642.     Floating point formatting support was unnecessarily
  643.     included in executables by the C++ Library that did
  644.     not perform any floatig point formatting.
  645. ===========================================================
  646.  
  647.     The output buffer within the filebuf and stdiobuf
  648.     classes was not being properly initialized when the
  649.     object was used first for input, then for output.
  650. ===========================================================
  651.  
  652.     The member functions:
  653.  
  654.     ostream::operator << (streambuf *)
  655.     istream::operator >> (streambuf *)
  656.  
  657.     had incorrect prototypes.
  658. ===========================================================
  659.  
  660.     The istream::getline() function was erroneously setting
  661.     the ios::failbit in the error state when a null line
  662.     was read.
  663. ===========================================================
  664.  
  665.     Fixed run-time support for exception handling (EH) for
  666.     -3s 386 programs (compiler assumed a run-time function
  667.     would never return)
  668. ===========================================================
  669.  
  670.     Fixed fstream open and attach functions to clear any
  671.     stale ios::eofbit in the error state upon successful
  672.     completion.
  673. ===========================================================
  674.  
  675.     The container class list iterator insert function would
  676.     page fault if used on an empty list.
  677. ===========================================================
  678.  
  679.     The container class list iterator insert and append
  680.     functions would not add items to an empty list.
  681. ===========================================================
  682.  
  683.     The container class list iterator operator-- would not
  684.     back up an element if the current item was set to the
  685.     last item of the list.
  686. ===========================================================
  687.  
  688.           **************
  689.           ** DOS4/GW  **
  690.           **************
  691.  
  692.      When DOS/4GW traps an exception, such as a
  693.      general protection exception or a page fault, the register
  694.      dump includes one additional piece of information.  The
  695.      "Crash address (unrelocated)" field shows the address
  696.      where the exception occurred as it would appear in a link
  697.      map. This makes some understanding of a crash possible without
  698.      loading the application in a debugger.
  699.  
  700.      Diagnostic messages for some conditions where a load
  701.      might fail have been improved.
  702.  
  703.      INT 31h/400h (Get Version) is now supported.
  704.  
  705.      INT 31h/500h (Get Free Memory Information) now returns valid
  706.      information in most fields.
  707.  
  708.      Memory blocks allocated through INT 31h/501h (Allocate Memory
  709.      Block) are now correctly freed when an application shuts down.
  710.  
  711.      Several bugs in INT 31h/503h (Resize Memory Block) have been
  712.      fixed.  This function should now work whether or not VMM is
  713.      present.
  714.  
  715.      INT 31h/604h (Get Page Size) is now supported under VMM.
  716.      Without VMM, it returns with carry set.
  717.  
  718.      File I/O through INT 21h/3Fh and INT 21h/40h will once again
  719.      be passed straight through to DOS if the I/O buffer is in
  720.      low memory and less than 64K.
  721.  
  722.      Debugging under Microsoft Windows is now more robust even
  723.      without the Microsoft VxD VPFD.386.
  724.  
  725.      A stack fault under some DPMI hosts has been fixed.
  726.  
  727.      Some types of stack fault (exception 0Ch) are now properly
  728.      diagnosed.
  729.  
  730.      Hardware interrupt 0Dh (IRQ5) will once again be properly
  731.      routed to a user-installed handler.
  732.  
  733.      Chaining of exceptions is now supported.
  734.  
  735.      An intermittent crash on a hardware interrupt that was
  736.      incorrectly identified (typically interrupt 0Fh) has been
  737.      fixed.
  738.  
  739.      DOS/4GW will trap exception 4 (Overflow), if
  740.      there is no user handler, and print "Unexpected interrupt 04".
  741.  
  742.      Floating point emulation is now more robust under DPMI on
  743.      machines with no coprocessors.
  744.  
  745.      Some obscure problems in Ctrl-Break handling (involving what
  746.      happens if you get a Ctrl-Break after you uninstall your
  747.      handler) have been fixed.  We use a slightly bigger stack
  748.      for handling Ctrl-Break under DPMI because some hosts seem to
  749.      require it.  Also, we now restore the default Ctrl-C and 
  750.      Ctrl-Break handlers before spawning another application.
  751.  
  752.      An intermittent crash during VMM initialization, caused by
  753.      getting a hardware interrupt when a segment register value
  754.      was temporarily invalid, is fixed.
  755.  
  756.      Spawning another application, under some memory managers, on a
  757.      machine with more than 16MB of physical memory no longer gives
  758.      "DOS/16M error 40: not enough available extended memory (XMIN)".
  759.  
  760.      Spawning another application when VMM is in use, under some
  761.      memory managers, no longer gives "VMM initialization error [1]".
  762.  
  763.      Some minor compatibility problems with 386Max and QDPMI have
  764.      been corrected.
  765. ===========================================================
  766.  
  767.           *************************
  768.           ** Example Source Code **
  769.           *************************
  770.  
  771.     Removed unnecessary reference to iomanip.h from
  772.     hello.cpp
  773. ===========================================================
  774.  
  775.           **************************
  776.           ** FORTRAN 77 Compiler  **
  777.           **************************
  778.  
  779.     The compiler would incorrectly issue an unreferenced warning
  780.     message for the PARAMETER constant I when used as a repeat
  781.     specifier in a DATA statement. E.g.
  782.  
  783.         PARAMETER (I=1)
  784.     DATA N/I*7/
  785. ===========================================================
  786.  
  787.     The compiler generated unpredictable results when assigning
  788.     to a complex field of a structured array element. E.g.
  789.  
  790.     STRUCTURE /CMPLX/
  791.         COMPLEX Z
  792.     END STRUCTURE
  793.     RECORD /CMPLX/ A(2)
  794.     A(1).Z = A(2).Z
  795. ===========================================================
  796.  
  797.     In rare circumstances, the compiler would generate object
  798.     files that could result in large executable files.  The
  799.     large executable files were caused by data segments
  800.     generated by the compiler whose size was unpredictable.
  801. ===========================================================
  802.  
  803.     Examining local character variables from the debugger did
  804.     not work.  The compiler was not generating the correct
  805.     debugging information.
  806. ===========================================================
  807.  
  808.     The following program did not issue an error message
  809.     indicating that the symbol C was not explicitly typed.
  810.  
  811.     IMPLICIT NONE
  812.         COMMON A, B, C
  813.     INTEGER A, B
  814.     END
  815. ===========================================================
  816.  
  817.     The compiler generated incorrect debugging information
  818.     for array arguments when the /d2 switch was specified.
  819.     This caused garbage to be displayed when an attempt was
  820.     made to view the contents of an array argument from
  821.     VIDEO.
  822. ===========================================================
  823.  
  824.           ******************************
  825.           ** FORTRAN 77 Include Files **
  826.           ******************************
  827.  
  828.     The pragma for MakeProcInstance() defined in the file
  829.     "win3api.fi" was incorrect.  This only affected 32-bit
  830.     Windows applications.  The file "win3api.fi" is located
  831.     in the "src\fortran\win" directory.
  832.  
  833. ===========================================================
  834.  
  835.           *************************
  836.           ** FORTRAN 77 Library  **
  837.           *************************
  838.  
  839.     Fixed a problem with overlapping assignment of character
  840.     data. E.g.
  841.  
  842.     CHARACTER*10 A
  843.     A = A(4:)
  844. ===========================================================
  845.  
  846.     Fixed the following problem under OS/2 2.x.  Writing to
  847.     a sequential file did not cause the written record to be
  848.     the last record in the file.
  849. ===========================================================
  850.  
  851.     Tab characters are now allowed in list-directed input.
  852. ===========================================================
  853.  
  854.     FORTRAN thread initialization is automatically performed
  855.     for a mixed C/C++ and FORTRAN mutlithreaded application.
  856. ===========================================================
  857.  
  858.     If a disk full condition was reached while writing to
  859.     a file, the write operation would fail correctly but
  860.     an attempt to close the file would fail.  This problem
  861.     has been fixed.  Note that the I/O system does buffer
  862.     output so that if the last write succeeds, the close
  863.     could still fail when flushing the internal buffer to
  864.     the disk file.  In this case, a second close must be
  865.     issued.
  866. ===========================================================
  867.  
  868.           ***********************
  869.           ** Graphics Library  **
  870.           ***********************
  871.  
  872.     Added support for Cirrus Logic GD-542x SuperVGA adapters.
  873. ===========================================================
  874.  
  875.     Removed use of BIOS from _outtext in graphics mode and
  876.     _scrollwindow in text mode.
  877. ===========================================================
  878.  
  879.     Fixed a problem where _floodfill would fail is the stack
  880.     size was greater than 256K.
  881. ===========================================================
  882.  
  883.     Fixed a problem where _remappalette did not work correctly
  884.     after calling _settextrows.
  885. ===========================================================
  886.  
  887.           *********************
  888.           ** C Header Files  **
  889.           *********************
  890.  
  891.     Improved getc/putc macros in STDIO.H for better performance
  892.     in text files.
  893. ===========================================================
  894.  
  895.     Improved <assert.h> so that a pointer expression can
  896.     be checked when compiling with extensions enabled
  897.     e.g., void non_null( char *p ) { assert(p); }
  898. ===========================================================
  899.  
  900.     The errno macro in <errno.h> and <stdlib.h> is not defined
  901.     if the macro already exists.
  902. ===========================================================
  903.  
  904.     The inline alloca sequence was modified to get better code
  905.     generation.
  906. ===========================================================
  907.  
  908.     The 'extern' keyword was added to function prototypes
  909.     in many of the headers to allow special purpose
  910.     redefinitions of the function names.
  911. ===========================================================
  912.  
  913.     added <mem.h> for Borland C/C++ compatibility
  914. ===========================================================
  915.  
  916.     <iomanip.h> incorrectly defined the manipulator and
  917.     applicator class types.
  918.     The class name macros were not properly defined.
  919.     Some of the manipulator inserter and extractor function
  920.     prototypes were incorrect.
  921. ===========================================================
  922.  
  923.     The "min" and "max" macros in stdlib.h are no longer
  924.     defined if they already exist.
  925. ===========================================================
  926.  
  927.     The IOMANIPdeclare() macro has been added.
  928. ===========================================================
  929.  
  930.     Adjusted DBL_MAX constant in <float.h>.
  931. ===========================================================
  932.  
  933.     i86.h modified so that it will not generate errors if
  934.     compiled with -za.
  935. ===========================================================
  936.  
  937.     Use 'safer' getc and putc macros in stdio.h when
  938.     creating a multi-threaded application.
  939. ===========================================================
  940.  
  941.           ****************
  942.           ** Librarian  **
  943.           ****************
  944.  
  945.     NT hosted librarian wasn't updated properly, and so it missed an
  946.     import library generation bug fix.
  947. ===========================================================
  948.  
  949.     The librarian would sometimes return a non-zero exit
  950.     status to the system even when only warnings had been
  951.     issued.
  952. ===========================================================
  953.  
  954.     The librarian did not properly handle object modules
  955.     that had mixed 16 and 32-bit PUBDEF records.
  956. ===========================================================
  957.  
  958.           *************
  959.           ** Linker  **
  960.           *************
  961.  
  962.     "option eliminate" wasn't in the usage information.
  963. ===========================================================
  964.  
  965.     couldn't specify the class option of the segment directive for NT
  966. ===========================================================
  967.  
  968.     tweaked the 16-bit aliasing code in OS/2 V2 formats to make the
  969.     V1.9 rational extender work better with wvideo.
  970. ===========================================================
  971.  
  972.     linker wasn't exporting symbols properly under novell.
  973. ===========================================================
  974.  
  975.     linker wasn't recognizing OS/2 lx dll's properly with the oldlibrary
  976.     option.
  977. ===========================================================
  978.  
  979.     changed a few of the linker messages for QNX.
  980. ===========================================================
  981.  
  982.     16-bit offset additive fixups under os2 lx and le formats were
  983.     stomping on the 2 bytes following the fixup.
  984. ===========================================================
  985.  
  986.     don't emit internal fixups for os/2 lx executables unless the user
  987.     specifies "option internalrelocs"
  988. ===========================================================
  989.  
  990.     don't fill out the pages at the end of objects for os/2 lx executables.
  991. ===========================================================
  992.  
  993.     don't cache object files in a windows dos box, as that can cause
  994.     unnecessary paging.
  995. ===========================================================
  996.  
  997.     the linker was not working properly when there was a pubdef redefining
  998.     a comdat.
  999. ===========================================================
  1000.  
  1001.     don't emit zero size physical segments under NT, as the loader is not
  1002.     handling them properly.
  1003. ===========================================================
  1004.  
  1005.     modified handling of object file structures to improve speed for some
  1006.     large C++ .obj files.  fixed a map file typo as well.
  1007. ===========================================================
  1008.  
  1009.           ***********
  1010.           ** Make  **
  1011.           ***********
  1012.  
  1013.     macros are not defined to null anymore when they are
  1014.     used in a !ifeq directive
  1015. ===========================================================
  1016.  
  1017.     fixed adding of more dependencies to a single colon
  1018.     target for the case where the single colon target
  1019.     does not have any dependencies
  1020.     e.g.,
  1021.         test :
  1022.         cmd
  1023.         test : dep1 dep2
  1024.  
  1025. ===========================================================
  1026.  
  1027.     fixed intercepting of cd commands for Windows NT version
  1028.     of WMAKE
  1029. ===========================================================
  1030.  
  1031.     made !undef of an undef'd macro warning only come out if
  1032.     -d option (debugging) is on
  1033. ===========================================================
  1034.  
  1035.           ***********************
  1036.           ** Windows SDK Tools **
  1037.           ***********************
  1038.  
  1039.     Fixed Resource compiler bugs where
  1040.     1. If two NT resources of the same type had names where one was
  1041.        a prefix of the other an incorrect resource file was generated.
  1042.     2. An incorrect error message was generated when the preprocessor
  1043.        could not find an include file.
  1044. ===========================================================
  1045.  
  1046.     Fixed Resource compiler bugs where
  1047.     1. VersionInfo resources were not written correctly for Windows NT.
  1048.     2. C statements in #include'ed .c and .h files were not ignored
  1049.        when the included file was specified with a capitalized extension
  1050.        ( ex STDIO.H instead of stdio.h)
  1051. ===========================================================
  1052.  
  1053.     Fixed a Heapwalker bug where the heapwalker failed to identify the
  1054.     owner of some global heap items.
  1055. ===========================================================
  1056.  
  1057.     Fixed a resource compiler bug where entering negative values in
  1058.     an RCDATA resource caused an error to be reported.
  1059. ===========================================================
  1060.  
  1061.     Fixed a resource compiler bug where an error message was reported
  1062.     when adding resources to PE executables with a .bss object
  1063.     larger than the size of the exe file.
  1064. ===========================================================
  1065.  
  1066.           *************************
  1067.           ** Windows Supervisor  **
  1068.           *************************
  1069.  
  1070.     Added 128 exported symbols to W386DLL.EXT. These symbols are
  1071.     called DLL1, DLL2, etc, up to DLL128. You can now call one of
  1072.     these exported names rather than calling Win386LibEntry.
  1073.     e.g.   DLL7( parm1, parm2, parm3 );  is equivalent to
  1074.            Win386LibEntry( parm1, parm2, parm3, 7 );
  1075.     You must still call DefineDLLEntry in your initialization code
  1076.     to define what parameters are to be expected by the call.
  1077.  
  1078.     WEP is now entry number 129 and Win386LibEntry is entry number 130.
  1079. ===========================================================
  1080.  
  1081.     Removed unnecessary exports of CB1 to CB512.
  1082. ===========================================================
  1083.  
  1084.     Aliases for huge pointers failed when application memory
  1085.     was greater than 1MB.
  1086.  
  1087.     C++ global destructors were being called when DLL initialization
  1088.     was completed, as opposed to when the DLL was exiting.
  1089. ===========================================================
  1090.  
  1091.     The DLL supervisor no longer displays a MessageBox when an error
  1092.     occurs initializing the DLL (eg. not enough memory). It just
  1093.     returns failure and it is up to the caller of LoadLibrary to
  1094.     handle the error.
  1095. ===========================================================
  1096.  
  1097.     The Windows supervisor has been modified so that it has a better
  1098.     chance of successfully initializing in low memory conditions.
  1099. ===========================================================
  1100.  
  1101.           *************
  1102.           ** WVIDEO  **
  1103.           *************
  1104.  
  1105.     The NetWare NLM Debug servers would crash NetWare if you
  1106.     tried to debug a multi-threaded application.
  1107. ===========================================================
  1108.  
  1109.     Debugging with /TRAP=RSI in a Windows DOS box did not
  1110.     always work.
  1111. ===========================================================
  1112.  
  1113.     The OS/2 SERSERV only allowed COM1 and COM2. It now
  1114.     allows up to COM9.
  1115. ===========================================================
  1116.  
  1117.     Under certain conditions of extreme low memory (typically
  1118.     only under DOS), WVIDEO could mess up its memory management.
  1119.     This could cause internal errors, hangs, and other stuff
  1120.     that people tend not to like.
  1121. ===========================================================
  1122.  
  1123.     When using the /vga50 option with the Windows hosted
  1124.     debugger, WVIDEO would act as if there were 50 lines
  1125.     on the screen, but would not set the character font
  1126.     properly. This would cause only the first 25 lines of
  1127.     the debuggers windows to appear.
  1128. ===========================================================
  1129.  
  1130.     When using the "Select file..." dialog from the
  1131.     startup options box of the Windows hosted debugger, WVIDEO
  1132.     would fail to insert a space between the end of the
  1133.     options specified and the start of the file name that
  1134.     was selected.
  1135. ===========================================================
  1136.  
  1137.     The BINW\VDMSERVW.EXE file was accidently left off of
  1138.     the distribution diskettes.
  1139. ===========================================================
  1140.  
  1141.     Some problems with watchpoints under Netware 4.0 have
  1142.     been corrected.
  1143. ===========================================================
  1144.  
  1145.     The debugger no longer considers symbols of the same
  1146.     name from different EXE's/DLL's as ambiguous. It will
  1147.     choose the symbol from the EXE or DLL that was loaded
  1148.     first. If you want the symbol from the later DLL, you
  1149.     must use a module specifier on the symbol name.
  1150. ===========================================================
  1151.  
  1152.     Extended DOS programs which grab the keyboard hardware
  1153.     interrupt (int 9) and do not chain in their handlers
  1154.     (Metagraphics) can now be debugged under real DOS.
  1155.     They will still fail in OS/2 or Windows DOS boxes, but
  1156.     you can use the /TR=VDM or /TR=WIN remote debugging
  1157.     links to handle them there.
  1158. ===========================================================
  1159.  
  1160.     Added WVPMHELP.EXE.  This solves the problem where typing
  1161.     ALT-ESC while debugging a PM application hung the OS/2 input
  1162.     system. You do not have to start this program. The debugger
  1163.     will automatically start it when it detects that it is
  1164.     debugging a PM application. It creates a small PM window
  1165.     application with a "Switch" menu item which you can click
  1166.     on to switch back to the debugger screen.
  1167. ===========================================================
  1168.  
  1169.     Changed the RSI.TRP file to respect the DOS4GPATH environment
  1170.     variable when searching for the dos extender.
  1171. ===========================================================
  1172.  
  1173.     Disallowed debugging of a PM app from a windowed OS/2 session,
  1174.     since it would hang PM's message queue, killing OS/2.
  1175. ===========================================================
  1176.  
  1177.           ***********
  1178.           ** WOMP  **
  1179.           ***********
  1180.  
  1181.     when converting object files from easy-omf to microsoft, womp would
  1182.     sometimes delay emitting the flat group record a bit too long.
  1183. ===========================================================
  1184.  
  1185.           ***************
  1186.           ** Profiler  **
  1187.           ***************
  1188.  
  1189.     Fixed problem where important code loads were being ignored
  1190.     in Windows applications.
  1191. ===========================================================
  1192.  
  1193.     There was a race condition in WSAMPRSI that could cause
  1194.     it to report a task exception if the _MARK_ function
  1195.     had been enabled in the user program.
  1196. ===========================================================
  1197.