What's new in the new version of lcc-win
----------------------------------------
Oct 25:
  Fixed problem in the fabs function
Oct 20:
  Fixed problem with the statistics library
Oct 10
  Fixed problem with 128 bit ints
April 17: Fixed problem with the optimizer: the cmov instruction always accesses
    memory, even if the condition is false. 
   Fixed problem with the 64 bit C library.
April 6th:
    Fixed problem in printf with the format printf ("%8.0e\n", 1.8E19); That
    would print 0...
    Fixed problem with compilation of complex numbers. Several problems remain.
Jan 24:
    The preprocessor did not handle correctly the path to the include files.
    When you had some #include <stdio.h> and then a private include file like
    "containers.h", if in the system directory there was a file with the same
    name, it would be loaded from the system directory instead of the current
    directory.
Dec 2:
     The instruction jecxz is assembled incorrectly. For the time being I changed
     the optimizer place where this instruction was being generated.
Nov 28: The expression
	Table[p++]
     would fail to increase p if p was an unsigned long and Tab was a table of
     un signed longs. Fixed.
Nov 21: Complex constants were wrongly generated. Fixed.
Sep 27: Fixed problem of optimizer in the 64 bit version. When dividing by
     an unsigned immediate constant, an incorrect assembler instruction would
     be generated.
Sep 24:
     An ANSI-C-90 version of the compiler is out. Usage:
     lc -ansic90 foo.c
     There was a problem in the 64 bit compiler when optimizing. Trying to find
     an alias for a register variable, the compiler dereferenced a NULL pointer.
     Shame on me! Fixed.
     The size_t type was defined as int under 64 bits, what is a BIG error.
     Fixed. 
Sep 20:
     There was a problem with initializations of unions within structures
     provoked by the changes introduced for conforming to C99. Fixed, but
     watch out for similar problems.
     The 64 bit compiler entered in an infinite loop when optimizations were
     turned on in some circumstances. Problem was due to a typo in the calculation
     of the number of registers available.
     An uninitialized field in a new structure provoked a crash when compiling 
     a structure initialization in some circumstances. Fixed both 64/32 bit 
     versions
Sept 12:
     Problem in optimizer: it was generating cmpb $32,%edi, what is an illegal 
     instruction. Fixed.
     Fixed problem with wedit not starting in windows 2000
August 24:
     Fixed problem reported by Colin Barker: long long subtraction in 32 bits.
     Fred J. Tydeman reported:
     > Code like:
     >  double ulp2, res2;
     >  res2 = 1.0 + ulp2 * 4.0;
     >  res2 = ulp2 * 4.0 + 1.0;
     > gets: Compiler error (trap).
     This was a typo in the simplifier module.

     Mr Tydeman also reported: 1.L / 0.L gives a NaN (should be infinity). Fixed.
     Another bug discovered by Mr Tydeman was:
           unsigned long int res = 0uL ^ 0LL;
     This was provoked by an inconsistency in the simplifier module.
     Another problem that Mr Tydeman discovered was the fact that lcc-win ignored
     minus zero. This has been fixed.

     I would like to thank all people that report bugs, and specially to Mr Tydeman. 
     Thanks for your patience with my blunders.

July 20: The expression INT_MAX+1 generated no warnings... Fixed.
July 11: Added warning for the statement j=j++; and similar blunders. This option is
     active when the -A flag is given (all warnings) since it slows down a little bit
     compilation (not measurable in my machine).
June 28: Fixed labs library function. Thanks to Jason Hood for reporting this bug.
june 10: Fixed problems with long long subtraction: in some cases the result was 
     inversed and a-b would return b-a.
june15: Fixed problems with overloaded operators within tables. This appears when
     you try to add complex numbers stored in tables. Since complex numbers use
     overloaded operators, the compiler will be unable to use them.
May 15: The coefficients of the tan() function were wrong, and the results were
     incorrect. Fixed.
May: 7: Fixed problem with subtraction of long longs. Thanks again to Colin Barker.
Apr 21:
    The compiler will now detect if the machine used supports the SSE3 instructions and
    will set up automatically the "p6" flag accodingly. If you do not want to use those
    instructions so that your program runs also in older hardware you should give the
    -p6=no command line argument to override the SSE3 code generation features.
Apr 16: The expression:
     int main(void) { long x=2, n=1, cnt1;
        cnt1 = x<=((long long)n*x)/(x-n);
    }
    provoked a compile time error. Fixed. Thanks to Colin Barker for reporting this bug.
Mar 18: Performance improvements for 64 bit data.
Mar 15:
    Keith Thompson reported that this C99 syntax did not work:
    int arr[2] = { [1] = 100, [0] = 50 };
    Fixed.
Feb 19:
    The declaration
    long long unsigned int
    wasn't parsed correctly. Thanks to Mr Tea Pot for this bug report.
Feb 18: Added operator ~for complex numbers.
    Fixed problem with wide function prototypes in io.h
    Added new rules to 64 bit operations in 32 bit compiler
    Fixed bug in operator <= for long long data.
Dec 3: Added SphericalBesselY + SphericalBesselK + SphericalBesselJ to the special
   functions package. Updated the documentation.
Dec 2:
   Fixed problems with comparisons between 64 bit constants.
   Fixed problems with constant expressions (constant < cont1) ? const 2 : const 3;)
   That expression would not be simplified at compile time. This is an error that comes
   all the way from the original lcc compiler...
Oct 31: Overloaded functions with variable argument lists weren't recognized as such.
    Fixed.
Oct 27: Problem linking the string library fixed.
Oct 22: Constant folding has been improved to optimize calls to math functions like
    sqrt(5) that will be replaced by their value without generating any function call.
  
Oct 6: Division of a constant by the result of a shift operation would yield incorrect
   code generation in some setups. Fixed.
Sep 29:
   Corrected error when reading a constant integer as a pointer, within a structure
   or array initialization.
   Corrected an error when parsing numbers that are similar to complex numbers. A
   misplaced pointer access produced a crash.
   More tests for designated initializers.
Sep 6: Corrected all bug reports for designator initializers.
Sep 4:
   Added support for designator initializers of C99. Watch out for bugs since there
   is a lot of rewritten code in structures/arrays initialization.
Aug 26:
   This declaration would not be recognized:
   void fn(size_t n,char tab[*]) {}
   This is C99. Fixed.
Aug  25:
   Fixed crash when parsing complex numbers.
   Fixed problem within the optimizer.
   Added functions beginthread/endthread
   Fixed several problems with declarations, that now can appear in any order
   as required by the standard.
July 15:
   When a static inline function is not used, the compiler
   should NOT complain. Eliminated that warning.
   Some declarations like "int long volatile long" were
   not correctly recognized. Fixed.
   When an overloaded function is defined that has a parameter
   with the same name as the name of the function the compiler
   would erronously reject the code with a redefinition diagnostic.
   Fixed.
June 15:
    double _Complex and _Complex double are equivalent. This wasn't
    recognized by the compiler. Fixed.
June 14: First version of the 64 bits version available in the
   professional edition.
June 5: According to the standard, "long int long" is legal
    and should be understood as long long.
May 8: Incrementing a long long had a typo in the machine 
     description, what led to bad code generation. Fixed.
Apr 24:
    Tables of qfloats were not initialized properly.
Mar 24:
   When you give the -ansic option, the file complex.h wasn't compiling
   correctly. Fixed.
   The following standard code:
       int operator = (42);
   was mistakenly confused with an operator declaration. Fixed.
   Incrementing a 64 bit int array would not work correctly. Fixed.
   Functions Fresnel, FresnelS and FresnelC were added to the special functions
   package.
Mar 6:
   If you write:
        for (i=0; i<10;i++) {
            int vlaArray[1024*10*i];
            // rest of the block
        }
        The memory allocated at each pass wasn't being released and in some
        extreme cases you would crash because the stack wasn't being reclaimed.
     Fixed.
     This bug was reported by Mr Erwin Lindermann.
Mar 5: Added several math functions like HarmonicNumber, and others.
    Fixed problem with alignment in win.h.
    Added %Z specifier to printf function(s) for complex numbers
Feb 4:
    Added BesselJ and BesselY to the special functions package distribution.
Feb 2
    Fixed problem in stdlib.h when compiling with -ansic.
    Fixed problem with complex numbers, when one argument of a binary
    operation is a constant. (Bad code was being generated).
    Added pow/sqrt and other functions as generic ones accepting complex
    numbers.
Jan 18
    Fixed problem in scanf when reading numbers longer than 105 digits.
    There were problems with some initialized tables, because of the changes
    needed to support C99. Fixed.
Jan 16
    Added sincos function to the standard library. 
    Fixed typo in the intrinsics code generation
Jan 6
    Inlined the cosl function.
    Fixed oversight in stdlib.h where min and max was defined.
Dec 30:
   Added stirling numbers (first and second kind) and the pochhammer symbol 
   function to the special functions package.
Dec 23:
   Added mempcpy, and memccpy to the standard library. Added the documentation
   for both.
   The conversion between unsigned long long and long double did not work
   properly for some test cases. Fixed.
Dec 16:
   Added an important part of the C99 stdandard implementation: 
   int fn(void)
   {
	int a[] = { 123,SomeFunction(),56};
   }
   This is standard C99 and now it works. This needed quite a rewrite of the
   initialization routines, and may have introduced some problems elsewhere.
   I have tested it here as best as I could but you never know.
