Watcom C++ & Fortran

Version: 
11.0c
Release date: 
Sunday, 1 December, 2002

License:

Interface:

Authors/Port authors:

Patch for the Sybase Watcom C/C++ and Fortran compiler products V11.

In 2003, the Watcom C/C++ and Fortran compilers were released as an open source project under a new name, Open Watcom.

This software is distributed as compressed package. You have to download and manually install it; if prerequisites are required, you will have to manually install them too.

Manual installation

As the files are packed with Windows Installer, you need Odin to unpack them. See below for download link(s).

Following ones are the download links for manual installation:

Watcom C++ & Fortran v. 11.0c (Update for Watcom Fortran, 20/12/2002, SciTech Software) Readme/What's new
WATCOM Fortran 77 Version 11.0c - README ---------------------------------------- Welcome to WATCOM Fortran 77 version 11.0c. This README provides helpful hints found during testing as well as updated information that was not available at the time the documentation was produced. This file includes: ------------------- Important Environment variables 11.0 C-level Notes 11.0 B-level Notes Fixes in versions 11.0 C, B and A-level Changes in 11.0 that may Require Recompilation Major Differences from Version 10.6 Other General Notes about version 11.0 =========================================================== Important =========================================================== Some Watcom tools currently do not function properly if installed in a directory with spaces in the name e.g. "C:\Program Files\WATCOM". Therefore choose a directory name like C:\WATCOM, D:\WATCOM etc. to install the tools in. =========================================================== Environment variables used by Watcom FORTRAN =========================================================== For proper operation the Watcom compilers require few environment variables to be set up correctly. These variables differ slightly depending on the host platform (DOS, OS/2, Win32). The common variables are: - PATH - points to directories containing Watcom executables - WATCOM - points to the directory where Watcom 11.0c is installed and is used by various Watcom tools to locate files - EDPATH - points to VI/VIW configuration files - INCLUDE - points to directories containing C header files used by the compilers - FINCLUDE - points to directories containing Fortran header files used by the compilers - LIB - points to directories containing library files; note that Watcom linker is able to locate Watcom runtime libraries without this variable DOS specifics - PATH - only needs to point to the binw directory - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk Win16 specifics - PATH - only needs to point to the binw directory - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk Win32 specifics - PATH - must point to binnt and binw directories, in that order - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk OS/2 specifics - PATH - must point to binp and binw directories, in that order - LIBPATH - either the BEGINLIBPATH/ENDLIBPATH environment variable or the LIBPATH statement in CONFIG.SYS must point to the binp\dll subdirectory of Watcom 11.0c in order to let the OS find Watcom DLLs - HELP - points to binp\help to let Watcom GUI tools locate online help files - BOOKSHELF - points to binp\help to allow the IPF viewer (VIEW.EXE) locate Watcom online manuals These environment variables can be either set up in your starup files (which is the most convenient method if Watcom 11.0c is the only compiler you use) or you can use simple batch files to set these variables (useful if you need to switch between compilers, including different versions of Watcom compilers). Below are several sample batch files for setting the environment variables on various host platforms. The WATCOM variable must naturally be adjusted according to where Watcom 11.0c was installed on your system. The LIB environment variable isn't strictly necessary but you will probably need to set it for any libraries you use not supplied with Watcom compilers. Similarly you might need to adjust the INCLUDE variable for 3rd party library include files. DOS BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H SET FINCLUDE=%WATCOM%\SRC\FORTRAN\DOS;%WATCOM%\SRC\FORTRAN REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- Win16 BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\H\WIN SET FINCLUDE=%WATCOM%\SRC\FORTRAN\WIN;%WATCOM%\SRC\FORTRAN REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- Win32 BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINNT;%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\H\NT SET FINCLUDE=%WATCOM%\SRC\FORTRAN REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- OS/2 CMD file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINP;%WATCOM%\BINW;%PATH% SET BEGINLIBPATH=%WATCOM%\BINP\DLL SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\H\OS2 SET FINCLUDE=%WATCOM%\SRC\FORTRAN\OS2;%WATCOM%\SRC\FORTRAN REM SET LIB= SET HELP=%WATCOM%\BINP\HELP;%HELP% SET BOOKSHELF=%WATCOM%\BINP\HELP;%BOOKSHELF% --------------------------------------------------------------------------- =========================================================== 11.0 C-level Notes =========================================================== All files licensed by Microsoft, IBM, Novell, Tenberry, Pharlap and Blue Sky Software have been removed in this version. The Windows SDK components are not included in the 11.0c update. If you wish to do Windows programming you are required to have a prior version of Watcom C/C++ 11.0. Watcom Fortran 77 10.6 may work, but this has not been tested. The DOS/4GW extender is also not included in the 11.0c update. If you wish to develop programs using DOS/4GW, you are required to have a prior copy of Watcom Fortran 77 and use the version of DOS/4GW that came with your earlier product. Alternatively you can switch to using the included CauseWay DOS extender which is a drop in replacement for DOS/4GW (with a few minor differences). Support for Watcom Fortran 77 11.0c is at www.openwatcom.org =========================================================== 11.0 B-level Notes =========================================================== The SOM toolkit for OS/2 is no longer supported, and has been removed in this version. =========================================================== Fixes in versions 11.0 C, B and A-level =========================================================== The letter in the first column indicates which level the fix was first introduced. ******************** ** Code Generator ** ******************** C Fixed combining two move short constants into one move dword constant followed by two move byte constants that combined. The codegen would incorrectly "forget" the first byte-byte combined move after the short-short combined move. Example: struct S { unsigned short a,b; unsigned char c,d,e,f; }; void foo( S *p ) { p->a = 1; p->b = 2; p->c = 3; p->d = 4; p->e = 5; p->f = 6; } =========================================================== C Fixed a problem where 64-int constants were being aliased to 64-bit floating point constants in such a way that the values are incorrect. Example: struct S { double d; __int64 x; }; void foo( S *p ) { p->d = 6.25; p->x = 0; // changes to p->x = 6; } =========================================================== B When static member functions are supplied to the ?: operator, no code was being generated =========================================================== B added a compiler switch to disable the "common epilogue" optimization. =========================================================== A If optimizing for time, align procedures on 16-byte boundaries for anything above a 486. =========================================================== A Fixed a problem with short-circuit operators in which a side effect would be discarded (ie ( (a=b) || 1 ) would get reduced to (1) and the (a=b) discarded. Ditto for ( (a=b) && 0 ). =========================================================== A Fixed a problem with long filenames in object file generation. =========================================================== A Fixed a problem with loopopts and far pointers - if inductions optimizations introduced an add of an integer to a far pointer, it was possible that the add would be generated incorrectly, resulting in some highly suspicious references to odd locations such as -1[bp] or 7[bp]. =========================================================== A Fixed a problem in which conversions between floats and ints (or floats and doubles) within a union might not be generated correctly. =========================================================== *************** ** C Library ** *************** C Internal routines __FSU8, __FDU8, __FSI8, __FDI8, __I8FS, __U8FS, __I8FD, __U8FD, used to convert between float, double and signed __int64, unsigned __int64 for alternate maths libraries were - missing for 32-bit C libraries - converted incorrectly for 16-bit C libraries This is now fixed =========================================================== C Fixed sys_nerr so that it was the right value =========================================================== C Internal routine __GETDS has been added to the 32-bit OS/2 C libraries =========================================================== C Internal functions __U8FD7 and __U8FS7 have been made smaller and faster. These routines are used to convert unsigned __int64 to double and single respectively. Internal function __I4D is now faster under some circumstances =========================================================== C Fixed scanf() family where the wrong count would be obtained for floating-point input. e.g: int charcnt; double data; sscanf( "123." , "%lg%n", &data, &charcnt ); Fixed scanf() family so that the negative sign is handled when reading unsigned integers (a requirement of ANSI C) =========================================================== C Fixed _fullpath() where under certain circumstances the heap could be corrupted =========================================================== C Fixed memory leak in tmpfile() for Netware libraries =========================================================== C _searchenv() now works for quoted paths including 4NT-style paths =========================================================== C Fixed problem in memory allocator that could cause NULL to be returned without going to the system to get more memory. =========================================================== C Fixed bug in __brktime in gmtime.c. Jun 2, 2101 was returned as Jun 1, 2101. Affected ctime, localtime, gmtime. =========================================================== C Fixed bug in delay() for DOS/16, DOS/32, Win 3.1 and Win386. Previous version did not work at all for a number of reasons. New version is accurate to within +/- 1/100 second. =========================================================== C Fixed bug in printf formatting. %#.6g would not display trailing zeros for a number like 1.0e6. Output was 1.e+006 when it should have been 1.00000e+006. Fix was made to _ldcvt(). =========================================================== C Fixed eof(), filelength(), fsync(), _os_handle(), _get_osfhandle(), and setmode() in Netware library by removing a failing file handle check. =========================================================== C Fixed bug in mktime() that affected 16-bit libraries. Years >= 2079 resulted in truncation due to 16-bit rather than 32-bit precision. Changed 365 to 365L to force 32-bit calculation. =========================================================== C Fixed bug in run-time exit code. Made sure that _WindowExitRtn is called early on in exit() rather than in _exit() (since run-time system is shut-down by the time _exit gets called). This bug impacted "Save as" in default windowing support. =========================================================== C Fixed bugs in _wputenv, _wsetenv, _wgetenv that caused a crash in clearenv at program exit. =========================================================== C Fixed opendir() for DBCS environments (where backslash, slash, asterisk and question mark might appear as the second character of a double-byte character in a path specification). We now use _mbsinc() and _mbsnextc() to scan a path string. =========================================================== C Added _mktemp() to other platforms including 16/32-bit DOS, 16-bit Windows, 32-bit extended Windows and 16/32-bit OS/2. Previously, only Win32 was supported. =========================================================== C Fixed a problem with multi-threaded applications where a thread was very short-lived. A multi-threaded application would crash when a thread was very short-lived. The problem seemed to appear with more frequency on the newer generation of fast processors. The crash occurred in _CBeginThread which is the C run-time implementation of _beginthread. A workaround was to delay the thread from exiting using some sort of gating technique like Sleep or a signal from the creating process that permitted the thread to exit. A more detailed description of the problem follows. When a thread is created, a thread handle is returned to the process doing the CreateThread. Our run-time library wants to pass this thread handle to the newly "executing" thread so that when the thread exits, the thread can free the handle itself. The "main" process passes the thread handle to the thread by storing it at a location provided by the thread. This location is "created" by the thread so the main process waits for an event that signals that the location is created. But here's what happens. The thread signals the event and keeps on executing. In fact, it executes right through to the termination code and exits before the main process is dispatched again. Eventually the main process is resumed (since the event that it waited on has occured) and then it stores the handle into memory. This memory however no longer exists because the thread has already come and gone. An access violation occurs. The problem was fixed by adding code to complete the handshaking process (the problem had been already half solved). The thread now waits for the creating process to provide the handle. =========================================================== C spawn... functions with P_NOWAIT under Win32 no longer allocate an extra process handle. =========================================================== C Simplefied Win32 version of _pipe. Pipes are inheritable if you use the SECURITY_ATTRIBUTES struct. Added support for O_NOINHERIT mode attribute. =========================================================== C Fixed the multi-byte character functions so that they work correctly for all double-byte character sets (not just Japanese). The revised functions are: _mbctolower _mbctoupper _ismbcalnum _ismbcalpha _ismbccntrl _ismbcdigit _ismbcgraph _ismbclegal _ismbclower _ismbcprint _ismbcpunct _ismbcspace _ismbcsymbol _ismbcupper _ismbcxdigit _mbslwr, _fmbslwr _mbsupr, _fmbsupr =========================================================== C Fixed Win32 version of _dos_findfirst/_dos_findnext so that _A_SUBDIR, _A_HIDDEN, and _A_SYSTEM work correctly. =========================================================== C Fixed Netware version of library so that code-gen support routines like __i8d are not exported. This removes the problem caused when 2 or more NLMs ended up exporting the code-gen support routines. =========================================================== C Removed assert from low-level thread data pointer acquisition routine (since assert requires a thread data pointer in multi- threaded applications so it was no good to use assert to complain that a thread data pointer could not be acquired). Normally, this problem would not be seen. =========================================================== C Added some error checking to Win32 cprintf and putch (conio) routines. =========================================================== C _controlfp called _controlfp rather than _control87 resulting in a recursive, infinite loop. Changed _controlfp to call _control87. =========================================================== C Fixed a number of I/O routines to make them thread safe. Included are the Netware version of fopen, _fsopen, all versions of tmpnam, all versions of fclose. =========================================================== C Fixed tzset() for Windows NT/2000 in areas where there is no daylight savings time. As a result, gmtime() should now be correct for all areas of the world. =========================================================== C Fixed the Win32 version of _dos_xxx functions so that they return the OS error code like their DOS and OS/2 counterparts. Fixed _getdcwd(), _wgetdcwd() so that they set a proper errno value. Set errno if drive doesn't exist. Fixed putenv(), _wputenv(), setenv(), _wsetenv() so that they set a proper errno value. Fixed _wdos_findfirst(), _wdos_findnext(), _wdos_findclose() so that they set a proper errno value. Under Win32, they now return a proper OS error code. Fixed Win32 version of open(), _wopen(), sopen(), _wsopen(), _sopen() and __wsopen() so that it first checks to see if it can store the file handle returned by Win32 before attempting to open the file. This fix corrects the "orphaned file" problem caused by opening, then closing a file when the file handle can't be stored. Fixed the OS/2 spawn routines so that a proper errno value is set when running out of memory. Fixed tmpfile() multi-threading problems including infinite loops when the "TEMP" environment variable (TMP, TEMP, TMPDIR, etc.) points to a non-existent path. Added _strerror() for MS compatibility. Also added wide char version _wcserror(). Added _doserror() to return Win32 system error message for a _doserrno value. Improved mapping of Win32 error codes to errno values. =========================================================== C Fixed a memory leak in run-time code. Added call to free the "initial thread data storage" (the storage used by the main thread in a single-threaded or multi-threaded application). Affects Win32 and 32-bit OS/2 applications. =========================================================== C Fixed a problem with tmpnam() in the Netware library in version 11.0c. New names were not being created. =========================================================== C Fixed bug in Win32 write(). The zeropad function was not necessary and didn't handle large files, in any case. Now you can seek to a position > MAX_INT and then write(). =========================================================== C Fixed a problem where _beginthread example was crashing sometimes =========================================================== C Fixed _chain_intr() so that flags is passed to interrupt handler =========================================================== C Fixed 32-bit strcmp() so comparing unaligned strings does not fault =========================================================== B Fixed a bug where an app was doing a chmod() on a file in a directory and is supposed to remove the file and then delete the directory itself. Under Win95 the directory was getting removed, however under NT it was not. Use div in place of ldiv for 32-bit code, since they should be the same. Marked the Product Version as 11.0b for the RTL DLLs, such as CLBR110.DLL, CLBS110.DLL, MT7R110.DLL, MT7S110.DLL, MTHR110.DLL, MTHS110.DLL, PLBR110.DLL & PLBS110.DLL, so it is less difficult to distinguish them from older DLLs. =========================================================== B Fixed a bug where Win386 DLLs would GPF every second time they are unloaded. To reproduce this, modify the samples in samples\fortran\win\dll by adding the line "call FreeLibrary( hlib )" before the line "FWinMain = 0" in gen*.for. When you run the samples, they GPF the first, third, fifth, etc. times when FreeLibrary is called. If you compile/link these modified samples with 10.6a or earlier versions, then the problem doc not occur. Reproduce this behaviour under WFW 3.11 and Win NT 4.0. Customer has reproed this under Win 95, and also reproed it when the DLLs are called from VB 4.0. =========================================================== B _wtof was missing from the 16-bit math libaries, and the 32-bit version was returning erroneous results. =========================================================== B Target: Win32: Using fmod() or modf() in code compiled with /br was giving undefined references. =========================================================== B Fixed a bug with itoa() in win16 apps, where you couldn't run multiple instances of the app. If you tried to, you got "Cannot start more than one copy of the specified program" under NT and "Error: Cannot <something> multiple writeable data segments" under Win 3.x. =========================================================== B Win32 target only: feof() was not set when end-of-file occurs on an input pipe. ferror() was being set instead. =========================================================== B ftime() was not reporting correct timezone field in timeb struct when TZ is negative. =========================================================== B Overflow range error in pow was not reported unless /fpc used. =========================================================== A _findfirst() has been changed to take a const char * instead of just a char *. =========================================================== A __FSU87 was trashing ecx - this routine is called to convert an unsigned __int64 to a float. =========================================================== A Fixed memory leak, due to us not deallocating the _iomode array during fini rtns. Also added _UnloadCLib call to library to allow user to properly unload 16 bit OS/2 user loadable DLLs. =========================================================== A Fixed a bug where fortran default windowing apps would sometimes appear to print lines twice, when printing at the bottom of the screen. Since they were being printed at the bottom of the window and then not erased when the window scrolled up, leaving a 2nd copy at the bottom =========================================================== A Input value range checking for strtod() has been improved for very small values. =========================================================== A The runtime dll support has been fixed to no longer leave a potentially dangerous reference from the C runtime DLL into whichever DLL has been most recently loaded into the process image. The reference from the C runtime DLL now points directly into the Math runtime DLL. =========================================================== A The _dos_getdiskfree() function for 32bit platforms now has an expanded data structure. =========================================================== The assert() function for WIN32 and OS/2 platforms will attempt to use stderr for output if it is available. =========================================================== A The __declspec(thread) support for WIN32 platforms has been improved. In some, pathological cases, it could lead to a GPF on program startup. =========================================================== A The system() function for WIN32 platform no longer passes posix file handles for inheritance by child processes by default. =========================================================== A The delay() function for NEC98 machines used to hang on initialization. =========================================================== A The race condition in the _beginthread() function related to the saving of the child thread handle has been fixed. =========================================================== A The multibyte init code for the C runtime library would always crash on startup when running under the Pharlap Run386 or TNT DOS extenders. =========================================================== A The heapchk() function for 32bit platforms could, in some cases, enter an infinite loop. =========================================================== A The posix level open() function for WIN32 platforms did not properly truncate existing files on NT server machines when run from an NT workstation. =========================================================== A The WIN32 stat() function now ensures that directories cannot be marked as character mode devices. =========================================================== A The WIN32 and OS/2 runtime shutdown code now does a better job of releasing all resources on image shutdown. =========================================================== ****************** ** Disassembler ** ****************** C Fixed WDIS so that it correctly disassembles 32-bit code assembled with MASM/TASM as 32-bit and no longer as 16-bit =========================================================== C Fixed ORL library so that additional OMF THEADR records in object files are not diagnosed in error. Additional THEADR records occur when #include'ing source code and requesting Codeview debug info. =========================================================== B wdis couldn't recognize "SHLD EDX,EAX,CL", "SHRD EDX,EAX,CL" and a few other instructions. =========================================================== B Wdis did not give the correct code when disassembling memchr(). It placed the label in the wrong position. This is because the code makes a jump into the middle of an opcode sequence depending on the result of memchr(). WDISASM with 10.6 "knew" about this and issued DB instructions. =========================================================== A fixed problem with disassembly of 3-operand imul instructions (only 2 operands were displayed) =========================================================== ******************* ** Documentation ** ******************* C Fortran subroutine library functions FNEXTRECL() and FTRACEBACK() are now documented =========================================================== C Predefined C++ macros _CPPUNWIND & _CPPRTTI are now documented =========================================================== C #pragma read_only_file which appears in nearly all Watcom header files is now documented. The default depth for #pragma inline_recursion has been corrected. The default depth is 3. =========================================================== C Functions _dieeetomsbin(), _dmsbintoieee(), _fieeetomsbin(), _fmsbintoieee(), _findfirsti64(), _findnexti64(), _wfindfirsti64(), _wfindnexti64(), _filelengthi64(), _lseeki64(), _telli64(), _fstati64(), _wfstati64(), _stati64(), _wstati64() are now documented in the C library. =========================================================== B Fixed the C library matherr example, so it works with the C++ compiler. =========================================================== B Watcom 10.6 aligns structure members on a byte boundary by default. Watcom 11.0 aligns structure members on an 8 byte boundary by default. Fixed some places where the documentation hadn't been updated from 10.6. =========================================================== B Added - wlink's OPTION SHOWDEAD, which was not documented. This option is very useful as it shows in the map file which functions the linker stripped out. =========================================================== B Added documentation for wcc/wcc386/wpp/wpp386 options /of & /of+. =========================================================== B Corrected the Programmer's Guide sample on 32-bit OS/2 DLLs. The dllsamp.c file was missing a: define EXTERNC. =========================================================== B Upated Linker docs indicate that incremental linking is not supported for 16-bit DOS and NetWare targets. =========================================================== ************************* ** FORTRAN 77 Compiler ** ************************* C Internal compiler error 3 occured for program CALL EXCDPS(,WHC,PROPAR,K1,PDT) END Now diagnostics *ERR* PC-01 column 19, missing or misplaced closing parenthesis *ERR* SX-14 column 19, missing operator are issued =========================================================== B write(*.*) (notice the period instead of a comma) was not being caught as a syntax error. =========================================================== A fixed a bug where the compiler would produce an access violation error if you passed an external as an argument to a subroutine the error would only occur if debug info was on ( -d2 ) =========================================================== ************************ ** FORTRAN 77 Library ** ************************ C Fixed a bug in multi-threading that arose when we moved from a four parameter to three parameter version of _beginthread under Win32. =========================================================== C Fixed a bug in the FGETCMD library function. It used to allocate a temporary fixed-size (128 bytes) buffer on the stack and get a copy of the command line into it using the C library getcmd() function. When the command line exceeded 128 bytes, the stack was clobbered. We rewrote FGETCMD to use _bgetcmd() (a bounded version of getcmd()). Note that the size of the command line returned by FGETCMD is always the length of the command line and can exceed the maximum size of the character argument (but we'll never copy more than will fit into the character argument). =========================================================== ********************** ** Graphics Library ** ********************** C Fixed a bug where vector fonts where being drawn incorrectly =========================================================== C Now cache the SVGA Page for better performance =========================================================== C Fixed a bug in NEC version of graphics library "SetPixel" function. =========================================================== C Fixed a bug in _EGAScanRight. The ODD/EVEN mode bit should not have been turned on. On most adapters, this didn't cause a problem. On a Number Nine video card, this showed up as a problem in flood filling an area. =========================================================== ******************** ** C Header Files ** ******************** C Fixed headers <typeinfo.h>, <exceptio.h> so that they include other Watcom C++ headers with the .h extension correctly. This was causing STLPort's headers to be used in preference to Watcom's. =========================================================== C Fixed getc macro in stdio.h. The '\0x' changed to '\x' in two places. Old version resulted in a loss of an attempted optimization. The correction will result in better performance for getc(). =========================================================== C Added Microsoft's FLT_NORMALIZE constant. Added Microsoft's _DBL_RADIX constant. Added Microsoft's _DBL_ROUNDS constant. Added Microsoft's _LDBL_RADIX constant. Added Microsoft's _LDBL_ROUNDS constant. Added Microsoft's DBL_RADIX constant. Added Microsoft's DBL_ROUNDS constant. Added Microsoft's LDBL_RADIX constant. Added Microsoft's LDBL_ROUNDS constant. Changed FLT_MIN_EXP from (-127) to (-125). Changed DBL_MIN_EXP from (-1023) to (-1021). Changed LDBL_MIN_EXP from (-1023) to (-1021). Changed FLT_MIN_10_EXP from (-38) to (-37). Changed FLT_MAX_EXP from 127 to 128. Changed DBL_MAX_EXP from 1023 to 1024. Changed LDBL_MAX_EXP from 1023 to 1024. Added accurate representations for DBL_MAX, DBL_EPSILON and DBL_MIN named _DBL_MAX, _DBL_EPSILON and _DBL_MIN. =========================================================== C Improved code generated from isxxx() functions. Changed description of messages associated with some errno values. Added definition of NULL to float.h. Added prototypes for _strerror(), _wcserror(), _doserror(), _wdoserror() to string.h. =========================================================== A const qualifiers have been added to the char* parameters to the findfirst and variant functions in io.h =========================================================== A The register mode calling convention prototype for longjmp() is no longer marked as "#pragma aborts" to facilitate profiling support. =========================================================== ********************************************** ** Integrated Development Environment (IDE) ** ********************************************** C Fixed incorrect access of C error/warning help file WCCERRS.HLP (messages were one out) =========================================================== A Added pentium pro (p6) switches to the options pages ( compiler, linker, assembler, etc. ) =========================================================== A added a switch for Watcom debugging info to the linker options page - watcom was previously the default if you selected debug all, now Dwarf is the default =========================================================== A fixed a resource problem that was causing some of the buttons and menu items to appear with no text =========================================================== A Don't use incremental linking for DOS or Netware applications - it is not supported =========================================================== A Changed the compiler options for Netware targets to use -5s, -ms -- stack based, small model =========================================================== A changed the linker options for 32-bit OS/2 DLL's now uses op manyautodata, initinstance, terminstance =========================================================== *************** ** Librarian ** *************** C Updated command line help for WLIB /? Help added for switches -p, -s, -v =========================================================== C Wlib overwrote an existing object file with no truncation (in the "*" extract operation). This resulted in a corrupt object file when the new one was shorter than the old one. =========================================================== C Fixed some problems related to creating AR format libraries using the -fa switch. =========================================================== B Wlib wasn't giving a warning message if you tried to extract a nonexistent object file. =========================================================== ************ ** Linker ** ************ C Fixed problem where WLINK was inserting random text (often parts of WLSYSTEM.LNK) in the final executable =========================================================== C Fixed WLINK so that it now works interactively again =========================================================== C Added support for case-insensitive searching of COFF (AR-format) libraries. For example, the linker now matches _SLEEP@4 with _Sleep@4 in KERNEL32.LIB. =========================================================== B Fixed output of QNX executables for a rare case of internal buffer filling. =========================================================== B OP INC IS NOT SUPPORTED FOR 16-BIT DOS OR NetWare, in 11.0 you didn't get an error to indicate this =========================================================== B fixed a bug where "wlink debug watcom types" or "wlink debug watcom locals" or "wlink debug watcom lines" would all cause the linker to crash "wlink debug watcom all" was fine =========================================================== B NT linker was crashing if you ran it with no arguments, and typed something at the WLINK> prompt =========================================================== B fixed a bug where WLINK was crashing while trying to link an app with codeview debuggin info =========================================================== ********** ** Make ** ********** A In non-Microsoft mode, WMAKE will find and process a file named "MAKEFINI" after all makefiles have been processed. =========================================================== *********************** ** Resource Compiler ** *********************** C Added support for CodePage 1250 to UNICODE translation (1250.UNI). =========================================================== ************** ** Debugger ** ************** B dwarf dip now exits gracefully if it failes to load debug info =========================================================== B Fixed a bug on DOS or Win95 Host: binw\wd was crashing on loading DOS/4GW EXE. The debugger was running out of memory trying to read in a large app or large app + symbolic debugging info (.SYM) file. Problem did not occur with the binnt debuggers under NT. =========================================================== B binw\wd was crashing when inspecting ofstream structure with Watcom or Codeview debugging information. =========================================================== B Debugger was crashing when double-clicking on an entry in calls window. =========================================================== B If winserv terminated abnormally for any reason, you could not restart it unless you gave the server a different name. This is a bigger problem than appears at first, because the IDE uses an unnamed debug server. As such, if you were debugging DOS/4GW under Windows 95 and the application crashed the server, then you had to reboot before you can debug in the IDE to start the debugger again. Winserv will now free the name and try again if it tries to connect to a server and is unable to connect. =========================================================== A Rolled back DOS4G extender to 1.96 to fix pharlap application debugging crashes. =========================================================== A fixed a bug where you couldn't debug "Large" DOS/4GW apps =========================================================== *************** ** Assembler ** *************** C Conditional move instructions for Pentium Pro were being assembled back to front =========================================================== C Fixed message numbers so that they increase sequentially from 1 and from 500 in each of the two groups of messages. Previously, message numbers had large gaps in them. =========================================================== B Fixed a bug where wasm wouldn't assemble: "psrlq m1, dummy" where dummy is a quadword It gave an error: "Second operand too big". =========================================================== ********************* ** Watcom Profiler ** ********************* C Fixed "Out of Memory" error when sample file has no samples. Fixed disassembly error in display of location counter (eip/ip). =========================================================== ********************* **** Clone Tools **** ********************* C Fixed CL & CL386 so that switches -MD or -MDd are translated as the equivalent Watcom switch -br. Previously no translation was occuring. For the real Microsoft tools, the switches means using the Run-Time Libraries in DLL form. Correcting this means the equivalent Watcom Run-Time Libraries in DLL form will be used. =========================================================== Changes in 11.0 that may Require Recompilation: ----------------------------------------------- clock() The clock function accuracy has changed from 100 ticks per second to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Source code that uses the clock function and CLOCKS_PER_SEC in its calculations must be recompiled before linking the application with new libraries. Major Differences from Version 10.6: ------------------------------------ The following sections summarize the major differences from the previous release of Watcom C/C++. In general, we have improved Microsoft compatibility in our compilers (more warnings instead of errors, support for MS extensions, etc.) and tools. Some of the Win32 and 32-bit OS/2 versions of our tools are now available in DLL form. EXE DLL Description ------ ------- ----------------------- wcc wccd 16-bit x86 C compiler wcc386 wccd386 32-bit x86 C compiler wpp wppdi86 16-bit x86 C++ compiler wpp386 wppd386 32-bit x86 C++ compiler wlink wlink Watcom Linker wlib wlibd Watcom Library Manager This provides better performance when using the Integrated Development Environment or Watcom Make. See the description of the !loaddll preprocessing directive in Watcom Make for more information. Changes to the C++ Compiler for 11.0 ------------------------------------ We have added support for namespaces and RTTI (Run-Time Type Identification). We have improved (faster) pre-compiled header support. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the C Compiler for 11.0 ---------------------------------- We have improved (faster) pre-compiled header support. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the Code Generator for 11.0 -------------------------------------- A new optimization, "branch prediction", has been added. This optimization is enabled by the "ob" or "ox" compiler options. The code generator tries to increase the density of cache use by predicting branches based upon heuristics (this optimization is especially important for Intel's Pentium Pro). We have added Multi-media Extensions (MMX) support to the in-line assemblers. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the Compiler Tools for 11.0 -------------------------------------- The Watcom Linker supports incremental linking. The Watcom Library Manager (WLIB) can now understand COFF and ELF format object files, as well as OMF et al. The Watcom Library Manager can now read/write AR-format (Microsoft compatible), Multilib (used by IBM for PowerPC version of OS/2), or old-style OMF libraries. The default output format is AR-format and this can be changed by switches. The Watcom Library Manager can output various format import libraries. We have added Multi-media Extensions (MMX) support to the Watcom Assembler (WASM). A new version of the Watcom Disassembler (WDIS) is included. It can process ELF, COFF or OMF object files and ELF, COFF or PE format (Win32) executables. The old disassembler (WDISASM) has been retired and is not included in the package. We have added new tool front-ends that emulate Microsoft tools. These are: nmake cl link lib rc cvtres mapsym These programs take the usual Microsoft arguments and translate them, where possible, into equivalent Watcom arguments and spawn the equivalent Watcom tools. Watcom Make now processes Microsoft format makefiles when the "ms" option is used. Changes to the C/C++ Libraries for 11.0 --------------------------------------- We have added multi-byte and wide character (including UNICODE) support to the libraries. We include run-time DLLs for the C, Math and C++ Libraries. We have added Multi-media Extensions (MMX) support to the libraries. The following new functions were added to the library... mb functions The clock function accuracy has changed from 100 ticks per second to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Changes to the DOS Graphics Library for 11.0 -------------------------------------------- The graphics library now performs the VESA test before testing for vendor specific graphics cards. This fix is intended to broaden the number of graphics cards that are supported. For details on what was new in versions 10.6 and earlier, see the GETTING STARTED helpfile. Other notes: Note: %DstDir% represents the directory in which WATCOM C/C++ was installed. %WinSysDir% represents your Windows 3.x system directory. 1. When debugging a 32-bit Phar Lap, TNT or DOS/4GW application, make sure that "run386.exe", "tnt.exe", or "dos4gw.exe" respectively, are in your path. Failure to do so, may cause your computer to hang. 2. When using the GUI debugger to debug Windows 3.x applications, certain Windows applications may cause the debugger to behave in an unpredictable way. Typically, this occurs when debugging certain messages in window callback functions. For example, hitting a breakpoint in a window function that is processing a WM_INITDIALOG message will crash the system. If this happens, the character-mode version of the debugger should be used. 3. In order to use CodeWright with our IDE, you will need to change the "cwright.ini" file. This file contains the following line. ;LibPreload=cwdde.dll Uncomment this line by removing the ';' character. This is required to enable communication between the IDE and CodeWright when "weditcw.dll" is selected as the editor interface DLL from the IDE. 4. If you choose to not install help files onto your hard disk, you will not be able to get help on the C library or MFC library from the editor. 5. Parallel remote debug servers now work in an OS/2 session. 6. When configuring the browser to use the CodeWright editor interface, you must specify "weditcw.dll" as the editor DLL, save the new options, exit the browser, and restart the browser. Failure to do this will cause an exception to occur in the CodeWright interface DLL. 7. Under OS/2, if you are debugging a DOS application from the IDE, you must ensure that %DstDir%\binw is in your DOS path so that when the IDE starts a DOS session to debug your application, the remote server can find its support files. 8. Under OS/2, you must ensure that the "Comet cursor" desktop setting is disabled if you want to debug PM applications. By default, this setting is disabled. 10. The OS/2 Resource Comiler ( RC.EXE ) does not work correctly if the directory which contains RC.EXE occurs too late in your PATH environment variable ( > 250 characters ). If you experience problems with RC.EXE, you should change the PATH environment variable in your CONFIG.SYS file, by moving %WATCOM%\BINP and %WATCOM%\BINW earlier in the path.
 ftp.openwatcom.org/archive/11.0c/watcom-fortran-11.0c.exe  local copy
