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: ------------------- 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 =========================================================== 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 header files and 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 DOS specifics - PATH - only needs to point to the binw directory Win32 specifics - PATH - must point to binnt and binw directories, in that order 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 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= --------------------------------------------------------------------------- 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= --------------------------------------------------------------------------- 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% --------------------------------------------------------------------------- =========================================================== 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 =========================================================== 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 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 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 , 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 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 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.