Dec 15:
   The optimization of module for a constant integer provoked failure when the
   constant was bigger than 2GB. Fixed.
   Added function lambertw (lambert's W function) to the special functions
   library.
   Added function lerchphi to the special functions library.
Dec 14:
  The optimization of division by a constant was provoking a compiler failure
  when the constant was too big. Fixed.
  When optimizing, the compiler would fail when having a long long constant as
  a switch variable. Fixed.
  Wen optimizing and a function was stripped of the stack frame, access to some
  arguments would be generated still as ebp was valid. Fixed.
Dec 12:
  Assignment of a pointer to a bool did not work properly. Fixed.
Dec 5:
  Fixed problem with the "overflow" checking. THis program would turn out a
  false positive:
  #include <limits.h>
   int main(void) {
     unsigned u;
     u = UINT_MAX / 2;
     u++;
     u = UINT_MAX;
     u++;
     return 0;
  }
  Unsigned numbers should not report overflow.
Dec 3:
  The compiler would warn about unused arguments to printf only if there was
  more than 1 argument unused. Fixed, now it warns if there is only one
  unused argument.
November 26
  Added function mempcpy, as the gcc one. See the documentation for details.
November 25
  The expression 
      register const unsigned long long n  = 0x222LL;
   was making the compiler fail. Fixed.
November 22
  The expression
     L"This is a string" L" "
   was giving an error instead of returning a correct wide string. Fixed.
   The expression
      double *value; long long p;
      // ...
      *value = (long long)(*value * p + 0.5L) / (long double)p;
      was giving an error. Fixed.
November 12
   Fixed bug when shifting signed/unsigned characters.
   Added better constant folding when optimizing.
   The behavior of lcc-win when looking up the include files follows the same
   path as msvc or gcc: the current directory will be understood to be the
   directory where the current file is.
November 10
   Added option -dd to the compiler, that will print all the defines in the
   preprocessor with file and source line numbers. This allows to see where
   a define is being... defined.
   Added inline support for the "div" function.
   Added several missing header files from the current SDK.
   Some minor problems with the compiler: You can't declare the 'main' function
   as 'inline' for obvious reasons... This test was absent. Fixed.
October 5
  Fixed problem in the "Reformat option".
  Fixed problems when returning a structure from an inlined function when the
  size of the structure is less or equal than 8 bytes.
  Inlined the function div. See stdlib.h
September 15
  Added extension for using the same convention as C++ when invoking a function
  with unreferenced parameters.
   int fn(int a,int b,double) 
  The third parameter contains just the type, not the name. This documents that
  is an unreferenced parameter.
  printf checking code provoked in certain circumstances wrong warnings. Fixed.
  Improved the handling of complex numbers
July 25: This code would provoke a crash:
	int fn(int a)
	{
		int tab[a] = {1,2,3};
	}
   Fixed.
July 22 2007: Updates to browsegen that was crashing too often.
July 09 2007: lcc-win32 accepts the standard syntax for complex numbers constants
  of 2.11+34*I;
July 5: Added Polylog function+ documentation.
June 23:
  Added atan2q (qfloat atan2) to the math library.
  Added expintn and expint
  
June 16:
  Added beta_distribution_inv/beta_distribution_invq function. Added gamma_incomplete*
   missing functions.
May 1:
  Big update with many bug fixes since February, in the compiler, the IDE, the
  resource editor, and the debugger.
  
Feb 24:
  Added several functions to the special functions math library: Catalan, calculates
  the catalan numbers ibinomial and binomial, calculates binomial coefficients C(n,k)
  Fibonacci calculates the nth fibonacci number
  Fixed problem in code generation when converting from long double to long long.
  Fixed problem when converting from qfloat to long long.
  If you passed more than 1024 arguments to a function, the compiler would crash
  instead of writing an error message. Fixed.
  The error messages within an overloaded operator function would be wrong, displaying
  the "mangled" name instead of a clear text message. Fixed.
Jan 10: Added the source code for the complex operators to the standard
  distribution.
Dec 28:
  Bug in scanf fixed.
  When using operator overloading __func__ gabe the mangled function name. Now it
  will give the unmangled one.
  Updated the error handling of the string library.
Nov 21:
  Added getline, getdelim, ggets fggets to the standard library. Added the specfuncs.h
  header file to math.h.
Oct 15: Missing prototype for _hypot added to math.h
Sep 26: The trigraphs feature will not be enabled by default. The compiler
  will always warn if trigraphs are detected in the source code. If the option
  -ansic is acyive, trigraphs will be translated but with a warning. Otherwise
  they are ignored.
Sep 18:
  Updated sqlite3.dll and added -pedantic flag to the compiler
Sep 12:
  Fixed problem with linking PolyRoots, due to an optimizer error.
  Fixed problems with intrinsic procedures that used long double arguments.
Sep 5:
  Again, fixed the problems with bitfields in anonymous structures. I hope this time is
  the good one.
  Fixed problems in the file urlmon.h
Aug 22:
  Fixed bug in conversion from floating point to unsigned long. The conversion
  was completely reritten, having becme a complex mix of assembly code
  impossible to maintain.
  Fixed bug with cast from int to _Bool in the context of a bitfield 
  initialization.
  This two problems were pointed out by Fred J.Tydeman.
Aug 20:
  Fixed problem with Strchr and Strrchr in the containers.lib.
July 28:
  The atoq function was missing
  The compiler would still recognize "qfloat" as a defined type even when invoked with
  the -ansic flag. Fixed.
July 25:
  browsegen.exe was not writing correct sqlite3 database files. The problem
  seems to be in the quoting of integer arguments. Adding a single quote to
  the INSERT INTO sql statements solved this problem.
July 16:
  Added PolyRoots, a subroutine that uses the Jenkins-Traub method for finding the
  zeroes of a polynomial.
July 15:
  When reading a table of qfloats the compiler would trap if any of the members of the
  array was not a qfloat. Fixed.
  The debugger displayed wrongly long double data. Fixed.
July 12:
  Added _stati64 and fixed problem in sys\stat.h. _stati64 was written by Friedrich.
July 11:
  Added strtok_r (POSIX standard), a reentrant version of strtok.
July 5:
  Added Strfromp and several other overloaded functions to the string library.
  Finished the first part of the Safer C library as proposed by Microsoft.
  Added the function strfmon for the formatting of monetary values.
Jun 20:
  Added edit_distance to the distribution. See announcement in the lcc newsgroup.
Jun 15
  The program
   #include <stdio.h>
   struct {

        struct
        {
                unsigned a : 1;
                unsigned b : 1;
		unsigned:12;
        };
   } t;

   int main ()
   {
        t.a = 0;
        t.b = 1;

        printf ("%d %d\n", t.a, t.b);
        return 0;
   }
   produced 1 1 instead of 0 1 as it should. This has been fixed. This
   problem appeared only with nested structures.
   Several prototypes were missing from wchar.h

May 26:
  Added hypergeom1f1 to the math library.
May 25:
  Added more warnings to the printf checker when using the -A option (all warnings).
  Added the wide character printf functions.
May 24:
  Added an option for Strchr to take a starting index.
  Added an option for Strdup to take a starting and ending index, to make the same thing
  as the famous mid$ of Basic...
  Updated the documentation and the proposal to the standardization comitee (see 
  ftp://ftp.cs.virginia.edu/pub/lcc-win32/proposal.pdf ).
May 19:
  The wmemchr function was missing. Fixed.
  The Strchr and Strrchr functions in the string library were quite slow. Fixed.
May 11:
  The function isblank was missing from the standard library. Fixed.
  Strtrim added to the string library.
May 06:
  Updated browsegen.exe, it was crashing. 
  Updated the string library. General cleanup and stricter implementation of the Str
  prefix for most functions.
  
Apr 18:
  calloc would not check for overflow, returning a wrong result when the multiplication
  of element size times number of elements overflowed. That function was in CRTDLL.DLL, 
  so I rewrote it.
  Added rintl that was missing
  Added strtof that was missing
  Added isnanf, feupdateenv, copysignf that were missing. Bugs reported by 
  Fred J. Tydeman.
Mar 19:
  Fixed problem with the keyword "inline".
  Arranged the documentation for the list container. It is still not finished however.
  Fixed problem in the debugger when the size of a structure was bigger than 64K. 
Feb 26:
  Added small window to the IDE when you press the scrollbar button. It will
  show the line number and the current function. When you down-scroll in a long
  file it may be useful to know where exactly (in which function) you are.
  Fixed some missing defines in win.h specifically those HEAP_CREATE_* constants.
  Incorporated a fix to the preprocessor proposed by Nelson Beebe.

Jan 29:
  Added function countbits to the bitstring interface. It returns the number of
  1 bits in an integer.
Jan 27:
   Missing lfc.h lfc_impl.h added.
Jan 24:
   People complain the the -ansic option disables __declspec and _stdcall,
   making windows programming impossible. I have changed this, and now ansic
   will accept those keywords.
   The evaluate expression dialog box would  not use the carriage return key
   Fixed. Besides sometimes garbage was printed after the result of an evaluation.
   Fixed too.
Jan 16:
   Added exp10 function.
   Check of many mathematical functions. Fixed errors in yn scalbn jn.
   Added scalb function.
Jan 14:
   Fixed isnan() function, was giving wrong results. Added ipow ipowl and ipowf
   functions.
Jan 13:
   Dynamic arrays are NOT allowed at the global level. For instance
   this code should NOT compile:
   int n=7;
   int tab[n];
   BUT this code WILL compile:
   const int n=7;
   int tab[n];
   Note the "const".
   The new version of the resource editor (the full version) is
   now included in the standard distribution.
   Some problems with the standard heders using the -ansic option
   of the compiler have been corrected.
   Revised the keyboard accelerators in the menus.
Dec 20: Revised all standard header files for compatibility with
   -ansic option.
Dec 12: Inline functions with variable number of arguments are
   not supported. The compiler will issue a warning now, instead
   of crashing ...
Dec 6:
   Fixed problem with printf A format for double precision.
   Reduced the size of printf by 600 bytes.

Dec 2:
   Added the function double frand(void) to the standard library. It 
   returns a floating point number between 0 and 1.
Nov 27:
   A problem in code generation fixed. Thanks to Danielle for pointing me
   to this problem. The problem was with the rule: 
   reg: LOADI(CVDI(CVID(mem))) "\tmovl\t%0,%c\n"
   This provoked a crash in the function prune, in gen.c
Nov 22:
   Added new cryptography section to netutils.lib. The functions there 
   are:
   Sha1FromFile (computes digest)
   Sha1FromBuffer (computes digest)
   FileEncrypt (encrypts and decrypts a file)
   This is my second attempt to this, I hope this provides useful.
   The documentation has been updated, see "Cryptography" in the 
   standard library documentation.

Nov 16:
   Fixed problem under windows 95
Nov 15:
  Yesterday some changes did not make it:
  o When optimizations are ON and you call an intrinsic function
    that requires a double argument with an actual integer argument
    (sin(1) for example) bad code would be generated. Fixed.
  o The binary editor was not working due to accidentally erasing
    the dialog box that it uses. Fixed.
Nov 14:
  Big update for wedit. There are many changes and bug fixes, and
  (hopefully) we did not add any new bugs...
  o We have cleaned up wedit from many unneeded stuff and options
    that nobody used. The versioning system is gone, for instance.
    We never received any feedback for it, not even a bug report
    so we assumed that it wasn't being used.
  o Gone too is the Fortran and Eiffel support. Wedit is just an
    IDE for the C language
  o The smooth scrolling option is gone too. Machines are now so
    fast, that the option wasn't working anyway.
  o The project directory is now no longer in \lcc\lib but in a
    per user basis, normally in My Documents\lcc. This allows
    Wedit to be used by several users in a single machine.
  o An uninitialized buffer usage was corrected in goto definition 
    option and probably fixes several mysterious crashes.
  o The compiler has not been forgotten either. The evaluation of
    default arguments is completely rewritten, and can handle any
    type of initilization expression.
  o Several fixes were added to the header files, and some bugs in 
    tgmath.h eliminated.
  o The debugger was unable to follow function pointers that were at
    an offset in a structure bigger than 128 bytes. Fixed.
Oct 21:
  If there is a cast operator defined and a function call needs a
  cast operation to satisfy the prototype, now the compiler will
  automatically call the defined cast operator for this argument.
  Corrected some typos in the prototypes of stats.h
Oct 18:
  Added regexp.lib to the standard libc.lib.
  Corrected crash in wedit when looking for a symbol definition.
Oct 9:
  Added jv, airy, and struve special functions to the library, and the
  corresponding documentation. Added in double precision and in qfloat.
Oct 7:
  Fixed trap in 128 bit integer modulo operation.
  Several updates to the documentation.
Oct 4:
  Added Knuth's floating point comparison algorithm "fcmp" to
  the standard math library. Added prototype in math.h and
  added the documentation page
Oct 3:
  Updated the source distribution of the container library. 
  Location: \lcc\src\stringlib. Just type "make" to build it.
Oct 3:
  Corrected problem in optimizer: The constant -1 (or EOF) would
  not be recognized in a switch statement (if it was one of the
  cases of the switch). Fixed.
Sep 29:
  Corrected bug in wedit: when opening a new project with the option
  "keep current project open", wedit would just open a new empty
   window.
Sep 17: A lot of changes in th 128 bit integers library. Started the
   documentation. 
   An annoying bug in "Usage of" a variable is corrected in wedit.
Sep 15:
  Problem in inline function expansion solved. This would appear when
  several return statements were present in a function.
Aug 27:
  int and long, or unsigned int and unsigned long are equivalent types
  under 32 bits lcc. This wasn't being acknowledged in the operator
  overloading part. Fixed.
Aug 16:
  The more detailed error reporting for function pointer assignment
  could lead in some cases to the compiler trapping. Fixed.
  The != operator was not working when qfloats were used in a
  conditional context. Fixed.
Aug 15:
  128 bit integers are now possible. To use them #include <i128.h>. The library
  is i128.lib.
  In operator overloading, the compiler will now assume that if an
  operator like == is defined, it is not necessary to define operator!=
  since it is assumed that operator!= is equal to !operator==. The same
  with < and >=, and <= and >.
Aug 14:
  The & (and) operator would not be recognized with operator overloading.
  Fixed.
  The atof function receives a const char * and NOT a char *. Changed
  stdlib.h and math.h.
  The trap handler was making an infinite loop. Fixed.
Jul 26
  Given
       long long ll;
  the expression
       while (ll--)
  would not be compiled correctly. Fixed.
  When the main() function was declared as void, the compiler would
  emit an incomprehensible message. Fixed.
Jun 08
  Improved error reporting for assignments of function pointers. The
  compiler would never protest when assigning function pointers to
  completely different function types. Fixed.
  Fixed several problems with the "overloaded" and the "operator"
  keywords.
Jun 06
  Added the array list (flexible arrays) to the distribution. This
  replaces the vector container library. Updated the documentation
Jun 04
  Updated the distribution with the string collection library. 
  Documentation updated. Tutorial updated with the new entry.
  Source code added to the distribution.
  Updated netapi32.lib and lmcons.h
Apr 23:
  pcre.dll was missing. Fixed.
  
Apr 13:
  The debugger user interface has been updated. Specifically, it is
  now possible just to click in a substructure or union and have it
  expanded showing the sub-items it may have.
  The watch window in the debugger has changed, and now you have a menu
  where you can choose to add or delete a new watch.
  The work of Friedrich Dominicus in the resource editor has been added
  to the distribution. Specifically, the Add icon dialog should work as
  expected, and many other problems have been solved.
  The header files have been updated to reflect several constants and
  structures that were missing, specially in the common controls.
Apr 5:
  When writing:
   strchr(name,'.');
   Wedit would crash when trying to find a structure member (the point 
   was being interpreted too hastily). Fixed.
Apr 4:
  The macros isgreater, isless, etc in math.h did not work correctly.
  Replaced them by intrinsic functions.
Apr 1:
  Fixed problem in Wedit: when a recursive grep was started, if
  a directory chdir was failing, it would crash with stack overflow.
  Fixed startup code problem in the handling of traps.  
  Added fixes proposed by F. Fritsche for limits.h and stdio.h
  fscanf would not recognize numbers like -10 if scanning using
  the %x format. Fixed.
Mar 23:
  Several scanf problems solved.
Mar 13:
  Fixed problem in shobjidl.h
Mar 12:
  Corrected problem when casting from a double to an unsigned char.
  File types.h was impossible to include twice. It was missing the
  #ifndef __types_h
  #define __types_h
  ...
  #endif.  Fixed.
  Fixed problem with reformatting and an unfinished string/comment.
Mar 10:
  Wedit entered in an infinite loop when looking in a source file
  with an unfinished, multi-line comment. Fixed.
Mar 5:
  Browsegen was entering in an infinite loop when a "const" qualifier
  was in a typedef definition. Fixed.
  The initial value of the background color of the search window
  was set to black, so if you open wedit without opening a project
  or opening a file, the search window would write black over black,
  not very good... Fixed.
Mar 2:
  Fixed problems with printf when confronted with -inf
  Arranged double definitions between richedit.h and win.h
Feb 26:
  Fixed several redefinitions in win.h, uncovered by the bug fix below.
  When making page down until end of file, Wedit would crash sometimes
  Fixed.
Feb 25:
  The compiler would accept a redefinition of a structure/union.
  Fixed.
Feb 24:
  Due to a problem in the editor, the 64 bit shifts weren't working
  correctly. Fixed.
Feb 23:
  Added more consistent support for traps concerning integer
  division by zero. Specifically, now a SIGFPE will be generated,
  not SIGSEGV. Changed the startup code and the default trap
  handler.
Feb 16:
  Fixed trap in the compiler when parsing complex numbers.
Feb 15:
  OutputDebugString would always stop the debugger. This can be
  annoying, so it is now changed to adding a line in the
  outut messages window of the debugger.
  There was a problem in the optimizer when looking for the flags
  register. This optimization scanned backwards to see if a compare
  instruction could be eliminated by using some previous operation
  that sets the flags already (add, and, etc). This optimization 
  would fail to notice a change in the contents of the register being
  sought. Corrected.
Feb 6:
  Corrected some problems in the implementation of scanf.
  Added a sound, if the build has errors in it. This can be
  turned on in Wedit's config->Workspace tab.
  Updated documentation for several missing string functions
Jan 18:
  Fixed problem with scanf when reading a group character.
Jan 11:
  Fixed problem when parsing long long constants with the i64 suffix.
Jan 4:
  A serious problem in the optimizer: When a function was stripped
  from the stack frame, some generated code still used the frame
  pointer even if there wasn't any. Fixd.
Jan 2:
  Added two functions to the C library: memshort/memint, that will
  search in a table a specified number. Updated the documentation.
  A typo in qfloat.h fixed.
Dec 10:
  Fixed problem with writing of prototypes.
Dec 4:
  Wedit would choke if there was somewhere in the source the
  #ifdef __cplusplus
  extern "C" {
  #endif
  since the bracket counter got confused. Fixed.
  Added some missing defines to qfloat.h. 
Nov 24:
  Added a tutorial to the sqlite documentation.
Nov 21:
  Improved the structure fields display. Now it will automatically
  disappear if you write a field completely. Besides, I added an
  edit field to allow you to see what you type.
  The prototypes tooltip wasn't working for system functions.
  Fixed.
  The functionality to add a keyword to the keyword list wasn't
  working. (Project->Configuration->Languages). Fixed.
Nov 15:
  Wedit changed completely the format of the browse information.
  It now uses the sqlite interface to build an sql databse. This
  may cause problems. Please report any "suspicious" behavior.
  Fixed problems with conversions from unsigned character to
  doubles.
  Fixed problem with inline __declspec(naked) functions.
  Tried to fix the problems in  vfw.h, and vfw32.lib  
  Fixed problem with the ping function (netutils.lib): it would
  hang if the machine at the other side didn't answer
Nov 10:
  Fixed recentering bug in Wedit: Now recentering is done only
  when pasting at EOF. Not in other situations.
  Added configuration option to save the file without tabs.
  Fixed problem in compiler with instruction CVIL (convert int
  to long long). In some situations a register would get lost.
Nov 6:
  Fixed glitch in long double to long long conversion.
Oct 27:
  Updated commctrl.h, dbghelp.h. Many definitions added.
  Added include file windns.h, bluetoothapis.h
Oct 26:
  Added more than 300 missing definitions from winbase.h to win.h.
  An automatic program checks now for missing definitions.
Oct 24:
  Fixed problem with reformating lines with // comments in wedit.
  Fixed problem with cut/paste in wedit
  When inserting text, the cursor was sometimes set in a blank page
  due to a missing recentering of the inserted text. Fixed.
  printf would not honor the space qualifier for floating point
  %g format. Fixed.
Oct 22:
  Fixed problem in printf (%.0d" would print something when given a
  zero, what is not mandated by the standard.
  Fixed some problems in Wedit with the menus.
Oct 9: If the last line of a file was //\ wedit would crash. Fixed.
Oct 4:
  The resource compiler accepted the MANIFEST keyword and not the
  RT_MANIFEST, as it appears sometimes in the documentation. Fixed,
  it now accepts both.

Oct 1:
  Some updates to the lcclibc.dll library and a bug fix for scanf.
Sep 26:
 Problem with the fabs function, a typo would provoke a crash. Fixed.
Sep 25:
  Update of the dynamic library lcclibc.dll. Many new functions are
  replacing the CRTDLL counterparts, with the objective of having a
  stand-alone C99 library for lcc-win32 and replace definitively
  crtdll.dll. I hope this doesn't introduce new problems.
  A bug in the linker was fixed. When in the exports definition file
  (.def) you named a function that did not exist, the linker would
  search for a function with a similar name but starting with an
  underscore, so "cos" would become "_cos". The problem was that
  the windows loader expects the functions in *alphabetical* order,
  and the underscore prevented other functions from being found at
  run time. This would provoke an incomprehesible messge:
   The entry point xxx can't be found
  Pedump showed the entry point in the dll, so the whole was a
  complete mistery. Finally I got it and got rid of this bug.
  Unsigned long long multiplications weren't done at compile time.
  Fixed.
Sep 17:
  Browsegen.exe would provoke a trap during the installation. Fixed.
Sep 16:
  Bugfixes in printf and scanf: scanf did not recognize 0x prefix
  in base 16, and printf had a non-zero terminated string in its
  fixed tables.
Sep 9:
  Added Strencrypt and Strdecrypt to the string library of lcc-win32.
  
Sep 5:
  Big update: Linear algebra section with a big package for matrices
  solving linear systems, etc.
  New intrinsic function "typeof", that returns the type of its
  argument.
  Problem with the resource compiler fixed: When a resource file was
  imported from another directory the file would be opened in text
  mode and not in binary mode. Fixed.
  Fixed problems with browsegen information generation.
Aug 30:
  Improved error reporting for missing prototypes.
Aug 29:
  The grep utility in wedit would fail when given a root directory
  like: c:\. Fixed.
  Wedit would start displaying structure fields even when the cursor
  was in a comment. Fixed.
Aug 26:
 Added the -C option to the preprocessor. This will keep comments in
 the preprocessed output
Aug 23:
  Corected problem when the intrinsic function cos received a float
  argument as the result of a function call.
  Added following functions to the statistics library: median,
  geometric_mean arithmetic_mean harmonic_mean variance variance_mle
  standard_deviation_mle central_moment percentile skewness kurtosis
  rms (root mean square) standard_deviation. Documentation updated
Aug 21:
  Added function crc32 (calculates the crc) to the netutils library.
Aug 19:
  Fixed problem with the preprocessor:
  #if (2 - 1 - 1 != 0)
  would not evaluate correctly.
  Fixed problem with the cbrt function.
Aug 15:
  Still some problems with generic functions: unsigned int was 
  missing when promoting arguments for generic functions.
Aug 5
  strtoimax strtoumax strtoull: those functions were missing, and
  they are specified in C99. Fixed.
Aug 4: 
  The compiler now accepts standard C99 hexadecimal floats, for
  instance 0x100.0p-4 --> 16.0. This is one of the missing parts of
  C99 that is now implemented at last.
  xprintf did not handle well subnormal numbers. Now it does, using
  internally the qfloat library.
Aug 3: Corrections in the simplification module. Conevrsions of
  unsigned long long were sometimes not simplified. Fixed.
  frexpl(infinity) would return a wrong value. Fixed.
Aug 2:
  The signbit function was missing a pop of the floating point stack.
  Fixed.
  The distribution was missing random.h (mersenne twister include file).
  Added.
July 30:
  The conversion of double to unsigned short had a problem. Fixed.
  Thanks to Mr Tydeman for writing a test program that uncovered
  this (flt2int.c)
July 29:
  The frexp function produced incorrect results. Bug reported
  by Fred Tydeman, fixed together with other problems he discovered.
  The mdimain.tpl template in \lcc\lib\wizard contained an error.
  Fixed. (bug reported by Winny Mathew Kurian).
  The C standard changed slightly the signature of the following
  functions: 
	feclearexcept fegetexceptflag feraiseexcept fesetexceptflag
	fegetenv fesetenv feupdateenv
  Those functions were of void return type, and now they have an
  integer return type. This correction was suggested by Mr Tydeman.
  The function fehold except was missing from the library. Fixed, and
  documentation updated.
July 24:
  The generic function fabs would not work when the argument was an
  integer and the optimization flag was ON. Fixed.
July 23:
  Added the Mersenne Twister random number generator to the statistics
  section. Updated the documentation.
July 22:
  Finished the statistics package. Documentation and test program OK.
July 21:
  More statistical functions added. Documentation updated for those
July 20:
  New statistical functions library started. See the "Statistics" 
  tag in the documentation
July 14:
  The inline keyword wasn't recognized for overloaded operators.
  Fixed.
  An unused label generated no warnings. Fixed. This will show 
  only if the -A option is in effect.
  An incorrectly paired #ifndef/#endif was making trouble in stdio.h
  Fixed.
July 10:
  The macro isnormal wasn't implemented. Defined as a generic function.
July 9:
  New compiler option -overflowcheck that will make the compiler
  emit code for testing overflow at each addition, subtraction
  and multiplication. If an overflow is detected a user function
  called _overflow(char *function_name,int line); is called. A
  default implementation of that function is now supplied with
  the run time library.
  scanf had a problem with octal digits. Fixed.
  strtod had a problem with the "p" format. Fixed.
  The function fabs when in optimized setting would provoke an
  assembler error. Fixed.
  The founds lround and llround were missing.
July 6:
  strtold would not update correctly the passed pointer to the
  end of the string for certain inputs like 0e-19.
July 4:
  When you had an include in the form:
  #include "c:\some path\dir\projects\foo.h"
  and in "foo.h" you had
  #include "foo1.h"
  the compiler would not find "c:\some path\dir\projects\foo1.h" 
  even if it was there. Fixed. Thios bug was reported before but
  a faulty test led me to believe it didn't exist.
  Added documentation for regular expressions package that was missing.
July 1:
  When an identifier is a structure, now Wedit will automatically
  display the fields of the structure. This meant a lot of work,
  updating the debug information format etc.
June 27:
  Intrinsic functions like sin/cos would not longer be recognized as
  such after the change in the tymath.h headers. Fixed. Added fabs as
  intrinsic function too. Modified qfloat.h to use the generic 
  function names.
June 26:
  Updated completely tgmath.h and math.h to make them more confoming
  to the C99 standard.
June 24:
  Small additions to win.h. Still problems with multimdimensional 
  dynamic arrays. Fixed.
June 23:
  Added functions wtof wcscmp and others to the standard library.
  The startup establishes now a try/except frame. The debugger is
  modified to arrange with this.
June 19:
  Fixed problem with subtraction of two global addresses. The code
  generated was wrong when both addresses were constants.
  The function strncat was missing from the standard library, even
  if it was present in the documentation. Fixed.
  The compiler would generate wrong code for dynamically allocated
  arrays of more than one dimension. Fixed.
June 16:
  Fixed problem in the code generator. When Optimization is ON,
  and a structure with size smaller than 4 bytes is passed by value
  to a function in an assignment context, bad code was generated. 
  For instance: 
    struct f  { char a,b}; struct f Data, a;
    void somefn(struct f);
    somefn(a = Data);
  Fixed.
  Fixed some problems with the famous __VA_ARGS__ macro expansion.
June 15:
  The strtoll function was giving incorrect results when the base
  was set to zero. Fixed.
June 13:
  More corrections to the long long module.
  Wedit configuration linker would not store the double quotes if
  the executable contains spaces. Fixed.
June 12:
  Fixed buffer overflow when generating the debug information when
  an enumeration had a lot of names (more than 16K of storage)
  The fixed buffer was replaced by a dynamic schema. Who would
  have thought about an enump bigger than 16K?
  Problem with code generation for unsigned long longs within a
  conditional context solved.
June 7:
  The expression: 
  double t,d;
  t *=v--;
  would miss the decrement. Fixed.
  The expression:
  unsigned long long res = ULLONG_MAX/2;
  would produce a wrong result (zero) because of a typo in the
  simplification module. Fixed.
June 1:
  Updated wedit to avoid crashes in the F1 help feature.
May 29:
  New chapter added to the tutorial: Network programming. It
  explains the newly added netutils.lib and a bit network
  programming in general.
  Added netutils.h and netutils.lib to the standard distribution.
May 28:
  Added time64, ctime64, difftime64, mktime64 to the standard
  library. The result is a 64 bit value with the same meaning
  than the 32 bit counterpart.
May 27:
  There was a problem with the optimizer and long doubles. A
  "Not enough registers" report would be issued when it wasn't
  at all the case. Fixed.
May 26:
  Reorganized the browse informatin to better handle the types
  of the variables. Now the "auto-completion" (using ESC)
  should work better.
  Changed the error message "undefined reference to _WinMain@16"
  in the linker to the clearer "entry point ("main" function) 
  undefined". This will hopefully avoid qustions...
  The display locals command 'right click menu) was provoking
  a trap. Fixed.
  The operator keyword was getting recognized within structure
  definitions. For instance:
  struct foo {
       ingt operator;
  } 
  produced a wrong series of syntax errors. Fixed. No extensions
  (overloaded/operator) are recognized within structure declarations)
May 23:
  Buildguid was failing in some machines due to a memory leak.
  Fixed.
May 20:
  Problem with lcclnk and the new findfiles function solved.
  Problem with browsegen crashing solved.
May 17:
  New functions added to the standard library: GetHttpURL 
  (retrieves an URL) and GetFtpURL (retrieves a file with FTP).
  Another new function is "ping" that will return 1 if the host is
  alive, zero otehrwise. Documentation updated.
May 16:
  New function added to the standard library: findfiles().
  Documentation updated.
May 10:
  Updated iphlpapi.lib. Icmp.lib is no longer distributed since
  its contents have been included in iphlpapi.lib
  Updated ws2_32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib
  and comctl32.lib
May 7: Updated the network header files iphlpapi.h iprtrmib.h
  iptypes.h ipexport.h
  Arrays within structures weren't correctly displayed by the
  debugger. Fixed.
May 4:
  Fixed small eror in strtrim. Would not delete the last blank.
  Fixed problems in the memory window in Wedit.
  Changed Strvalid from bool to int.
May 1:
  Corrected error in the linker when generating the line number 
  information.
  The linker used the root directory for temporary files. This
  would not work if you did not have write access into that
  directory. It uses now the current directory.
  Changed the exception handling in the string library.
April 25:
  Added the incomplete gamma function to the math library in
  long double and qfloat precision. Updated the documentation.
April 21:
  Fixed several problems with the undo feature. Backspaces
  weren't correctly handled. The delete key had problems
  with the undo too. Fixed.
April 19:
  Still problems with variable args macros. Hopefully fixed now.
April 14:
  The old string library was removed from the distribution. 
  This provoked some errors when building the libraries. Fixed.
April 7:
  The Perl regular expressions package has been added to the
  standard distribution. The documentation has been updated
  to document the package. See "Perl regular expressions" in
  the standard library documentation.
April 1:
  Added function Strenv that gets an environment variable and
  returns a String.
  Changed the name of the string library include file from 
  strings.h to str.h to avoid name clashes with POSIX.
Mars 30
  C99 specifies a default return value for main. This wasn't
  implemented. The program:
   int main(void) { /* ... */ }
  will return zero.
  Fixed problem with the __VA_ARGS__ macro expansion
  Added function Strfrompipe() to the Strings library. It will
  start a command aand gather its output into a String.
Mars 24
  Fixed problem with browsegen crashing too often... :-(
  Fixed problem with accelerator keys in the "new project" 
  dialog of wedit.
  Fixed problem with isgreater and isless, etc, in math.h:
  An obsolete assembler instruction was used.
  Fixed a problem with a compiler trap when compiling any 
  of the above functions.
  The format %ls (print a wide character string) wasn't
  working. Fixed. The same for %S.
Mars 22
  The unary operator '*' couldn't be overloaded. Now it can.
  This is the pointer dereference operator, for instance when 
  you write *p.
  The result of this operator MUST be a pointer. An example of
  this in the string package:
  char *operator *(String s);
  This operator returns a pointer to the start of the string
  and allows accessing strings with the *string syntax.
  The pointer returned by the operator will be immediately
  dereferenced by the compiler.
Mars 21
  When a reference argument was passed to a function, the
  optimizer still performed constant folding, so any result
  was lost. Fixed.
  Example:
  void func(int &r) { r = 1; }
  int main(void) { int a = 0;
  func(a);
  // here the optimizer CAN't substitute a with zero since fn
  // could have changed it.
  }
Mars 20. Updated pedump to show all the imported dlls of the 
  executable 
  More updates of the string library.
  win.h updated with missing definitions.
Mars 17. More updates to the string library and documentation.
Mars 16
  There was an error when calculating the offsets of
  local variables, when using structured exception handling.
  That would lead to some saved registers being destroyed.
  Fixed.
  Further testing of the string library. Documentation updated.
Mars 15
  New function getopt added to the standard library.
  The function signbit left the floating point stack
  unbalanced. This leads to a crash after at most 8
  times you used it. Fixed.
Mars 14
  The reformatter of the IDE would fail with #defines
  that spanned more than a line, using \ to continuate the
  line. Fixed.
  Added functions strtobase64 strfrombase64, that I took
  from the str library built by John Finlay.
Mars 11
  Fixed problem when in a switch statement a declaration
  apeeared immediately after the case keyword:
	switch(a) {
	case 1:
		int tab[2];
		...
	}

	
Mars 9
  Fixed a problem when casting from double complex to double.
  Added wcsrepl, that mimics strrepl in the standard library.
  Rewrote the Strings package to use two versions of each
  function: one for double byte chars, another for single byte. 
  Both versions are provided and the usual construct
  #ifdef UNICODE
  #define Strcpy StrcpyW
  #else
  #define Strcpy StrcpyA
  #endif
  The documentation of the containers package has been reworked again.
Mars 8
  Due to a memory allocation error the finding of missing functions
  in the IDE within the dll list was crashing. Fixed.
  Control-z works now for the Undo feature.
Mars 7
  Added library function wcsrepl. Identical to strrepl but with
  wchar_t strings. Updated documentation.
  Most of the work now is done updating the container library.
  Several functions were added to the string package.
Mars 4
  Vector container added. New documentation available.
Mars 3
  Fixed problem with expressions like:
  int a = 10000*(1000*fn()) 
  that made the compiler crash.
  The container lib is now better (at least I hope :-), and the 
  documentation has been updated.
  The file dlls.txt used by the buildapi utility was missing 
  several dlls. Fixed. Thanks to Tom Speirs for pointing me to
  this problem.
Feb 28
  When a typedef was redefined, the compiler would break if it
  was followed by a ",". For instance:
  typedef unsigned short UINT16,*PUINT16;
  typedef unsigend short UINT16; // This would work
  typedef unsigned short UINT16,*PUINT16; // but this would not.
  Fixed.
  A function returning a pointer to a long long integer that
  was immediately dereferenced provoked a trap. For example:
  long long *fn(void);
  long long a = *fn();
  Fixed.
Feb 26
  When two __try { } blocks appeared in the same function the
  compiler would emit bad code, i.e. the second try block ended
  in the first try block exception clause. Fixed.
Feb 25:
  Fixed problem when doing a page up in Wedit that provoked a
  crash. When the document was smaller than a full page, the
  column position wasn't getting updated when doing a page up
  and the editor crashed. It is the first time that I touch
  a so basic portion of Wedit since at least 4 years.
  Congratulations to "bat" that pointed me to this bug.
Feb 23:
  Missing library function atani fixed.
Feb 21:
  First release of the container library. Implemented are lists and
  stacks. The documentation has been updated with this library.
  The construct void * operator[](...) would not work. Fixed.
Feb 13:
  The statement
  int & operator[](...);
  wasn't recognized correctly. Fixed.
  The statement:
  _Bool b;
   if (b=getchar())
   would provoke a compiler error. Fixed.
   uintptr_t was missing from stdint.h.
Feb 5:
  When using operator overloading with arrays, a cast was missing
  when the type of the actual array element wasn't the one the
  operator overloading function expected. Fixed.
Feb 4:
  Yet another problem with the hh modifier solved. The distinction
  between signed (sign extension should be performed) and unsigned
  (higher bits should be masked) wasn't getting done. Fixed.
  Fix for DWORDLONG in win.h.
  The stack display in the debugger has been improved.
Jan 30 
  The breakpoint icon was missing/ Fixed.
  Missing definitions in win.h (OSVERSIONINFOEX) were added.
  Thanks to Simon for pointing me to this problem.
Jan 29:
  Fixed problem with the hh modifier for xprintf
  Fixed problem when taking the difference of two function addresses
  in the assembler.
  Added the instruction cvttsd2si for converting data from floating
  point to integer instead of a function call to ftol. This is much
  faster but will work only with the p6 flag since older machines do
  not have this instruction (needs SSE2).
Jan 28:
  Fixed problem when p6 flag (pentium 6 instructions) is active.
  The compiler would generate wrong code for some floating point
  comparisons
Jan 27:
  Minor fixes to library functions (ldexp rewritten in assembler)
  and to some assembler errors.
Jan 26:
  Fixed code generation problem when optimizing.
  Added include file wspiapi.h (for IPV6 network programming)
Jan 10:
  Fixed problem of C keywords not appearing.


2003


Dec 23:
  The change in warning level for signed/usigned(see below) provokes too
  much noise. I eliminated all warnings for comparisons of unsigned with
  a positive constant or zero.
  Several problems with browsegen were fixed. Wedit received several fixes 
  too, specially the built-in parser (go to definition feature).
  The ceil() function wa giving wrong results. Fixed.
Dec 22:
  Changed the warning level of signed/unsigned comparison from -A -A to
  just -A.
Dec 20:
  Added cfg.h cfgmgr32.h and devguid.h to the header files.
  Updated setupapi.lib.
  This version contains a NEW assembler. Please report any problems that
  may appear as soon as possible.
  Updated compiler correcting problem in code generation:
  the rule 
  reg: INDIRI(ADDRLP(b))) ADDI(INDIRI(frameoffset),INDIRI(frameoffset)) 
  This rule is valid only if the expression is not assigned to a common 
  sub-expression intermediate value. 
  If you feed it a common subexpression like 
  a+b 
  in the expression 
  if((a + b > 0) && (a + b < c + 1 )) 
  this leads to bad code generation since the register is freed 
  prematurely. 
  The compiler now recognizes I64 and UI64 as suffixes equivalent to LL and
  ULL to remain compatible with Microsoft notation.
  No warnings were given when a long long constant overflowed. Fixed.
Nov 26:
  Fixed problem of stack adjustment when overloaded functions received an
  argument that needs a cast to a different size. Thanks to MrBCX for this.
  Updated version of wedit will close dexplore.exe when finished.
Nov 23
  Fixed several problems with code generation: Subtraction of two functions
  addresses did not work. Fixed. Fixed problem when optimizing division in
  the peephole optimizer.
  Added many missing definitions to the header files, specially windows.h.
   
Nov 11:
  Fixed problem with register allocation. Thanks to the BCX people for reporting
  this problem.
  Fixed problem with overloaded functions when optimizing: Instead of a block
  copy to push a structure by value in the stack, I used just a push instruction
  for structures with size smaller equal than 4 bytes. This was not working
  with overloaded functions.
Oct 26:
  Fixed problem with variable length arrays. When the index variable was not
  of type integer but short or char bad code was emitted.
Oct 13:
  Fixed problem with atan function. When given atan(1), the compiler failed
  to promote the integer 1 to double and complained about ambiguous call to
  atan.
  The restricted keyword wasn't being handled correctly in some cases. Fixed.
  xscanf was crashing when the '*' format (ignore arg) was given. Fixed.
Oct 10:
  Fixed wrong offset calculation for anonymous structures within anonymous
  unions. Thanks to John for reporting this bug.
  Added functions remainder/remainderl/remainderf, trunc/truncl/truncf
  Updated the documentation of the math library.
  Added inline __declspec(naked) for defining inlined functions written
  entirely in assembly, and used this feature to implement the macros
  isgreater, isgreaterequal, and the other unordered floating point comparisons
  as mandated by C99.
  Fixed problem of spurious warning when using the %S format in printf.
  Fixed problem with offsetof macro.
Oct 6:
  Fixed problem when taking the address of atan function.
  Fixed the problem of powl returning a wrong result by mistakingly assuming
  overflow.
  Fixed problem with infinities in powq (qfloat) function.
  Fixed problem in the IDE when a cast to an immediate structure was used. The
  IDE assumed that no braces can occur when the level of parentheses is greater
  than zero. Wehn you use foo(&(struct m){"abc",10}); this rule is no longer
  valid. Since this feature was recently added to the compiler, the IDE issued
  a wrong message.
Oct 1:
  Fixed problems in xscanf and xprintf. Now xscanf can input qfloats, and long
  doubles.
  Changed all representations of complex numbers to a single representation
  unsing long doubles. This simplifies the code, the libraries and the
  compiler itself.
Sep 30: Fixed problem in strtrim. A wrong file was included in the makefile
  of libc.lib, what implied that a wrong libc.lib was built.
Sep 29:
  Added following functions to libc.lib:
  cabs, csqrt, cpow, cproj, csin, ctan, ccos, catan casin cacos, ctanh catanh,
  csinh, casinh, ccosh, cacosh, clog, y0, y1, j0, j1, yn, jn.
  All of them in qfloat/long double/double/ precision.
Sep 24:
  Complex numbers have been given a rework. Many automatic casts from float
  complex to long double complex for instance weren't working properly.
  The complex functions were moved from math.lib to the standard libc.lib
  to avoid having to link another extra library when using complex numbers.
  The cast of immediate structures (C99) now is working. You can write:
	(struct customer){"John",25}
  This is useful for passing immediate structures as arguments to functions,
  for instance.
  When generating complex long double constant like 2.3L+8.9Li the alignment
  of doubles in a 16 byte boundary wasn't respected, since the compiler failed
  to emit a 32 bit zero after emitting the first long double constant. Fixed.
  A faulty rule would provoke crashes when an addition to a base+offset form
  was being done.
  Complex math functions cabs, csin added with qfloat/long double/double
  versions.
  
Sep 16:
  Missing declaration for the constant INFINITY in math.h. Fixed.
Sep 12-14:
  The #pragma lib implementation had a serious bug. When linking several files
  that all contained an automatic reference to a library, the library would be
  added after that file was added. Since lcclnk is a one pass linker, the library
  would not be seen by the object files later on. For instance if we had:
    lcclnk a.obj b.obj
  If a.obj and b.obj included (automatically with #pragma lib) "foo.lib" the 
  command line the linker would see was:
    lcclnk a.obj foo.lib b.obj
  Now, if b.obj contained references to "foo.lib", that library contents would 
  not be seen by the linker what provoked incomprehesible errors... Fixed.
  Fixed overflow problem in powl function.
  Improved qfloat standard functions by reducing the copying of qfloat numbers,
  each 14*sizeof(int) bytes...
  Added functions ceilq ceill ceilf fdimq scalbnl scalbnf scalbnq log10q
  The floating constant 0q (zero qfloat) wasn't being recognized. Fixed.
  Added option -o <output file> to the compiler to keep it more compatible with
  gcc.
Sep 10:
  Added functions to the standard c library. cbrtl cbrt gamma lgamma erf expm1 
  atanl tanl isinl log1p and many other qfloat equivalents of the standard library.
  The pow function was tested for correct behavior with NANs and infinities
  The initialization -10q was not yielding a negative qfloat but a positive one.
  Fixed.
  Tables of qfloats now work as they should.
Sep 9:
  When an overloaded function like
  int overloaded fn(long double);
  was called with arguments:
  fn(5.9);
  The correct function was selected, but the call was done without generating
  the cast to the actual expected type!
  This means that many overloaded math functions failed when called with
  slightly different argument types. Fixed.
  The function hypot() was implemented in a trivial way. A better implementation
  was found in the code of free BSD. I adapted it, and added it to libc.lib.
  The power function was not taking into account the results specified for
  infinite, NAN or negative arguments. This has been fixed. Still, lcc-win32
  does not support negative zeroes.
Sep 6:
  Added coshl sinhl tanhl to the standard library. Added coshq sinhq and
  tanhq (qfloat versions) to qfloat.dll
Sep 5:
  Fixed problems with sinhl and asinhl in the math library. Those
  functions are part of the standard library, so they were moved from
  math.lib to libc.lib, and now will be included automatically in any 
  link process.
  Fixed problem with exp(2) being calculated incorrectly.
  Fixed missing WM_ definitions in win.h. Thanks Mike.
  Added windows system files rassapi.h adsiid.h and adtgen.h.
  The operators << and >> weren't being recognized. Fixed.
  The assembler was confusing fistpl and fistps..., thanks to John
  for pointing me to that error.
Aug 31:
 Added math library function log1p.
Aug 30:
  In an expresion (1) ? (double expression) : (long double expression)
  the resulting type would be long double and not double, even if the
  controlling expression was a positive constant. This made all those
  macros in math.h:
  if (sizeof(a) <=8) ? sqrtd(a) : sqrtl(a)
  FAIL, what a bug... This was visible only when you specified the -ansic
  flag, that is why I did not see it.
  Problem with qfloats and cast operators fixed. The expressions
	unsigned int a = (unsigned int) qfloat;
  would not work even if there was an operator
  int operator()(qfloat);
  defined. Besides, if the operator took a reference like in:
  int operator()(qfloat &);
  the reference was not being respected and this provoked a crash.
  Fixed trap when casting to long in some special conditions.
  Fixed several missing definitions in win.h
  Fixed the problem of redefinitions in win.h
  Fixed problem in oaidl.h: a macro was defined several times.
  Added warnings when there is an overflow when converting long double to
  long long and many other conversions that provoked an overflow without
  any warning message. This is in the context of constant expressions
  only.
Aug 28:
  Extra semicolon in math.h line 90 results in surious syntax errors.
  Fixed.
Aug 27:
  The format in printf "%lf" should ignore the 'l' qualifier. It wasn't, and
  mistook that for a long long (qualifer 'L'). Fixed.
  The standard accepts multiple type qualifiers in a declaration like:
  int const const const a;
  This wasn't recognized by the compiler. Fixed.
  The restricted keyword is now fully recognized and error checking is done.
  Added #pragma lib <bignums.lib> to bignums.h
  Added the corrections that Mike Caetano proposed for win.h. Thanks Mike.
Aug 26:
  Added intrinsics sin() and cos() to math.h. Now no function call will be
  generated for those functions but just a single fsin/fcos instruction.
  At the same time this greatly simplify the type generic math since now
  sin() and cos() will work for float to long double.
  Added VARIANT_TRUE/VARIANT_FALSE to win.h, that were missing.
  Fixed problem in xprintf when a long double value greater than DBL_MAX was
  passed: xprintf would print "inf" even if the number was a perfectly correct
  long double number.
  Improved constant folding in assignments. More constants are now followed.
  Fixed problem with rule CVUS(CVSU(reg)) in the win32.md file. This provoked
  that Comeau C++ would not compile its own library.
  Added improved register assignments. The overall speed is increased, I hope
  without too much pain in future problems. Please report any inconsistencies
  you may discover.
  Added simplification of (CON1*a) / (CON2*b) --> (CON1/CON2)*(a/b). The constant
  division will be made at compile time.
  Multiplies by 1.0 generate no code.
  When optimizing away a division by 2, a spurious move was still generated. 
  Fixed.
Aug 15:
  Added mount and umount utilities to the tutorial examples. Corrected win.h to 
  include the correct prototypes.
Aug 14:
  Updated inttypes.h to conform to the C99 standard. Several dozen macros were
  missing.
  Added __retry to the exception handling syntax. This construct can appear only
  within an except block and will provoke a jump to the start of the current
  try/except block
  
Aug 13:
  Finished the long long work for the time being. Several small problems with
  long long conversions and cnstant folding were fixed, and the tests passed
  again.
Aug 10:
  The cast (long long)&foo would not work. Fixed.
  When parsing 8LL << 6LL the compiler would not do the constant folding. Fixed.
Aug 8:
  Improved the 64 bit support. The improvement is like 25% or more, depending
  on the program. Please test anew your 64 bit applications.
  Rewrote wininet.h since to make it current with the SDK.
Aug 4:
  The function lldiv (and the corresponding lldiv_t) was missing from the
  standard library. Same with llabs. Both added.
Aug 3:
  __declspec(naked) was not working when the function returned a pointer. Fixed.
  Added intrinsic _GetStackPointer() that returns the current machine stack.
  Modified intrinsics.h, added the documentation, etc.
Aug 1:
  Added missing include file pdhmsg.h.
Jul 29:
  Fixed problem in compiler when two consecutive __try blocks were written.
Jul 25:
  Compiler: problem of expanding void inline functions fixed.
  Problem when expanding intrinsic function round to int fixed.
  Problem of memory overwrite when generating assembly listing fixed.
Jul 20:
  Due to a typing mistake in libcrt0.asm and libcrt0s.asm the version of July 19th
  produce corrupted DLLs. (!!!). Fixed.
  Implemented psignal(int sig,char *msg); that will print a signal with a descriptive
  text. Added a documentation entry for it, and the prototype in signal.h
Jul 19
  Implemented GetExceptionCode() and GetExceptionInformation() for structured exception
  handling.
  The result of __except() is now evaluated and must not be an integer constant. It
  can be, but this is no longer mandatory.
  Modified lcccrt0.asm to implement the global variables needed by GetExceptionCode()
  and GetExceptionInformation().
  Fixed problem in wresdll.dll: The second dialog box that was edited, the font would
  be of the wrong size.
  New header file <seh.h> containing all definitions needed for structured exception
  handling. Include this file if you want to use this feature.
  The alt left arrow (back in History) was not working correctly within wedit. Fixed.
Jul 17:
  Added the implementation of FLT_ROUNDS to float.h. 
  Added the intrinsic function _GetStatusWord() that returns the FPU status word.
  Changed the level of "Assignment in conditional expression" warning to a higher 
  warning level.
  When a default argument of type enum was used, the compiler trapped. Fixed.
  The automatic generation of help files from within Wedit has been discontinued.
  There are now better tools that are freely available like doxygen, for instance.
Jul 13:
  Fixed problem with offsets of unnamed structure/unions within a larger struct.
  Thanks to MrBCX for that.
  Fixed problem with sizeof variable length arrays:
  int fn(int n,int array[n]) { ... sizeof(array) }
  This produced a trap. Fixed.
  Fixed the problem with __try __except not working. This should run now but further
  work is planned.
July 9:
  Added the syntax ++operator for redefining the pre-increment operator. You redefine
  the post increment with operator++. This makes the operator overloading consistent
  with the normal C syntax.
  The operator sizeof wasn't giving the correct results when used with flexible
  arrays. As an example:
  int fn(int a) { int array[a]; ... int s = sizeof(a); }
  Added warning "Assignment within conditional expression", that catches errors like:
       if (a = b) { ... }
July 7:
  Fixed strrepl. Thanks John.
  The LPCREATESTRUCT was lost in win.h. Fixed.
July 6:
  Added roundl round and roundf functions from the C99 standard that were missing
  Added lrint lrintl lrintf llrint llrintl llrintf that were missing also. 
  The documentation (c-library.chm) was updated.
  Fixed bug of xprintf with negative numbers.
  Added the qfloat as a native type to the compiler. This allows a better handling
  of numbers like 123456889765645444566.414141414141444442222Q. Numbers ending with
  Q will be assumed qfloats. This is the first step of making the C99 feature of
  anonymous structures work.
July 4:
  Fixed pow function. When overflow happened, instead of returning infinity, 
  it was returning a NAN. Fixed.
  strtold() did not recognize the "inf" input. Fixed.
  The prototype of fegetexceptflag() was missing in fenv.h
July 3:
  Added all the missing definitions in windows.h proposed by Mike Caetano.
  Improved NAN handling and definitions in math.h
  fpclassify had problems, returning NAN for INF quantities. Fixed.
June 28:
  Added libraries npptools.lib mtxex.lib gpedit.lib fcachdll.lib rtutils.lib
  sensapi.lib credui.lib npptools.lib nmsupp.lib ntdsapi.lib sisbkup.lib
  winscard.lib
  Updated ntmsapi.lib odbc32.lib riched20.lib
  Added header files netmon.h gpedit.h filehc.h sensapi.h wincred.h sfc.h
  netsh.h ntdsapi.h schedule.h ntdsbmsg.h ntdsbcli.h winsmcrd.h scarderr.h
  winscard.h
  Updated winioctl.h
  If an inline function was defined but not used, the compiler would complain.
  Corrected.
June 22:
  The variable length arrays continue to give some problems. Some of them fixed
  specifically when using vla arrays in function declarations:
  int addmat(int x,int y,double matin[x][y])
  for example.
  Added the vertical property to progress controls. Up to now they could be only
  horizontal
June 17:
  The mergeasm utility is incorporated into the compiler now. The produced 
  assembler files will always have the C source text added to them. This
  eliminates the need of that utility.
  The printf j format was not recognized in the compiler and produced a 
  spurious warning. Fixed.
  The qfloat.h had a line #pragma lib "qfloat.lib". This produced that the
  library would be searched in the current directory instead of in the 
  standard include files. Fixed. Now is #pragma lib <qfloat.lib>
June 16: Added traffic.h to go with traffic.lib (import lib for traffic.dll)
  Added oleacc.lib cryptui.lib cryptnet.lib cryptui.lib odbcbcp.lib netsh.exp
  Added icm.lib ,sfc.lib and sfc.h, wsnmp32.lib
  Did you notice that this file has less typos?
  John Finlay has corrected them. I thank John for this and all the work he 
  has done with the lcc-win32 compiler
  The memory dump in the debugger did not display correctly. Fixed
  The "Running" button in the debugger stayed on ofter the debugger closed.
  Fixed.
June 15:
  Added warning with level 3 to the compiler: assignment of unsigned char * to 
  char *.
  Cleaned win.h eliminating declarations like
   DWORD bitfield:1
  and replaced that with
   unsigned bitfield:1
  This reduces the number of warnings in win.h when using the -A option
June 12
  Added import library wldap32.lib and corresponding header files
  winldap.h schannel.h
  Fixed problem in wedit about the Open project dialog that did not correctly
  sort the projects by access date.
  Added support for owner draw listboxes in resource editor.
June 1:
 Fixed several problems in the resource editor: the "name" field was inconsistently handled when
 the properties window was open. Fixed. Other problems with symbols were fixed too.
 Wedit: The "name" field when opening a new file contained garbage at the start. Fixed.
 
May 23:
 Some problems in Wedit fixed: undo feature (yes, still that), the file comment
 utility was not working, and some others.
 The tutorial was ported to PDF format, and many chapters were enhanced and
 corrected. More material was added explaining finer points of C, and several
 examples were added to the C samples at the end.
May 16:
  Fixed problem when taking the mod of 2 characters using 64 bit arithmetic.
  Fixed problem in reference arguments and constant folding
  Fixed problems of wres with spaces in file names.
May 11:
  Added the statement MANIFEST to the resource compiler. This compiles a resource for the
  manifest of windows NT. Syntax:
  1 MANIFEST "file name here"
  The compiler would not accept:
  qfloat a = 6.6e834Q;
  Fixed.
May 2:
  Added a warning when a single line comment was finished by a backslash
  Added several rules to optimize expressions where character  arithmetic is performed
April 27
  When you define a structure within a special packing environment, the definition of all
  structures of that type should take into account the packing when the definition of the
  structure was done and NOT the packing in effect when the structure is initialized. For
  instance:
  #pragma pack(push,1)
  typedef struct tagStr { char a;char b;} Str;
  #pragma pack(pop)
  Str someVar = {1,1}; // Here we have a normal packing but the structure was defined with
                       // packing to 1. THAT should be used here.
April 26
  Problem when generating code for a modulo expression when using long longs. Fixed.
April 23
  Fixed problem in the spiller. When several character comparisons were done in a single
  expression (i.e. charray[2] == chararray[34] && chararray[34] == chararray[12] && ... )
  the compiler ran out of registers. Fixed.
  Fixed problem with importing cabs (complex absolute). The crtdll.exp file was wrong.
  Improved debug information for variable length arrays.
  Improved code generation when pushing a structure by value in the stack, or copying it into
  another. If the size of the structure is a multiple of 4, I will use movsl (4 bytes at a time)
  instead of movsb (1 byte at a time).
April 19:
  Added header files and export descriptions for Bluetooth support using windows sockets. Files
  irprops.exp ws2bth.h and others.
  The compiler would not recognize L "some string" as a wide char string. Fixed.
  Winhttp interface was added to the system. A sample for this was added to the lcc2 distribution.
  The implementation of the variable length array had to be rewritten. The information about this
  type of array was stored in the type information, but this led to assuming unrelated objects
  that had the same type were variable length arrays. Now the information is stored in the symbol
  itself.
April 6:
  Updated directx 8 according to John's contributed files.
  First version with the strlib (a clone of the standard string library with bounds checking)
  Written by Friedrich Dominicus.
  
Mar 31:
  When an inlined function was compiled using the O2 flag (eliminate unnecessary assignments), a
  NECESSARY assignment was erased. Fixed.
  Still problems with the pow function when passing floats. Fixed.
  The documentation for all the windows controls has been added to the lcc documentation.
Mar 23:
  Fixed problem in __ftoul: the register ecx was being thrashed
  Fixed bug in optimizer when compiling (expression)?1:0
  Fixed compiler trap when compiling an array of undefined structures. The compiler will now emit
  a diagnostic message...
  Fixed bug of wedit: when the debugger stops, the current directory was changed to <project>\lcc
  instead of the current directory when it started the debugger.
  
Mar 10:
  Fixed problem with token pasting in the preprocessor.
  Added 0b11100 for binary constants
  Fixed problem with strrepl when statically linking
Mar 2
  Resource editor properties window is now non-modal, i.e. you can change the
  focus without closing it. This could produce some problems. Please report as needed.
  buildapi.exe was not working. Fixed.
  Debugger: The expression a[b[c]] was not displayed correctly. Fixed.
  Various problems with the resource editor were fixed.
  Imaginary numbers can be written 78.98i or 78.98I
Feb 14:
  The profiler display was not working. Fixed.
Feb 9:
  Added strrepl (replace a substring with another string) to the standard library.
  Corrected problem in browsegen.exe that produced inaccurate debug info. Please erase your
  old xrf files
  Corrected problems with temporary results in expressions that use overloaded operators.
Feb 8:
  Added dbglib.exp and dbglib.h to the distribution.
Feb 6:
  Added functions ctanh casin log1pl casinh. Fixed problem in csin, ccos and clog. All functions
  come in 3 flavors: suffix l for long doubles, no suffix for doubles, and f suffix for floats.
  The compiler would not initialize a long double _Complex because of alignment problems. Fixed.
Feb 5:
  New executable profiler.exe will display the data of the profiler. The usage is: 
  profiler <data file>
  where <data file> is normally the __profile.data produced by a program compiled with profiling
  support. This will be done automatically by the ide.
  The problem of the resource editor not saving header files is fixed.
  The compiler supports now compiling for dynamically linking with the lcc runtime (lcclibc.dll)
  that is now shipped with the distribution.
  A problem with the addition of 64 bit integers was fixed.
  wedit now will take into account the left margin when drawing the red underline when a symbol
  is undefined.
  New compiler flags:
   -libcdll Compile for linking with lcclibc.dll
   New linker flags:
  -dynamic Use lcclibc.dll instead of libc.lib (static version)
  -nolibc No linking with the c runtime at all
  Problem with buildapi crashing at installation fixed.
Jan 24:
  Profiler support improved.
Jan 21:
  Fixed (hopefully) the nasty crashing in wedit. Fixed another bug in the compiler when calling
  a _stdcall function that returns an unsigned short. Thanks to "lcc-user32" for his/her detailed
  bug report.
Jan 19:
  Cleanup of wedit's code to avoid nasty crashes when checking the syntax. I hope it works better
  now.
  The system was wasting several handles when starting a new process. Fixed. This would not make
  a lot of difference, but now that the editor can span several threads in a minute it could become
  significant.
  The expression 1%1 was NOT giving zero as it should. Fixed.
  The coverage profile was started, the user interface modified, but the data display part is not
  ready yet.
Jan 14
  Fixed problem in the compiler when converting doubles to unsigned ints. For some values the conversion
  was wrong.
Jan 8
  Added functions acosl acosf hypotf hypotl to libc.lib
  Fixed font problem in the new resource editor
Jan 3 
  Added two new intrinsic: lrotl and lrotr, to rotate an integer a number of bits.prototypes in
  stdlib.h
Jan 1 2003
  The new version of the resource editor is out. The documentation has been totally rewritten since
  it is a new user interface.
  The entire documentation of the system is now in chm form. It is no longer distributed with the
  main distribution but in a separate file, where there is the tutorial, the users manual, and
  the documentation for the standard library.



2002



Dec 28:
  Michael Scott discovered a problem in the routine _alludiv, that was giving a result 1 less than
  what it should. (That routine divides long longs). Fixed.
  Several bugs in the undo feature of wedit were fixed.
Dec 27:
  The resource compiler has the -M and -Fo options as the compiler has. This will allow wedit to
  find the dependencies of a resource file, and recompile the resource file when one of the
  contributing files has been changed, for instance an icon or similar. This wasn't working till
  now.
  The "Open project" dialog has been updated to show the details of each project as the user
  changes its selection.
  Two problems in the register allocator were fixed today; I thank grischka for very helpful
  bug reports.
  Makefile generation, has been improved (see above) and now the resources are relative to
  $(SRCDIR) instead of being absolute paths.
  The position of the child windows is now correctly restored. The first time you load the new
  wedit the windows will be wrongly positioned, since the coordinates now are relative to the
  invisible MDI client window. Do a "cascade" to reposition the windows, then the position will be
  correctly remembered.
  The zlib library has been added to the standard distribution. zlib.dll is in \lcc\bin, zlib.h
  is in \lcc\include, and zlib.lib will be built at installation in \lcc\lib like all the other
  import libraries.
Dec 24:
  New functionality "Check syntax" added to the IDE.  This feature does:
  1) Copies the (possibly modified) contents of the current editor file (that must be a .c file) 
    into a temporary file in the binaries directory. The name of the temp file is __check_%s where 
    after the prefix the name of the original file is appended. The editor buffer is not saved.
  2) Calls the compiler with the current compile options of the project and adds the option -check 
     to the compiler flags.
  3) Under this new option the compiler will not produce any output, just diagnostics, if any. No 
     object file is created. Since all code generation is disabled, such a test runs approx. twice 
     as fast as a normal build. This option increases the warning level to -A too, so you may find 
     more diagnostics than you otherwise obtain when compiling with your compiler options.
  4) Diagnostic output is saved in the project error file (normally in the binaries directory). 
     The temporary c file is deleted.
  5) The "build" window opens at the bottom of the editor and shows the diagnostics, if any.
  You press Alt+F9 when you want to check your code.
