Products >
lcc-win32
> Changes
What's new in the new version of lcc-win
----------------------------------------
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 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
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
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 . 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