home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-09-23 | 45.8 KB | 1,197 lines |
- NOTE: Since the BPATCH.EXE program itself is being patched in this release,
- the patching process should not be done from an OS/2 command prompt. Issue
- the APPLYA command from a DOS box instead.
-
- *****************
- ** C Compiler **
- *****************
-
- Added the -ri switch. This switch causes functions that
- are declared as returning char's or short's to return
- int's instead. The return value in the calling function
- is still treated as the correct type. This switch is to
- help old, incorrect code which defines functions as
- returning 'char' or 'short' but does not declare the return
- type in other files (so that the compiler assumes that
- the function returns 'int'). This switch should only
- be used as a last resort. WATCOM strongly recommends
- that functions be properly declared in all source
- files.
- ===========================================================
-
- If there was a function in the middle of an expression
- that was marked as "#pragma aux <func> aborts", the compiler
- would generate an internal compiler error 3. E.g.:
-
- #include <stdlib.h>
- #include <stdio.h>
-
- foo( int a )
- {
- if( a ) printf( "bad\n" ), exit( 1 );
- }
- ===========================================================
-
- Compiler was translating double-byte characters found in normal
- character constants and literal strings to UNICODE with -zk0u
- option. Compiler should only do this translation for wide
- character constants (L'abc') and wide character strings (L"abc").
- ===========================================================
-
- Some floating-point values that are integral did not generate
- the correct floating-point representation because of some
- rounding errors.
- ===========================================================
-
- Changed the behaviour of the -bd switch to emit correct
- library references when building Dynamic Link Libraries
- for Windows.
- ===========================================================
-
- The -pc option was not properly suppressing comments
- in conditional compilation blocks that were being
- excluded.
- ===========================================================
-
- Removed mapping of 5c (\) to unicode a5 (Yen symbol) since it
- made specification of paths impossible (e.g. \\boot\penpoint).
- ===========================================================
-
- The program:
-
- char foo[60u*1024];
-
- main()
- {
- printf( "%d\n", sizeof sizeof foo );
- }
-
- would print 4 with the 16 bit compiler rather than 2 as
- it should have (the type of "sizeof foo" was "long" rather
- than "unsigned int").
- ===========================================================
-
- Preprocessing directives were not scanned properly if the
- previous line consisted of white space followed by line
- continuation character '\'.
- ===========================================================
-
- Several problems with based pointers have been resolved.
- ===========================================================
-
- The compiler did not always handle out of memory
- conditions properly.
- ===========================================================
-
- The compiler did not delete its temporary work file
- if the code generator issued a fatal error message.
- ===========================================================
-
- *********************
- ** Code Generator **
- *********************
-
- The compiler would generate an internal compiler error #81
- when compiling a call to pow() if inline 80x87 functions were enabled
- and the /fpr switche was used.
- ===========================================================
-
- If the address of a struct/array was taken, the loop optimizer
- could lost this information, and incorrectly treat a field/element
- as a loop invariant variable
-
- ===========================================================
-
- The 32-bit code generator did not generate the correct
- frame information for fixups of __far16 items under
- OS/2 2.x.
- ===========================================================
-
- When the expression being switched on was volatile, the code
- generated would sometimes load the value to test against for
- the default case then load it again to index into the jump table.
- This was bad if the value changed in between references.
- ===========================================================
-
- The inline assembler for the 386 compilers would incorrectly
- prepend an operand size prefix (0x66) to software interrupt
- instructions (e.g. int 0x21).
- ===========================================================
-
- Internal compiler error #40 fixed. Occured when transforming
- "movzx eax,xxx" into "mov al,xxx; and eax,0ffh"
- ===========================================================
-
- Codegen would GP-fault sometimes when doing some very
- obvious branch folding.
- ===========================================================
-
- #pragma aux foo="<code>" parm caller []; would not
- have parm popping code generated when inlined.
- ===========================================================
-
- Incorrect code was being generated for loops involving an
- indexed access to a static array. During strength-reduction,
- the optimizer would try to reduce a multiply by a relocatable
- constant into a series of shifts and adds.
- ===========================================================
-
- Arithmetic expressions involving a relocatable constant and an
- absolute constant would not get folded properly.
- ===========================================================
-
- When doing common subexpression elimination, the code generator
- would sometimes get confused and propagate a constant into an
- index in the wrong manner. This could lead to code such as
- array[k++] = 10;
- array[k++] = 19;
- being compiled into something which resembled
- mov +00[ebp], 10
- mov +10[ebp], 19 ; 10 comes from last instruction
- ===========================================================
-
- After having split a large move into a pair of smaller moves,
- one of the resulting moves would not be generated because of
- an incorrect calculation of the temp's location.
- ===========================================================
-
- Fixed handling of volatile structure members in loops.
- Codegen would erroneously hoist compares involving the
- volatile members.
- ===========================================================
-
- Codegen would try to save value of constant global|static symbols
- across function calls if it had cached the value in a register.
- ===========================================================
-
- Don't emit __loadds stuff if DS is not pegged. If DS is not
- pegged, then the value of DS just doesn't matter.
- ===========================================================
-
- Fix a bug which caused the segment override to be left off of
- instructions which were generated by splitting up another instruction.
- ===========================================================
-
- When performing constant folding on <expr> * 0 or other similar
- constructs, <expr> would be tossed even if it had side effects.
- ===========================================================
-
- The code generator did not produce the correct symbolic (-d2)
- information for the symbol 'b' in the following C++ code:
-
- int a;
- static int & b = a;
-
- ===========================================================
-
- Calling a far16 function which takes a parameter by reference
- in FORTRAN could cause incorrect code to be generated. The
- optimizer did not realize that the call could modify
- the reference parameter.
- ===========================================================
-
- Inlining code which contained stack checks would cause a
- GP fault.
- ===========================================================
-
- Under certain rare circumstances that are too complex
- to explain, the code generator would sometimes duplicate
- a push register instruction.
- ===========================================================
-
- ****************
- ** C Library **
- ****************
-
- Default windowing system didn't work properly when single
- characters were output.
- ===========================================================
-
- SetWindowsHookEx was not set up properly for Windows extender.
- ===========================================================
-
- improved speed of itoa and ltoa
- ===========================================================
-
- Updated the 16-bit windows library so that users of the
- default windowing system do not have to explictly mention
- COMMDLG.LIB when linking.
- ===========================================================
-
- %s in a printf format string will print nothing if a NULL
- pointer is fed in as the argument.
- ===========================================================
-
- _beginthread for NetWare had a race condition which would
- modify stack space belonging to another process.
- ===========================================================
-
- The fwrite function would always set errno to ENOSPC
- if an error occured and more data than would fit into
- the FILE * buffer was being written out.
- ===========================================================
-
- The localtime function did not work for time == 0 when
- time zone is west of UTC. It should have reported a date
- in 1969 (e.g., Dec. 31, 1969 19:00) but instead reported
- a date far in the future. Also fixed a similar problem
- with mktime.
- ===========================================================
-
- NetWare version changed so that all memory allocations
- done by the library are attributed to a thread group
- belonging to the NLM containing the library, not
- the thread making the request.
- ===========================================================
-
- Floating-point output conversions introduced some
- rounding errors when converting integral values to strings.
- ===========================================================
-
- wstart3r.asm and wstart3s.asm now contain the
- __DLLstart_ symbol to allow use of the -bd switch when
- building 32-bit Windows Dynamic Link Libraries.
- ===========================================================
-
- fixed lseek() and tell() for DOS 16/32 bit systems so
- that negative offsets and offsets >2GB work properly
- ===========================================================
-
- fixed startup code so that it could handle an empty
- environment properly
- ===========================================================
-
- The text for the title bar of a default windowing application
- was moved to a separate module and placed in a global array
- called __WinTitleBar so that the user can define his own copy
- of this array with an appropriate title for his application.
- e.g.
- char __WinTitleBar[] = "My Windows Application";
- ===========================================================
-
- The _heapenable function has been added to the library.
- The prototype is in malloc.h and is:
-
- extern int _heapenable( int __enabled );
-
- If a zero is passed as a parameter then all further
- allocations which would normally go to the operating system for
- more memory will instead fail and return NULL. Passing a one
- will re-enable the system allocation requests. The return
- value is the previous state of the system allocation flag.
- ===========================================================
-
- Fixed the fread function to interact better with interactive
- devices.
- ===========================================================
-
- fdopen() for NetWare always returned with "access denied"
- ===========================================================
-
- Fixed local time functions for Windows NT to use local
- time rather than GMT time
- ===========================================================
-
- Added far pointer support to the 32 bit printf() and
- scanf() functions in the OS/2 2.x and QNX 4.2 libraries.
- ===========================================================
-
- NOVH\stdio.h fileno() macro removed.
- ===========================================================
-
- ******************
- ** C++ Compiler **
- ******************
-
- Overloading of functions taking member pointers to
- functions did not work properly. Pointers to members
- of unrelated classes were considered convertable.
- ===========================================================
-
- Include directives did not handle null extensions on
- file names properly.
-
- i.e. #include "abc"
- Would attempt to open "abc.h" and "abc.hpp" but
- not "abc".
- ===========================================================
-
- Compiler was translating double-byte characters found in normal
- character constants and literal strings to UNICODE with -zk0u
- option. Compiler should only do this translation for wide
- character constants (L'abc') and wide character strings (L"abc").
- ===========================================================
-
- fixed problem with -d2 debugging info generation
-
- ===========================================================
-
- fixed problem with name mangling of names that make use
- of an undefined template class
-
- ===========================================================
-
- improved diagnostics for ctor initializers, member pointers,
- and syntax error recovery
-
- ===========================================================
-
- added -zp16 and -zdl options
-
- ===========================================================
-
- fixed a problem with template function analysis
-
- ===========================================================
-
- fixed scalar analysis for ':' portion of ternary operator
- with enumerated types
-
- ===========================================================
-
- static objects are linkage "C++"
-
- ===========================================================
-
- fixed template function binding problem with trivial conversions
-
- ===========================================================
-
- #line directive caused a problem when #include depth exceeded
- the available number of file handles
-
- ===========================================================
-
- inline reference parm optimization failed in some rare cases
-
- ===========================================================
-
- fixed alignment of segments to take into account the
- maximum alignment of any data item defined in the
- segment
-
- ===========================================================
-
- fixed import of near variables in large data models
-
- ===========================================================
-
- fixed return code to be non-zero when -we is specified
- and a source file contains only warnings
-
- return code is now 0-7 with the following bits:
-
- 0x01 - warnings occurred with -ze specified
- 0x02 - errors occurred
- 0x04 - fatal error occurred
-
- ===========================================================
-
- new expressions like "new int(expr)" and
- "new (placement) double(expr)" (i.e., scalars) did not
- initialize the raw storage properly and/or have a value
- equal to the pointer value in some cases
-
- ===========================================================
-
- Some floating-point values that are integral did not generate
- the correct floating-point representation because of some
- rounding errors.
- ===========================================================
-
- Changed the behaviour of the -bd switch to emit correct
- library references when building Dynamic Link Libraries
- for Windows.
- ===========================================================
-
- Fixed problem with internal compiler error #24 caused by
- "construct once" checks for static function variables
- ===========================================================
-
- Added extension to C++ language parsed by WATCOM C++ to
- accept more than one pointer declarator in a user-defined
- conversion function id. i.e., operator int **();
- ===========================================================
-
- Fixed problem with virtual table entries not being correct
- in certain hierarchies with virtual bases. e.g.,
-
- X vf1,vf2
- // \\
- vf1 A B vf2
- \ /
- D
- ===========================================================
-
- Fixed a problem with the sizeof operator when applied to
- multiple string literals. The compiler incorrectly
- returned the size of the first string literal instead
- of the size of the result. e.g., sizeof( "1234" "5678" )
- ===========================================================
-
- Fixed a problem with generated copy constructors for
- classes with bitfields.
- ===========================================================
-
- Fixed instantiation of member functions in nested classes
- of class templates.
- ===========================================================
-
- The -j switch was affecting the name mangling algorithm
- for the type 'char'. Programs compiled with -j could
- not link with the standard libraries as a result.
- ===========================================================
-
- Fixed <int_expr> *= <float_expr> and
- <int_expr> /= <float_expr> to properly perform the
- arithmetic in type 'double' or 'float'.
- ===========================================================
-
- Fixed destructor tables for static variables in functions.
- ===========================================================
-
- Fixed incorrect warning about an unreferenced static
- function when it had default arguments and all calls
- in the module made use of default arguments.
- i.e.,
- static void foo( int = 0 );
-
- void fn()
- {
- foo();
- }
- ===========================================================
-
- Fixed generated code for a "..." function that returns
- a class.
- ===========================================================
-
- Fixed segment allocation under big data memory models
- to assume external data with size less than the data
- threshold is contained in DGROUP.
-
- ===========================================================
-
- fixed problem with complex declarations involving more
- than one function declarator declaring arguments of
- the wrong declarator when a ( void ) declarator was
- the first declarator e.g.,
-
- int (*fn())( int a, int b );
-
- incorrectly declared 'a' and 'b' as function arguments
- ===========================================================
-
- Removed mapping of 5c (\) to unicode a5 (Yen symbol) since it
- made specification of paths impossible (e.g. \\boot\penpoint).
- ===========================================================
-
- fixed type of sizeof() operator for large sizes to be
- unsigned long
- ===========================================================
-
- fixed allocation of segments for huge static items to
- be paragraph aligned
- ===========================================================
-
- adjusted some warning levels from 1 to 3 that were
- annoying people with older code
- ===========================================================
-
- Preprocessing directives were not scanned properly if the
- previous line consisted of white space followed by line
- continuation character '\'.
- ===========================================================
-
- fixed switch statements with consecutive case values
- that had ranges of values that changed sign.
- ===========================================================
-
- fixed formatting of names in error messages for the
- case of functions with default arguments combined
- with ...
- ===========================================================
-
- fixed formatting of names in error messages for the
- case of functions with default arguments with a
- return type that has function declarators (i.e.,
- a function that returns a pointer to a function)
- ===========================================================
-
- fixed a problem when the compiler runs out of memory
- during initialization
- ===========================================================
-
- fixed a problem with diagnosing mismatched arguments
- with a single function with default arguments
- ===========================================================
-
- fixed a problem where the base type of a bit-field was
- an enum or an unadorned char and the bitfield was used
- as an argument to a function; the type of the bitfield
- expression was not correct
- ===========================================================
-
- string literals are now lvalues
- ===========================================================
-
- local variables in destructors could be destructed
- after base classes (same problem occured with
- constructors if an exception occured during the
- constructor and the constructor had local variables
- with destructors)
- ===========================================================
-
- some based pointer problems were corrected
- ===========================================================
-
- compiler-generated operator =() functions did not
- function properly if the entire hierarchy had no
- data and there were base class op= functions defined
- ===========================================================
-
- accept multiple ';'s in a class definition
- e.g.,
- struct S { int a;;;; };
- ===========================================================
-
- make C++ compiler less pedantic about the check for the
- 'size_t' argument's type in operator new and delete
- ===========================================================
-
- fixed a problem with brace initialization of nested
- structures with bitfields
- ===========================================================
-
- added diagnostic for function modifiers being applied
- to variables
- ===========================================================
-
- fixed diagnosis of some abstract class hierarchies
- (improved general diagnostics for abstract classes)
- ===========================================================
-
- fixed allocation of virtual function tables to be in
- the code segment for -ml-zc or -mf-zc
- ===========================================================
-
- Some based pointer bug fixes (__self based pointers).
- ===========================================================
-
- Fixed passing of parameters to __pascal member functions
- (fix applies to any reverse argument calling convention).
- ===========================================================
-
- The following function is correctly used as a copy
- constructor.
-
- struct S {
- S( S const &, ... );
- };
- ===========================================================
-
- Source file is expanded to its full path for inclusion
- into the object file. This helps debugging and minimizes
- the problems with WVIDEO not finding source files.
- ===========================================================
-
- 8087-specific inline version of fabs() had a slight
- problem in -fpi87 compiles.
- ===========================================================
-
- throwing or catching an exception in an extern "C"
- function would not work if it was the first time
- in the source file the exception was described
- (exception data has linkage "C" when it should have
- had linkage "C++")
- e.g.,
- struct Exception1 {};
- extern "C" void x1( int ) {
- throw Exception1();
- }
- void x2() {
- try {
- foo(1);
- } catch( Exception1 & ) { // would not work
- }
- }
- struct Exception2 {};
- void x3() {
- throw Exception2();
- }
- extern "C" void x4() {
- try {
- x3();
- } catch( Exception2 & ) { // works fine
- }
- }
- ===========================================================
-
- *****************
- ** C++ Library **
- *****************
-
- The filebuf class did not flush pending output on an
- attached file when destructing.
- ===========================================================
-
- The istream::getline() member function did not consume
- and discard the delimiter character.
- ===========================================================
-
- Floating point formatting support was unnecessarily
- included in executables by the C++ Library that did
- not perform any floatig point formatting.
- ===========================================================
-
- The output buffer within the filebuf and stdiobuf
- classes was not being properly initialized when the
- object was used first for input, then for output.
- ===========================================================
-
- The member functions:
-
- ostream::operator << (streambuf *)
- istream::operator >> (streambuf *)
-
- had incorrect prototypes.
- ===========================================================
-
- The istream::getline() function was erroneously setting
- the ios::failbit in the error state when a null line
- was read.
- ===========================================================
-
- Fixed run-time support for exception handling (EH) for
- -3s 386 programs (compiler assumed a run-time function
- would never return)
- ===========================================================
-
- Fixed fstream open and attach functions to clear any
- stale ios::eofbit in the error state upon successful
- completion.
- ===========================================================
-
- The container class list iterator insert function would
- page fault if used on an empty list.
- ===========================================================
-
- The container class list iterator insert and append
- functions would not add items to an empty list.
- ===========================================================
-
- The container class list iterator operator-- would not
- back up an element if the current item was set to the
- last item of the list.
- ===========================================================
-
- **************
- ** DOS4/GW **
- **************
-
- When DOS/4GW traps an exception, such as a
- general protection exception or a page fault, the register
- dump includes one additional piece of information. The
- "Crash address (unrelocated)" field shows the address
- where the exception occurred as it would appear in a link
- map. This makes some understanding of a crash possible without
- loading the application in a debugger.
-
- Diagnostic messages for some conditions where a load
- might fail have been improved.
-
- INT 31h/400h (Get Version) is now supported.
-
- INT 31h/500h (Get Free Memory Information) now returns valid
- information in most fields.
-
- Memory blocks allocated through INT 31h/501h (Allocate Memory
- Block) are now correctly freed when an application shuts down.
-
- Several bugs in INT 31h/503h (Resize Memory Block) have been
- fixed. This function should now work whether or not VMM is
- present.
-
- INT 31h/604h (Get Page Size) is now supported under VMM.
- Without VMM, it returns with carry set.
-
- File I/O through INT 21h/3Fh and INT 21h/40h will once again
- be passed straight through to DOS if the I/O buffer is in
- low memory and less than 64K.
-
- Debugging under Microsoft Windows is now more robust even
- without the Microsoft VxD VPFD.386.
-
- A stack fault under some DPMI hosts has been fixed.
-
- Some types of stack fault (exception 0Ch) are now properly
- diagnosed.
-
- Hardware interrupt 0Dh (IRQ5) will once again be properly
- routed to a user-installed handler.
-
- Chaining of exceptions is now supported.
-
- An intermittent crash on a hardware interrupt that was
- incorrectly identified (typically interrupt 0Fh) has been
- fixed.
-
- DOS/4GW will trap exception 4 (Overflow), if
- there is no user handler, and print "Unexpected interrupt 04".
-
- Floating point emulation is now more robust under DPMI on
- machines with no coprocessors.
-
- Some obscure problems in Ctrl-Break handling (involving what
- happens if you get a Ctrl-Break after you uninstall your
- handler) have been fixed. We use a slightly bigger stack
- for handling Ctrl-Break under DPMI because some hosts seem to
- require it. Also, we now restore the default Ctrl-C and
- Ctrl-Break handlers before spawning another application.
-
- An intermittent crash during VMM initialization, caused by
- getting a hardware interrupt when a segment register value
- was temporarily invalid, is fixed.
-
- Spawning another application, under some memory managers, on a
- machine with more than 16MB of physical memory no longer gives
- "DOS/16M error 40: not enough available extended memory (XMIN)".
-
- Spawning another application when VMM is in use, under some
- memory managers, no longer gives "VMM initialization error [1]".
-
- Some minor compatibility problems with 386Max and QDPMI have
- been corrected.
- ===========================================================
-
- *************************
- ** Example Source Code **
- *************************
-
- Removed unnecessary reference to iomanip.h from
- hello.cpp
- ===========================================================
-
- **************************
- ** FORTRAN 77 Compiler **
- **************************
-
- The compiler would incorrectly issue an unreferenced warning
- message for the PARAMETER constant I when used as a repeat
- specifier in a DATA statement. E.g.
-
- PARAMETER (I=1)
- DATA N/I*7/
- ===========================================================
-
- The compiler generated unpredictable results when assigning
- to a complex field of a structured array element. E.g.
-
- STRUCTURE /CMPLX/
- COMPLEX Z
- END STRUCTURE
- RECORD /CMPLX/ A(2)
- A(1).Z = A(2).Z
- ===========================================================
-
- In rare circumstances, the compiler would generate object
- files that could result in large executable files. The
- large executable files were caused by data segments
- generated by the compiler whose size was unpredictable.
- ===========================================================
-
- Examining local character variables from the debugger did
- not work. The compiler was not generating the correct
- debugging information.
- ===========================================================
-
- The following program did not issue an error message
- indicating that the symbol C was not explicitly typed.
-
- IMPLICIT NONE
- COMMON A, B, C
- INTEGER A, B
- END
- ===========================================================
-
- The compiler generated incorrect debugging information
- for array arguments when the /d2 switch was specified.
- This caused garbage to be displayed when an attempt was
- made to view the contents of an array argument from
- VIDEO.
- ===========================================================
-
- ******************************
- ** FORTRAN 77 Include Files **
- ******************************
-
- The pragma for MakeProcInstance() defined in the file
- "win3api.fi" was incorrect. This only affected 32-bit
- Windows applications. The file "win3api.fi" is located
- in the "src\fortran\win" directory.
-
- ===========================================================
-
- *************************
- ** FORTRAN 77 Library **
- *************************
-
- Fixed a problem with overlapping assignment of character
- data. E.g.
-
- CHARACTER*10 A
- A = A(4:)
- ===========================================================
-
- Fixed the following problem under OS/2 2.x. Writing to
- a sequential file did not cause the written record to be
- the last record in the file.
- ===========================================================
-
- Tab characters are now allowed in list-directed input.
- ===========================================================
-
- FORTRAN thread initialization is automatically performed
- for a mixed C/C++ and FORTRAN mutlithreaded application.
- ===========================================================
-
- If a disk full condition was reached while writing to
- a file, the write operation would fail correctly but
- an attempt to close the file would fail. This problem
- has been fixed. Note that the I/O system does buffer
- output so that if the last write succeeds, the close
- could still fail when flushing the internal buffer to
- the disk file. In this case, a second close must be
- issued.
- ===========================================================
-
- ***********************
- ** Graphics Library **
- ***********************
-
- Added support for Cirrus Logic GD-542x SuperVGA adapters.
- ===========================================================
-
- Removed use of BIOS from _outtext in graphics mode and
- _scrollwindow in text mode.
- ===========================================================
-
- Fixed a problem where _floodfill would fail is the stack
- size was greater than 256K.
- ===========================================================
-
- Fixed a problem where _remappalette did not work correctly
- after calling _settextrows.
- ===========================================================
-
- *********************
- ** C Header Files **
- *********************
-
- Improved getc/putc macros in STDIO.H for better performance
- in text files.
- ===========================================================
-
- Improved <assert.h> so that a pointer expression can
- be checked when compiling with extensions enabled
- e.g., void non_null( char *p ) { assert(p); }
- ===========================================================
-
- The errno macro in <errno.h> and <stdlib.h> is not defined
- if the macro already exists.
- ===========================================================
-
- The inline alloca sequence was modified to get better code
- generation.
- ===========================================================
-
- The 'extern' keyword was added to function prototypes
- in many of the headers to allow special purpose
- redefinitions of the function names.
- ===========================================================
-
- added <mem.h> for Borland C/C++ compatibility
- ===========================================================
-
- <iomanip.h> incorrectly defined the manipulator and
- applicator class types.
- The class name macros were not properly defined.
- Some of the manipulator inserter and extractor function
- prototypes were incorrect.
- ===========================================================
-
- The "min" and "max" macros in stdlib.h are no longer
- defined if they already exist.
- ===========================================================
-
- The IOMANIPdeclare() macro has been added.
- ===========================================================
-
- Adjusted DBL_MAX constant in <float.h>.
- ===========================================================
-
- i86.h modified so that it will not generate errors if
- compiled with -za.
- ===========================================================
-
- Use 'safer' getc and putc macros in stdio.h when
- creating a multi-threaded application.
- ===========================================================
-
- ****************
- ** Librarian **
- ****************
-
- NT hosted librarian wasn't updated properly, and so it missed an
- import library generation bug fix.
- ===========================================================
-
- The librarian would sometimes return a non-zero exit
- status to the system even when only warnings had been
- issued.
- ===========================================================
-
- The librarian did not properly handle object modules
- that had mixed 16 and 32-bit PUBDEF records.
- ===========================================================
-
- *************
- ** Linker **
- *************
-
- "option eliminate" wasn't in the usage information.
- ===========================================================
-
- couldn't specify the class option of the segment directive for NT
- ===========================================================
-
- tweaked the 16-bit aliasing code in OS/2 V2 formats to make the
- V1.9 rational extender work better with wvideo.
- ===========================================================
-
- linker wasn't exporting symbols properly under novell.
- ===========================================================
-
- linker wasn't recognizing OS/2 lx dll's properly with the oldlibrary
- option.
- ===========================================================
-
- changed a few of the linker messages for QNX.
- ===========================================================
-
- 16-bit offset additive fixups under os2 lx and le formats were
- stomping on the 2 bytes following the fixup.
- ===========================================================
-
- don't emit internal fixups for os/2 lx executables unless the user
- specifies "option internalrelocs"
- ===========================================================
-
- don't fill out the pages at the end of objects for os/2 lx executables.
- ===========================================================
-
- don't cache object files in a windows dos box, as that can cause
- unnecessary paging.
- ===========================================================
-
- the linker was not working properly when there was a pubdef redefining
- a comdat.
- ===========================================================
-
- don't emit zero size physical segments under NT, as the loader is not
- handling them properly.
- ===========================================================
-
- modified handling of object file structures to improve speed for some
- large C++ .obj files. fixed a map file typo as well.
- ===========================================================
-
- ***********
- ** Make **
- ***********
-
- macros are not defined to null anymore when they are
- used in a !ifeq directive
- ===========================================================
-
- fixed adding of more dependencies to a single colon
- target for the case where the single colon target
- does not have any dependencies
- e.g.,
- test :
- cmd
- test : dep1 dep2
-
- ===========================================================
-
- fixed intercepting of cd commands for Windows NT version
- of WMAKE
- ===========================================================
-
- made !undef of an undef'd macro warning only come out if
- -d option (debugging) is on
- ===========================================================
-
- ***********************
- ** Windows SDK Tools **
- ***********************
-
- Fixed Resource compiler bugs where
- 1. If two NT resources of the same type had names where one was
- a prefix of the other an incorrect resource file was generated.
- 2. An incorrect error message was generated when the preprocessor
- could not find an include file.
- ===========================================================
-
- Fixed Resource compiler bugs where
- 1. VersionInfo resources were not written correctly for Windows NT.
- 2. C statements in #include'ed .c and .h files were not ignored
- when the included file was specified with a capitalized extension
- ( ex STDIO.H instead of stdio.h)
- ===========================================================
-
- Fixed a Heapwalker bug where the heapwalker failed to identify the
- owner of some global heap items.
- ===========================================================
-
- Fixed a resource compiler bug where entering negative values in
- an RCDATA resource caused an error to be reported.
- ===========================================================
-
- Fixed a resource compiler bug where an error message was reported
- when adding resources to PE executables with a .bss object
- larger than the size of the exe file.
- ===========================================================
-
- *************************
- ** Windows Supervisor **
- *************************
-
- Added 128 exported symbols to W386DLL.EXT. These symbols are
- called DLL1, DLL2, etc, up to DLL128. You can now call one of
- these exported names rather than calling Win386LibEntry.
- e.g. DLL7( parm1, parm2, parm3 ); is equivalent to
- Win386LibEntry( parm1, parm2, parm3, 7 );
- You must still call DefineDLLEntry in your initialization code
- to define what parameters are to be expected by the call.
-
- WEP is now entry number 129 and Win386LibEntry is entry number 130.
- ===========================================================
-
- Removed unnecessary exports of CB1 to CB512.
- ===========================================================
-
- Aliases for huge pointers failed when application memory
- was greater than 1MB.
-
- C++ global destructors were being called when DLL initialization
- was completed, as opposed to when the DLL was exiting.
- ===========================================================
-
- The DLL supervisor no longer displays a MessageBox when an error
- occurs initializing the DLL (eg. not enough memory). It just
- returns failure and it is up to the caller of LoadLibrary to
- handle the error.
- ===========================================================
-
- The Windows supervisor has been modified so that it has a better
- chance of successfully initializing in low memory conditions.
- ===========================================================
-
- *************
- ** WVIDEO **
- *************
-
- The NetWare NLM Debug servers would crash NetWare if you
- tried to debug a multi-threaded application.
- ===========================================================
-
- Debugging with /TRAP=RSI in a Windows DOS box did not
- always work.
- ===========================================================
-
- The OS/2 SERSERV only allowed COM1 and COM2. It now
- allows up to COM9.
- ===========================================================
-
- Under certain conditions of extreme low memory (typically
- only under DOS), WVIDEO could mess up its memory management.
- This could cause internal errors, hangs, and other stuff
- that people tend not to like.
- ===========================================================
-
- When using the /vga50 option with the Windows hosted
- debugger, WVIDEO would act as if there were 50 lines
- on the screen, but would not set the character font
- properly. This would cause only the first 25 lines of
- the debuggers windows to appear.
- ===========================================================
-
- When using the "Select file..." dialog from the
- startup options box of the Windows hosted debugger, WVIDEO
- would fail to insert a space between the end of the
- options specified and the start of the file name that
- was selected.
- ===========================================================
-
- The BINW\VDMSERVW.EXE file was accidently left off of
- the distribution diskettes.
- ===========================================================
-
- Some problems with watchpoints under Netware 4.0 have
- been corrected.
- ===========================================================
-
- The debugger no longer considers symbols of the same
- name from different EXE's/DLL's as ambiguous. It will
- choose the symbol from the EXE or DLL that was loaded
- first. If you want the symbol from the later DLL, you
- must use a module specifier on the symbol name.
- ===========================================================
-
- Extended DOS programs which grab the keyboard hardware
- interrupt (int 9) and do not chain in their handlers
- (Metagraphics) can now be debugged under real DOS.
- They will still fail in OS/2 or Windows DOS boxes, but
- you can use the /TR=VDM or /TR=WIN remote debugging
- links to handle them there.
- ===========================================================
-
- Added WVPMHELP.EXE. This solves the problem where typing
- ALT-ESC while debugging a PM application hung the OS/2 input
- system. You do not have to start this program. The debugger
- will automatically start it when it detects that it is
- debugging a PM application. It creates a small PM window
- application with a "Switch" menu item which you can click
- on to switch back to the debugger screen.
- ===========================================================
-
- Changed the RSI.TRP file to respect the DOS4GPATH environment
- variable when searching for the dos extender.
- ===========================================================
-
- Disallowed debugging of a PM app from a windowed OS/2 session,
- since it would hang PM's message queue, killing OS/2.
- ===========================================================
-
- ***********
- ** WOMP **
- ***********
-
- when converting object files from easy-omf to microsoft, womp would
- sometimes delay emitting the flat group record a bit too long.
- ===========================================================
-
- ***************
- ** Profiler **
- ***************
-
- Fixed problem where important code loads were being ignored
- in Windows applications.
- ===========================================================
-
- There was a race condition in WSAMPRSI that could cause
- it to report a task exception if the _MARK_ function
- had been enabled in the user program.
- ===========================================================
-