Dec 20:
  exp2 function added
  log2 function added
  expm1 function added in assembly to libc.lib and taken out of math.lib (was in C)
  imaxabs function added
  fixed inttypes.h to declare all C99 types
Dec 18:
  The header file olectl.h was wrong. Updated.
  The compiler would not recognize correctly a number like: 04000000000LL, i.e. an octal long long.
  Fixed.
  xprintf would not print correctly a negative octal number, that should be treated as unsigned.
  Fixed.
  xprintf did not recognize the qualifier 'L' for octal numbers. Fixed.
  xprintf would not print correctly a nonsense specifications like "%.10000f". Fixed. Output is
  truncated at 4095 chars, according to the standard.
  Wedit did not correctly recognize an input file name. Fixed.
Dec 17:
  Added nextafterl nextafter and nextafterf library functions
  Added mshtmlc.h mshtml.h dimm.h to header files
  Fixed problems with the fsopen function
Dec 13:
  Serious problem in the debugger evaluator fixed.
Dec 12:
  Problem with conversion of INT32_MIN to long long fixed.
  Added several complex math functions in all their versions (float double or long double _Complex)
  Complex.lib has been eliminated and integrated in math.lib. This simplifies the user interface:
  only one lib to remember.
  Problem with the Undo fixed (I hope is the last one)