Watcom C/C++ v. 11.0c (Update for Watcom C/C++, 20/12/2002, SciTech Software) Readme/What's new
WATCOM C/C++ Version 11.0c - README ----------------------------------- Welcome to WATCOM C/C++ version 11.0c. This README provides helpful hints found during testing as well as updated information that was not available at the time the documentation was produced. This file includes: ------------------- Important Environment variables 11.0 C-level Notes 11.0 B-level Notes Fixes in versions 11.0 C, B and A-level Changes in 11.0 that may Require Recompilation Major Differences from Version 10.6 Other General Notes about version 11.0 =========================================================== Important =========================================================== Some Watcom tools currently do not function properly if installed in a directory with spaces in the name e.g. "C:\Program Files\WATCOM". Therefore choose a directory name like C:\WATCOM, D:\WATCOM etc. to install the tools in. =========================================================== Environment variables used by Watcom C/C++ =========================================================== For proper operation the Watcom compilers require few environment variables to be set up correctly. These variables differ slightly depending on the host platform (DOS, OS/2, Win32). The common variables are: - PATH - points to directories containing Watcom executables - WATCOM - points to the directory where Watcom 11.0c is installed and is used by various Watcom tools to locate files - EDPATH - points to VI/VIW configuration files - INCLUDE - points to directories containing header files is used by the compilers - LIB - points to directories containing library files; note that Watcom linker is able to locate Watcom runtime libraries without this variable - WWINHELP - points to the directory on the CDROM drive where help files are located. This may minimize hard disk space DOS specifics - PATH - only needs to point to the binw directory - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk Win16 specifics - PATH - only needs to point to the binw directory - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk Win32 specifics - PATH - must point to binnt and binw directories, in that order - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk OS/2 specifics - PATH - must point to binp and binw directories, in that order - LIBPATH - either the BEGINLIBPATH/ENDLIBPATH environment variable or the LIBPATH statement in CONFIG.SYS must point to the binp\dll subdirectory of Watcom 11.0c in order to let the OS find Watcom DLLs - HELP - points to binp\help to let Watcom GUI tools locate online help files - BOOKSHELF - points to binp\help to allow the IPF viewer (VIEW.EXE) locate Watcom online manuals These environment variables can be either set up in your starup files (which is the most convenient method if Watcom 11.0c is the only compiler you use) or you can use simple batch files to set these variables (useful if you need to switch between compilers, including different versions of Watcom compilers). Below are several sample batch files for setting the environment variables on various host platforms. The WATCOM variable must naturally be adjusted according to where Watcom 11.0c was installed on your system. The LIB environment variable isn't strictly necessary but you will probably need to set it for any libraries you use not supplied with Watcom compilers. Similarly you might need to adjust the INCLUDE variable for 3rd party library include files. DOS BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- Win16 BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\H\WIN REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- Win32 BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINNT;%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\MFC\INCLUDE;%WATCOM%\H\NT REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- OS/2 CMD file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINP;%WATCOM%\BINW;%PATH% SET BEGINLIBPATH=%WATCOM%\BINP\DLL SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\H\OS2 REM SET LIB= SET HELP=%WATCOM%\BINP\HELP;%HELP% SET BOOKSHELF=%WATCOM%\BINP\HELP;%BOOKSHELF% --------------------------------------------------------------------------- =========================================================== 11.0 C-level Notes =========================================================== All files licensed by Microsoft, IBM, Novell, Tenberry, Pharlap and Blue Sky Software have been removed in this version. The Windows SDK components and Microsoft Foundation Classes are not included in the 11.0c update. If you wish to do Windows programming you are required to have a prior version of Watcom C/C++ 11.0, especially for MFC support. Watcom C/C++ 10.6 may work, but this has not been tested. The DOS/4GW extender is also not included in the 11.0c update. If you wish to develop programs using DOS/4GW, you are required to have a prior copy of Watcom C/C++ and use the version of DOS/4GW that came with your earlier product. Alternatively you can switch to using the included CauseWay DOS extender which is a drop in replacement for DOS/4GW (with a few minor differences). Support for Watcom C/C++ 11.0c is at www.openwatcom.org =========================================================== 11.0 B-level Notes =========================================================== The SOM toolkit for OS/2 is no longer supported, and has been removed in this version. =========================================================== Fixes in versions 11.0 C, B and A-level =========================================================== The letter in the first column indicates which level the fix was first introduced. =========================================================== **************** ** C Compiler ** **************** C New warnings 1178-1181 were being counted in the warnings total yet confusingly were reported as errors in diagnostic messages. This has been fixed. These warnings are W1178: Type qualifier mismatch W1179: Parameter %N, type qualifier mismatch W1180: Sign specifier mismatch W1181: Parameter %N, sign specifier mismatch =========================================================== C The 16-bit compiler now chooses the right default C library when generating 16-bit OS/2 multithreaded DLLs. Now Selecting -bm -bd, generates a reference to CLIBDLL.LIB. Selecting -bd, generates a reference to CLIBDLL.LIB. Selecting -bm, generates a reference to CLIBMTL.LIB. =========================================================== C #pragma enum minimum now works as according to documentation. A workaround for 11.0, 11.0a & 11.0b is to use #pragma enum optimize =========================================================== C Compiler now accepts extended macros when command line switch -d+ is specified =========================================================== C Fixed compiler so that expression unsigned char uc; int i; i = !(unsigned char)uc; is correct =========================================================== C structs not getting proper alignment for bitfields at the end of structs inside structs =========================================================== C blowup if a syntax error happend in a switch expr =========================================================== C some warnings coming out with error on message =========================================================== C #pragma disable_message was allowing errors to be muted as well casuing trouble for code generation. =========================================================== C Fixed in-line assembly problem with 486/586 instructions when the /6 compiler option was specified. =========================================================== C Fixed WCL/WCL386 bug that shows up when you use "/fe=foo.exe /fm". The map file was named "FOO.EXE" which caused bizarre executables to be created. =========================================================== C Conditional move instructions for Pentium Pro were being assembled back to front =========================================================== B casting not getting flags like volatile correctly on pointers casting of unlike pointers not getting done __i64 numeric literals getting signed extended if number could fit in 32 bits -v option putting const/volatile on wrong side of a pointer =========================================================== B added a warning when trigraphs as used =========================================================== B _asm sometimes causing lookup problems if followed by an id on the next C statement =========================================================== B typedef function names not getting correct return type noticed when returning double =========================================================== B added warning for #if #endif pairs that come from different files =========================================================== B -zpw giving error instead of a warning =========================================================== B exceptions when getting a syntax error inside sizof operator =========================================================== B fixed looping bug in error recovery of declarations =========================================================== B constant folding of (int)((struct *)0+1) always returning 0 =========================================================== B const ? struct : struct causes compiler error =========================================================== B fixed a bug where typedef double (fortran_tc)(void) wasn't working as it did in 10.6. =========================================================== B fixed a bug where using a typedef'ed function prototype no longer worked in 11.0 if the function prototype and its definition are in separate files =========================================================== B wcc/wcc386 would crashes on the line #if ! after reporting: Error! E1063: Missing operand and then crashes, while wcc/wcc386 -p also crashes but does not report the error. =========================================================== B A single-line _asm statement without braces that refers to a variable would generate an error message. wpp/wpp386 compilers handle this sample correctly =========================================================== A fixed folding bug with static intialization #line comming out after latline in include file at times allowing macro expansion of #define 1230e+A2 where A2 is a macro indirect functions call of non default call types ie. stdcall not working .obj files sometime being created if error occurred in compile incorrect calls somtimes being made with functions that have unspecified parm definitions =========================================================== ******************** ** Code Generator ** ******************** C Fixed combining two move short constants into one move dword constant followed by two move byte constants that combined. The codegen would incorrectly "forget" the first byte-byte combined move after the short-short combined move. Example: struct S { unsigned short a,b; unsigned char c,d,e,f; }; void foo( S *p ) { p->a = 1; p->b = 2; p->c = 3; p->d = 4; p->e = 5; p->f = 6; } =========================================================== C Fixed a problem where 64-int constants were being aliased to 64-bit floating point constants in such a way that the values are incorrect. Example: struct S { double d; __int64 x; }; void foo( S *p ) { p->d = 6.25; p->x = 0; // changes to p->x = 6; } =========================================================== B When static member functions are supplied to the ?: operator, no code was being generated =========================================================== B added a compiler switch to disable the "common epilogue" optimization. =========================================================== A If optimizing for time, align procedures on 16-byte boundaries for anything above a 486. =========================================================== A Fixed a problem with short-circuit operators in which a side effect would be discarded (ie ( (a=b) || 1 ) would get reduced to (1) and the (a=b) discarded. Ditto for ( (a=b) && 0 ). =========================================================== A Fixed a problem with long filenames in object file generation. =========================================================== A Fixed a problem with loopopts and far pointers - if inductions optimizations introduced an add of an integer to a far pointer, it was possible that the add would be generated incorrectly, resulting in some highly suspicious references to odd locations such as -1[bp] or 7[bp]. =========================================================== A Fixed a problem in which conversions between floats and ints (or floats and doubles) within a union might not be generated correctly. =========================================================== *************** ** C Library ** *************** C Internal routines __FSU8, __FDU8, __FSI8, __FDI8, __I8FS, __U8FS, __I8FD, __U8FD, used to convert between float, double and signed __int64, unsigned __int64 for alternate maths libraries were - missing for 32-bit C libraries - converted incorrectly for 16-bit C libraries This is now fixed =========================================================== C Fixed sys_nerr so that it was the right value =========================================================== C Internal routine __GETDS has been added to the 32-bit OS/2 C libraries =========================================================== C Internal functions __U8FD7 and __U8FS7 have been made smaller and faster. These routines are used to convert unsigned __int64 to double and single respectively. Internal function __I4D is now faster under some circumstances =========================================================== C Fixed scanf() family where the wrong count would be obtained for floating-point input. e.g: int charcnt; double data; sscanf( "123." , "%lg%n", &data, &charcnt ); Fixed scanf() family so that the negative sign is handled when reading unsigned integers (a requirement of ANSI C) =========================================================== C Fixed _fullpath() where under certain circumstances the heap could be corrupted =========================================================== C Fixed memory leak in tmpfile() for Netware libraries =========================================================== C _searchenv() now works for quoted paths including 4NT-style paths =========================================================== C Fixed problem in memory allocator that could cause NULL to be returned without going to the system to get more memory. =========================================================== C Fixed bug in __brktime in gmtime.c. Jun 2, 2101 was returned as Jun 1, 2101. Affected ctime, localtime, gmtime. =========================================================== C Fixed bug in delay() for DOS/16, DOS/32, Win 3.1 and Win386. Previous version did not work at all for a number of reasons. New version is accurate to within +/- 1/100 second. =========================================================== C Fixed bug in printf formatting. %#.6g would not display trailing zeros for a number like 1.0e6. Output was 1.e+006 when it should have been 1.00000e+006. Fix was made to _ldcvt(). =========================================================== C Fixed eof(), filelength(), fsync(), _os_handle(), _get_osfhandle(), and setmode() in Netware library by removing a failing file handle check. =========================================================== C Fixed bug in mktime() that affected 16-bit libraries. Years >= 2079 resulted in truncation due to 16-bit rather than 32-bit precision. Changed 365 to 365L to force 32-bit calculation. =========================================================== C Fixed bug in run-time exit code. Made sure that _WindowExitRtn is called early on in exit() rather than in _exit() (since run-time system is shut-down by the time _exit gets called). This bug impacted "Save as" in default windowing support. =========================================================== C Fixed bugs in _wputenv, _wsetenv, _wgetenv that caused a crash in clearenv at program exit. =========================================================== C Fixed opendir() for DBCS environments (where backslash, slash, asterisk and question mark might appear as the second character of a double-byte character in a path specification). We now use _mbsinc() and _mbsnextc() to scan a path string. =========================================================== C Added _mktemp() to other platforms including 16/32-bit DOS, 16-bit Windows, 32-bit extended Windows and 16/32-bit OS/2. Previously, only Win32 was supported. =========================================================== C Fixed a problem with multi-threaded applications where a thread was very short-lived. A multi-threaded application would crash when a thread was very short-lived. The problem seemed to appear with more frequency on the newer generation of fast processors. The crash occurred in _CBeginThread which is the C run-time implementation of _beginthread. A workaround was to delay the thread from exiting using some sort of gating technique like Sleep or a signal from the creating process that permitted the thread to exit. A more detailed description of the problem follows. When a thread is created, a thread handle is returned to the process doing the CreateThread. Our run-time library wants to pass this thread handle to the newly "executing" thread so that when the thread exits, the thread can free the handle itself. The "main" process passes the thread handle to the thread by storing it at a location provided by the thread. This location is "created" by the thread so the main process waits for an event that signals that the location is created. But here's what happens. The thread signals the event and keeps on executing. In fact, it executes right through to the termination code and exits before the main process is dispatched again. Eventually the main process is resumed (since the event that it waited on has occured) and then it stores the handle into memory. This memory however no longer exists because the thread has already come and gone. An access violation occurs. The problem was fixed by adding code to complete the handshaking process (the problem had been already half solved). The thread now waits for the creating process to provide the handle. =========================================================== C spawn... functions with P_NOWAIT under Win32 no longer allocate an extra process handle. =========================================================== C Simplefied Win32 version of _pipe. Pipes are inheritable if you use the SECURITY_ATTRIBUTES struct. Added support for O_NOINHERIT mode attribute. =========================================================== C Fixed the multi-byte character functions so that they work correctly for all double-byte character sets (not just Japanese). The revised functions are: _mbctolower _mbctoupper _ismbcalnum _ismbcalpha _ismbccntrl _ismbcdigit _ismbcgraph _ismbclegal _ismbclower _ismbcprint _ismbcpunct _ismbcspace _ismbcsymbol _ismbcupper _ismbcxdigit _mbslwr, _fmbslwr _mbsupr, _fmbsupr =========================================================== C Fixed Win32 version of _dos_findfirst/_dos_findnext so that _A_SUBDIR, _A_HIDDEN, and _A_SYSTEM work correctly. =========================================================== C Fixed Netware version of library so that code-gen support routines like __i8d are not exported. This removes the problem caused when 2 or more NLMs ended up exporting the code-gen support routines. =========================================================== C Removed assert from low-level thread data pointer acquisition routine (since assert requires a thread data pointer in multi- threaded applications so it was no good to use assert to complain that a thread data pointer could not be acquired). Normally, this problem would not be seen. =========================================================== C Added some error checking to Win32 cprintf and putch (conio) routines. =========================================================== C _controlfp called _controlfp rather than _control87 resulting in a recursive, infinite loop. Changed _controlfp to call _control87. =========================================================== C Fixed a number of I/O routines to make them thread safe. Included are the Netware version of fopen, _fsopen, all versions of tmpnam, all versions of fclose. =========================================================== C Fixed tzset() for Windows NT/2000 in areas where there is no daylight savings time. As a result, gmtime() should now be correct for all areas of the world. =========================================================== C Fixed the Win32 version of _dos_xxx functions so that they return the OS error code like their DOS and OS/2 counterparts. Fixed _getdcwd(), _wgetdcwd() so that they set a proper errno value. Set errno if drive doesn't exist. Fixed putenv(), _wputenv(), setenv(), _wsetenv() so that they set a proper errno value. Fixed _wdos_findfirst(), _wdos_findnext(), _wdos_findclose() so that they set a proper errno value. Under Win32, they now return a proper OS error code. Fixed Win32 version of open(), _wopen(), sopen(), _wsopen(), _sopen() and __wsopen() so that it first checks to see if it can store the file handle returned by Win32 before attempting to open the file. This fix corrects the "orphaned file" problem caused by opening, then closing a file when the file handle can't be stored. Fixed the OS/2 spawn routines so that a proper errno value is set when running out of memory. Fixed tmpfile() multi-threading problems including infinite loops when the "TEMP" environment variable (TMP, TEMP, TMPDIR, etc.) points to a non-existent path. Added _strerror() for MS compatibility. Also added wide char version _wcserror(). Added _doserror() to return Win32 system error message for a _doserrno value. Improved mapping of Win32 error codes to errno values. =========================================================== C Fixed a memory leak in run-time code. Added call to free the "initial thread data storage" (the storage used by the main thread in a single-threaded or multi-threaded application). Affects Win32 and 32-bit OS/2 applications. =========================================================== C Fixed a problem with tmpnam() in the Netware library in version 11.0c. New names were not being created. =========================================================== C Fixed bug in Win32 write(). The zeropad function was not necessary and didn't handle large files, in any case. Now you can seek to a position > MAX_INT and then write(). =========================================================== C Fixed a problem where _beginthread example was crashing sometimes =========================================================== C Fixed _chain_intr() so that flags is passed to interrupt handler =========================================================== C Fixed 32-bit strcmp() so comparing unaligned strings does not fault =========================================================== B Fixed a bug where an app was doing a chmod() on a file in a directory and is supposed to remove the file and then delete the directory itself. Under Win95 the directory was getting removed, however under NT it was not. Use div in place of ldiv for 32-bit code, since they should be the same. Marked the Product Version as 11.0b for the RTL DLLs, such as CLBR110.DLL, CLBS110.DLL, MT7R110.DLL, MT7S110.DLL, MTHR110.DLL, MTHS110.DLL, PLBR110.DLL & PLBS110.DLL, so it is less difficult to distinguish them from older DLLs. =========================================================== B Fixed a bug where Win386 DLLs would GPF every second time they are unloaded. To reproduce this, modify the samples in samples\fortran\win\dll by adding the line "call FreeLibrary( hlib )" before the line "FWinMain = 0" in gen*.for. When you run the samples, they GPF the first, third, fifth, etc. times when FreeLibrary is called. If you compile/link these modified samples with 10.6a or earlier versions, then the problem doc not occur. Reproduce this behaviour under WFW 3.11 and Win NT 4.0. Customer has reproed this under Win 95, and also reproed it when the DLLs are called from VB 4.0. =========================================================== B _wtof was missing from the 16-bit math libaries, and the 32-bit version was returning erroneous results. =========================================================== B Target: Win32: Using fmod() or modf() in code compiled with /br was giving undefined references. =========================================================== B Fixed a bug with itoa() in win16 apps, where you couldn't run multiple instances of the app. If you tried to, you got "Cannot start more than one copy of the specified program" under NT and "Error: Cannot <something> multiple writeable data segments" under Win 3.x. =========================================================== B Win32 target only: feof() was not set when end-of-file occurs on an input pipe. ferror() was being set instead. =========================================================== B ftime() was not reporting correct timezone field in timeb struct when TZ is negative. =========================================================== B Overflow range error in pow was not reported unless /fpc used. =========================================================== A _findfirst() has been changed to take a const char * instead of just a char *. =========================================================== A __FSU87 was trashing ecx - this routine is called to convert an unsigned __int64 to a float. =========================================================== A Fixed memory leak, due to us not deallocating the _iomode array during fini rtns. Also added _UnloadCLib call to library to allow user to properly unload 16 bit OS/2 user loadable DLLs. =========================================================== A Fixed a bug where fortran default windowing apps would sometimes appear to print lines twice, when printing at the bottom of the screen. Since they were being printed at the bottom of the window and then not erased when the window scrolled up, leaving a 2nd copy at the bottom =========================================================== A Input value range checking for strtod() has been improved for very small values. =========================================================== A The runtime dll support has been fixed to no longer leave a potentially dangerous reference from the C runtime DLL into whichever DLL has been most recently loaded into the process image. The reference from the C runtime DLL now points directly into the Math runtime DLL. =========================================================== A The _dos_getdiskfree() function for 32bit platforms now has an expanded data structure. =========================================================== The assert() function for WIN32 and OS/2 platforms will attempt to use stderr for output if it is available. =========================================================== A The __declspec(thread) support for WIN32 platforms has been improved. In some, pathological cases, it could lead to a GPF on program startup. =========================================================== A The system() function for WIN32 platform no longer passes posix file handles for inheritance by child processes by default. =========================================================== A The delay() function for NEC98 machines used to hang on initialization. =========================================================== A The race condition in the _beginthread() function related to the saving of the child thread handle has been fixed. =========================================================== A The multibyte init code for the C runtime library would always crash on startup when running under the Pharlap Run386 or TNT DOS extenders. =========================================================== A The heapchk() function for 32bit platforms could, in some cases, enter an infinite loop. =========================================================== A The posix level open() function for WIN32 platforms did not properly truncate existing files on NT server machines when run from an NT workstation. =========================================================== A The WIN32 stat() function now ensures that directories cannot be marked as character mode devices. =========================================================== A The WIN32 and OS/2 runtime shutdown code now does a better job of releasing all resources on image shutdown. =========================================================== ****************** ** C++ Compiler ** ****************** C The 16-bit compiler now chooses the right default C library when generating 16-bit multithreaded DLLs. Now Selecting -bm -bd, generates a reference to CLIBDLL.LIB. Selecting -bd, generates a reference to CLIBDLL.LIB. Selecting -bm, generates a reference to CLIBMTL.LIB. =========================================================== C The C++ compiler did not remember the "signedness" of constants in enums and would, under the proper conditions, sign extend an unsigned 64-bit constant. =========================================================== C Fixed processing of floating-point command line switches. /fp5, /fp6, floating point code generator switches would reset /fpi87 model back to defaults and vice versa. This meant poor floating-point code was generated. =========================================================== C Fixed packing of structs when -zp16 is used and the members are aligned to 8-byte boundaries to align the class to an 8-byte boundary rather than a 16-byte boundary. =========================================================== C Fixed diagnosis of pointer comparisons for unrelated classes. This change also affects the ?: operator if there are two pointers in the ':' expressions. Example: struct A {}; struct B {}; bool fn( A *p, B *q ) { return p != q; } =========================================================== C Fixed compiler to not force static functions to be linkage "C++". Example: extern "C" { static int fn() { return 0; } }; =========================================================== C Fixed a problem when a scope had more than approx. 25000 unique symbols in it. The symbol table code in the compiler could not handle not growing the symbol table to reduce the average search time. =========================================================== C Added level 4 warning for switch statements that have no case labels. =========================================================== C Handling of const and reference members in a class had problems when dealing with default op= member function. Example: struct NestedA { NestedA(); ~NestedA(); NestedA& operator=( const NestedA& s ); char* & _ptr; }; struct NestedB { NestedB(); ~NestedB(); NestedB( NestedB& a ); void *pd_ptr; }; struct NameValuePair { NestedA x; NestedB y; }; int main( int argc, char** argv ) { NameValuePair a; NameValuePair b; a = b; return 0; } =========================================================== C Fixed sizeof( L"1234" ) to return 10 instead of 20. =========================================================== C Fixed identical function checking to handle the following case: enum E { A,B,C }; struct test { void foo( E ); void bar( E & ); }; void test::foo( E & ) { // error } void test::bar( E ) { // error } =========================================================== C Fixed a lexical lookup problem from within a member function in a local class finding a symbol in the host class. The compiler incorrectly thought that 'this' could be used to access the symbol. Example: struct ABC { ABC() { static struct B { void f() { meth2(); // error } } b; } void meth2() { } }; =========================================================== C Conditional move instructions for Pentium Pro were being assembled back to front =========================================================== B fixed a bug where using /d2 /hd could cause the compiler to hang. =========================================================== B fixed a C++ Preprocessor problem: where #if ( x > y ) could produce incorrect results when x and y are expressions. =========================================================== B An error was missing in the following case: extern void f( int a, char *b ); extern void f( int a ); void *pf = f; Work around: none =========================================================== B Anonymous structs or classes within unions could not always be initialized properly. struct s { union { struct { float a, b; }; float c[2]; }; }; s d = { 0.0, 0.1 }; Work around: Set values in object manually. =========================================================== B Output a warning if a #endif isn't in the same source file as its companion #if. Example: --- foo1.h --- #ifndef FOO1 #define FOO1 #endif #endif // warning --- foo2.h --- #ifndef FOO2 #define FOO2 #include "foo1.h" #endif --- foo.c --- #include "foo2.h" =========================================================== B A / D B \ / C We no longer prefer the conversion from C->D over the conversion from C->A as the number of levels of conversion does not matter when D and A are not related. =========================================================== B Added level 3 warning for unary '-' of an unsigned operand (result type is still unsigned). Cast operand to signed type to remove warning. Example: void bar( int ); void bar( unsigned ); ... // selects bar( unsigned ) foo( -2147483648 ); =========================================================== B Improved PCH reading of error message levels so that header file changes are added to current message levels rather than performing a complete replace of the error message levels and ignoring any command line adjustments. =========================================================== B Fixed problem with -d2s that caused run-time error "undefined constructor or destructor called!" to occur. =========================================================== B Was not generating correct code for some default functions in classes with modifiers. Work around: write definitions for required constructors, destructors, and operator = functions =========================================================== B Was not generating correct code for the default operator = when the class contained an array of elements where an element could be byte-for-byte copied and also had virtual functions. =========================================================== B Destruction sometimes was omitted following a delete which followed a block closure which contained a destruction. Work around: introduce a destructable temporary before the delete. =========================================================== B Fixed scanning of large strings with escaped characters. Example: char *p = "\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n"; Work around: break string up into smaller strings and let compiler concatenate them "1234567890" --> "12345" "67890" =========================================================== B Added warning from scanner whenever a trigraph is processed. Example: // string expands to "(?]?~????"! char *e = "(???)???-????"; // work around: char *f = "(" "???" ")" "???" "-" "????"; char *g = "(\?\?\?)\?\?\?-\?\?\?\?"; =========================================================== B Fixed analysis of shift operators with regard to result type. Previously the result type was the same as other binary arithmetic operators. Now the result type is the promoted type of the left hand operand. Example: int f( int x, unsigned s ) { // should do signed right shift return x >> s; } =========================================================== B Compiler incorrectly warned that new/delete operators were declared in a namespace when they were declared as friends of a class. Example: class N { friend void *operator new( unsigned ); friend void operator delete( void * ); friend void *operator new[]( unsigned ); friend void operator delete[]( void * ); }; Work around: disable warning =========================================================== B Compiler incorrectly diagnosed an invalid constant when inside a preprocessing #if region that should have been excluded from such errors. Example: #if 0 Version 35I63 #endif Work around: put constant in a comment (if possible) =========================================================== B Compiler now correctly evaluated all preprocessor expressions involving binary operators of the same precedence. Example: #if (0 < 2 - 1 + 3) now correctly evaluates to TRUE. It previously evaluated as if the expressions was ( 0 < 2 - ( 1 + 3) ) Note: this bug only occurred in preprocessor expressions. =========================================================== B Compiler now initializes member pointers at link-time in more cases than before (notably array initialization). =========================================================== B Constant folding of 64-bit arithmetic would incorrectly warn about overflow if the expression involved two 32-bit quantities multiplied together to produce a 64-bit quantity. =========================================================== B wpp: -zff and -zgf now generate code that doesn't save fs/gs in the prologue/epilogue of the function (matches behaviour of C compiler and ds/es). The pop of fs/gs would fault if the selector had been freed. =========================================================== B Fixed error recovery for the following code fragment: template <class T : public Base > struct S {}; =========================================================== B wpp: optimized -3 code to use size override prefixes when dealing with push and mov immed instructions. =========================================================== B Under several combinations of options ?: did not generate proper code to select static member functions. typedef void (*void_func)(); class A { public: static void f(); static void g(); }; void_func func(bool b) { return b ? A::f : A::g; } Work around: Avoid use of ?:, for example, void_func func(bool b) { if( b ) return A::f; else return A::g; } =========================================================== B Fixed a problem where the compiler went into an infinite loop generating Dwarf debug information with namespaces that contained typedefs referencing types in other namespaces. Work around: use -d3 instead of -d2 Example: class A { public: virtual ~A() {} }; class B {}; namespace N { class C {}; typedef B T; class D { public: virtual ~D() {} }; class E : public D, public A { public: E() {} B* getB() { return 0; } C* getC() { return 0; } }; } =========================================================== B Fixed a problem where function template instantiations were not being set to C++ linkage. Work around: don't use function templates in extern "C" blocks or functions Example: template <class T> void tf(T) { return; } struct A { } a; struct B { } b; extern "C" void bar() { tf(a); tf(b); } =========================================================== B Allow bool op= bool expressions Work around: break up expression A op= B into A = A op B Example: void foo( bool a, bool b ) { a |= b; } =========================================================== B Fixed compiler GPF in situations where an abstract class tries to create or return itself. The GPF was caused by the compiler trying to output a good error message with all the unimplemented abstract methods. Example: class A { virtual ~A() { } virtual void *fn( char *name ) = 0; A Next() { return( _next ); } }; void foo( A *it ) { it->Next(); } =========================================================== A Fixed a minor bug that caused spurious warnings to be generated for pre-compiled headers containing integer constants. The following example, if used in a pre-compiled header, would cause a warning about truncating integer constants: class Foo { public: int Bar(int, int=1); // warning generated here }; =========================================================== A Was mis-diagnosing conversions from types of the form Type cv1 * cv2 & to types of the form Type cv3 * cv4 & when cv3,cv4 are more qualified than cv1,cv2 respectively and cv4 does not contain "const" (it must for the conversion to be legal). Work around: none, the conversion is illegal. =========================================================== A Changed the alignment of doubles and long doubles to be on 8-byte boundaries when not optimizing for space. This will increase performance on many hardware configurations. =========================================================== A Incorrect code was being generated for "?:" sequences when the target is a class object and when the expression between the "?" and the ":" was converted to the type of the expression following the ":" work around: cast the expression between the "?" and the ":" to the type of the expression following the ":" example: struct Cls { Cls( int ); Cls( Cls const & ); }; extern Cls target; void foo( bool test, int int_val, Cls const & class_val ) { target = test ? int_val : class_val; // generated bad code } The work-around is to re-code foo as follows: void foo( bool test, int int_val, Cls const & class_val ) { target = test ? Cls( int_val ) : class_val; } =========================================================== A When the -za switch is not specified (i.e., when extensions are enabled) the compiler was extended to accept as member pointer values, class-qualified and naked non-static member functions. The proposed standard requires that & precede a class-qualified name. struct S { int foo( float ); }; int (S::*mp)( float ); // a member-pointer variable ... // the following are all accepted: mp = &S::foo; // standard mp = S::foo; // extension mp = foo; // extension (must be in scope) =========================================================== A Fixed a bug that caused the compiler to crash under certain conditions when writing a pre-compiled header. =========================================================== A Fixed compiler so that floating point support is loaded if you call a routine with the address of a double. This is req'd if you need to skip floating point numbers but never use them. e.g., scanf( "%d %f %d\n", &i1, &d1, &i2 ); =========================================================== A Fixed compiler so that -dXXX="a-/ b" is allowed. Compiler was terminating -d macro definition at a -, /, or white space. =========================================================== A Fixed problem where a MI conversion was required before initializing a const reference temporary. Example: struct A { int a; }; struct C { int c; }; struct B : public C, public A { int b; }; typedef A * T; T check; struct Array { void Append( const T & t ) { if( t != check ) _fail; } void Remove( const T & t ) { if( t != check ) _fail; } }; void Foo( B * b ) { Array arr; A * a = b; arr.Append( a ); arr.Remove( b ); } int main() { B b; check = &b; Foo( &b ); _PASS; } =========================================================== A Fixed problem where direct calls to __stdcall dtors were incorrectly routed through a calling convention thunk normally used for table-driven destruction. =========================================================== A When generating preprocessed output, the compiler now eliminates empty lines if you do not want #line directives. =========================================================== A Correctly handle multibyte characters with the second byte equal to 0x5c ('\\') when they terminate a C++ //-style comment (i.e., do not treat them as a line splice). Example: // <0x81><0x5c> =========================================================== A A function that calls setjmp will have its local variables marked as "stay in memory" but this attribute incorrectly affected function template generic type binding. Example: #include <setjmp.h> template <class T> void delete_object( T*& object ) { if( object ) { delete object; object = NULL; } } struct CValue { int i; }; void foo() { CValue *v; jmp_buf b; setjmp(b); delete_object(v); } =========================================================== A Fixed problem with C++ empty base optimization that caused spurious errors to be diagnosed. Example: struct CClassBase { }; struct CClass2 : public CClassBase { struct CClass1 { CClass1(int) {} }; CClass1 m_c; protected: CClass2(void); }; CClass2::CClass2(void) : m_c(1) { } =========================================================== A Fixed problem with macro expansion that triggered boundary conditions in the compiler which in turn caused incorrect macro expansion. Example: #define example( b ) b ## _X Y_ ## b ## _Z example( x123456789012345678901234567890 ) example( x12345678901234567890123456789 ) example( x1234567890123456789012345678 ) example( x123456789012345678901234567 ) example( x12345678901234567890123456 ) #undef example =========================================================== A Fixed problem with error recovery in complex source code with __stdcall classes. =========================================================== A Return expressions with comma operators sometimes were compiled incorrectly. This resulted in a bad library for multi-threaded Netware when exceptions were used. Work around: assign the expression to a temporary and then return the temporary. example: int x; void foo( int y ) { return ( x = 1 , y + 1 ); } replace by: int x; void foo( int y ) { int temp = ( x = 1 , y + 1 ); return temp; } =========================================================== A If a source file doesn't end in a new-line, the C++ compiler now compensates for this to allow new-line terminated preprocessing directives to work properly. Example: #define C 3 // file doesn't end in '\n' =========================================================== A Incorrect code was generated for an argument to an ellipsis function (one declared with '...' ) which was computed as an lvalue class value for a destructible class. Example: void foo( int, ... ); class S { . . . ~S(); . . . }; S* p1; S* p2; bool b; . . . int i = foo( 1997, b ? *p1 : *p2 ); Work around: use a cast to force underlying expressions to be rvalues: int i = foo( 1997, b ? (S)*p1 : (S)*p2 ); =========================================================== A Compiler would crash when it could not generate RTTI info into a 64k segment (only applies to 16-bit targets). The error was reported properly but recovery resulted in a memory fault in the compiler. =========================================================== A Compiler would crash (infinite loop or page fault) when inlining functions that contained certain usages of anonymous unions. Example: inline int ii( int i ) { union { int x; unsigned char y; }; x = 0; y = i; return x; } ... ii( q ); Work around: #pragma inline_depth(0) =========================================================== A Tweaked scanning of pp-number tokens in non-ISO/ANSI mode so that old code continues to compile correctly. Example: #define A10 3 #define A11 0x1e+A10 int v = A11; // 0x1e + 3 =========================================================== A Added -mfi option to indicate to the compiler that interrupt functions can assume the flat memory model is preserved. If this option is not used, interrupt functions have to assume that a different stack segment is being used and so auto data must be manipulated as far data. =========================================================== A Fixed diagnostic of 'void' expression types in certain contexts. Example: void a(); int __u( int i ) { return i == a() || a() == i; } =========================================================== A Added diagnostic to identify cases where the calling convention of a virtual function override has changed. Example: struct B { void __stdcall foo( int, int ); }; struct D : B { void foo( int, int ); }; =========================================================== A A function such as Composed* ctor( Composed const & src ) { AnotherDtorable stuff_1; AnotherDtorable stuff_2; AnotherDtorable stuff_3; Composed* ptr = new( some_data ) Composed( src ); return ptr; } where AnotherDtorable and Composed are destructable objects could cause the object located by ptr to also be destructed under some combinations of options. Work around: place the new statement in a separate function. =========================================================== A The following code generated a spurious warning, claiming that fn was unreferenced. extern void import( const void * ); static void fn() {} void external() { const void * foo = fn; import( foo ); } Work around: ignore that warning or disable it =========================================================== A Diagnose extra initialization arguments for parenthetical initialization of non-class types. Example: int h(1); int f(1,2,3); int g( int(1,2,3) ); foo() { int q = 1, // <- notice comma f(1,2,3); } =========================================================== A Diagnose definition of member functions that are not declared but match the signature of another member function with default arguments. Example: struct A { void f1( int, bool = false ); }; void A::f1( int ) { // error } =========================================================== A Corrected problem where a inline template function was incorrectly diagnosed as undefined if it was inside a namespace. Example: namespace alpha { template <class T> inline T & f (T & a) { return a; } inline long b ( long a ) { return f ( a ); } } void fn( void ) { long a = 100; long c; using namespace alpha; c = b ( a ); } =========================================================== A Corrected problems where certain class hierarchies caused problems in generating construction/destruction code or exception handling state tables. The problems manifested themselves as incorrect code/data or compiler faults. Example: #include <fstream.h> #include <stdlib.h> #include <iostream.h> class TextFile { public: ifstream solidTextFile; }; class SolidTextFile : public TextFile { }; void main() { SolidTextFile aFile; } =========================================================== A Corrected problem where, in copy initialization, a user-defined conversion function from source class to a non-const reference of the target class would not be preferred over another ambiguous conversion. In this example, the conversion A::operator String() going to String::String( String const & ) should be preferred over the ambiguous use of the String::String( char ) constructor from either A::operator int() or A::operator float(). Example: struct String { String(); String( char ); }; struct A { operator String() const; operator int() const; operator float() const; }; struct B { const A& GetitsA(); }; void foo(B b) { String s; s = b.GetitsA(); } =========================================================== A Fixed reading and writing of the precompiled header file when it contained C++ EH information for classes. =========================================================== ***************** ** C++ Library ** ***************** C eofbit for ifstream's is now set on a read() when at EOF =========================================================== C Fixed buffer overrun when specifying a precision (SetPrecision) greater than LDBL_DIG. This used to cause an application to crash Windows 95. =========================================================== C Added conditional semaphore unlock to the destructor of a "lock" object. =========================================================== ****************** ** Disassembler ** ****************** C Fixed WDIS so that it correctly disassembles 32-bit code assembled with MASM/TASM as 32-bit and no longer as 16-bit =========================================================== C Fixed ORL library so that additional OMF THEADR records in object files are not diagnosed in error. Additional THEADR records occur when #include'ing source code and requesting Codeview debug info. =========================================================== B wdis couldn't recognize "SHLD EDX,EAX,CL", "SHRD EDX,EAX,CL" and a few other instructions. =========================================================== B Wdis did not give the correct code when disassembling memchr(). It placed the label in the wrong position. This is because the code makes a jump into the middle of an opcode sequence depending on the result of memchr(). WDISASM with 10.6 "knew" about this and issued DB instructions. =========================================================== A fixed problem with disassembly of 3-operand imul instructions (only 2 operands were displayed) =========================================================== ******************* ** Documentation ** ******************* C Fortran subroutine library functions FNEXTRECL() and FTRACEBACK() are now documented =========================================================== C Predefined C++ macros _CPPUNWIND & _CPPRTTI are now documented =========================================================== C #pragma read_only_file which appears in nearly all Watcom header files is now documented. The default depth for #pragma inline_recursion has been corrected. The default depth is 3. =========================================================== C Functions _dieeetomsbin(), _dmsbintoieee(), _fieeetomsbin(), _fmsbintoieee(), _findfirsti64(), _findnexti64(), _wfindfirsti64(), _wfindnexti64(), _filelengthi64(), _lseeki64(), _telli64(), _fstati64(), _wfstati64(), _stati64(), _wstati64() are now documented in the C library. =========================================================== B Fixed the C library matherr example, so it works with the C++ compiler. =========================================================== B Watcom 10.6 aligns structure members on a byte boundary by default. Watcom 11.0 aligns structure members on an 8 byte boundary by default. Fixed some places where the documentation hadn't been updated from 10.6. =========================================================== B Added - wlink's OPTION SHOWDEAD, which was not documented. This option is very useful as it shows in the map file which functions the linker stripped out. =========================================================== B Added documentation for wcc/wcc386/wpp/wpp386 options /of & /of+. =========================================================== B Corrected the Programmer's Guide sample on 32-bit OS/2 DLLs. The dllsamp.c file was missing a: define EXTERNC. =========================================================== B Upated Linker docs indicate that incremental linking is not supported for 16-bit DOS and NetWare targets. =========================================================== ********************** ** Graphics Library ** ********************** C Fixed a bug where vector fonts were being drawn incorrectly =========================================================== C Now cache the SVGA Page for better performance =========================================================== C Fixed a bug in NEC version of graphics library "SetPixel" function. =========================================================== C Fixed a bug in _EGAScanRight. The ODD/EVEN mode bit should not have been turned on. On most adapters, this didn't cause a problem. On a Number Nine video card, this showed up as a problem in flood filling an area. =========================================================== ******************** ** C Header Files ** ******************** C Fixed headers <typeinfo.h>, <exceptio.h> so that they include other Watcom C++ headers with the .h extension correctly. This was causing STLPort's headers to be used in preference to Watcom's. =========================================================== C Fixed getc macro in stdio.h. The '\0x' changed to '\x' in two places. Old version resulted in a loss of an attempted optimization. The correction will result in better performance for getc(). =========================================================== C Added Microsoft's FLT_NORMALIZE constant. Added Microsoft's _DBL_RADIX constant. Added Microsoft's _DBL_ROUNDS constant. Added Microsoft's _LDBL_RADIX constant. Added Microsoft's _LDBL_ROUNDS constant. Added Microsoft's DBL_RADIX constant. Added Microsoft's DBL_ROUNDS constant. Added Microsoft's LDBL_RADIX constant. Added Microsoft's LDBL_ROUNDS constant. Changed FLT_MIN_EXP from (-127) to (-125). Changed DBL_MIN_EXP from (-1023) to (-1021). Changed LDBL_MIN_EXP from (-1023) to (-1021). Changed FLT_MIN_10_EXP from (-38) to (-37). Changed FLT_MAX_EXP from 127 to 128. Changed DBL_MAX_EXP from 1023 to 1024. Changed LDBL_MAX_EXP from 1023 to 1024. Added accurate representations for DBL_MAX, DBL_EPSILON and DBL_MIN named _DBL_MAX, _DBL_EPSILON and _DBL_MIN. =========================================================== C Improved code generated from isxxx() functions. Changed description of messages associated with some errno values. Added definition of NULL to float.h. Added prototypes for _strerror(), _wcserror(), _doserror(), _wdoserror() to string.h. =========================================================== A const qualifiers have been added to the char* parameters to the findfirst and variant functions in io.h =========================================================== A The register mode calling convention prototype for longjmp() is no longer marked as "#pragma aborts" to facilitate profiling support. =========================================================== ********************************************** ** Integrated Development Environment (IDE) ** ********************************************** C Fixed incorrect access of C error/warning help file WCCERRS.HLP (messages were one out) =========================================================== A Added pentium pro (p6) switches to the options pages ( compiler, linker, assembler, etc. ) =========================================================== A added a switch for Watcom debugging info to the linker options page - watcom was previously the default if you selected debug all, now Dwarf is the default =========================================================== A fixed a resource problem that was causing some of the buttons and menu items to appear with no text =========================================================== A Don't use incremental linking for DOS or Netware applications - it is not supported =========================================================== A Changed the compiler options for Netware targets to use -5s, -ms -- stack based, small model =========================================================== A changed the linker options for 32-bit OS/2 DLL's now uses op manyautodata, initinstance, terminstance =========================================================== *************** ** Librarian ** *************** C Updated command line help for WLIB /? Help added for switches -p, -s, -v =========================================================== C Wlib overwrote an existing object file with no truncation (in the "*" extract operation). This resulted in a corrupt object file when the new one was shorter than the old one. =========================================================== C Fixed some problems related to creating AR format libraries using the -fa switch. =========================================================== B Wlib wasn't giving a warning message if you tried to extract a nonexistent object file. =========================================================== ************ ** Linker ** ************ C Fixed problem where WLINK was inserting random text (often parts of WLSYSTEM.LNK) in the final executable =========================================================== C Fixed WLINK so that it now works interactively again =========================================================== C Added support for case-insensitive searching of COFF (AR-format) libraries. For example, the linker now matches _SLEEP@4 with _Sleep@4 in KERNEL32.LIB. =========================================================== B Fixed output of QNX executables for a rare case of internal buffer filling. =========================================================== B OP INC IS NOT SUPPORTED FOR 16-BIT DOS OR NetWare, in 11.0 you didn't get an error to indicate this =========================================================== B fixed a bug where "wlink debug watcom types" or "wlink debug watcom locals" or "wlink debug watcom lines" would all cause the linker to crash "wlink debug watcom all" was fine =========================================================== B NT linker was crashing if you ran it with no arguments, and typed something at the WLINK> prompt =========================================================== B fixed a bug where WLINK was crashing while trying to link an app with codeview debuggin info =========================================================== ********** ** Make ** ********** A In non-Microsoft mode, WMAKE will find and process a file named "MAKEFINI" after all makefiles have been processed. =========================================================== *********************** ** Resource Compiler ** *********************** C Added support for CodePage 1250 to UNICODE translation (1250.UNI). =========================================================== ************** ** Debugger ** ************** B dwarf dip now exits gracefully if it failes to load debug info =========================================================== B Fixed a bug on DOS or Win95 Host: binw\wd was crashing on loading DOS/4GW EXE. The debugger was running out of memory trying to read in a large app or large app + symbolic debugging info (.SYM) file. Problem did not occur with the binnt debuggers under NT. =========================================================== B binw\wd was crashing when inspecting ofstream structure with Watcom or Codeview debugging information. =========================================================== B Debugger was crashing when double-clicking on an entry in calls window. =========================================================== B If winserv terminated abnormally for any reason, you could not restart it unless you gave the server a different name. This is a bigger problem than appears at first, because the IDE uses an unnamed debug server. As such, if you were debugging DOS/4GW under Windows 95 and the application crashed the server, then you had to reboot before you can debug in the IDE to start the debugger again. Winserv will now free the name and try again if it tries to connect to a server and is unable to connect. =========================================================== A Rolled back DOS4G extender to 1.96 to fix pharlap application debugging crashes. =========================================================== A fixed a bug where you couldn't debug "Large" DOS/4GW apps =========================================================== *************** ** Assembler ** *************** C Conditional move instructions for Pentium Pro were being assembled back to front =========================================================== C Fixed message numbers so that they increase sequentially from 1 and from 500 in each of the two groups of messages. Previously, message numbers had large gaps in them. =========================================================== B Fixed a bug where wasm wouldn't assemble: "psrlq m1, dummy" where dummy is a quadword It gave an error: "Second operand too big". =========================================================== ********************* ** Watcom Profiler ** ********************* C Fixed "Out of Memory" error when sample file has no samples. Fixed disassembly error in display of location counter (eip/ip). =========================================================== ********************* **** Clone Tools **** ********************* C Fixed CL & CL386 so that switches -MD or -MDd are translated as the equivalent Watcom switch -br. Previously no translation was occuring. For the real Microsoft tools, the switches means using the Run-Time Libraries in DLL form. Correcting this means the equivalent Watcom Run-Time Libraries in DLL form will be used. =========================================================== Changes in 11.0 that may Require Recompilation: ----------------------------------------------- clock() The clock function accuracy has changed from 100 ticks per second to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Source code that uses the clock function and CLOCKS_PER_SEC in its calculations must be recompiled before linking the application with new libraries. Major Differences from Version 10.6: ------------------------------------ The following sections summarize the major differences from the previous release of Watcom C/C++. In general, we have improved Microsoft compatibility in our compilers (more warnings instead of errors, support for MS extensions, etc.) and tools. Some of the Win32 and 32-bit OS/2 versions of our tools are now available in DLL form. EXE DLL Description ------ ------- ----------------------- wcc wccd 16-bit x86 C compiler wcc386 wccd386 32-bit x86 C compiler wpp wppdi86 16-bit x86 C++ compiler wpp386 wppd386 32-bit x86 C++ compiler wlink wlink Watcom Linker wlib wlibd Watcom Library Manager This provides better performance when using the Integrated Development Environment or Watcom Make. See the description of the !loaddll preprocessing directive in Watcom Make for more information. Changes to the C++ Compiler for 11.0 ------------------------------------ We have added support for namespaces and RTTI (Run-Time Type Identification). We have improved (faster) pre-compiled header support. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the C Compiler for 11.0 ---------------------------------- We have improved (faster) pre-compiled header support. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the Code Generator for 11.0 -------------------------------------- A new optimization, "branch prediction", has been added. This optimization is enabled by the "ob" or "ox" compiler options. The code generator tries to increase the density of cache use by predicting branches based upon heuristics (this optimization is especially important for Intel's Pentium Pro). We have added Multi-media Extensions (MMX) support to the in-line assemblers. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the Compiler Tools for 11.0 -------------------------------------- The Watcom Linker supports incremental linking. The Watcom Library Manager (WLIB) can now understand COFF and ELF format object files, as well as OMF et al. The Watcom Library Manager can now read/write AR-format (Microsoft compatible), Multilib (used by IBM for PowerPC version of OS/2), or old-style OMF libraries. The default output format is AR-format and this can be changed by switches. The Watcom Library Manager can output various format import libraries. We have added Multi-media Extensions (MMX) support to the Watcom Assembler (WASM). A new version of the Watcom Disassembler (WDIS) is included. It can process ELF, COFF or OMF object files and ELF, COFF or PE format (Win32) executables. The old disassembler (WDISASM) has been retired and is not included in the package. We have added new tool front-ends that emulate Microsoft tools. These are: nmake cl link lib rc cvtres mapsym These programs take the usual Microsoft arguments and translate them, where possible, into equivalent Watcom arguments and spawn the equivalent Watcom tools. Watcom Make now processes Microsoft format makefiles when the "ms" option is used. Changes to the C/C++ Libraries for 11.0 --------------------------------------- We have added multi-byte and wide character (including UNICODE) support to the libraries. We include run-time DLLs for the C, Math and C++ Libraries. We have added Multi-media Extensions (MMX) support to the libraries. The following new functions were added to the library... mb functions The clock function accuracy has changed from 100 ticks per second to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Changes to the DOS Graphics Library for 11.0 -------------------------------------------- The graphics library now performs the VESA test before testing for vendor specific graphics cards. This fix is intended to broaden the number of graphics cards that are supported. For details on what was new in versions 10.6 and earlier, see the GETTING STARTED helpfile. Other notes: Note: %DstDir% represents the directory in which WATCOM C/C++ was installed. %WinSysDir% represents your Windows 3.x system directory. 1. When debugging a 32-bit Phar Lap, TNT or DOS/4GW application, make sure that "run386.exe", "tnt.exe", or "dos4gw.exe" respectively, are in your path. Failure to do so, may cause your computer to hang. 2. When using the GUI debugger to debug Windows 3.x applications, certain Windows applications may cause the debugger to behave in an unpredictable way. Typically, this occurs when debugging certain messages in window callback functions. For example, hitting a breakpoint in a window function that is processing a WM_INITDIALOG message will crash the system. If this happens, the character-mode version of the debugger should be used. 3. In order to use CodeWright with our IDE, you will need to change the "cwright.ini" file. This file contains the following line. ;LibPreload=cwdde.dll Uncomment this line by removing the ';' character. This is required to enable communication between the IDE and CodeWright when "weditcw.dll" is selected as the editor interface DLL from the IDE. 4. If you choose to not install help files onto your hard disk, you will not be able to get help on the C library or MFC library from the editor. 5. Parallel remote debug servers now work in an OS/2 session. 6. When configuring the browser to use the CodeWright editor interface, you must specify "weditcw.dll" as the editor DLL, save the new options, exit the browser, and restart the browser. Failure to do this will cause an exception to occur in the CodeWright interface DLL. 7. Under OS/2, if you are debugging a DOS application from the IDE, you must ensure that %DstDir%\binw is in your DOS path so that when the IDE starts a DOS session to debug your application, the remote server can find its support files. 8. Under OS/2, you must ensure that the "Comet cursor" desktop setting is disabled if you want to debug PM applications. By default, this setting is disabled. 10. The OS/2 Resource Comiler ( RC.EXE ) does not work correctly if the directory which contains RC.EXE occurs too late in your PATH environment variable ( > 250 characters ). If you experience problems with RC.EXE, you should change the PATH environment variable in your CONFIG.SYS file, by moving %WATCOM%\BINP and %WATCOM%\BINW earlier in the path.
 ftp.openwatcom.org/archive/11.0c/watcom-c-11.0c.zip  local copy
Watcom C++ & Fortran v. 11.0c (1/12/2002, SciTech Software) Readme/What's new
WATCOM C/C++ Version 11.0c - README ----------------------------------- Welcome to WATCOM C/C++ version 11.0c. This README provides helpful hints found during testing as well as updated information that was not available at the time the documentation was produced. This file includes: ------------------- Important Environment variables 11.0 C-level Notes 11.0 B-level Notes Fixes in versions 11.0 C, B and A-level Changes in 11.0 that may Require Recompilation Major Differences from Version 10.6 Other General Notes about version 11.0 =========================================================== Important =========================================================== Some Watcom tools currently do not function properly if installed in a directory with spaces in the name e.g. "C:\Program Files\WATCOM". Therefore choose a directory name like C:\WATCOM, D:\WATCOM etc. to install the tools in. =========================================================== Environment variables used by Watcom C/C++ =========================================================== For proper operation the Watcom compilers require few environment variables to be set up correctly. These variables differ slightly depending on the host platform (DOS, OS/2, Win32). The common variables are: - PATH - points to directories containing Watcom executables - WATCOM - points to the directory where Watcom 11.0c is installed and is used by various Watcom tools to locate files - EDPATH - points to VI/VIW configuration files - INCLUDE - points to directories containing header files is used by the compilers - LIB - points to directories containing library files; note that Watcom linker is able to locate Watcom runtime libraries without this variable - WWINHELP - points to the directory on the CDROM drive where help files are located. This may minimize hard disk space DOS specifics - PATH - only needs to point to the binw directory - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk Win16 specifics - PATH - only needs to point to the binw directory - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk Win32 specifics - PATH - must point to binnt and binw directories, in that order - WWINHELP - points to the directory on the CDROM drive where help files are located. This minimizes hard disk space. Note this is not needed if the help files are installed on the hard disk OS/2 specifics - PATH - must point to binp and binw directories, in that order - LIBPATH - either the BEGINLIBPATH/ENDLIBPATH environment variable or the LIBPATH statement in CONFIG.SYS must point to the binp\dll subdirectory of Watcom 11.0c in order to let the OS find Watcom DLLs - HELP - points to binp\help to let Watcom GUI tools locate online help files - BOOKSHELF - points to binp\help to allow the IPF viewer (VIEW.EXE) locate Watcom online manuals These environment variables can be either set up in your starup files (which is the most convenient method if Watcom 11.0c is the only compiler you use) or you can use simple batch files to set these variables (useful if you need to switch between compilers, including different versions of Watcom compilers). Below are several sample batch files for setting the environment variables on various host platforms. The WATCOM variable must naturally be adjusted according to where Watcom 11.0c was installed on your system. The LIB environment variable isn't strictly necessary but you will probably need to set it for any libraries you use not supplied with Watcom compilers. Similarly you might need to adjust the INCLUDE variable for 3rd party library include files. DOS BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- Win16 BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\H\WIN REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- Win32 BAT file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINNT;%WATCOM%\BINW;%PATH% SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\MFC\INCLUDE;%WATCOM%\H\NT REM SET LIB= REM SET WWINHELP=D:\BINW --------------------------------------------------------------------------- OS/2 CMD file: --------------------------------------------------------------------------- @ECHO OFF SET WATCOM=C:\WATCOM SET PATH=%WATCOM%\BINP;%WATCOM%\BINW;%PATH% SET BEGINLIBPATH=%WATCOM%\BINP\DLL SET EDPATH=%WATCOM%\EDDAT SET INCLUDE=%WATCOM%\H;%WATCOM%\H\OS2 REM SET LIB= SET HELP=%WATCOM%\BINP\HELP;%HELP% SET BOOKSHELF=%WATCOM%\BINP\HELP;%BOOKSHELF% --------------------------------------------------------------------------- =========================================================== 11.0 C-level Notes =========================================================== All files licensed by Microsoft, IBM, Novell, Tenberry, Pharlap and Blue Sky Software have been removed in this version. The Windows SDK components and Microsoft Foundation Classes are not included in the 11.0c update. If you wish to do Windows programming you are required to have a prior version of Watcom C/C++ 11.0, especially for MFC support. Watcom C/C++ 10.6 may work, but this has not been tested. The DOS/4GW extender is also not included in the 11.0c update. If you wish to develop programs using DOS/4GW, you are required to have a prior copy of Watcom C/C++ and use the version of DOS/4GW that came with your earlier product. Alternatively you can switch to using the included CauseWay DOS extender which is a drop in replacement for DOS/4GW (with a few minor differences). Support for Watcom C/C++ 11.0c is at www.openwatcom.org =========================================================== 11.0 B-level Notes =========================================================== The SOM toolkit for OS/2 is no longer supported, and has been removed in this version. =========================================================== Fixes in versions 11.0 C, B and A-level =========================================================== The letter in the first column indicates which level the fix was first introduced. =========================================================== **************** ** C Compiler ** **************** C New warnings 1178-1181 were being counted in the warnings total yet confusingly were reported as errors in diagnostic messages. This has been fixed. These warnings are W1178: Type qualifier mismatch W1179: Parameter %N, type qualifier mismatch W1180: Sign specifier mismatch W1181: Parameter %N, sign specifier mismatch =========================================================== C The 16-bit compiler now chooses the right default C library when generating 16-bit OS/2 multithreaded DLLs. Now Selecting -bm -bd, generates a reference to CLIBDLL.LIB. Selecting -bd, generates a reference to CLIBDLL.LIB. Selecting -bm, generates a reference to CLIBMTL.LIB. =========================================================== C #pragma enum minimum now works as according to documentation. A workaround for 11.0, 11.0a & 11.0b is to use #pragma enum optimize =========================================================== C Compiler now accepts extended macros when command line switch -d+ is specified =========================================================== C Fixed compiler so that expression unsigned char uc; int i; i = !(unsigned char)uc; is correct =========================================================== C structs not getting proper alignment for bitfields at the end of structs inside structs =========================================================== C blowup if a syntax error happend in a switch expr =========================================================== C some warnings coming out with error on message =========================================================== C #pragma disable_message was allowing errors to be muted as well casuing trouble for code generation. =========================================================== C Fixed in-line assembly problem with 486/586 instructions when the /6 compiler option was specified. =========================================================== C Fixed WCL/WCL386 bug that shows up when you use "/fe=foo.exe /fm". The map file was named "FOO.EXE" which caused bizarre executables to be created. =========================================================== C Conditional move instructions for Pentium Pro were being assembled back to front =========================================================== B casting not getting flags like volatile correctly on pointers casting of unlike pointers not getting done __i64 numeric literals getting signed extended if number could fit in 32 bits -v option putting const/volatile on wrong side of a pointer =========================================================== B added a warning when trigraphs as used =========================================================== B _asm sometimes causing lookup problems if followed by an id on the next C statement =========================================================== B typedef function names not getting correct return type noticed when returning double =========================================================== B added warning for #if #endif pairs that come from different files =========================================================== B -zpw giving error instead of a warning =========================================================== B exceptions when getting a syntax error inside sizof operator =========================================================== B fixed looping bug in error recovery of declarations =========================================================== B constant folding of (int)((struct *)0+1) always returning 0 =========================================================== B const ? struct : struct causes compiler error =========================================================== B fixed a bug where typedef double (fortran_tc)(void) wasn't working as it did in 10.6. =========================================================== B fixed a bug where using a typedef'ed function prototype no longer worked in 11.0 if the function prototype and its definition are in separate files =========================================================== B wcc/wcc386 would crashes on the line #if ! after reporting: Error! E1063: Missing operand and then crashes, while wcc/wcc386 -p also crashes but does not report the error. =========================================================== B A single-line _asm statement without braces that refers to a variable would generate an error message. wpp/wpp386 compilers handle this sample correctly =========================================================== A fixed folding bug with static intialization #line comming out after latline in include file at times allowing macro expansion of #define 1230e+A2 where A2 is a macro indirect functions call of non default call types ie. stdcall not working .obj files sometime being created if error occurred in compile incorrect calls somtimes being made with functions that have unspecified parm definitions =========================================================== ******************** ** Code Generator ** ******************** C Fixed combining two move short constants into one move dword constant followed by two move byte constants that combined. The codegen would incorrectly "forget" the first byte-byte combined move after the short-short combined move. Example: struct S { unsigned short a,b; unsigned char c,d,e,f; }; void foo( S *p ) { p->a = 1; p->b = 2; p->c = 3; p->d = 4; p->e = 5; p->f = 6; } =========================================================== C Fixed a problem where 64-int constants were being aliased to 64-bit floating point constants in such a way that the values are incorrect. Example: struct S { double d; __int64 x; }; void foo( S *p ) { p->d = 6.25; p->x = 0; // changes to p->x = 6; } =========================================================== B When static member functions are supplied to the ?: operator, no code was being generated =========================================================== B added a compiler switch to disable the "common epilogue" optimization. =========================================================== A If optimizing for time, align procedures on 16-byte boundaries for anything above a 486. =========================================================== A Fixed a problem with short-circuit operators in which a side effect would be discarded (ie ( (a=b) || 1 ) would get reduced to (1) and the (a=b) discarded. Ditto for ( (a=b) && 0 ). =========================================================== A Fixed a problem with long filenames in object file generation. =========================================================== A Fixed a problem with loopopts and far pointers - if inductions optimizations introduced an add of an integer to a far pointer, it was possible that the add would be generated incorrectly, resulting in some highly suspicious references to odd locations such as -1[bp] or 7[bp]. =========================================================== A Fixed a problem in which conversions between floats and ints (or floats and doubles) within a union might not be generated correctly. =========================================================== *************** ** C Library ** *************** C Internal routines __FSU8, __FDU8, __FSI8, __FDI8, __I8FS, __U8FS, __I8FD, __U8FD, used to convert between float, double and signed __int64, unsigned __int64 for alternate maths libraries were - missing for 32-bit C libraries - converted incorrectly for 16-bit C libraries This is now fixed =========================================================== C Fixed sys_nerr so that it was the right value =========================================================== C Internal routine __GETDS has been added to the 32-bit OS/2 C libraries =========================================================== C Internal functions __U8FD7 and __U8FS7 have been made smaller and faster. These routines are used to convert unsigned __int64 to double and single respectively. Internal function __I4D is now faster under some circumstances =========================================================== C Fixed scanf() family where the wrong count would be obtained for floating-point input. e.g: int charcnt; double data; sscanf( "123." , "%lg%n", &data, &charcnt ); Fixed scanf() family so that the negative sign is handled when reading unsigned integers (a requirement of ANSI C) =========================================================== C Fixed _fullpath() where under certain circumstances the heap could be corrupted =========================================================== C Fixed memory leak in tmpfile() for Netware libraries =========================================================== C _searchenv() now works for quoted paths including 4NT-style paths =========================================================== C Fixed problem in memory allocator that could cause NULL to be returned without going to the system to get more memory. =========================================================== C Fixed bug in __brktime in gmtime.c. Jun 2, 2101 was returned as Jun 1, 2101. Affected ctime, localtime, gmtime. =========================================================== C Fixed bug in delay() for DOS/16, DOS/32, Win 3.1 and Win386. Previous version did not work at all for a number of reasons. New version is accurate to within +/- 1/100 second. =========================================================== C Fixed bug in printf formatting. %#.6g would not display trailing zeros for a number like 1.0e6. Output was 1.e+006 when it should have been 1.00000e+006. Fix was made to _ldcvt(). =========================================================== C Fixed eof(), filelength(), fsync(), _os_handle(), _get_osfhandle(), and setmode() in Netware library by removing a failing file handle check. =========================================================== C Fixed bug in mktime() that affected 16-bit libraries. Years >= 2079 resulted in truncation due to 16-bit rather than 32-bit precision. Changed 365 to 365L to force 32-bit calculation. =========================================================== C Fixed bug in run-time exit code. Made sure that _WindowExitRtn is called early on in exit() rather than in _exit() (since run-time system is shut-down by the time _exit gets called). This bug impacted "Save as" in default windowing support. =========================================================== C Fixed bugs in _wputenv, _wsetenv, _wgetenv that caused a crash in clearenv at program exit. =========================================================== C Fixed opendir() for DBCS environments (where backslash, slash, asterisk and question mark might appear as the second character of a double-byte character in a path specification). We now use _mbsinc() and _mbsnextc() to scan a path string. =========================================================== C Added _mktemp() to other platforms including 16/32-bit DOS, 16-bit Windows, 32-bit extended Windows and 16/32-bit OS/2. Previously, only Win32 was supported. =========================================================== C Fixed a problem with multi-threaded applications where a thread was very short-lived. A multi-threaded application would crash when a thread was very short-lived. The problem seemed to appear with more frequency on the newer generation of fast processors. The crash occurred in _CBeginThread which is the C run-time implementation of _beginthread. A workaround was to delay the thread from exiting using some sort of gating technique like Sleep or a signal from the creating process that permitted the thread to exit. A more detailed description of the problem follows. When a thread is created, a thread handle is returned to the process doing the CreateThread. Our run-time library wants to pass this thread handle to the newly "executing" thread so that when the thread exits, the thread can free the handle itself. The "main" process passes the thread handle to the thread by storing it at a location provided by the thread. This location is "created" by the thread so the main process waits for an event that signals that the location is created. But here's what happens. The thread signals the event and keeps on executing. In fact, it executes right through to the termination code and exits before the main process is dispatched again. Eventually the main process is resumed (since the event that it waited on has occured) and then it stores the handle into memory. This memory however no longer exists because the thread has already come and gone. An access violation occurs. The problem was fixed by adding code to complete the handshaking process (the problem had been already half solved). The thread now waits for the creating process to provide the handle. =========================================================== C spawn... functions with P_NOWAIT under Win32 no longer allocate an extra process handle. =========================================================== C Simplefied Win32 version of _pipe. Pipes are inheritable if you use the SECURITY_ATTRIBUTES struct. Added support for O_NOINHERIT mode attribute. =========================================================== C Fixed the multi-byte character functions so that they work correctly for all double-byte character sets (not just Japanese). The revised functions are: _mbctolower _mbctoupper _ismbcalnum _ismbcalpha _ismbccntrl _ismbcdigit _ismbcgraph _ismbclegal _ismbclower _ismbcprint _ismbcpunct _ismbcspace _ismbcsymbol _ismbcupper _ismbcxdigit _mbslwr, _fmbslwr _mbsupr, _fmbsupr =========================================================== C Fixed Win32 version of _dos_findfirst/_dos_findnext so that _A_SUBDIR, _A_HIDDEN, and _A_SYSTEM work correctly. =========================================================== C Fixed Netware version of library so that code-gen support routines like __i8d are not exported. This removes the problem caused when 2 or more NLMs ended up exporting the code-gen support routines. =========================================================== C Removed assert from low-level thread data pointer acquisition routine (since assert requires a thread data pointer in multi- threaded applications so it was no good to use assert to complain that a thread data pointer could not be acquired). Normally, this problem would not be seen. =========================================================== C Added some error checking to Win32 cprintf and putch (conio) routines. =========================================================== C _controlfp called _controlfp rather than _control87 resulting in a recursive, infinite loop. Changed _controlfp to call _control87. =========================================================== C Fixed a number of I/O routines to make them thread safe. Included are the Netware version of fopen, _fsopen, all versions of tmpnam, all versions of fclose. =========================================================== C Fixed tzset() for Windows NT/2000 in areas where there is no daylight savings time. As a result, gmtime() should now be correct for all areas of the world. =========================================================== C Fixed the Win32 version of _dos_xxx functions so that they return the OS error code like their DOS and OS/2 counterparts. Fixed _getdcwd(), _wgetdcwd() so that they set a proper errno value. Set errno if drive doesn't exist. Fixed putenv(), _wputenv(), setenv(), _wsetenv() so that they set a proper errno value. Fixed _wdos_findfirst(), _wdos_findnext(), _wdos_findclose() so that they set a proper errno value. Under Win32, they now return a proper OS error code. Fixed Win32 version of open(), _wopen(), sopen(), _wsopen(), _sopen() and __wsopen() so that it first checks to see if it can store the file handle returned by Win32 before attempting to open the file. This fix corrects the "orphaned file" problem caused by opening, then closing a file when the file handle can't be stored. Fixed the OS/2 spawn routines so that a proper errno value is set when running out of memory. Fixed tmpfile() multi-threading problems including infinite loops when the "TEMP" environment variable (TMP, TEMP, TMPDIR, etc.) points to a non-existent path. Added _strerror() for MS compatibility. Also added wide char version _wcserror(). Added _doserror() to return Win32 system error message for a _doserrno value. Improved mapping of Win32 error codes to errno values. =========================================================== C Fixed a memory leak in run-time code. Added call to free the "initial thread data storage" (the storage used by the main thread in a single-threaded or multi-threaded application). Affects Win32 and 32-bit OS/2 applications. =========================================================== C Fixed a problem with tmpnam() in the Netware library in version 11.0c. New names were not being created. =========================================================== C Fixed bug in Win32 write(). The zeropad function was not necessary and didn't handle large files, in any case. Now you can seek to a position > MAX_INT and then write(). =========================================================== C Fixed a problem where _beginthread example was crashing sometimes =========================================================== C Fixed _chain_intr() so that flags is passed to interrupt handler =========================================================== C Fixed 32-bit strcmp() so comparing unaligned strings does not fault =========================================================== B Fixed a bug where an app was doing a chmod() on a file in a directory and is supposed to remove the file and then delete the directory itself. Under Win95 the directory was getting removed, however under NT it was not. Use div in place of ldiv for 32-bit code, since they should be the same. Marked the Product Version as 11.0b for the RTL DLLs, such as CLBR110.DLL, CLBS110.DLL, MT7R110.DLL, MT7S110.DLL, MTHR110.DLL, MTHS110.DLL, PLBR110.DLL & PLBS110.DLL, so it is less difficult to distinguish them from older DLLs. =========================================================== B Fixed a bug where Win386 DLLs would GPF every second time they are unloaded. To reproduce this, modify the samples in samples\fortran\win\dll by adding the line "call FreeLibrary( hlib )" before the line "FWinMain = 0" in gen*.for. When you run the samples, they GPF the first, third, fifth, etc. times when FreeLibrary is called. If you compile/link these modified samples with 10.6a or earlier versions, then the problem doc not occur. Reproduce this behaviour under WFW 3.11 and Win NT 4.0. Customer has reproed this under Win 95, and also reproed it when the DLLs are called from VB 4.0. =========================================================== B _wtof was missing from the 16-bit math libaries, and the 32-bit version was returning erroneous results. =========================================================== B Target: Win32: Using fmod() or modf() in code compiled with /br was giving undefined references. =========================================================== B Fixed a bug with itoa() in win16 apps, where you couldn't run multiple instances of the app. If you tried to, you got "Cannot start more than one copy of the specified program" under NT and "Error: Cannot <something> multiple writeable data segments" under Win 3.x. =========================================================== B Win32 target only: feof() was not set when end-of-file occurs on an input pipe. ferror() was being set instead. =========================================================== B ftime() was not reporting correct timezone field in timeb struct when TZ is negative. =========================================================== B Overflow range error in pow was not reported unless /fpc used. =========================================================== A _findfirst() has been changed to take a const char * instead of just a char *. =========================================================== A __FSU87 was trashing ecx - this routine is called to convert an unsigned __int64 to a float. =========================================================== A Fixed memory leak, due to us not deallocating the _iomode array during fini rtns. Also added _UnloadCLib call to library to allow user to properly unload 16 bit OS/2 user loadable DLLs. =========================================================== A Fixed a bug where fortran default windowing apps would sometimes appear to print lines twice, when printing at the bottom of the screen. Since they were being printed at the bottom of the window and then not erased when the window scrolled up, leaving a 2nd copy at the bottom =========================================================== A Input value range checking for strtod() has been improved for very small values. =========================================================== A The runtime dll support has been fixed to no longer leave a potentially dangerous reference from the C runtime DLL into whichever DLL has been most recently loaded into the process image. The reference from the C runtime DLL now points directly into the Math runtime DLL. =========================================================== A The _dos_getdiskfree() function for 32bit platforms now has an expanded data structure. =========================================================== The assert() function for WIN32 and OS/2 platforms will attempt to use stderr for output if it is available. =========================================================== A The __declspec(thread) support for WIN32 platforms has been improved. In some, pathological cases, it could lead to a GPF on program startup. =========================================================== A The system() function for WIN32 platform no longer passes posix file handles for inheritance by child processes by default. =========================================================== A The delay() function for NEC98 machines used to hang on initialization. =========================================================== A The race condition in the _beginthread() function related to the saving of the child thread handle has been fixed. =========================================================== A The multibyte init code for the C runtime library would always crash on startup when running under the Pharlap Run386 or TNT DOS extenders. =========================================================== A The heapchk() function for 32bit platforms could, in some cases, enter an infinite loop. =========================================================== A The posix level open() function for WIN32 platforms did not properly truncate existing files on NT server machines when run from an NT workstation. =========================================================== A The WIN32 stat() function now ensures that directories cannot be marked as character mode devices. =========================================================== A The WIN32 and OS/2 runtime shutdown code now does a better job of releasing all resources on image shutdown. =========================================================== ****************** ** C++ Compiler ** ****************** C The 16-bit compiler now chooses the right default C library when generating 16-bit multithreaded DLLs. Now Selecting -bm -bd, generates a reference to CLIBDLL.LIB. Selecting -bd, generates a reference to CLIBDLL.LIB. Selecting -bm, generates a reference to CLIBMTL.LIB. =========================================================== C The C++ compiler did not remember the "signedness" of constants in enums and would, under the proper conditions, sign extend an unsigned 64-bit constant. =========================================================== C Fixed processing of floating-point command line switches. /fp5, /fp6, floating point code generator switches would reset /fpi87 model back to defaults and vice versa. This meant poor floating-point code was generated. =========================================================== C Fixed packing of structs when -zp16 is used and the members are aligned to 8-byte boundaries to align the class to an 8-byte boundary rather than a 16-byte boundary. =========================================================== C Fixed diagnosis of pointer comparisons for unrelated classes. This change also affects the ?: operator if there are two pointers in the ':' expressions. Example: struct A {}; struct B {}; bool fn( A *p, B *q ) { return p != q; } =========================================================== C Fixed compiler to not force static functions to be linkage "C++". Example: extern "C" { static int fn() { return 0; } }; =========================================================== C Fixed a problem when a scope had more than approx. 25000 unique symbols in it. The symbol table code in the compiler could not handle not growing the symbol table to reduce the average search time. =========================================================== C Added level 4 warning for switch statements that have no case labels. =========================================================== C Handling of const and reference members in a class had problems when dealing with default op= member function. Example: struct NestedA { NestedA(); ~NestedA(); NestedA& operator=( const NestedA& s ); char* & _ptr; }; struct NestedB { NestedB(); ~NestedB(); NestedB( NestedB& a ); void *pd_ptr; }; struct NameValuePair { NestedA x; NestedB y; }; int main( int argc, char** argv ) { NameValuePair a; NameValuePair b; a = b; return 0; } =========================================================== C Fixed sizeof( L"1234" ) to return 10 instead of 20. =========================================================== C Fixed identical function checking to handle the following case: enum E { A,B,C }; struct test { void foo( E ); void bar( E & ); }; void test::foo( E & ) { // error } void test::bar( E ) { // error } =========================================================== C Fixed a lexical lookup problem from within a member function in a local class finding a symbol in the host class. The compiler incorrectly thought that 'this' could be used to access the symbol. Example: struct ABC { ABC() { static struct B { void f() { meth2(); // error } } b; } void meth2() { } }; =========================================================== C Conditional move instructions for Pentium Pro were being assembled back to front =========================================================== B fixed a bug where using /d2 /hd could cause the compiler to hang. =========================================================== B fixed a C++ Preprocessor problem: where #if ( x > y ) could produce incorrect results when x and y are expressions. =========================================================== B An error was missing in the following case: extern void f( int a, char *b ); extern void f( int a ); void *pf = f; Work around: none =========================================================== B Anonymous structs or classes within unions could not always be initialized properly. struct s { union { struct { float a, b; }; float c[2]; }; }; s d = { 0.0, 0.1 }; Work around: Set values in object manually. =========================================================== B Output a warning if a #endif isn't in the same source file as its companion #if. Example: --- foo1.h --- #ifndef FOO1 #define FOO1 #endif #endif // warning --- foo2.h --- #ifndef FOO2 #define FOO2 #include "foo1.h" #endif --- foo.c --- #include "foo2.h" =========================================================== B A / D B \ / C We no longer prefer the conversion from C->D over the conversion from C->A as the number of levels of conversion does not matter when D and A are not related. =========================================================== B Added level 3 warning for unary '-' of an unsigned operand (result type is still unsigned). Cast operand to signed type to remove warning. Example: void bar( int ); void bar( unsigned ); ... // selects bar( unsigned ) foo( -2147483648 ); =========================================================== B Improved PCH reading of error message levels so that header file changes are added to current message levels rather than performing a complete replace of the error message levels and ignoring any command line adjustments. =========================================================== B Fixed problem with -d2s that caused run-time error "undefined constructor or destructor called!" to occur. =========================================================== B Was not generating correct code for some default functions in classes with modifiers. Work around: write definitions for required constructors, destructors, and operator = functions =========================================================== B Was not generating correct code for the default operator = when the class contained an array of elements where an element could be byte-for-byte copied and also had virtual functions. =========================================================== B Destruction sometimes was omitted following a delete which followed a block closure which contained a destruction. Work around: introduce a destructable temporary before the delete. =========================================================== B Fixed scanning of large strings with escaped characters. Example: char *p = "\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ \n"; Work around: break string up into smaller strings and let compiler concatenate them "1234567890" --> "12345" "67890" =========================================================== B Added warning from scanner whenever a trigraph is processed. Example: // string expands to "(?]?~????"! char *e = "(???)???-????"; // work around: char *f = "(" "???" ")" "???" "-" "????"; char *g = "(\?\?\?)\?\?\?-\?\?\?\?"; =========================================================== B Fixed analysis of shift operators with regard to result type. Previously the result type was the same as other binary arithmetic operators. Now the result type is the promoted type of the left hand operand. Example: int f( int x, unsigned s ) { // should do signed right shift return x >> s; } =========================================================== B Compiler incorrectly warned that new/delete operators were declared in a namespace when they were declared as friends of a class. Example: class N { friend void *operator new( unsigned ); friend void operator delete( void * ); friend void *operator new[]( unsigned ); friend void operator delete[]( void * ); }; Work around: disable warning =========================================================== B Compiler incorrectly diagnosed an invalid constant when inside a preprocessing #if region that should have been excluded from such errors. Example: #if 0 Version 35I63 #endif Work around: put constant in a comment (if possible) =========================================================== B Compiler now correctly evaluated all preprocessor expressions involving binary operators of the same precedence. Example: #if (0 < 2 - 1 + 3) now correctly evaluates to TRUE. It previously evaluated as if the expressions was ( 0 < 2 - ( 1 + 3) ) Note: this bug only occurred in preprocessor expressions. =========================================================== B Compiler now initializes member pointers at link-time in more cases than before (notably array initialization). =========================================================== B Constant folding of 64-bit arithmetic would incorrectly warn about overflow if the expression involved two 32-bit quantities multiplied together to produce a 64-bit quantity. =========================================================== B wpp: -zff and -zgf now generate code that doesn't save fs/gs in the prologue/epilogue of the function (matches behaviour of C compiler and ds/es). The pop of fs/gs would fault if the selector had been freed. =========================================================== B Fixed error recovery for the following code fragment: template <class T : public Base > struct S {}; =========================================================== B wpp: optimized -3 code to use size override prefixes when dealing with push and mov immed instructions. =========================================================== B Under several combinations of options ?: did not generate proper code to select static member functions. typedef void (*void_func)(); class A { public: static void f(); static void g(); }; void_func func(bool b) { return b ? A::f : A::g; } Work around: Avoid use of ?:, for example, void_func func(bool b) { if( b ) return A::f; else return A::g; } =========================================================== B Fixed a problem where the compiler went into an infinite loop generating Dwarf debug information with namespaces that contained typedefs referencing types in other namespaces. Work around: use -d3 instead of -d2 Example: class A { public: virtual ~A() {} }; class B {}; namespace N { class C {}; typedef B T; class D { public: virtual ~D() {} }; class E : public D, public A { public: E() {} B* getB() { return 0; } C* getC() { return 0; } }; } =========================================================== B Fixed a problem where function template instantiations were not being set to C++ linkage. Work around: don't use function templates in extern "C" blocks or functions Example: template <class T> void tf(T) { return; } struct A { } a; struct B { } b; extern "C" void bar() { tf(a); tf(b); } =========================================================== B Allow bool op= bool expressions Work around: break up expression A op= B into A = A op B Example: void foo( bool a, bool b ) { a |= b; } =========================================================== B Fixed compiler GPF in situations where an abstract class tries to create or return itself. The GPF was caused by the compiler trying to output a good error message with all the unimplemented abstract methods. Example: class A { virtual ~A() { } virtual void *fn( char *name ) = 0; A Next() { return( _next ); } }; void foo( A *it ) { it->Next(); } =========================================================== A Fixed a minor bug that caused spurious warnings to be generated for pre-compiled headers containing integer constants. The following example, if used in a pre-compiled header, would cause a warning about truncating integer constants: class Foo { public: int Bar(int, int=1); // warning generated here }; =========================================================== A Was mis-diagnosing conversions from types of the form Type cv1 * cv2 & to types of the form Type cv3 * cv4 & when cv3,cv4 are more qualified than cv1,cv2 respectively and cv4 does not contain "const" (it must for the conversion to be legal). Work around: none, the conversion is illegal. =========================================================== A Changed the alignment of doubles and long doubles to be on 8-byte boundaries when not optimizing for space. This will increase performance on many hardware configurations. =========================================================== A Incorrect code was being generated for "?:" sequences when the target is a class object and when the expression between the "?" and the ":" was converted to the type of the expression following the ":" work around: cast the expression between the "?" and the ":" to the type of the expression following the ":" example: struct Cls { Cls( int ); Cls( Cls const & ); }; extern Cls target; void foo( bool test, int int_val, Cls const & class_val ) { target = test ? int_val : class_val; // generated bad code } The work-around is to re-code foo as follows: void foo( bool test, int int_val, Cls const & class_val ) { target = test ? Cls( int_val ) : class_val; } =========================================================== A When the -za switch is not specified (i.e., when extensions are enabled) the compiler was extended to accept as member pointer values, class-qualified and naked non-static member functions. The proposed standard requires that & precede a class-qualified name. struct S { int foo( float ); }; int (S::*mp)( float ); // a member-pointer variable ... // the following are all accepted: mp = &S::foo; // standard mp = S::foo; // extension mp = foo; // extension (must be in scope) =========================================================== A Fixed a bug that caused the compiler to crash under certain conditions when writing a pre-compiled header. =========================================================== A Fixed compiler so that floating point support is loaded if you call a routine with the address of a double. This is req'd if you need to skip floating point numbers but never use them. e.g., scanf( "%d %f %d\n", &i1, &d1, &i2 ); =========================================================== A Fixed compiler so that -dXXX="a-/ b" is allowed. Compiler was terminating -d macro definition at a -, /, or white space. =========================================================== A Fixed problem where a MI conversion was required before initializing a const reference temporary. Example: struct A { int a; }; struct C { int c; }; struct B : public C, public A { int b; }; typedef A * T; T check; struct Array { void Append( const T & t ) { if( t != check ) _fail; } void Remove( const T & t ) { if( t != check ) _fail; } }; void Foo( B * b ) { Array arr; A * a = b; arr.Append( a ); arr.Remove( b ); } int main() { B b; check = &b; Foo( &b ); _PASS; } =========================================================== A Fixed problem where direct calls to __stdcall dtors were incorrectly routed through a calling convention thunk normally used for table-driven destruction. =========================================================== A When generating preprocessed output, the compiler now eliminates empty lines if you do not want #line directives. =========================================================== A Correctly handle multibyte characters with the second byte equal to 0x5c ('\\') when they terminate a C++ //-style comment (i.e., do not treat them as a line splice). Example: // <0x81><0x5c> =========================================================== A A function that calls setjmp will have its local variables marked as "stay in memory" but this attribute incorrectly affected function template generic type binding. Example: #include <setjmp.h> template <class T> void delete_object( T*& object ) { if( object ) { delete object; object = NULL; } } struct CValue { int i; }; void foo() { CValue *v; jmp_buf b; setjmp(b); delete_object(v); } =========================================================== A Fixed problem with C++ empty base optimization that caused spurious errors to be diagnosed. Example: struct CClassBase { }; struct CClass2 : public CClassBase { struct CClass1 { CClass1(int) {} }; CClass1 m_c; protected: CClass2(void); }; CClass2::CClass2(void) : m_c(1) { } =========================================================== A Fixed problem with macro expansion that triggered boundary conditions in the compiler which in turn caused incorrect macro expansion. Example: #define example( b ) b ## _X Y_ ## b ## _Z example( x123456789012345678901234567890 ) example( x12345678901234567890123456789 ) example( x1234567890123456789012345678 ) example( x123456789012345678901234567 ) example( x12345678901234567890123456 ) #undef example =========================================================== A Fixed problem with error recovery in complex source code with __stdcall classes. =========================================================== A Return expressions with comma operators sometimes were compiled incorrectly. This resulted in a bad library for multi-threaded Netware when exceptions were used. Work around: assign the expression to a temporary and then return the temporary. example: int x; void foo( int y ) { return ( x = 1 , y + 1 ); } replace by: int x; void foo( int y ) { int temp = ( x = 1 , y + 1 ); return temp; } =========================================================== A If a source file doesn't end in a new-line, the C++ compiler now compensates for this to allow new-line terminated preprocessing directives to work properly. Example: #define C 3 // file doesn't end in '\n' =========================================================== A Incorrect code was generated for an argument to an ellipsis function (one declared with '...' ) which was computed as an lvalue class value for a destructible class. Example: void foo( int, ... ); class S { . . . ~S(); . . . }; S* p1; S* p2; bool b; . . . int i = foo( 1997, b ? *p1 : *p2 ); Work around: use a cast to force underlying expressions to be rvalues: int i = foo( 1997, b ? (S)*p1 : (S)*p2 ); =========================================================== A Compiler would crash when it could not generate RTTI info into a 64k segment (only applies to 16-bit targets). The error was reported properly but recovery resulted in a memory fault in the compiler. =========================================================== A Compiler would crash (infinite loop or page fault) when inlining functions that contained certain usages of anonymous unions. Example: inline int ii( int i ) { union { int x; unsigned char y; }; x = 0; y = i; return x; } ... ii( q ); Work around: #pragma inline_depth(0) =========================================================== A Tweaked scanning of pp-number tokens in non-ISO/ANSI mode so that old code continues to compile correctly. Example: #define A10 3 #define A11 0x1e+A10 int v = A11; // 0x1e + 3 =========================================================== A Added -mfi option to indicate to the compiler that interrupt functions can assume the flat memory model is preserved. If this option is not used, interrupt functions have to assume that a different stack segment is being used and so auto data must be manipulated as far data. =========================================================== A Fixed diagnostic of 'void' expression types in certain contexts. Example: void a(); int __u( int i ) { return i == a() || a() == i; } =========================================================== A Added diagnostic to identify cases where the calling convention of a virtual function override has changed. Example: struct B { void __stdcall foo( int, int ); }; struct D : B { void foo( int, int ); }; =========================================================== A A function such as Composed* ctor( Composed const & src ) { AnotherDtorable stuff_1; AnotherDtorable stuff_2; AnotherDtorable stuff_3; Composed* ptr = new( some_data ) Composed( src ); return ptr; } where AnotherDtorable and Composed are destructable objects could cause the object located by ptr to also be destructed under some combinations of options. Work around: place the new statement in a separate function. =========================================================== A The following code generated a spurious warning, claiming that fn was unreferenced. extern void import( const void * ); static void fn() {} void external() { const void * foo = fn; import( foo ); } Work around: ignore that warning or disable it =========================================================== A Diagnose extra initialization arguments for parenthetical initialization of non-class types. Example: int h(1); int f(1,2,3); int g( int(1,2,3) ); foo() { int q = 1, // <- notice comma f(1,2,3); } =========================================================== A Diagnose definition of member functions that are not declared but match the signature of another member function with default arguments. Example: struct A { void f1( int, bool = false ); }; void A::f1( int ) { // error } =========================================================== A Corrected problem where a inline template function was incorrectly diagnosed as undefined if it was inside a namespace. Example: namespace alpha { template <class T> inline T & f (T & a) { return a; } inline long b ( long a ) { return f ( a ); } } void fn( void ) { long a = 100; long c; using namespace alpha; c = b ( a ); } =========================================================== A Corrected problems where certain class hierarchies caused problems in generating construction/destruction code or exception handling state tables. The problems manifested themselves as incorrect code/data or compiler faults. Example: #include <fstream.h> #include <stdlib.h> #include <iostream.h> class TextFile { public: ifstream solidTextFile; }; class SolidTextFile : public TextFile { }; void main() { SolidTextFile aFile; } =========================================================== A Corrected problem where, in copy initialization, a user-defined conversion function from source class to a non-const reference of the target class would not be preferred over another ambiguous conversion. In this example, the conversion A::operator String() going to String::String( String const & ) should be preferred over the ambiguous use of the String::String( char ) constructor from either A::operator int() or A::operator float(). Example: struct String { String(); String( char ); }; struct A { operator String() const; operator int() const; operator float() const; }; struct B { const A& GetitsA(); }; void foo(B b) { String s; s = b.GetitsA(); } =========================================================== A Fixed reading and writing of the precompiled header file when it contained C++ EH information for classes. =========================================================== ***************** ** C++ Library ** ***************** C eofbit for ifstream's is now set on a read() when at EOF =========================================================== C Fixed buffer overrun when specifying a precision (SetPrecision) greater than LDBL_DIG. This used to cause an application to crash Windows 95. =========================================================== C Added conditional semaphore unlock to the destructor of a "lock" object. =========================================================== ****************** ** Disassembler ** ****************** C Fixed WDIS so that it correctly disassembles 32-bit code assembled with MASM/TASM as 32-bit and no longer as 16-bit =========================================================== C Fixed ORL library so that additional OMF THEADR records in object files are not diagnosed in error. Additional THEADR records occur when #include'ing source code and requesting Codeview debug info. =========================================================== B wdis couldn't recognize "SHLD EDX,EAX,CL", "SHRD EDX,EAX,CL" and a few other instructions. =========================================================== B Wdis did not give the correct code when disassembling memchr(). It placed the label in the wrong position. This is because the code makes a jump into the middle of an opcode sequence depending on the result of memchr(). WDISASM with 10.6 "knew" about this and issued DB instructions. =========================================================== A fixed problem with disassembly of 3-operand imul instructions (only 2 operands were displayed) =========================================================== ******************* ** Documentation ** ******************* C Fortran subroutine library functions FNEXTRECL() and FTRACEBACK() are now documented =========================================================== C Predefined C++ macros _CPPUNWIND & _CPPRTTI are now documented =========================================================== C #pragma read_only_file which appears in nearly all Watcom header files is now documented. The default depth for #pragma inline_recursion has been corrected. The default depth is 3. =========================================================== C Functions _dieeetomsbin(), _dmsbintoieee(), _fieeetomsbin(), _fmsbintoieee(), _findfirsti64(), _findnexti64(), _wfindfirsti64(), _wfindnexti64(), _filelengthi64(), _lseeki64(), _telli64(), _fstati64(), _wfstati64(), _stati64(), _wstati64() are now documented in the C library. =========================================================== B Fixed the C library matherr example, so it works with the C++ compiler. =========================================================== B Watcom 10.6 aligns structure members on a byte boundary by default. Watcom 11.0 aligns structure members on an 8 byte boundary by default. Fixed some places where the documentation hadn't been updated from 10.6. =========================================================== B Added - wlink's OPTION SHOWDEAD, which was not documented. This option is very useful as it shows in the map file which functions the linker stripped out. =========================================================== B Added documentation for wcc/wcc386/wpp/wpp386 options /of & /of+. =========================================================== B Corrected the Programmer's Guide sample on 32-bit OS/2 DLLs. The dllsamp.c file was missing a: define EXTERNC. =========================================================== B Upated Linker docs indicate that incremental linking is not supported for 16-bit DOS and NetWare targets. =========================================================== ********************** ** Graphics Library ** ********************** C Fixed a bug where vector fonts were being drawn incorrectly =========================================================== C Now cache the SVGA Page for better performance =========================================================== C Fixed a bug in NEC version of graphics library "SetPixel" function. =========================================================== C Fixed a bug in _EGAScanRight. The ODD/EVEN mode bit should not have been turned on. On most adapters, this didn't cause a problem. On a Number Nine video card, this showed up as a problem in flood filling an area. =========================================================== ******************** ** C Header Files ** ******************** C Fixed headers <typeinfo.h>, <exceptio.h> so that they include other Watcom C++ headers with the .h extension correctly. This was causing STLPort's headers to be used in preference to Watcom's. =========================================================== C Fixed getc macro in stdio.h. The '\0x' changed to '\x' in two places. Old version resulted in a loss of an attempted optimization. The correction will result in better performance for getc(). =========================================================== C Added Microsoft's FLT_NORMALIZE constant. Added Microsoft's _DBL_RADIX constant. Added Microsoft's _DBL_ROUNDS constant. Added Microsoft's _LDBL_RADIX constant. Added Microsoft's _LDBL_ROUNDS constant. Added Microsoft's DBL_RADIX constant. Added Microsoft's DBL_ROUNDS constant. Added Microsoft's LDBL_RADIX constant. Added Microsoft's LDBL_ROUNDS constant. Changed FLT_MIN_EXP from (-127) to (-125). Changed DBL_MIN_EXP from (-1023) to (-1021). Changed LDBL_MIN_EXP from (-1023) to (-1021). Changed FLT_MIN_10_EXP from (-38) to (-37). Changed FLT_MAX_EXP from 127 to 128. Changed DBL_MAX_EXP from 1023 to 1024. Changed LDBL_MAX_EXP from 1023 to 1024. Added accurate representations for DBL_MAX, DBL_EPSILON and DBL_MIN named _DBL_MAX, _DBL_EPSILON and _DBL_MIN. =========================================================== C Improved code generated from isxxx() functions. Changed description of messages associated with some errno values. Added definition of NULL to float.h. Added prototypes for _strerror(), _wcserror(), _doserror(), _wdoserror() to string.h. =========================================================== A const qualifiers have been added to the char* parameters to the findfirst and variant functions in io.h =========================================================== A The register mode calling convention prototype for longjmp() is no longer marked as "#pragma aborts" to facilitate profiling support. =========================================================== ********************************************** ** Integrated Development Environment (IDE) ** ********************************************** C Fixed incorrect access of C error/warning help file WCCERRS.HLP (messages were one out) =========================================================== A Added pentium pro (p6) switches to the options pages ( compiler, linker, assembler, etc. ) =========================================================== A added a switch for Watcom debugging info to the linker options page - watcom was previously the default if you selected debug all, now Dwarf is the default =========================================================== A fixed a resource problem that was causing some of the buttons and menu items to appear with no text =========================================================== A Don't use incremental linking for DOS or Netware applications - it is not supported =========================================================== A Changed the compiler options for Netware targets to use -5s, -ms -- stack based, small model =========================================================== A changed the linker options for 32-bit OS/2 DLL's now uses op manyautodata, initinstance, terminstance =========================================================== *************** ** Librarian ** *************** C Updated command line help for WLIB /? Help added for switches -p, -s, -v =========================================================== C Wlib overwrote an existing object file with no truncation (in the "*" extract operation). This resulted in a corrupt object file when the new one was shorter than the old one. =========================================================== C Fixed some problems related to creating AR format libraries using the -fa switch. =========================================================== B Wlib wasn't giving a warning message if you tried to extract a nonexistent object file. =========================================================== ************ ** Linker ** ************ C Fixed problem where WLINK was inserting random text (often parts of WLSYSTEM.LNK) in the final executable =========================================================== C Fixed WLINK so that it now works interactively again =========================================================== C Added support for case-insensitive searching of COFF (AR-format) libraries. For example, the linker now matches _SLEEP@4 with _Sleep@4 in KERNEL32.LIB. =========================================================== B Fixed output of QNX executables for a rare case of internal buffer filling. =========================================================== B OP INC IS NOT SUPPORTED FOR 16-BIT DOS OR NetWare, in 11.0 you didn't get an error to indicate this =========================================================== B fixed a bug where "wlink debug watcom types" or "wlink debug watcom locals" or "wlink debug watcom lines" would all cause the linker to crash "wlink debug watcom all" was fine =========================================================== B NT linker was crashing if you ran it with no arguments, and typed something at the WLINK> prompt =========================================================== B fixed a bug where WLINK was crashing while trying to link an app with codeview debuggin info =========================================================== ********** ** Make ** ********** A In non-Microsoft mode, WMAKE will find and process a file named "MAKEFINI" after all makefiles have been processed. =========================================================== *********************** ** Resource Compiler ** *********************** C Added support for CodePage 1250 to UNICODE translation (1250.UNI). =========================================================== ************** ** Debugger ** ************** B dwarf dip now exits gracefully if it failes to load debug info =========================================================== B Fixed a bug on DOS or Win95 Host: binw\wd was crashing on loading DOS/4GW EXE. The debugger was running out of memory trying to read in a large app or large app + symbolic debugging info (.SYM) file. Problem did not occur with the binnt debuggers under NT. =========================================================== B binw\wd was crashing when inspecting ofstream structure with Watcom or Codeview debugging information. =========================================================== B Debugger was crashing when double-clicking on an entry in calls window. =========================================================== B If winserv terminated abnormally for any reason, you could not restart it unless you gave the server a different name. This is a bigger problem than appears at first, because the IDE uses an unnamed debug server. As such, if you were debugging DOS/4GW under Windows 95 and the application crashed the server, then you had to reboot before you can debug in the IDE to start the debugger again. Winserv will now free the name and try again if it tries to connect to a server and is unable to connect. =========================================================== A Rolled back DOS4G extender to 1.96 to fix pharlap application debugging crashes. =========================================================== A fixed a bug where you couldn't debug "Large" DOS/4GW apps =========================================================== *************** ** Assembler ** *************** C Conditional move instructions for Pentium Pro were being assembled back to front =========================================================== C Fixed message numbers so that they increase sequentially from 1 and from 500 in each of the two groups of messages. Previously, message numbers had large gaps in them. =========================================================== B Fixed a bug where wasm wouldn't assemble: "psrlq m1, dummy" where dummy is a quadword It gave an error: "Second operand too big". =========================================================== ********************* ** Watcom Profiler ** ********************* C Fixed "Out of Memory" error when sample file has no samples. Fixed disassembly error in display of location counter (eip/ip). =========================================================== ********************* **** Clone Tools **** ********************* C Fixed CL & CL386 so that switches -MD or -MDd are translated as the equivalent Watcom switch -br. Previously no translation was occuring. For the real Microsoft tools, the switches means using the Run-Time Libraries in DLL form. Correcting this means the equivalent Watcom Run-Time Libraries in DLL form will be used. =========================================================== Changes in 11.0 that may Require Recompilation: ----------------------------------------------- clock() The clock function accuracy has changed from 100 ticks per second to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Source code that uses the clock function and CLOCKS_PER_SEC in its calculations must be recompiled before linking the application with new libraries. Major Differences from Version 10.6: ------------------------------------ The following sections summarize the major differences from the previous release of Watcom C/C++. In general, we have improved Microsoft compatibility in our compilers (more warnings instead of errors, support for MS extensions, etc.) and tools. Some of the Win32 and 32-bit OS/2 versions of our tools are now available in DLL form. EXE DLL Description ------ ------- ----------------------- wcc wccd 16-bit x86 C compiler wcc386 wccd386 32-bit x86 C compiler wpp wppdi86 16-bit x86 C++ compiler wpp386 wppd386 32-bit x86 C++ compiler wlink wlink Watcom Linker wlib wlibd Watcom Library Manager This provides better performance when using the Integrated Development Environment or Watcom Make. See the description of the !loaddll preprocessing directive in Watcom Make for more information. Changes to the C++ Compiler for 11.0 ------------------------------------ We have added support for namespaces and RTTI (Run-Time Type Identification). We have improved (faster) pre-compiled header support. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the C Compiler for 11.0 ---------------------------------- We have improved (faster) pre-compiled header support. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the Code Generator for 11.0 -------------------------------------- A new optimization, "branch prediction", has been added. This optimization is enabled by the "ob" or "ox" compiler options. The code generator tries to increase the density of cache use by predicting branches based upon heuristics (this optimization is especially important for Intel's Pentium Pro). We have added Multi-media Extensions (MMX) support to the in-line assemblers. We have added "long long" (64-bit integer) support in the form of a new __int64 type. Changes to the Compiler Tools for 11.0 -------------------------------------- The Watcom Linker supports incremental linking. The Watcom Library Manager (WLIB) can now understand COFF and ELF format object files, as well as OMF et al. The Watcom Library Manager can now read/write AR-format (Microsoft compatible), Multilib (used by IBM for PowerPC version of OS/2), or old-style OMF libraries. The default output format is AR-format and this can be changed by switches. The Watcom Library Manager can output various format import libraries. We have added Multi-media Extensions (MMX) support to the Watcom Assembler (WASM). A new version of the Watcom Disassembler (WDIS) is included. It can process ELF, COFF or OMF object files and ELF, COFF or PE format (Win32) executables. The old disassembler (WDISASM) has been retired and is not included in the package. We have added new tool front-ends that emulate Microsoft tools. These are: nmake cl link lib rc cvtres mapsym These programs take the usual Microsoft arguments and translate them, where possible, into equivalent Watcom arguments and spawn the equivalent Watcom tools. Watcom Make now processes Microsoft format makefiles when the "ms" option is used. Changes to the C/C++ Libraries for 11.0 --------------------------------------- We have added multi-byte and wide character (including UNICODE) support to the libraries. We include run-time DLLs for the C, Math and C++ Libraries. We have added Multi-media Extensions (MMX) support to the libraries. The following new functions were added to the library... mb functions The clock function accuracy has changed from 100 ticks per second to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Changes to the DOS Graphics Library for 11.0 -------------------------------------------- The graphics library now performs the VESA test before testing for vendor specific graphics cards. This fix is intended to broaden the number of graphics cards that are supported. For details on what was new in versions 10.6 and earlier, see the GETTING STARTED helpfile. Other notes: Note: %DstDir% represents the directory in which WATCOM C/C++ was installed. %WinSysDir% represents your Windows 3.x system directory. 1. When debugging a 32-bit Phar Lap, TNT or DOS/4GW application, make sure that "run386.exe", "tnt.exe", or "dos4gw.exe" respectively, are in your path. Failure to do so, may cause your computer to hang. 2. When using the GUI debugger to debug Windows 3.x applications, certain Windows applications may cause the debugger to behave in an unpredictable way. Typically, this occurs when debugging certain messages in window callback functions. For example, hitting a breakpoint in a window function that is processing a WM_INITDIALOG message will crash the system. If this happens, the character-mode version of the debugger should be used. 3. In order to use CodeWright with our IDE, you will need to change the "cwright.ini" file. This file contains the following line. ;LibPreload=cwdde.dll Uncomment this line by removing the ';' character. This is required to enable communication between the IDE and CodeWright when "weditcw.dll" is selected as the editor interface DLL from the IDE. 4. If you choose to not install help files onto your hard disk, you will not be able to get help on the C library or MFC library from the editor. 5. Parallel remote debug servers now work in an OS/2 session. 6. When configuring the browser to use the CodeWright editor interface, you must specify "weditcw.dll" as the editor DLL, save the new options, exit the browser, and restart the browser. Failure to do this will cause an exception to occur in the CodeWright interface DLL. 7. Under OS/2, if you are debugging a DOS application from the IDE, you must ensure that %DstDir%\binw is in your DOS path so that when the IDE starts a DOS session to debug your application, the remote server can find its support files. 8. Under OS/2, you must ensure that the "Comet cursor" desktop setting is disabled if you want to debug PM applications. By default, this setting is disabled. 10. The OS/2 Resource Comiler ( RC.EXE ) does not work correctly if the directory which contains RC.EXE occurs too late in your PATH environment variable ( > 250 characters ). If you experience problems with RC.EXE, you should change the PATH environment variable in your CONFIG.SYS file, by moving %WATCOM%\BINP and %WATCOM%\BINW earlier in the path.
 ftp.openwatcom.org/archive/11.0c/watcom-c-11.0c.exe  local copy
Watcom C++ & Fortran v. 11.0b (Last Sybase release, 24/2/1998, Sybase Inc)
 archive.org/download/Watcom_C_11.0/Watcom_C%2B%2B_11.0.iso
Record updated last time on: 27/09/2019 - 07:27

Translate to...

Add new comment