Dec 3:
  Problem with the #pragma lib instruction fixed.
  New version of Wedit supports tooltips for all functions in the header files (windows and
  standard headers). This supposes a tooltip database that increases the distribution size by
  more than 200K. I think this is a small price to pay for this useful feature.
  A serious problem with the GC and the Undo information was found. I hope now the problem is
  corrected: I was storing the Undo pointer at an odd address.
Dec 2:
  The editor would not recognize errors/warnings that contained two (or more) file names when
  reporting an error in an include file, for instance. Fixed.
  Fred Tydeman reported several bugs with the overloaded exp function. Fixed.
Dec 1:
  A complete rewrite of the "Undo" feature was done. There are still bugs in it but I hope now
  it will work better. This needed several days of work.
  The compiler emitted a warning when a static variable was assigned but not used. This is
  incorrect. Fixed.
  Problems still with 64 bit integer comparisons fixed.
  Stdint.h defined some quantities incorrectly. Fixed.
  A cleanup of the editor code was undertaken. This reduced the size of Wedit by 6K.
Nov 28:
  Editor:
  Corrected problems with indent block-move. The line right after the block move was being moved
  without reason. 
Nov 26
  Added mmc.h
  Fixed problem with comparison between long longs and chars
  Fixed errors in stdint.h
  A number like -388766LL would lead to generation of a run time NEGate with 388766 as argument.
  Fixed. This is jow done at compile time.
Nov 23:
  The linker left an invalid executable in some situations. Fixed.
Nov 19:
  Optimization problem discovered by the SmallEiffel team fixed.
  Arranged setupapi.h. A total rewrite was necessary.
Nov 16:
  Problem with a wrong instruction being issued fixed. Thanks to Uwe Sander.
  Added winsnmp.exp (snmp/windows API)
Nov 9:
  Fixed problems in shlguid.h. Thanks to Pascal Haible for reporting me this.
  Added olepro32.lib (olepro32.exp)
  Added the GUIDs for Oledb.lib
  Updated pdh.lib
  Added pwrprof.exp powrprof.h (power management), toolbar.exp (toolbar creation),
        uxtheme.lib uxtheme.exp uxtheme.h
  Updated psapi.exp, resutils.exp.
  Lcclib was stopping after 700 files when you gave it an argument like "*.obj". Fixed.
Nov 7:
  First version of the embedded web control shipped. Use iehelper.h and link with iehelper.lib.
  The library uuid.lib will not be shipped with the distribution but can be built with the
  command buildguid.exe. This saves 3.5MB in the distribution, that already is too big.
  This command uses a IIDs template in \lcc\buildlib\uuids
  Added addl.h to the standard includes, and adsguid.lib (directory service) import lib.
  Added bits.h (background downloading header) and exdisp (web browser interface) to the
  header files
  Added authz.lib: for the authz.dll, authorization API.
  Added authz.h: ditto for the definitions, together with adtgen.h (auditing)
  Added dsuiext.lib: Directory Services User Interface Extensions
  Added httpapi.lib. (Httpapi.dll import lib)
Nov 1:
  Fixed bug in strtold. Thanks to Vicent for pointing me to this bug.
Oct 29:
  The double variable HUGE_VAL (defined in math.h) provoked a trap when used. Fixed and thanks to
  Ricardo Y Maeda for reporting this bug.
Oct 28:
  The wedit.hlp file has been replaced by c-library.chm, a compiled html file. Thanks to John for
  doing the conversion.
  The debugger was being fooled when you have a typedef in some other file that had the same name
  as a local variable or argument in a function where this typedef wasn't used. Fixed.
Oct 25:
  The debugger should be able now to follow programs with several threads.
  Bug in code generation fixed: When taking the modulo of a number by two (n%2) the compiler
  generated an incorrect instruction.
Oct 21:
  Problem with xprintf substitution fixed. Thanks to Geoff from elj-win32.
Oct 18:
  In the declaration:
  void fn(void (_stdcall pfn)(int)) { }
  the pfn parameter (a function pointer to a _stdcall function) was NOT recognized as _stdcall.
  This is fixed. Thanks to grischka for pointing me to this.
  Besides, in the declaration
  void fn(void _stdcall (*pfn)(int)) { }
  (the _stdcall was before the parentheses instead of after it) the _stdcall was ignored. Fixed.
  In the IDE, when you defined the output of the executable to be somewhere else than in the directory
  where lcc keeps the object files and executables, a boring message "executable not up-to-date" was
  issued each time the debugger was started. Fixed. I added a variable EXE in the makefile. Please
  watch for problems here.
  
Oct 16:
  File poppack.h was missing in the distribution. Added.
  The debugger did not handle correctly modules with multiple source files, i.e. when in file
  file1.c you wrote #incldue "file2.c". I hope this works better now.
  Code generation error with long longs fixed.
  
Oct 11:
  The printf checking for floating point formats was not working. Fixed
  Code generation error when pushing a character argument to an overloaded function fixed.
  A typo in libc.lib made fpclassf (float fpclassify) invisible since it was exported under a
  wrong name.
  A small inaccuracy in LDBL_EPSILON in float.h was fixed.
  The header files for the shell (shlobj.h shobjidl.h and others) were updated to reflect the
  latest development as used for the Microsoft Windows SDK version Oct 2002. This should be
  transparent to users unless I have make a mistake obviously.
  The import libraries shlwapi and shell32 were regenerated to reflect changes in the corresponding
  DLLs.
Oct 2:
  The function exp() of the math library was wrong. Fixed.
Sep 26:
  New version of the compiler that has a 30% improvement when compiling very large files. (4MB)
  Modified the "window" menu item in the IDE. Now, you will find there the most recently accessed
  files. You can configure the number of files in the configuration->workspace tab. A value of
  zero means no limit. The "More windows..." menu item leads now to a bigger dialog box than the
  default windows MDI one.
  The "import project" option had several problems. Fixed.
Sep 18:
  Glaux.lib updated by John with a correct version.
Sep 13:
  dynloader.h was wrong. Fixed
  Arranged the "window" menu of wedit. Now you can see all the windows opened, or set a maximum
  number of windows to be kept in the windows menu.
Sep 11:
  When an assignment to a structure smaller than 4 bytes is done, the compiler optimizes this
  as if it were an assignment to a register. This was generating wrong code when you had:
  struct foo a,b,c;
  a = b = c;
  The first assignment was not transformed, only the second was. This provoked a compiler failure.
  Fixed
Sep 10:
  Several problems were discovered with optimizations: constant folding was provoking a trap in
  some special code patterns, and some constant foldings were not reset after a while or do
  construct.
Sep 7:
  The debugger did not always show the current line. Fixed.
Sep 5:
  lc.exe (the compiler driver) did not handle .asm files correctly. The same problem appeared with
  .def files. Fixed. Besides, the compilation of a single .res or a .asm file will not invoke the
  linker.
  The make utility was modified to set always the variable LCCROOT. This allows that wedit generates
  makefiles without absolute paths in it. This variable will be set to the lcc directory.

  Wedit has now an incremental search feature, just like emacs. It is bound to Ctrl+F, and allows
  you to type a word to search, incrementing the position of the cursor with the longest match.

  I have started to build the data structure browser in the debugger. Not finished yet.
  
Sep 1:
  Added incremental search to wedit.
Aug 25:
  The compiler would emit wrong code when a bit field that has the same bit size as the natural
  size of the bit field type appeared in a conditional expression. For instance:
    unsigned int f:32; // 32 is the bit size of an int
   if (struct.f)
   In this context (and only in this setup) the if would be incorrectly generated. Fixed, with some
   pain. this was a difficult bug to cope with.
   Thanks to John for pointing me to this.
Aug 24:
  The construct
	int a[4.9]
  was not handled correctly by the compiler. Fixed, now there is a clear error message.
  The optimizer was spoling the generated code when you had:
	char a[]= {'a','b','c'};
        a[1]--;
   Fixed.
Aug 22:
  The linker contained a bug when exports were added to an executable that wasn't a dll. Fixed.
  The prototypes for nan(), nanf() nanl() were missing, as well as the implementation of those
  functions. Added.
  The rules for generic functions have been slightly modified: if there isn't any exact match, 
  before applying all the promotions, only the promotions as to widen the argument types are
  applied: char/short are converted to int, unsigned char and unsigned short are converted to
  unsigned, and floats are converted to doubles.
Aug 2:
  The problem of executables containing random bits after  the import table has been fixed.
  The linker version has been upgraded to 2.55 since some APIs require this.
Jul 23:
  When comparing long long integers right after a not operation, the compiler could generate wrong
  code. Fixed.
Jul 20:
  Added several include files and libraries to support WMI network API: wbemads.h wbemdisp.h
  wbemidl.h wbemcli.h wbemprov.h wbemtran.h. The new library wbemuuid.lib was added to the
  distribution.
  The compiler distinguished between unsigned long and unsigned int when comparing types. Since
  this types are always equivalent in lcc-win32, any error generated by "redefinition of" was
  wrong. Fixed. This means that void function(unsigned long) is equivalent prototype for
  void function(unsigned);

Jul 15:
  Unsigned/signed comparisons in the preprocessor were wrong. Fixed.
Jul 9:
  The compiler would generate wrong code in some situations for the expression:
  int Table[idx & CONSTANT] += short;
  This error was introduced around May 1998, and was present since... It only appears
  in special situations of register configuration, and that's why it was so
  dificult to detect.
  Math.h was modified to comply with ANSIC 99 generic macros. The standard library
  was enhanced too.
Jul 1:
  Several problems in the debugger fixed. Pointers to simple data types were sometimes incorrectly
  followed. The memory window did not know how to display qfloats correctly.
  Qfloat support improved. The new qfloat library features more speed, less size.
Jun 28:
  First release of the #pragma lib construct. Syntax:
  #pragma lib "path"
  #pragma lib <path> (look in \lcc\lib)
Jun 25:
 Serious bug in math.h discovered by Fred Tydeman:
  The prototype for rint is wrong! In math.h I changed int rint(double) to
  the correct double rint(double)!!!
Jun 23:
  Following functions were added to the math library (now named math.lib):
  acoshl asinhl expl ldexpl frexpl ceill atanl expm1l
Jun 22:
  Browsegen generated an extra file name in the file table of the browse information.
  This made wedit open the wrong file when going to the definition of a symbol. Fixed.
Jun 21:
  Fixed problem with inlined functions that generated several labels of the same name.
  Fixed another problem with inlined functions when a label wasn't generated at all.
  Fixed strtold, and added it to the compiler when parsing long doubles.
  Added correct run time library functions for converting from double or long double
  to short or character.
  Fixed declaration problem for rint in math.h
Jun 20:
  Added explanations for the compiler and linker configuration to the documentation
  right after the "Installing lcc" item. This will help new users to quickly find
  out how to use the system.
  Sometimes the usage count of a function used in a call wasn't incremented and 
  its symbol usage remained zero. This leads to the assembler not emitting an
  .external record to inform the linker that this function was extern and used.
  The linker would then complain with an incomprehensible message "undefined
  symbol (*UND*)". I ensure now that this reference counter is incremented whenever
  I emit a function call.
  The system dll MSIMG32.DLL was missing from the system. Added. Thanks to
  manuel.francisco@free.fr 
Jun 19:
 Fixed spurious complaints in the compiler when a long double was given to %Ld.
 xprintf was writing the wrong quantity for %ld when the input was
 negative. Fixed.
Jun 17:
  This version has the qfloat library integrated within the compiler to
  increase reading precision. Xprintf has been updated to use long
  double arguments and in general precision of reading and writing of
  long doubles is now higher.
  Problem when accessing long long array fixed. Bug reported by Hubert S.
Jun 11:
  Fixed problem with sizeof in structures with flexible array members.
  Started working in a better memory display window for the debugger.
  Added long double logl(long double); 
        long double log10l(long double);
        float log10f(float);
        float logf(float);
	int fpclassl(long double) int fpclassf(float) int fpclassd(double)
   to libc.lib. All written in assembler for speed.
   The corresponding definitions were added to math.h. This functions are
   defined as overloaded functions.
Jun 9:
  The assembler instruction andps was missing. Added.
  When generating code for a constant double or float, the compiler would not
  generate code for zero or 1, generating inline instruction fldz and fld1.
  When a NAN or an INF number was generated as a result of a double/float
  constant expression like 1.0e99999f, this tests would fail and the compiler wrongly 
  assumed that a NAN or an INF was zero, producing a wrong code, and the dreaded
  "compiler error in kids". This is fixed now. I test for NANs when testing for zero
  double constants in dag.c
Jun 9:
  The assembler instruction andps was missing. Added.
Jun 5:
  Working together with Fred Tydeman, I have corrected several problems
  with conversions from floating point types and integers/unsigned. The
  conversions were done in a correct form, but the flags weren't at all
  like the ANSI C standard specifies. In several cases the INVALID exception
  wasn't raised even it it should, and in other cases the exception was
  raised even when it shouldn't. Missing still in this area are the conversions
  from/to long doubles/doubles to signed/unsigned chars.
Jun 4
  Added a correct library function for converting a long double into an
  unsigned long long. Since this operation is not implemented in the FPU
  it has to be simulated in software.
  A variant of the long long division had the divisor/dividend inversed. Fixed.
Jun 3
  Problem with overloaded keyword fixed.
Jun 1
  Bug in the optimization of expressions like !v fixed. This bug appeared
  only when at the left hand side of the assignment there was an indexed
  table of structures and at the right hand side a boolean expression.
  Added mstcpip.h to the distribution.
  Fixed a bit the Undo feature of the IDE.
  
May 26: Bug fixed when optimizing a memset call by generating it inline.
  Thanks to Mario Feldberg.
May 25:
  The debugger wasn't testing for NANs and printed 0.0 instead. Fixed.
  The __declspec(naked) was added. This construct is now 100% msvc 
  compatible: no "ret" instruction generated, no prolog, no function
  epilogue, exactly like msvc does. This means that in 99% of the
  cases it will cause your program to crash. BUT you can write device
  drivers with it.
  xprintf has now the modifier ' (single quote) that will allow you to
  put the thousands separator in the formats d and f or g. Example:
  xprintf("%'d\n",123456789);
  will print:
  123,456,789
  Fixed problem with "%*.*s" in the printf checker.
May 20:
  Added qfloat support in the debugger.
  Corrected a small problem in richedit.h header file.
  Added vdmdbg.h windows header file.
May 16:
  When a structure that had a size less than 4 was declared as a
  local variable and optimizations were ON, the generated code would 
  write more bytes than necessary to the stack. Fixed.
  When a field assignment was done, the optimizer did not consider
  if it was a structure field. For instance x.field = 23 would be
  seen as x = 23. This confused completely the constant folding
  module. Fixed.
  New module added to check for the arguments of printf, fprintf, 
  and other functions of the same family.
  When an overloaded function that expected a reference arg was
  called with a structure argument, the compiler failed to take
  the address of the structure and pushed the whole structure
  instead. Fixed.
  When an overloaded function was called with a structure argument,
  the compiler failed to recognize this and issued a "No matching
  call" diagnostic. Fixed.
  The documentation for the qfloat data type was added to the html
  manuals. Now there are two versions of that library: a dll version
  with the minimal functionality and a static version with extended
  functions.
May 14:
  The statement:
    static char *foo = ("abc");
  wasn't correctly handled by the compiler. Fixed. Bug reported by
  Mario Feldberg.
May 11:
  MANY bug fixes contributed by Fred J Tydeman. They are mainly in:
  boundary conditions and constants initializations when compile
  time operations are involved. For instance:
  23.778L/123.9L, or 1332LL * 23322LL, and similar operations. I 
  have corrected many of them, specially in conversions from/to
  long doubles and long longs.
  Code generation bugs were discovered by Mr. Tydeman. Comparisons
  of greater than or less than involving unsigned longs and doubles
  were generated incorrectly.
  Mr Tydeman looked in the xprintf implementation too, and found many
  inconsistencies:
  xprintf with DBL_MAX was printing a wrong value. Fixed, I increased
  the digits buffer to accommodate at least 350 numbers.
  The strtold function would return a wrong value for 0.0e9999. Fixed.
  There was a problem with the constant folding module that would lead
  at the end of a switch statement (and if there wasn't any break at
  the end) to propagating a constant wrongly outside the switch. For *
  instance:
   switch (b) {
	case 1: c=12; break;
	case 2: c=34;
  }
  // here the compiler assumes wrongly that c is 34. Fixed.
  In the module that creates a multiplication by the inverse of a 32
  bit constant there was an error that would surface only in very
  complicated contexts. Thanks to the SmallEiffel compiler I found
  that one.
  A new module for extra precision floating point is now part of the
  standard distribution. This floats have 104 digit precision. The
  dll involved is qfloat.dll, that now is part of the distribution as
  well as the qfloat.h file.
April 30:
  When an overloaded function had a float argument, the compiler
  was pushing a double instead of a float! Fixed.
  Some redefinition errors appeared after the corrections to win.h.
  Fixed.
  New command line option to wedit:
	/projectsroot:<file path>
  allows you to designate an alternative path for the projects
  directory.
April 28:
  A lot of work being done for the bignums. A general cleanup of
  the code yielded missing/buggy operators, and some serious defects
  in the assembler code for the bignums that was rewritten.
  The first implementation of a "constructor" feature. If you define
  a typedef, now you can define a function with the same name that
  will be called to build the object.
  For instance:
  typedef struct example { int i; } EXAMPLE;
  EXAMPLE EXAMPLE(int a) 
  { 
      EXAMPLE result;
      result.i = a;
      return result;
  }
  Then you can write:
  EXAMPLE g = EXAMPLE(56);
  This would be trivial, but I plan to call this functions whenever
  a cast is necessary and this functions exist.
  
April 27:
  Improvements to win.h: raw input API incorporated. Other missing
  definitions added.
  The #error directive didn't increase the error count! Fixed.
April 19:
  Optimizations improvements reduce code size: Instead of 
       movl 	$0,destination, I emit now
       andl	$0,destination
  what is 4 bytes shorter as instruction. This makes for big code 
  size savings.
  When you pass an immediate constant to a function that is 
  expecting an argument as reference, the compiler issued an error.
  This is corrected now. The compiler will build a temporary that
  contains the constant, and pass the address of this temporary 
  to the function as C++ does.
  Several new trees were added to the rules of win32.md.
  The bignums accept now the assignment operator, i.e. you can
  write: pBignum a = 23; This will call automatically the operator
  assignment for this type (bignums). This wasn't working before.
  Note that you have to define the assignment operator function as
  a function that accepts a reference for it to work at all.
April 8:
  Several problems in the bignums.dll fixed.
  Some minor problems in wedit fixed.
March 31:
   Fixed spurious warning "variable used before being defined", when
   a sizeof() of an uninitialized variable was done
March 29:
  Bug fixing update. Several problems with long longs, and ternary 
  expressions.
March 22:
  Two bugs in optimized code generation fixed:
  a) When the following code was compiled, the result was incorrect:
	char *string = "Oops";
	printf ("%d\n", (*string == '\0')? 0 : -1);
     This was a problem of the boolean assignment generator, that 
     did not complement the carry when the arguments were exactly
     zero and minus 1. Bug reported by Konrad Budych from Poland.
   b) The following code was incorrectly implemented:
	int test() {
	char c[] = {0,0};
	return 0;
	}
      This provoked a stack corruption. Bug reported by Tom from Japan


March 15:
  The constant folding module has been completely rewritten and 
  tested. This supersedes the old implementation, too far back in
  the back end, that was incomplete and bug-ridden.
  The module for emitting the debug line number information corrected
  an error with more lines being emitted for the same code.
  Several fixes to the header files, updates, etc.  
Jan 25:
  The compiler will now check for operators with a void return
  type and will issue an error if this is found.
Jan 23:
  Major update.
  o Speed of 64 bit operations improves from 70.000 bits/sec in 
    the "tiger" benchmark to 200.000 bits/sec. lcc-win32 achieves
    now  79% of the performance of fully optimized gcc.
  o Improvements in analysis yield a better CSE (Common Sub-
    expression Elimination) that reduces the number of redundant
    loads from RAM into a register. This improves the speed of 
    the generated code.
  o Several bugs were fixed in the 64 bit (long long) module, and
    in several other places: the pushing of a structure of 4 bytes
    is now done in a single instruction instead of in a block
    copy operation. This fixes a bug where register esi was lost.



2001


    
Dec 25:
  Problem in the optimizer solved (reported by Ross Axe).
  Wedit "Evaluate expression" should be able to handle simple
  casts now.
Dec 13:
  Error in operator overloading corrected. The arguments were not 
  promoted to their expected types.
  Complex.lib was modified to expect now _Complex types instead of
  references to _Complex.
Dec 10:
  Error when a stdcall function pointer was being accessed through
  a function pointer. This bug appears only when the stdcall function
  returned a boolean result.
  Update to the documentation (wedit.hlp)
  Now xprintf will have enough precision to display accurately
  1e18+1. Completely rewritten.
  Several functions (floating point) added to the standard library.
  modfl, for instance.
  The driver program lc.exe was updated. Some minor glitches when
  using paths were fixed.
  The new startup code sets the precision settings to 64 bit
  precision (full precision)
Dec 8:
  Error in generated code when the try ... except construct was used
  corrected.
  Functions added to the standard library: (for C99)
  fegetround, fesetround, DoublePrecision, FloatPrecision, FullPrecision,
  isnan, floorl, fmodl, fmaxl
Dec 2:
  When a shift right was immediately followed by a shift left, 
  in some cases the register allocator would emit wrong register
  assignments. Fixed.
Dec 1:
  Problem in the optimizer fixed: the register ECX is not actually
  free if there is a shift operation further down the same block.
  When an inlined procedure with no result is expanded, problems
  occur. Fixed, but still some problems remain in there.
  The new functions xprintf, etc, did not test for NANs and INFs,
  and they would loop infinitely if given such "numbers". Fixed.
  Wedit had a fixed size "Add project files" window. When the
  paths were too long, you could not see all the file name. Fixed,
  now that window is resizeable.
Nov 29:
  The lc driver program for lcc would not add the libraries given
  in his command line to the linker. Fixed.
  The lc driver program would not handle correctly paths. Fixed.
  The compiler now supports the correct syntax for
	double _Complex a;
  The structure double _Complex, long double _Complex and float
  _Complex are built-in data-types as specified by C99.
   libc.lib was missing ldtoa. Fixed.
Nov 28:
  Fixed bug when doing integer division.
  Wrote ldtoa to handle displaying a long double. Needed for the
  debugger.
Nov 25:
  Added fdim nearbyint fmax and other functions to the standard c 
  library.
  Added libml.lib to the standard distribution. This library contains
  all long double functions, and many other goodies. It has been
  adapted for lcc-win32 from the cephes math library available in
   www.netlib.org. Lcc-win32 compiles now all this long double code
   without any error.
  When you declared a flexible array, and immediately afterwards another
  (normal) array, the second array would be treated as flexible and the
  compiler would crash. (What a shame!). FIXED.
  When the bignum library got an overflow, it showed:
	Error 2116
  Now it shows:
	Overflow 
  An improvement I hope (:-)
Nov 23:
  When a function is being overloaded, the compiler should correctly
  promote the void pointer to match any pointer. This wasn't being done.
  When several overloaded functions were declared, the compiler did
  not emit all the names as external symbols to the assembler, and
  link would fail. Thanks to John Findlay for reporting the two
  bugs above.
  When an unused variable in an inner scope was declared "register",
  the compiler would allocate a register for it, spending a register
  for nothing.
  When long long operations are being done, it is impossible (at
  least for now) to use any register variables. The long long operations
  use too many registers.
  Several long long operations were wrongly described in the machine
  description.
  The optimizer is improved, generating tighter code. Instead of:
	movl	%esi,%edx
	addl	$8,%edx
	orl	$4,(%edx)
  it will generate now
	orl	$4,8(%esi)
  Instead of generating an division to compute the modulous of an
  integer by a power of two, the compiler will generate several 
  and or OR operations.

  long doubles are now implemented as a real type, i.e. they will
  not only be recognized but also actually used. This has provoked
  obviously quite a lot of modifications.
  The function "peektoken" would not work when the compiler was almost 
  at the end of the buffer received from the preprocessor. Fixed.
  Wedit has been updated to display long doubles in the debugger.
  The compiler emits now that information of course.
Nov 12:
  Fixed bug that produced a division by zero. Thanks to Anh Vu Tran for his 
  report.
Nov 11:
  Nasty repaint bug in wedit fixed. Diff dirs improved, and other small
  changes to wedit.
  Added fix for _GetCmdLine proposed by kdiggins@qwest.net. lcccrt0.asm
  and lcccrt0s.asm modified.
  Fixed problems in the examples distribution.
  The first file in the files open toolbar did not work. Fixed.
Nov 7:
   Fixes problem in code generation. Under optimization, a switch 
   that used a signed byte variable would fail when comparing negative
   bytes.
   The disassembler now understands all pentium 4 operations.
   Inverted Mousewheel support in Wedit due to popular demand
Nov 4:
   Several problems in the long long code generation fixed, and the overall
   long long code generation strategy reviewed.
   When using alloca, the generated code would crash/fail if optimizations
   were ON. Fixed.
   Pentium4 SSE2  back end started. It is not in this release yet.
   Bug in generation of long long constants fixed.
   The resource compiler had a limitation of strings of 255 characters. Fixed.
   The debugger has a display for the new XMM registers.
   The assembler has been modified to accept the new Pentium4 instructions.
   Mousewheel support has been added to Wedit.
   The documentation of the system has been extensively reviewed, to add all 
   pentium SSE2 instructions. See the assembler docs.
Sep 25:
   There were several inefficiencies in the code generation when a function
   a small structure was used. This has been corrected. Improvements are
   noticeable in the bignums.dll, that is much smaller now. Besides that dll
   was being shipped with debug info, what has been corrected.
Sep 21:
   Variable length arrays implemented. This allows you to write code like this:
   int fn(int a)
   {
   	int array[n];
	...
   }
   Improvements to the inline keyword implementation.
   Static character strings can now be of any length. The 16K limit has been 
   eliminated.
   Added "stdheaders.h" to the include directory, including the most frequently
   used standard include files.
Aug 28:
   rpcproxy.h would not compile in stand alone. Fixed.
   First implementation of the "inline" keyword
   Added htmlhelp.h to the distribution
Aug 9:
   A typo in w32incl.c (a missing "%") provoked that the assembler crashed when
   generating the code. Fixed.
   An error in the MULL machine description provoked the generation of mul
   (unsigned multiplication) instead of imul (signed multiplication). this
   happens only when the two input values were 32 bit integers and the 
   output should be 64 bits; Fixed
   Include file rasdlg.h was missing. Added to the distribution.
July 28:
   A .def file added to a dll project wouldn't be used when constructing the 
   makefile. Fixed.
Juli 26:
   Fixed problem in the spiller (compiler)
   Fixed diagnostics without line number info in resource compiler
   Fixed problem with multiplication and division of manifest constants in 
   resource compiler
   Fixed problem of *cbk.c in the IDE.
   Several bug fixes in the headers.
June 29:
   Fixed bug in the optimizer when you write:
	string[j++] = '/';
	string[j++] = '/';
   The optimizer was generating bad code when both those statements appeared
   one after the other.
   This bug in the optimizer made wedit reformat the comments incorrectly.
June 27:
   Fixed bug in the garbage collector that would make wedit crash. "Fixed" is
   actually too big for this. I just added a check for valid pointers, that's
   all.
   Fixed problem with coordinates that would make wedit crash under windows 95.
   If you give bogus coordinates to MoveWindow, Windows would freeze solid.
   When looking for the header file of a resource, the current directory is
   now reset to the sources directory. This allows you to skip a long series
   of button clicks to get to the correct directory or worst, to choose a wrong
   file.
   Fixed problem with the linker. When defining an alias in a definition file,
   the export directory of the executable was sorted wrong, and this made
   windows miss some valid exports.
June 25:
   Added left selection bar to the editor.
   Ctrl+End didn't work correctly. Fixed.
   Compiler wasn't optimizing all the possible occurrences of stack adjustments.
   Fixed.
June 23:
   The code generation for overloading == and != was wrong in the case 
   of integer constants. Fixed.
   The bignums library contained several errors. Fixed.
June 20:
   The compiler would reject: unsigned short a = (unsigned short)3.14; 
   Fixed.
   The compiler would generate wrong code for a stdcall function that
   returned a structure whose size is less than 9 bytes. The stack
   didn't get cleaned up, i.e. the _stdcall attribute was ignored.
   Fixed.
   The code management system (CMS) was taken away from the distribution.
   It is no longer part of wedit and will be distributed as a separate
   module.
June 10:
   Fixed problem with foreign characters in the resource editor.
May 27th:
   The compiler now will accept flexible array members at the end of a
   structure declaration.
   For instance:
	struct f { int a; char b[]; };
   Problem with the following code:
	unsigned short *p = L"abc"
                            L"def"
   corrected. The strings will be concatenated, as they should.
   Wedit now understands the pre-processor errors when in a macro expansion.
   A problem with the files toolbar fixed... the number of files was -1...
   Several crashes in wedit were fixed. For instance, if the files toolbar was
   active when no files were open, wedit would crash. Other crashes provoked
   by  clicking in other windows than the focus window were fixed.
   When using the "open all files" option, wedit would not test that the file
   to open wasn't a .lib or .obj file... Corrected.
May 23th:
   Wedit didn't handle correctly the Show definition option in the right button
   menus.
   Sample added to the e-mail distribution: Code to find the DirectX version
   installed in the machine.
   Added following header files to the distribution to support directx 8.
   d3d8.h dmdls.h d3dx8.h d3d8types.h d3d8caps.h d3dxmath.h d3dx8math.inl
   d3dx8core.h d3dx8tex.h d3dx8shape.h d3dx8mesh.h dplay8.h d3dx8effect.h
   dvoice.h
   Updated dsound.exp, dsetup.exp dinput8.exp.
   Added getdxversion to the e-mail samples distribution. This sample returns
   an integer between 0 and 8, telling you which version of directx you are 
   running.
   Added sample to draw a sprite to the e-mail distribution. First complex sample
   that compiles successfully with the new headers.
   Added dxerr.dll to the distribution. This exports the DXErrorMsg function.
   Added a documentation chapter for directx (23 pages).
   Updated other documentation (header files listings, for instance).
   There was a problem with functions with optional arguments. Under some 
   circumstances, the compiler would enter an infinite loop. Corrected.
   Documentation for AMD 3DNOW instructions now in the manual, together with
   the MMX instructions doc.
May 21th:
   When an overloaded function takes a long long argument, its "mangled" name 
   would be:
   int foo_long_long
   When an overloaded function takes two longs as arguments, its name would be:
   int foo_long_long
   Exactly identical. I corrected this bug...
   The browsegen utility wasn't writing correctly the prototypes when long
   long arguments were in the declaration. Fixed.
   The resource editor will not write absolute paths to the include header files 
   any more, and will assume the header is in the current directory or in the
   include path. Besides, the #include <windows.h> will be enclosed in a
   #ifdef __LCC__ to make it more portable.
   Directx8 support. This version fixes libraries and other problems with 
   directdraw support.
May 19th:
   Header file ws2tcpip.h was missing.
   Problems with overloaded functions: unsigned int wasn't accepted as a 
   substitute for int.
   Bug when calling through function pointers returning structures corrected.
May 15th:
   Maintenance release that correct the bugs of the previous one. Sorry... :-(
   For instance, when you press compile with a file open that is not in the
   current project, a dialog box would ask if you want to add it to the current
   project. If you pressed ADD, nothing happened. Corrected!
May 10th:
   MAJOR revamping of the resource editor.
   1: User defined resources should work now.
   2: International characters shouldn't get lost.
   3: Adding an icon/bitmap should work now.
   The values _HEX and _BLANK were wrong in ctype.h. Corrected, and rebuild libc.lib
May 5th:
   All references must be eliminated in an expression. The compiler wasn't doing
   this in the case of several references in an expression. Fixed.
   The documentation for printf was completely unusable do to bad formatting.
   Fixed.
   Problems in the menu editor. Solved problem of crash when the symbolic name
   of the menu was being edited.
   Crash when the "Properties" of string table were chosen solved.
   In the compiler, some intermediate expression that returned a reference
   weren't handled correctly.
   In the configuration tab you could move the embedded dialog boxes with the
   mouse. Corrected.
   The include path should be enclosed in quotes when there is a space in it.
   Corrected.
May 1st:
   First release of the improved RAD environment for lcc-win32. Many bugs in it
   were fixed, and a tighter integration with wedit is done.
   New index in the help file with all the standard library functions for quick
   reference.
Apr 20
   Bug in exception handling corrected. The compiler would save if there were 
   two __try blocks one right after the other.
   Corrected typo's in win.h and stdlib.h
   Infinite loop when importing a project. Corrected.
Apr 19
   Wedit uses the html format now for the online documentation, if available

Apr 14
   Operator overloding with = should work now
   Problems with the != operator corrected. Thanks to Sjouke Hamstra.
   imaxdiv function implemented
Apr 4:
  Problems with optional arguments fixed.
  LPNMTREEVIEW was missing in win.h

Mar 29:
  Problem with overloaded functions solved.
Mar 28:
  Missing definitions in wininet.h added.
  Bug that made the compiler choke when expecting a char pointer and finding 
  a char array when calling an operator function corrected.
Mar 25:
  Error with overloaded functions corrected.
Mar 24:
  Corrected bug in lcclib.exe: when the output file name was incorrect, it 
  would crash instead of showing an error message. Fixed.
Mar 22:
  Added optional arguments to the grammar. This feature is identical to the C++
  one: you write:
  int foo(int a,int b=2,int c = 3);
  "c" and "b" will be optional arguments, so you can make calls like:
   foo(1); // Compiler supplies foo(1,2,3);
   foo(1,78); //Compiler supplies foo(1,78,3);
Mar 19:
  Release of Berkeley DB for lcc-win32
Mar 14:
  Fixed problem in keyboard reconfiguration.
Mar 13:
  Output and input redirection work with the debuggers arguments. You can now
  write: >outfile in the debugger args, and the stdout of the program under 
  debug will be redirected to that file.
  matherr correction.
  long long problem solved (code generation)
Feb 19:
  Multi-threaded debugger. First release.
Feb 7:
  Problem in the asin atan, etc functions in the bignums library corrected.
   Problems with several types in the bignum lib header files fixed.
   Documentation for the bignums lib added to the user's manual.
   In the debugger fixed repeating of question: sources are newer than
   the executable.
   In the debugger the option for displaying memory using decimal notation did
   not work. Fixed.
Feb 3:
   Problem with the compiler and Unicode strings. Strings containing embedded
   zero bytes weren't emitted correctly. For instance the string "A\0BCD" would
   consist of only the unicode char A, stopping at the first zero. Fixed.
Feb 2:
   Fixed the tab key in the dialog editor when the test dialog is active. This
   wasn't working.
   Changed the font of all dialogs in wedit from "Helv" to MS Sans Serif, to
   cope with machines that do not have that font installed.
   Fixed (again) the accelerator table in the dialog editor. When creating a
   table the editor refused to accept the new table.
Jan 28:
   Put the macros with variable arguments modification in the compiler.
   Fixed other small issues in the user interface of Wedit: button's text, etc.
Jan 20:
   Fixed tchar.h _strnicmp instead of _strnicmp.
   Added an option to generate a Excel CSV in the "Audit" option of the analysis
   menu-group. This will generate an Excel table of all loaded functions, so
   including the line count, the size, etc etc.
   Improved the dialog box for the 'File relations" option.
   The print option of the metrics plot did not work. Fixed.
   Optimization bug with long longs fixed.
   Problem with int --> double comparison fixed in the code generator.
   The linker was generating a wrong size for the .reloc section. Fixed.
   Added the drawing of tick marks in the plotter for the software metrics
   module.
   
Jan 16:
   The versioning system did not take into account any extra files the user
   stored using the put command. Files would be stored but there wasn't any way
   of making a "get" afterwards. This is corrected now.
   The versioning system didn't handle extraneous files in the project file list
   and crashed with names like "tcconio.lib" for instance. The type of files
   that the versioning system understands has been limited to C,H,RC,DLG. Unless
   the user explicitly puts a file of another type, it will not be considered
   as a valid CMS file.
   A bad allocation error in the configuration dialog produced a "Overwritten
   block size 33" message. Fixed.
   The macros "max" and "min" were missing from stdlib.h
   
Jan 13:
   Packing of structures with bit-fields using #pragma pack(1) did not work 
   correctly. Fixed.
Jan 12:
   Problem with multiple selection in when selecting revisions in the 
   versioning system fixed.
   Background of diff dialog box changed to white. This makes text more visible.
   Introduced the software metrics option for a whole project. All files will 
   be measured.
   Introduced timing statistics for project and session, to be displayed in the
   General tab of the configuration wizard.
   A double quote too much caused the makefile generation to fail when 
   compiling for a library project. Fixed.
   Documentation for inp was missing.
Jan 09:
   Problems with printing: did not print for the second time. Fixed.
   Problems when generating code for the bool type. Fixed.
Jan 04:
   Still problems with makefile generation fixed.
   Bug with long long division fixed.
   Problem with // comments in the reformater solved
   Problem with bignums dll solved.
Jan 03:
   In some circumstances, when an unknown library function was used, pressing
   F8 (for trace) in the debugger would make the debugged program continue 
   no longer under debugger control. Fixed.
   When comparing two long longs, the stack was being left in a wrong state.
   The code generated by the compiler was missing two pop instructions.
Jan 02
   Bug in the optimizer with subtraction from long longs. Corrected.
   Bug in the optimizer with intermediate registers using two long long 
   expressions. Now the optimizer is almost disabled if any long long
   expressions appear in a function. The problem is that with only 6 registers
   available, any operation with two long longs uses almost all the CPU.
   Upgraded the setup utility to the new installer format.
   Corrected several bugs in the handling of pathnames with spaces. This will
   probably go on for a while sigh...



end of 2000. Starting 2001



Dec 31:
   Fixed errors un bignum.h
   Fixed erros in stdlib.h concerning the _environ variable.
   Fixed erros in errno.h concerning the errlist variable.
   Compiler problem: When using intrinsics for sin or cos functions, it was
   impossible to take the address of those functions, since they are always
   inlined. Fixed.
   Fixed problem with the makefile in the buildlib that made installation fail.
   Fixed problem of embedded blanks in pathnames in the wizard, and the
   corresponding place in wedit when it calls it.
   Added code to test each include path for validity.
   Added prototypes in stdlib.h for _rotr, and _lrotr. Thanks to Peter Raddatz.
   When no project is defined, the menu items in the Project menu weren't
   grayed correctly. Fixed.
   The keyboard macro Ctrl+F could not be set. Corrected.
   Corrected bug of '\ ' (backslash followed by a space) in ddraw.h and several
   other header files.
   Fixed several small problems with the print dialog.
   Fixed problem of spaces in lcc path when calling buildlib in lcclnk.
   Fixed several problems with spaces in the lcc path (i.e. when you install 
   into "Program Files"). Make generation, and many utilities would fail.
   Fixed pedump, buildlib, browsegen, etc.
   Added documentation for the -Pn option to browsegen.
   Added feature "Import foreign library" to transform a .lib in the format
   used by Microsoft, to the format used in lcc.  This was added to wedit.
Dec 26:
   Added browse button to the grep dialog box.
   Added several pages technical description to lccwin32.doc specifying the
   workings of the project management, keyboard handling, screen redrawing, and
   others. This prompted some cleaning in the data structures within wedit.
   Some unused variables are gone, for instance.
   Suppressed the "Project" tab in the configuration wizard. The few valid
   fields were moved to the "general" tab.
   Added the System info tab to the configuration wizard, mainly for getting the
   details of the gc.
   Corrected problem in buildlib.exe when confronted with extremely long
   symbols. Now the maximum symbol name length is 512 characters! 
   Added lseeki64 and telli64 functions to the standard library to support
   files bigger than 2GB. Modified the corresponding on-line documentation.
   Revised the index of standard library functions to fill  missing functions 
   and type errors, adding those functions too.
   Added an index to lccwin32.doc. 
   Eliminated the "Browse function" menu item in the right button menu. It didn't
   bring any really important functionality.
   Fixed many bugs and problems in the revision control system. The "revisions"
   command would make wedit crash. The interface to several dialog boxes was
   simplified, eliminating unnecessary extra dialogs that appeared everywhere.
   The bookmark menu wasn't being grayed as it should when no bookmarks were
   defined.
   The accelerators for next bookmark did not work. Fixed.
   The prototypes writing has been moved from the small special purpose parser
   in wedit to the browsegen utility, that has improved the -P flag handling
   in the compiler. The -P flags looks like this:
   -P (or -P1) Write only global function prototypes.
   -P2 Write global protos and global data definitions (int foo, for instance)
   -P3 Write global protos, global data defs, and static protos.
   -P4 Write everything: global and local protos and data definitions.
   Wedit will remember this options for you. Just use the new Write protos
   option. By default, always the generated files will be loaded into the 
   editor.
   Updated netapi32.exp to changes in windows 2000 API.
   Eliminated support for asm files, int the editor, since this didn't work at 
   all, and it would be too much effort to support it correctly. Asm files
   can still be loaded but there will be no syntax coloring or finding the
   procedures in the file.
Dec 16:
   Linker wasn't recognizing comments within the .def files. Fixed. Comments
   start with a ';'. Fixed.
   Wedit wasn't recognizing relative paths when building a project.This has been
   improved...
   Wedit will generate now a dependencies file in the compilation directory 
   that is used by the workspace window to display the header files, and in the
   makefile generation process.
   The makefile generation process will not rescan all source files at each 
   time if at all possible. This speeds-up the makefile generation for big 
   projects.
   The workspace window would fail to open a file with relative paths
   specifications. Corrected.
   Updated online documentation for lcc options. (Thanks to lado brisar)
Dec 8:
   Linker bug fixed: the definitions file (.def) weren't working correctly.
   Eliminated the  #define of RtlZeroMemory as memset.
   The standard header wctype.h was added to the distribution as required by the
   standard.
   Tooltips were added to the resource editor's toolbars.
Dec 5:
   When a bit field is declared as unsigned long, the resulting type should be 
   unsigned, and not signed integer, as it was till now. Corrected. Thanks to 
   Pascal Haible.
   Under certain circumstances, the optimizer would alias several local 
   variables to the same register producing bad code. Corrected.
   GNU GDBM library added, with documentation, to the distribution.
Nov 27:
   TVINSERTSTRUCT and TVITEM were missing from win.h. Added
   Corrected problem with unsigned long longs and shifts.
   Corrected bug in the optimizer that produces an incorrect move instruction 
   in the assembler output
   Corrected problem with temporary variables of long longs.
Nov 23:
   Erasing a project in wedit didn't work correctly. Corrected.
   The complex functions library complex.lib has been updated to use ANSI-C-99
   function names.
   The complex library has been updated with acosh and other functions. A
   revision of the complex library is under way.
   i64toa didn't work correctly for some long long values. The same for atoll.
Nov 20:
   When the compiler sees if (0) { ...} the code will not be compiled. This
   optimization produces an error when there is a goto statement that points to
   a label in the excluded block. Corrected.
   Added header files to the workspace option of wedit.
   The resource compiler lrc.exe had a stupid limitation of 70K for rcdata
   resources. This has been eliminated.
   Bug in the optimizer corrected: under some circumstances, a cached register
   variable would be used when the value in the cache was wrong. Corrected with
   the help of planeta@iach.cz
   _Pragma() construct implemented. This is required by the C99 specifications
   page 159.
   The History command in wedit has now an accelerator of alt + left arrow.
Nov 15:
   A bug in the previous version (Nov 1) provoked a loop that made wedit use
   100% CPU time. Corrected.
   The compiler didn't correctly convert doubles to long longs and vice versa.
   The warning about signed/unsigned comparison was moved to a higher
   warning level.
   nspapi.h was incorrect? Added missing definitions.
   Corrected bug in selecting first column with the mouse
   Corrected bug in memory window in the debugger: the address field wasn't 
   incremented and there were several redrawing problems.
   Added _makepath to stdlib.h
   Added missing definition of STDMETHODIMP to objbase.h. Bug report
   contributed by lesbread@tomatoweb.com
   Fixed crash in the configuration wizard. (bug report from wpress@unis.ru)
   Introduced the History command in wedit.
Nov 1:
   The utility browsegen was broken. It didn't generate the browse file!
   The block indent code in wedit was interfering with replacement of the
   current selection: the tab key didn't work for replacing the selection.
   Generic functions extension: first implementation
   Corrected bug in wedit when you deleted (with the DEL key) a letter, UNDO
   did not work.
Oct 30:
   Problems with the installation program. Dolibs announces a non-existent 
   error. Corrected (I hope)
   Several bugs in code generation with long long corrected again. Another 
   problem with the optimizer solved.
Oct 28:
   Project workspace modifications. The project window appears at the left side
   of the editor. Projects aren't longer stored in the registry but in ascii 
   files. This makes the export and import options obsolete. A "migrate.exe" 
   utility is provided to move from the old registry format to the new one.
   The lcc.dll library is provided for people that want to use the compiler as 
   a dll.
   Problems with the ide crashing were solved.

Oct 1:
   Bug with boolean declarations corrected.
   XOR worked incorrectly for unsigned long longs.
Sep 29:
   Correction of problems when compiling "bool foo = true;"
   Two identical structure definitions will not provoke an error now. This means
   that
   typedef struct tagFoo { int a; int b; } FOO;
   typedef struct tagFoo { int a; int b; } FOO;
   will be accepted. The names of the structures and fields must be equal, and
   their types must be exactly equal.
   Correction of the profile problems. The profiler works again.
   
Sep 10:
   I have added a compilation driver, lc.exe, that will call the compiler, and
   if there are no errors, will automatically call the linker. Even if lcc-win32
   with Wedit has no real need for this, many users have complained that use
   lcc from the command line.
   Wedit: You can now indent a marked block with the TAB key, and move a
   block to the left with Shift tab.
   Error messages in the compiler improved for clarity.
   The tutorial has a dozen of pages more.
   The wizard can now generate a File open procedure to get an open file
   name. Documentation updated.
   Tested installing into folders with spaces in file names (i.e. Program files)
   Seems to work.
Sep 6:
   New header files added:
   wmistr.h
   guiddef.h
   evntrace.h
   Modified:
   tlhelp32.h (contained errors)
   stdlib.h: missing _wtoi definition and other functions
   win.h modified to put all tool help definitions in tlhelp32.h
   Bug fixes:
   Corrected error in version module when setting/unsetting the locks.
   Corrected error with proportional font in wedit.

Sep 4
1: A new check was done for spaces in filenames. This should work better now,
   since I was able to compile a project in
   F:\program files\Microsoft Platform Sdk\samples\dataaccess\odbc
             ^                        ^
   I had to modify the compiler, the resource compiler, and the IDE. I hope
   I haven't introduced any bugs...
2: I started compiling odbc with lcc-win32. New and updated files:
   sql.h sltypes.h sqlucode.h sqlext.h

Sep 2
1: The make utility accepts redirection of its output. You can then write 
   commands like: flex file.l >file.c
2: A bug in the project flags settings left always the debug information in
   the executables. Corrected.
3: The compiler choked with int i1,i2,i3; i1 = (long long)i1*i2/i3; This is
   corrected now.
4: AMD support for the 3DNOW instructions. The assembler accepts the 3DNOW
   instructions, the compiler has now intrinsics for using them, and the
   debugger shows the AMD floating MMX registers.
5: Added include file shlwapi.h to be able to execute the shell extensions
   API.Corrected several bugs in this part.
6: The debugger has a error window showing at each step the result of
   GetLastError().
7: Corrected the sample code in the shell extensions API documentation.
8: Compiler did not correctly compile right shifts for 64 bit longs.

Aug 17:
THE NASTY BUG OF WINDOWS 95 IS GONE!!!!!
Please windows 95 users download this version.
Other corrections within the resource editor.
Jul 31
------
1: Resource editor: Corrected the string table editor to use symbolic
   identifiers instead of bare numbers. This wasn't working before.
2: Resource editor: Corrected the string table editor to better check the
   values of the numeric IDs: tests for zero or negative IDs and rejects them.
3: Wedit:Problem with the search/find box crashing corrected.

July 10:
1: Yes, a new small problem in long longs. Damm is this difficult. But bugs
   are now difficult to find what is a measure of progress...
2: strtrim was missing from the stdlib functions. Corrected so that F1 will
   work with under wedit.
3: Wedit entered an infinite loop when the debugger found a long long type.
   Corrected.
   
July 9:
1: Problem with _stdcall function pointers hidden in typedefed function pointers
   is corrected. phew...
2: A new C-Tutorial is in the documentation file lccdoc.exe. It has already
   more than 100 pages and tries to explain the C language to the beginner
   starting with the traditional hello world program up to building a DLL.
   This is just the first version, more will follow.

July 2:
1: Problem with floating point intrinsic functions in the optimizer corrected.
2: Code with constructs like:
	if (0) {
		... statements...
	}
   will now not generate any code. Warnings are disabled (by default) when
   parsing the code that is not active.
3: Error reporting has been improved. Some "error cascades" are now avoided.
4: Problem in the IDE with some paths that contained nonsense is solved.
June 29:
-------
1: Users complained that the linker was mixing random data from RAM into the
   executables it built. This has been corrected, the linker now cleans up the
   space in the executable, as windows-nt or windows-2000 makes automatically.
   This isn't done by windows 98 or windows 95, so the linker will do that
   instead. This has been a cause of concern by certain users, what prompted
   an immediate upgrade.
2: A saga without end: unsigned long long support was still missing some ops.
   (several nested levels of AND or ORs of long longs provoked trouble). What
   is reassuring is these bugs get increasingly sophisticated, i.e. simple
   expressions are well covered already.
3: Documentation for the functions in tcconio.lib are now online.
4: The optimizer will now recognize
             if (0) {
                    // ... some code ...
             }
   and absolutely no code will be generated for it. By default, no warnings
   will be issued in this code, unless you compile with the -A option.

June 19: 

1: Problems appeared when a function had a reference argument. The reference
   bit was getting lost in comparing the function proto with the actual defined
   function arguments. This has been corrected.
2: The bignum (arbitrary precision) library has been added.
   See the documentation (user's manual) or \lcc\include\bignums.h
3: Some problems with the "strlen" intrinsic were corrected. This provoked a
   crash in the resource editor.

June 17
-------
1: Forgot the intrinsic for unsigned long division in libc.lib. This would
   provoke that the linker complained about an undefined.
2: The bignum (arbitrary precision) library has been added.
   See the documentation (user's manual) or \lcc\include\bignums.h
3: Some problems with the "strlen" intrinsic were corrected. This provoked a
   crash in the resource editor.

June 17
-------
1: Forgot the intrinsic for unsigned long division in libc.lib. This would
   provoke that the linker complained about an undefined.
-------
1: Forgot the intrinsic for unsigned long division in libc.lib. This would
   provoke that the linker complained about an undefined.
2: Unsigned long long further problems with some conversions solved.
3: The promotion of some built-in types wasn't working with operator overloading
   Now those are correctly promoted. The operator '%' wasn't being recognized
   for subclassing. Corrected.
3: Updated a bit the doc.
4: The bignum (infinite precision) library is almost working, but I decided
   not to include it in this one.


June 13
-------
1: This is a major release: it features for the first time the memory manager
   developed by Hans Boehm. (gc). See the documentation (user's manual is
   updated) or the online docs (go to index and choose memory manager).
2: Problems with the unsigned long longs (yes, I know, I promised that there 
   would be no more bugs :-) have been solved, extensive test suite for them
   written. Well this time I do not promise anything but I am surely more
   confident in them. Thanks to Pascal Haible.
3: Fixed a buffer overflow in the macro expansion. Macros can get quite long
   when expanded, as I found out...
4: Fixed the alignment problems in the linker and in the assembler, that would
   prevent Hans Boehm's gc to run. This cost me weeks of development. Now is
   (finally) working. Please use only *THIS* version of the system with the gc.
   It will NOT RUN in earlier versions because of this alignment problems.


June 4
----
1: Added macros for the debug info of the debugger. Macro support doesn't
   included expansion, the definition however, is now included in the shipped
   debug information. The debugger will display the definition of the macro as a
   character string.
2: The C-FAQ has been added to the e-mail distribution, and is available in
    ftp://ftp.cs.virginia.edu/lcc-win32 and
    ftp://ps.qss.cz/lcc

May 28
-----
1: The compiler has been updated to recognize the boolean types. The unsigned
   long long problems of previous versions have  been corrected.
2: The IDE is now able to export projects with less problems...
3: Several small upgrades to the header files.
4: regexp.lib: a regular expression package has been added to the standard
   distribution.
5: fdlibm.lib, with more floating point functions has been added to the
   distribution.
6: Documentation updates for the operator syntax, and the new libraries.
7: The bug in the divisor being stored in register EDX, and provoking a
   division by zero error has been corrected.
8: Sometimes when proposing the missing libraries to a link, Wedit would crash.
   I hope this doesn't happen any more. A wandering NULL pointer was shot down.


May 15 2000
1: Operator overloading and references are introduced. This is a major revision
of the compiler. The documentation has been updated with a new file 
"operators.doc" that describes the new syntax, the rationale etc.
2: When the optimizer was on, sometimes a register was being lost in a misguided
   optimization effort. this happened when an assignment was being done to a
   register variable.

May 5 2000
---------
1: Several odd bugs in code generation, specially in the optimizer were corrected.
   They appeared when compiling Eiffel code and concerned floating point comparisons
   with integer values, and trashing a value in a register variable.
2: The IDE didn't recognize de utilities command anymore. Corrected.
1: Corrected a bug in the error message display: if the name of your source
   file happened to be the same as the name the directory you were in, the file name
   would be truncated to "c".
2: Corrected problems in the c preprocessor with foreign language code pages.
3: Corrected a code generation error in the optimizer concerning some cases
   of incorrect oring with immediate constants.
4: Corrected a code generation error that involved a bad register allocation for 
   intrinsic calls.

Documentation:
--------------
1 Added documentation for the way you add assembler macros to the compiler as
  "intrinsic" pseudo-functions.

Header files and Libraries:
---------------------------
Added libraries:
    hlink.exp and hlink.lib import libraries
    resutils.exp resutils.lib
    iprop.exp iprop.lib
    icmui.exp icmui.lib

Added header files:
     resapi.h
     clusapi.h
Corrected/updated files:
      windows.h (this is a long runner...:-)
      stddef.h

Wedit
-----
1. Corrected problem with tcconio.lib always being added to the libraries.
2. Bit fields are now supported in the debugger
3. Increased capacity for error messages in the error message buffer that was
   overflowing when too many warnings appeared in compilation.
4. The link command called make, rebuilding the objects. This has been corrected,
   and now only the link will be performed.
5. The problem with the add/delete files dialog box that required pressing
   two times the "validate" option has been corrected.
6. Wedit will now detect a missing library automatically, if the needed API
   is in the list of known APIs. That list has now something like 10500 entries.
   This list will be now generated automatically by the installation program
   and will be placed in \lcc\lib\apilist.txt.


17 Mai 1999:
            Bug when closing a project that has no name. Fixed.
            Bug when printing a function tree. The AbortProc goes into an infinite
            loop. Corrected (edit2.c)

new files added to the include directory:
adshlp.h snmp.h mqmail.h psapi.h ws2spi.h mq.h lmdfs.h cchannel.h midles.h nspapu.h svrapi.h
wfext.h mapiform.h digitalv.h lmat.h tnef.h imessage.h winnls.h winnls32.h winable.h tom.h
time.h rasshost.h confpriv.h tapi3if.h iads.h mqoai.h security.h sspi.h secext.h intshcut.h
lccpath.h
9 Mai 99:
            Fixed problems with the tree drawing functionality that would get
            lost if it found a function definition containing a brace in the
            same line that the function definition started, i.e.:
            int foo() {
            The link tab provoked a spurious 'project has changed' warning. This
            is because it didn't ignore case when comparing the old contents
            of the libraries and the new ones. Since I did an strlwr at the
            start, this would always provoke a spurious message the first
            time the tab was called. Corrected.
            Added support for stack integrity checking when the debug level is 4.
8 Mai 99:   Wedit debugger tab didn't read the starting dir correctly.
            This code made the compiler trap. Corrected.
            typedef int my_int;
            typedef unsigned my_int my_unsigned_int; // <-- the error occurs in this line 
7 Mai 1999: Added the lm*.h (lan manager) header files
            lrc was crashing when called with a special rc file. Corrected.
            inb and outb were wrong. C library corrected
            Resource editor doesn't screw up files when the 'new' project
            is chosen
            Some strings in the C code generated by the resource editor were
            wrong.
            Updated documentation for the changes in wedit's menu.
6 Mai 1999: Wedit understands now paths with embedded spaces
            crtdll.exp was wrong: is syslist and not syslist_dll. Corrected.
5 Mai 1999: Changed the menus, eliminating the 'Options' menu.

