Version 0.15 Beta:

[changed]
- IMPORTANT: all the Windows API headers (under inc/win) were re-translated using the h2bi
  tool, the old sources are NOT compatible with those headers because the new ones use the 
  C-like standard (pointers instead of BYREF arguments, etc). If you really want to still
  using the old headers, remove the inc/win dir and copy the old one over it - the old
  headers won't be anymore updated though (v1c)
- alignament and padding of UDT's (TYPE's and UNION's) now fully follow the GCC 3.x ABI,
  if DLL's were compiled with older versions and UDT's are passed by argument or returned
  from functions, recompile the libraries if clients will be compiled with this version
- LOCATE/CLS/WIDTH/SCREEN are now window-local (left/top of window = 1/1) on Win32 (mjs)
- VAL64 function renamed to VALLNG as longint's can be wider than 64 bits in future ports (v1c)
- WITH can now accept dereferenced pointers as argument and the depth became unlimited (v1c)
- Linux version can now be installed in any directory (lillo)
- DATA can now be used inside functions too (mjs)
- duplicated EXTERN's are now accepted if they have the same type (v1c)
- the depth of nested anonymous inner TYPE's and UNION's is now unlimited (v1c)
- the function names won't be anymore preserved if only LIB is used, an ALIAS must be present now (v1c)
- IF THEN followed by a statement separator (':') will be seen as a multi-line IF now, so END IF is obligatory (v1c)
- non-shared or public variables declared on module-level (outside any proc) will be now show as LOCAL in GDB/Insight (v1c)
- level of indirection checking when assigning or passing pointers (v1c)
- All DOS console I/O now depends on BIOS or direct memory access (mjs)
- libfb_gfx_data.c is now created from the "original" data files (mjs)
- speed-up of DOS console output due to direct memory accesses (mjs) 
- The "CLOSE WINDOW" key code is now changed to ALT+F4 (mjs)
- all SDL headers were exchanged by machine translated ones (v1c)
- the BASS and BASSMOD headers were exchanged by machine translated ones (v1c)

[added]
- the WSTRING type, for unicode strings - like ZSTRING's, they can't be variable-length (v1c)
- UTF-8, UTF-16LE, UTF-16BE, UTF-32LE and UTF-32BE support for source and headers files 
  (they can be freely mixed, also with ASCII files) (v1c)
- OPEN CONS, OPEN LPT, OPEN ERR, OPEN PIPE (OPEN "PIPE:" won't work), OPEN SCRN (mjs)
- the ENCODING "fmt" option to OPEN, when mode is INPUT, OUTPUT or APPEND, the "fmt" can be: 
  "utf-8", "utf-16", "utf-32" or "ascii" (v1c)
- LPRINT support (mjs)
- LPOS(n) (mjs)
- include files for the DirectX library: DInput, DSound, DDraw, D3D, D3DX, D3DRM, D3D9 and D3DX9 (v1c)
- the missing macros in the Gtk headers (v1c)
- VIEW PRINT() now returns the top and bottom row (mjs)
- all WIDTH variations (with #filenum, LPRINT, and device$) (mjs)
- VALUINT and VALULNG, unsigned versions of VALINT and VALLNG, respectively (v1c)
- IN/OUT/WAIT now work for real ports I/O; a runtime error is triggered if unable to access a port.
  VGA ports are still emulated if in gfx mode (lillo)
- new null gfx driver: pass -1 as flags parameter to SCREEN to work with gfx without visual feedback.
  Useful to produce gfx to be embedded in OS dependent contexts (GDI, Gtk, etc.) (lillo)
- PUT now supports specifying a sub area of the source buffer to be drawn. Use the new syntax:
  PUT [dest,] [STEP](x,y), source [,(x1,y1)-(x2,y2)] [,mode [,(alpha|blender)]] (lillo)
- INSTR([n,] s$, ANY p$) (mjs)
- RTRIM$(s$[, ANY p$]) and RTRIM$(s$, p$) (mjs)
- LTRIM$(s$[, ANY p$]) and LTRIM$(s$, p$) (mjs)
- TRIM$(s$[, ANY p$]) and TRIM$(s$, p$) (mjs)
- compile-time check for math overflow in literal numbers when assigned or passed as parameter (v1c)
- compiler is now much more strict at reporting implicit numeric conversions (lillo)
- programs compiled with -e will check if the host CPU is at least the one specified in -arch (lillo)
- FB extension library, the list of functions includes:
  DATESERIAL, DATEVALUE, YEAR, MONTH, DAY, WEEKDAY, TIMESERIAL, TIMEVALUE, HOUR, MINUTE, 
  SECOND, NOW, MONTHNAME, WEEKDAYNAME, DATEADD, DATEPART, DATEDIFF,
  FORMAT (mjs)
- the & operator, allowing to concatenate strings, automatically converting types to string if needed (lillo)
- basic CYGWIN port (mjs)
- the SCOPE .. END SCOPE compound statement, to create inner symbol scopes in main-module or inside functions or macros (v1c)
- the __FB_MAIN__ define, set when the main-module is been parsed (could also be used to unit-test libraries) (v1c)
- you can OR the &h4 value (GFX_NO_SWITCH constant from fbgfx.bi) to the forth SCREEN parameter (flags) to prevent
  user from switching fullscreen/windowed via maximize button or ALT-Enter (lillo)
- OPEN COM for Win32 (mjs)
- QB-compatible POS(n) is now allowed too (mjs)
- SQLite static library for DOS (DrV)
- stack size (-t) parameter for DOS (DrV)
- CLS 2, VIEW PRINT, LINE INPUT and SCREEN(y,x,colorflag) are now supported in graphics mode (mjs)
- ALT+NumKeys works in Win32 console mode (mjs)
- "CLOSE WINDOW" key code (ALT+F4) now works in Win32 console too (mjs)
- "deep sleep" (i.e. sleep that cannot be interrupted by key press, use with SLEEP msecs, 1 (mjs)
- parameters passed by descriptor to overloaded functions are now supported (v1c)
- support for SCREEN 1, 2, 9, 10, 11, and 12 for DOS (mjs)
- support for printing to GDI printers on Win32 (mjs)
- C### (CINT, CDBL, etc) can now be used with strings, as in VB (v1c)
- include file and import-lib for the FreeType2 library (v1c)
- WSTR() to convert any standard type (including ASCII strings) to wide-strings (the wstring type) (v1c)
- WSTRING() function, same as STRING() but returns a wstring (v1c)
- WCHR() function, same as CHR(), but returns a wstring (v1c)
- WHEX(), WOCT() and WBIN() function same as HEX(), OCT() and BIN() respectivelly, but return wstrings (v1c)
- WSPACE() function, same as SPACE(), but returns a wstring (v1c)
- WINPUT() function, same as INPUT(), but returns a wstring (v1c)
- support for multiple typedef declarations and the inverse notation "TYPE AS DataType (Symbol ',')+" (v1c)
- source-level debugging support for inline assembly blocks (v1c)
- the CAST() intrinsic function: "CAST( DataType, Expression )" (v1c)
- include file and import-lib for the Expat XML-parsing library (v1c)
- include file for the DISLIN library (v1c)
- DOS VESA gfxlib driver (DrV)

[fixed]
- main modules with periods (.) in their names would generate executables w/o the file extensions (v1c)
- "? " was never printer for LINE INPUT ""; a$ (mjs)
- INPUT$(n) doesn't wait for a complete line any more (mjs)
- WIDTH on Win32 returned a bad mix of Window/Screen buffer values (mjs)
- the PAD problem for PRINT (mjs)
- array fields were not been checked for wrong number of dimensions (v1c)
- ##arg## was not working if white-spaces were around the macro argument (v1c)
- the VALINT and VAL64 functions were saturating unsigned integers in DOS and Linux, making the compiler
  for those versions to process wrongly unsigned integer literals above 2^31 (v1c)
- comparing a null zstring to null var-len string would not return equal (v1c)
- WIDTH in gfx mode was returning the width/height in pixels instead of character cells (lillo)
- INSTR can now handle strings with NULs - using a Boyer-Moore implementation (mjs)
- apps using the multithreaded rtlib under Linux were crashing on exit (lillo)
- module names were not been checked causing errors if invalid symbol characters were used (v1c)
- unsigned short multiplications would leave the stack unpoped if a specific register wasn't free (v1c)
- packed local non-static arrays of UDT's of sizes 3, 5 or 9 would generate bad indexes when referenced (v1c)
- console programs running in vanilla Linux console were ignoring break condition (CTRL-C) (lillo)
- INPUT in plain Linux console mode was entering infinite loop if certain keys were pressed (lillo)
- BLOAD did not load 32bit BMP files correctly (lillo)
- TIMER was returning ticks since the application started in DOS (v1c)
- INCLUDE for files INCLUDEd from a non-standard path (mjs)
- storing a longint (64-bit) to a integer was causing a stack fault in the compiler (v1c)
- assigning UDT's returned from functions to arrays was generating invalid code, depending on the UDT type (v1c)
- profiling multithreaded apps caused a crash on program exit (lillo)
- GETMOUSE now works in combination with INKEY$ on Win32 (mjs)
- string's dead-lock when using the thread-safe version of the runtime library (v1c)
- now the Linux console routines use termcap for output for wider terminals compatibility (lillo)
- comparing strings would give wrong results if characters above 127 were present (v1c)
- UDT results were been allowed to be passed by reference to functions (v1c)
- address of overloaded functions can now be taken correctly (v1c)
- wrong overload type could be returned if pointers to UDT's were used as parameters and arguments (v1c)
- PASCAL functions couldn't be overloaded (v1c)
- Fixed the TAB and SPC when used with OPEN "CON" and files (mjs)
- the precision was one digit too wide when PRINT'ing single's and double's, causing some artifacts (v1c)
- Calling an overloaded function with 0 arguments (mjs)
- Hopefully fixed all output issues on Win32 (mjs)
- LOCATE will now throw an error if it gets invalid arguments(mjs)
- byref args with optional values were reusing the temp var in the case of strings and floating-point types (v1c)
- SIGSEGV happened when GETJOYSTICK was used in CONSOLE mode (mjs)
- Everything that depends on VIEW PRINT on DOS (mjs)
- MULTIKEY now recognizes enhanced scan codes on DOS (mjs)
- Completely fixed key handling in Win32 gfx mode (mjs)
- WRITE with empty strings must result in a "" (mjs)
- Win32: Don't reflect key status changes when application is not active (mjs)
- Non-Win32: non-decimal signed integer constants were been saturated when over &h80000000 (mjs)
- QB has a different order of precedence for the logical operators OR and AND (v1c)
- ambiguity with colon ':' used after anonymous inner UDT's (v1c)
- var-initializing of non-local data was not taking the number of array elements into account, causing wrong alignments (v1c)
- CLS 1 (does nothing) and CLS 2 (clears view port only) now work as expeced in CONSOLE mode (mjs)
- VIEW PRINT is now always reset when SCREEN or WIDTH are called (mjs)
- ambiguity check for overloaded functions with optional arguments not in the end of list (v1c)
- udt's passed by value were been pushed in the inverse order to stack (v1c)
- too big constants (above 1GB) could be missed by Select As Const (v1c)
- declarations for INP (without error check) and OUT (returns INT instead of VOID) are now correct (mjs)
- Original timer ISR is now called at the rate of 0x10000 (mjs)
- suffixed byval string args would be missed when looked up if a global suffixed string with the same name existed (v1c)
- GET and PUT for graphics now support field arrays too (v1c)
- a division of a signed integer by a power of 2 constant would give a wrong result if the left-operand was negative (v1c)
- exponent handling (including when too big to fit) in PRINT USING (v1c)
- the subtraction of two pointer operands was not been divided by the operands' length (v1c)

Version 0.14 Beta:

[changed]
- IMPORTANT: to fully support pointer type-casting, now every time a pointer is updated, the expression will be
  multiplied by the pointer type, as done in C, so if you had: "dim p as integer ptr:" "p += len( integer )", now it
  must be changed to "p += 1"
- to make BYVAL AS STRING arguments more safe, as they are allowed in FB functions since version 0.13, if not
  passing pointers or numeric values such as NULL or 0, the BYVAL modifier will have to be used now (v1c)
- _main will be always the entry-point from now, to be more compatible with statically linked C libraries and 
  to remove the DOS and Xbox temporary object creation "hack". Because of that, if compiling and not linking 
  objects files, the -m command-line option must be used to tell the compiler which module will be the main 
  one (v1c)
- the DllMain function is not needed anymore in the Windows version, just declare the exports and remove the 
  DllMain function, it won't be ever called (v1c)
- the module-level code of non-main modules will now be always executed (before the main module), no REDIM's or 
  such will be missed as it used to happen in QB. Implicit module initialization can be done now as in Pascal, 
  just add any code to the module-level scope (ie: outside any function) (v1c)
- the array descriptors had to be modified, if you have any DLL's compiled with old versions, please recompile
  them with this new version if passing arrays by descriptor to functions (v1c)
- the intrinsic functions SIN, COS, TAN, ATN, SQR, INT and ATAN2 are now implemented as inline and will be 
  evaluated at compile-time when constants are used as parameters (v1c)
- macro text will be expanded on comments emited when the -g command-line option is used (v1c)
- multiple strings concatenation such as "a = b + c + d + ..." will be converted to
  "a = b: a += c: a += d: ...", giving a speed up, because no temporary dynamic strings will be used (v1c)
- speeded up PUT routine when using PSET/PRESET/AND/OR/XOR drawing mode (lillo)
- the compiler is now a bit easier to be cross-compiled using the Win32 version (v1c)
- SCREENINFO does not return a pointer to an internal structure anymore, and if called before a gfx mode has
  been set, it returns infos on the desktop resolution/depth. See gfxlib.txt for more info (lillo)
- COLOR will now return the current/last color attributes as: (forecolor or (backcolor shl 16)) (v1c)
- WIDTH will now return the current/last dimensions as: (width or (height shl 16)) (v1c)
- LOCATE will now return the current/last cursor state as: (x or (y shl 8) or (visible shl 16)) (lillo)
- ENUM's are now much more restrict, warnings will be shown if they are passed or assigned to other types than
  integers, but now it's possible to overload functions where the enum argument is the main one (v1c)
- curdir$ now returns path with backslashes instead of slashes (mjs)
- OPTION's will now be used too in the context of the file that included a header if it changed the default OPTION's (v1c)
- chr$(0) can now be output with PRINT too (mjs)
- Printing PAD's now works exactly the same as on QB(X) with console/file/redirected console (mjs)
- MULTIKEY, GETMOUSE and SETMOUSE will now also work in plain console text mode (lillo)
- user defined type (UDT) assignaments are now done with inline code (v1c)
- the Windows version of FBC can now compile and link DOS, Linux and Xbox applications if the proper cross-compiling 
  versions of the GNU binutils are available and if all the libraries needed are installed (v1c)
- #UNDEF will now work with any symbol kind, not defines only (v1c)

[added]
- function overloading, the return type is not taken into account, only the arguments (as in Java) (v1c)
- pointer type-casting: CPTR( DataType, Expression ), as in: "*cptr(byte ptr, somePointer) = 255"
- functions can now return structures (user defined types) too, only external functions could before (v1c)
- full debug support using GDB (the GNU debugger) or Insight (GDB's GUI frontent), only dynamic arrays can't
  be watched at the moment, everything else works, including var-len strings and UDT's (v1c)
- array bounds checking when the -exx (extra error checking) cmd-line option is used (v1c)
- null pointers checking, same as for array bounds checking (v1c)
- alpha blending support for PUT; pass ALPHA as drawing mode. Only works if in 32bit color depth (lillo)
- uniform alpha blending support for PUT: pass ALPHA,value to specify an unique alpha with which to blend sprite with
  background. Works in 15, 16, 24 and 32bit color depth (lillo)
- custom blenders for PUT: pass mode CUSTOM,blender, where blender is a pointer to a function of the form
  "function blender ( byval src as uinteger, byval dest as uinteger ) as uinteger". This will be called for each pixel
  and must return the new blended pixel to be drawn (lillo)
- RGBA() built-in macro, works like RGB() but allows to specify an alpha value (lillo)
- CVSHORT(), CVLONGINT(), MKSHORT$() and MKLONGINT$() (v1c)
- byte, short and longint overloaded versions of HEX$, OCT$ and BIN$ (v1c)
- GETJOYSTICK function in gfxlib to get the full state of an attached joystick (lillo)
- FUNCTION can now be used inside inline assembly blocks to set the function's result (v1c)
- error message when macro text is too long (v1c)
- support for 16 background colors if in text mode under Xterm in Linux (lillo)
- added BMP saving capabilities to BSAVE, due to popular demand (lillo)
- warning message for suspicious pointer assignaments (v1c)
- include file and import lib for the CGUI library (v1c)
- many NeHe OpenGL lessons, ported by sisophon2001 (v1c)
- IMAGECREATE and IMAGEDESTROY built-in function to create and destroy gfx image buffers (lillo)
- PALETTE [USING] now supports the new PALETTE GET [USING] construct to get current palette color(s), so you can
  do "PALETTE GET index, r, g, b" or "PALETTE GET USING pal" instead of using the old INP/OUT tricks (lillo)
- added SCREENSYNC to wait for vertical blank, so you can use it instead of the old WAIT &h3DA,8 trick (lillo)
- added SCREENLIST to fetch available screen modes (lillo)
- added DYLIBFREE to unload a dynamic link library previously loaded at runtime by DYLIBLOAD (lillo)
- labels already defined can now be referenced in inline ASM (v1c)
- #DEFINE macros can now be empty too, as the argument-less ones used to (v1c)
- '##'s can be used now to delimit macro arguments as in C: #define makefuncname(name) func_##name## (v1c)
- the '#' prefix can now be used in macros when the text representation of a macro argument is wanted (v1c)
- ASSERT built-in macro, works like in C (it's only enabled when the module is compiled with debugging support (-g)) (v1c)
- Allow to compile the "linux" version with CYGWIN (non-functional yet) (mjs)
- signals and some exceptions like seg. violation and div by 0 can now be handled by users in standard ON ERROR handlers
  if compiling with error checking on (using the -e or -ex cmd-line options) (v1c)
- version macros __FB_VER_MAJOR__, __FB_VER_MINOR__, __FB_VER_PATCH__, __FB_MIN_VERSION__ (mjs)
- graphical PUT will now fail and report a runtime error if an image GETed while in a mode with a certain depth is
  attempted to be drawn in a mode with a different color depth (lillo)
- private functions will only be emitted if referenced (v1c)
- constructor and destructor functions - constructors will be executed *after* fb_Init (mjs)
- -map <filename> to create a map file (mjs)
- the ERL function - returns the line number where the runtime error happened, as in QB (v1c)
- include file and import library for GMP (multi-precision lib) (v1c)
- include file and import library for FastCGI (v1c)
- the OFFSETOF macro, to return the offset of an UDT field: ofs = offsetof(myudt, somefield) (v1c)

[fixed]
- EQV can't be optimized when used in compound stmts, because the NOT opcode doesn't update any flags on x86 (v1c)
- INPUT$() for console was reading a char less, causing INPUT$(1) to fail (v1c)
- PRINT USING ^^ should be used to set the number of exponent digits (v1c)
- more thread-safetiness checks in platform dependent rtlib routines (lillo)
- SHELL in Linux was not restoring console state before calling sub-process, resulting in bad keyboard I/O (lillo)
- @'s used on DATA stmts were storing the names, not the addresses of var's or proc's (v1c)
- DRAW had a parsing problem when directed towards an offscreen GET/PUT buffer (lillo)
- parameters passed explicitly using BYVAL weren't been checked with byval string arguments (v1c)
- PUT was accepting literal values, what will fail because the way BYREF AS ANY args pass numeric values (v1c)
- complex pointer expressions would not be parsed if used as parameters to functions (v1c)
- SWAP wasn't working with type fields (v1c)
- Mouse wheel position was reset to 0 under Win32 when window was put out of focus (lillo)
- non-numeric variables were been allowed in CHR$() (v1c)
- the unary operator "+" was been allowed with string operands (v1c)
- intrinsic string functions when used with "zstring *" arguments would operate on the full strings, not only until
  the null-terminators (v1c)
- ENUM elements separated by commas would update the values twice (v1c)
- Text mode colors now behave correctly under Eterm in Linux (lillo)
- PRINT'ing nothing followed by commas "PRINT," would not print the padding correctly (v1c)
- escape sequences were not being converted when used within var initializers (v1c)
- MMX inline asm wasn't compiling as GAS didn't understand it even if .arch i686 was used (lillo)
- WIDTH in gfx mode was crashing if either one of width or height was not specified (lillo)
- STEP clause applied to PSET was not forcing coordinates to be relative to last gfx cursor position (lillo)
- function profiler rewritten to fix recursive functions profiling (lillo)
- swapping fixed-len and z-strings would not swap or set the null-terminators (v1c)
- wrong code could be generated when 64-bit integers (longint's) were used in complex expressions (v1c)
- field arrays of UDT's are now padded to follow the GCC 3.x ABI (v1c)
- using gfx primitives inside a screenlock/screenunlock pair will not hang programs anymore (lillo)
- BLOADing a 2 or 16 colors BMP was giving screwed images (lillo)
- ON expr GOSUB would crash because the jump-table was not skipped as with GOTO (v1c)
- strptr(lit string) when used to initialize static or module-level variables would generate an exception (v1c)
- byval string params were not passed correctly to byref as any arguments when the byval clause was used (v1c)
- wrong number of dimensions in a static array would generate an exception (v1c)
- LINE INPUT was allowing any data type as argument, not strings only (v1c)
- VIEW in gfx mode was not filling the area if a fill color was specified, and border color had problems if in
  truecolor mode (lillo)
- using CLS in Linux console was forcing screen clear on program exit (lillo)
- passing by desc arguments to GFX function w/o explicit indexes given would crash the compiler (v1c)
- dereference of void types was been allowed (v1c)
- a field referencing the parent UDT would put the compiler into an infinite loop (lillo)
- ASM inline in the RT lib would not generate what was expected in GCC 4.x, as it's more restrict than 3.x (v1c)
- EOF didn't work with INPUT files on DOS (DJGPP, GCC 4.0) (mjs)
- The _get_cs(), _get_ds(), _get_ss() implementations didn't work (mjs)
- curdir$ didn't work for DOS and might have caused SIGSEGV on Linux (mjs)
- the ANY type was been allowed in DIM/REDIM (v1c)
- redimension of array fields was not resulting in a compile-time error (v1c)
- include files are now searched for in current dir, then the source file dir, then the system include dirs (lillo)
- chr$(0) will not be evaluated at compile-time, to circumvent the null-terminator limitation with strings (mjs)
- MID$()= (assigning MID) didn't release temporary strings (1x src and 3x dst) (mjs)
- Win32 OpenGL driver had problems with fullscreen modes on some machines (lillo)
- made all Win32 gfx drivers more vsync friendly (lillo)
- now using SetDIBitsToDevice instead of StretchDIBits in GDI gfx driver, solving some drawing problems (lillo)
- the 8bit TRANS mode MMX PUT routine produced wrong results (lillo)
- PRESET did not behave as it was supposed to (lillo)
- overloaded functions could not use the function name to assign results (v1c)
- local undefined labels were silently ignored (v1c)
- BLOADing a BMP with 16 or less colors was changing the whole 256 colors palette if in 8bit mode (lillo)
- __LINE__ now returns a number instead of a string (mjs)
- VIEW cleared the screen with a bad color if called without arguments, instead of just resetting the view (lillo)
- coordinates translation with PMAP was giving back bad results (lillo)
- thread-safetiness fixes to DIR$ (lillo)
- "#define foo bar" now works too, where "bar" is a macro (v1c)


Version 0.13 Beta:

[changed]
- arrays and pointers will be optimized for shorthand when possible (before, only vars were), ie:
  "foo(a+b-c) = foo(a+b-c) * expr" will become "foo(a+b-c) *= expr" when code is generated (v1c)
- RETURN can now be used as a shortcut to function result set + EXIT FUNCTION (as in C); with this modification,
  the LABEL's (if used) must have been defined already, no forward references are allowed anymore (v1c)
- ASC now has an optional parameter to retrieve a char at a specific position as in "c = asc( "abc", 2 )" (v1c)
- CHR$ now accepts multiple arguments as in "s = chr$( 65, 66, 67, 68 )" (v1c)
- COMMAND$ can now return just a specific argument as in "argv3 = command$(3)" (v1c)
- PEEK and POKE now accept STRING and UDT's as data type (v1c)
- literal string expressions can now be used with CONST's (v1c)
- glut include file, header completed with help of the SWIG FB wrapper (v1c)
- SCREENCOPY now copies only the page area set by most recent VIEW call, or whole screen if no viewport is set (lillo)
- fixed-length strings can now by referenced using the "$" suffix, as in QB (v1c)
- #ifdef and #ifndef will find any kind of symbol, not #define's only as before (v1c)
- WITH can now be used recursively (v1c)
- local variables are now aligned to dword boundary to be more compatible with some C API's (v1c)
- TIMER now uses the Win32 high resolution timer when available (lillo)
- DOS port now detects if STDOUT is not the terminal and uses printf() if so, so shell I/O redirection works now (DrV)
- more clear error messages when scalars variables are been accessed as arrays and vice-versa (v1c)
- the string argument in SHELL and DIR$ is optional now, as in QB (v1c)
- #DEFINE won't report an error if declaring again a symbol with exactly the same text - won't work with macros (v1c)
- #UNDEF won't report an error if un-defining an non-existent symbol (v1c)
- FB__* built-in #defines are now named __FB_*__, please update your code if you used them! (lillo)
- New built-in dynamic #defines: __FILE__, __FUNCTION__, __LINE__, __DATE__ and __TIME__ (lillo)
- in Win32, the import libraries are now created from .def files when the install.bat is executed by the user (v1c)
- type-less REDIM's will check for already allocated arrays, as in VB (v1c)
- internally replaced the use of the Xxf86vidmode extension with the Xrandr extension to toggle fullscreen gfx mode
  under Linux. This works much better and is more compatible with more recent distros, but it makes FB gfx programs
  to require at least XFree86 4.3.0 or any version of Xorg to run. (lillo)

[added]
- runtime library is now split into a thread-unsafe and a thread-safe versions. Former is used when compiling singlethreaded
  applications to avoid unnecessary locking, latter is used when compiling multithreaded apps. The compiler detects if the
  app in multithreaded if it makes use of THREADCREATE; to force linking with the thread-safe lib in any case, use the -mt
  commandline option (lillo)
- long integer (64-bit) data types (signed and unsigned), all operations done inline but for division and modulo (v1c)
- typedefs with forward referencing support, as in C (but the syntax is "TYPE Name AS SymbolType") (v1c)
- the ZSTRING type, null-terminated strings with fixed-length but that can be dereferenced and returned by functions (v1c)
- variable-initializers, as in "DIM foo AS INTEGER = 123", "DIM bar(2) AS DOUBLE => { 1, 2, 3 }", etc (v1c)
- field-dereference on function's returning pointers to UDT's as in "foo(arg1)->bar(arg2)->a.b.c" (v1c)
- bitfields, same syntax as in C: "foo : 4 as integer", "bar : 1 as integer", etc (v1c)
- on compile error, the line where error occured is shown with a "^" under offending token. Disable with -noerrline (lillo)
- inline string indexing as in "char = somestring[idx]" (V1c)
- variable-arguments, as in C: "sub foo(byval bar as integer, ...)" (v1c)
- va_first(), va_arg() and va_next() intrinsic macros, to access variable-arguments in FB functions (v1c)
- include file and import lib for the GTK+ 2 library (v1c)
- include file and import lib for the libxml2 library (v1c)
- include file and import lib for the libxslt library (v1c)
- include file and import lib for the GSL library (v1c)
- include file and import lib for the SQLite library (v1c)
- include file and import lib for the MySQL client library (v1c)
- include file and import lib for the DevIL library (v1c)
- include file and import lib for the gd library (v1c)
- include file and import lib for the zlib library (v1c
- include file and import lib for the PDFlib Lite library (v1c)
- include file and import lib for the ODE library (v1c)
- include file and import lib for the Newton library (v1c)
- include file and import lib for the cryptlib library (v1c)
- include file and static lib for the GRX library (v1c)
- include file and static lib for the BIG_INT library (v1c)
- include file and static lib for the cgi-util library (v1c)
- include file and static lib for the Mini-XML library (v1c)
- include file and static lib for the GDSL library (v1c)
- include file and static lib for the GLFW library (v1c)
- include file and static lib for the PDCurses library (v1c)
- PALETTE can now be called with 4 parameters, specifying new color red/green/blue components directly (lillo)
- ENUM's can now be nameless (v1c)
- CUBYTE, CUSHORT and CUINT, same as CBYTE, CSHORT and CINT, but work with unsigned types (v1c)
- DYLIBLOAD and DYLIBSYMBOL intrinsic functions to manage dynamic libraries at runtime (lillo)
- nameless inner TYPE's on UNION's (v1c)
- strings passed by value to FB functions, ie: "sub foo(byval bar as string)" -- note: they are not copied to stack,
  they are just a zstring with unknown size (v1c)
- gfxlib internal data (default fonts and palettes) is now compressed in the EXE and decompressed on the fly using a tiny LZW codec,
  resulting in 5K smaller EXEs. Access to internal data without calling SCREEN first will return garbage (lillo)
- inline asm now supports complete IA32 instruction set (lillo)
- unsigned versions for STR$() (v1c)
- the val64() intrinsic function, to convert a string to a longint (v1c)
- the valint() intrinsic function, to convert a string to an integer (VAL() returns a DOUBLE) (v1c)
- the SIZEOF() intrinsic function, to return the size of any data type (v1c)
- SCREEN/SCREENRES now accept an additional optional parameter allowing to request a specific refresh rate (lillo)
- optional sub/function parameters can now be strings as well, as in: "declare sub test(arg as string = "default")" (lillo)
- "FUNCTION =" can now be used to store to current function's result, as in PB (v1c)
- function's can return UDT's now, but only for prototypes of C libs (compiled by GCC 3.x only), not internally yet (v1c)
- TYPE and UNION fields can now be declared as "AS sometype a, b, c, d(123)" too (v1c)
- ENUM items can now be separated by commas too, as in "a, b, c = 2, d" (v1c)
- the PIPE: file type to OPEN, for read or write access, as in: "OPEN "PIPE:dir *.*" for input as #1" (v1c)
- the ugly ON ERROR GOTO 0 (v1c)
- OPEN, CLOSE, GET# and PUT# can be used as functions now, so errors can be checked w/o handlers (v1c)
- argument-less #define's can now be declared and referenced using optional ()'s (v1c)
- #ERROR metacommand to interrupt compiling with user defined errors (lillo)
- include file and static lib for the libcaca library (DrV)
- include file and import lib for the wx-c library (DrV)
- profiling: use the -profile commandline option to enable function profiling code generation. Running a profiled
  program will generate the profile.txt file on exit, containing timing results for all function calls (lillo)
- algebraic identities optimizations at ast (lillo)
- include file for the OpenGL extensions, ported by Bryan Stoeberl (v1c)

[fixed]
- IMPORTANT: fixed a bug with horizontal/vertical styled LINE drawing; this means the GfxPrint routine as was reported
  in gfxlib.txt of 0.12 does not work as expected with gfxlib 0.13; if your program used it, it's time to update its
  code from the new gfxlib.txt (lillo)
- CVS() was being done as CVD() (v1c)
- SELECT CASE and other compound statements were accepting UDT's w/o any fields given (v1c)
- line-continuation with _ when anything but white-spaces were used after it (v1c)
- dyn arrays of function pointers can now be redimensioned, as the symbol name is being mangled now (v1c)
- MID$ with len = 0 should return an empty string (v1c)
- WINDOW statement was inverting y coordinate (lillo)
- LINE INPUT was limited to 1024 bytes (v1c)
- bug with INP/OUT emulation for palette handling (lillo)
- LEN() was not working when string concatenation was used (v1c)
- STRPTR()/SADD() were not checking for constants (v1c)
- char 255 was seen as -1 as byte's (not ubyte's) were used by lex, making lexSkipLine fail when that char was used inside a comment (v1c)
- unsigned versions for READ were missing (v1c)
- field arrays starting at offset 0 with a lbound <> 0 would cause an access to the wrong fields, 'cause a bug at parser3 (v1c)
- escape seqs generated by chr$ when evaluated at compile-time would fail if an octagonal escape was needed and other numbers followed (v1c)
- some fixes to the way gfx coordinates are transformed when WINDOW is active (lillo)
- #if <number> conditional compilation was not skipping code block if number was 0 (lillo)
- using -x with libs would include the lib itself into the compilation as listFiles was called before processOptions at fbc (v1c)
- programs using SCREENRES failed to compile when runtime error checking was enabled (lillo)
- GET now triggers an illegal function call runtime error if image is partly offscreen (lillo)
- PUT used to crash if sprites with null width/height were passed (lillo)
- comma wasn't been skipped when quoted strings were read by INPUT (v1c)
- strings and UDT's were being allowed in boolean tests when no relational operators were used (v1c)
- different parameter types were being allowed with by descriptor arguments (v1c)
- double locking on Linux was causing SETMOUSE/GETMOUSE to hang programs (lillo)
- conversion to/from fpoint to byte vars could be wrong if too complex operations were used (v1c)
- literal values passed as parameter were not been converted at compile-time, generating bad code is some cases (v1c)
- CLS in gfx mode now clears viewport only if previously set via VIEW (lillo)
- BEEP rtlib routine for DOS was missing (DrV)
- BYREF AS ANY arguments when variables weren't passed would create a temp vars with the VOID type (v1c)
- SCREEN function rtlib routine for DOS was missing (DrV)
- SETDATE/SETTIME support under Linux was missing (lillo)
- size of identifiers and literals as being checked inside comments (v1c)
- LSET should accept UDT's too (v1c)
- SCREENCOPY gave corrupted image display if called after a primitive targeted against a user buffer (lillo)
- some minor issues when BLOADing BMPs (lillo)
- floating-point to unsigned integer could saturate values above 2 ^ 31 due the x86 FISTP nature (v1c)
- unsigned integer constants were being saturated, due the problem above (v1c)
- include/lib paths now accept both "/" and "\" as path separators on all platforms (lillo)
- PRINT in gfx mode now detects CR+LF as an unique new line (lillo)
- Enabled maximize button on X11 windows under Linux, switching to fullscreen like under Win32 (lillo)


Version 0.12 Beta:

[changed]
- IMPORTANT: now to declare functions on DLL's that will be exported, the EXPORT clause must be used, as global
  functions won't be automatically exported anymore, because that would make it hard to write DLL's with
  multiple modules where not all global functions should be exported (v1ctor)
- IMPORTANT: the format of the internal string descriptor was modified to speed up concatenation of large strings,
  so you MUST recompile all the old code, don't reuse object files compiled with older versions (below v0.12b) and
  rebuild DLL's created in FB if they return or process STRING's passed to/from client EXE's (v1c)
- Linux port does not use ncurses anymore, but its own internal lowlevel routines for console access.
  Apart from no ncurses dependency, this means faster console output (also under X11), no screen clearing
  at programs startup and proper colors support under X11. Compatibility issues may rise though, so
  feedback is welcome (lillo)
- PEEKS, PEEKI, POKES, POKEI keywords removed, use now the new syntax as "PEEK( data type, expression )" or
  "POKE data ype, expression, expression" to peek/poke different data types than BYTE, that's the default one (v1c)
- many Allegro's globals like al_screen, al_rgb had the "al_" prefix removed, they are now as the originals (v1c)
- Gfx GET and PUT now support both arrays and generic pointers as data holders (lillo)
- white-spaces are now preserved for ASM blocks and #DEFINE's (v1c)
- Linux port install script will now warn users if not run with root priviledges (lillo)
- the range of console-mode background colors is now 0 to 15 in DOS and Windows, 'cause Nex wanted that :) (v1c)
- generated EXEs size can now be up to 5-6K smaller than before (lillo)
- empty statements like ":foo=1::bar=2:" are now accepted, "if foo then:bar:else:foo" will work too (v1c)
- DIM|REDIM array w/o explicit dimensions is not allowed anymore inside procs, as the descriptor size is unknown (v1c)
- RGB is now an intrinsic macro, not a function (so no UDT's called RGB are allowed anymore) (v1c)
- symbols can now start with an underscore as in "_1234 = 1234" (v1c)
- local labels can now have the same name in different procs (v1c)

[added]
- resource files support on Windows, just add the .rc's or .res' to the list, they will be automatically
  compiled -- the Windows C headers were also added, so complex scripts (ie: dialogs and menus) can be
  used too (DrV)
- XPM icon resource files support on Linux. As with Windows resource, just pass the .xpm file to
  the commandline and the executable will sport a fb_program_icon symbol holding the XPM data.
  If using gfxlib, this is automatically used to set the window icon (lillo)
- built-in multiplatform threading functions (lillo)
- "operator =" shorthand, as in "a += b * c" (v1ctor)
- SELECT CASE AS CONST statement, only integer constants are allowed and a jump table is generated making the it much
  faster than an ordinary SELECT when more than 4 CASE's have to be checked (v1c)
- #DEFINE's with arguments (macros) as in "#DEFINE foo(a,b) ((a)*(b))" (v1c)
- "CONS:" and "ERR:" special file names, to open the console for i/o access and the std error for output (v1c)
- compile-time evaluation for the CHR$ and ASC intrinsic routines (v1c)
- SCREENINFO gfx function to get informations on current gfx mode (lillo)
- SCREENRES gfx statement to set custom resolution modes (lillo)
- SETMOUSE gfx statement to set mouse position and cursor visibility (lillo)
- Win32 GDI internal gfx driver for systems where DirectX is not installed (lillo)
- OpenGL internal gfx driver for both Win32 and Linux (lillo)
- possibility to select default internal gfx driver to be used via FBGFX environmental variable (lillo)
- the OpenAL headers, ported by Chris Davies (v1c)
- include file and static library for TRE (a POSIX regular expressions lib) (v1c)
- the ASM statement can be used on a single line as in "ASM mov eax, 1234" (v1c)
- SCREEN() function, working as in QB (lillo)
- gfxlib now internally uses MMX routines to update the screen if supported (lillo)
- "OPTION NOKEYWORD", to remove intrinsic routines/statements (v1c)
- "DIM|REDIM|STATIC|COMMON AS SymbolType" for multiple declarations like "DIM AS INTEGER a, b, c(10)" (v1c)
- all gfx primitives now accept as optional first parameter a target buffer where drawing will take place (lillo)
- BLOAD now supports loading BMP files (lillo)
- IFF(), conditional IF, to be used with numeric types only as in: "a = IIF( b > c, -1, 0)" (v1c)
- LOWORD, HIWORD, LOBYTE and HIBYTE intrinsic macros (v1c)
- BIT, BITSET and BITRESET intrinsic macros (v1c)
- nameless arguments on function prototypes as in "BYVAL AS INTEGER" (v1c)
- END IF to end the single line IF's to make porting of complex C macros easier to be done (v1c)
- the winsock 1.1 include file and import library (v1c)

[fixed]
- ACCESS clause was not being checked with OPEN (v1c)
- BINARY and RANDOM modes should try opening the file as write- or read-only when no access was given (v1c)
- local labels not found weren't being reported (v1c)
- LEN() now accepts PTR's when used with ENUM's and UDT's (v1c)
- ERASE should accept multiple arguments (v1c)
- DATA should not be allowed inside procs (v1c)
- invalid types in CASE statements were not been reported (v1c)
- byref UDT arguments with array fields would be wrongly accessed because an error at parser3 (v1c)
- length of array fields on UDT's was wrong, as the elements weren't taken into account by the symb mod (v1c)
- "blurry window" gfx bug in Win32 DirectX windowed mode (lillo)
- Waiting for vertical retrace via WAIT under Win32 was waiting twice the time as needed (lillo)
- DRAW had precision bugs that caused malformed shapes to be drawn (lillo)
- bad negative coordinates transformations was affecting all gfx primitives (lillo)
- SCREENPTR was always returning the pointer to the visible page memory instead of the working page (lillo)
- palette handling via INP/OUT emulation was producing bad colors (Sterling)
- various fixes to the X11 internal gfx driver: was not working if the X server was running in 24bpp mode, mouse
  cursor was not hidden in fullscreen mode, mouse and keyboard were still working even if the app had not got
  focus, had memory leaks if executed on a remote X server (lillo)
- using gfx primitives on a non-visible working page was still causing screen updates (lillo)
- BSAVE was not expecting commas as parameters separator (lillo)
- Linux port had precision problems with the TIMER function (lillo)
- PSET gfx primitive was not respecting default color (lillo)
- SGN() for floating-point numbers was converting the source to integer at the AST module (v1c)
- #DEFINE's can now contain forward references to other #DEFINE's (v1c)
- CIRCLE used wrong color for lines when drawing arcs with negative start/end angles (lillo)
- Calling SCREENLOCK/SCREENUNLOCK when framebuffer is already locked/unlocked does not hang program anymore (lillo)
- ON...GOTO and ON...GOSUB now work as expected (v1c)
- only empty ()'s should be allowed with COMMON (v1c)
- all quirk routines now check for invalid parameters (v1c)
- REDIM now checks for run-time errors (out-of-mem) (v1c)
- INPUT quirks: comma separates all items, white-spaces won't separate strings, etc (v1c)
- PRINT and WRITE shouldn't allow UDT's as parameter, same with INPUT (v1c)
- COMMON arrays wouldn't be redimensioned when a REDIM was used (v1c)
- integer division and modulo could gen bad code if pointers or indexes were used with EAX as the index reg (v1c)
- base for non base-0 arrays with more than 2 dimensions was being wrongly calculated (v1c)
- d! = cbyte( d! ) would gen bad code at EMIT if the SI or DI registers were used as source (v1c)
- #define's would be checked inside $include and $inclib if ' was used as delimiter (v1c)


Version 0.11 Beta:

[changed]
- the internal GFX library is now the former alternative one written by lillo, many thanks to Sterling
  for making the first version, he started working on it even before FB was released -- if you prefer to
  continue using it, the sources still on CVS at sf.net (src/gfxlib), just build the library and rewrite
  the libfbgfx.a file at \lib, it contains no PAINT or DRAW, nor low-res screen modes, but everything
  else stills functional - the SCREEN arguments are different, pay attention
- new OpenGL header translated by Rel to work better with pointers, there are no more BYREF arguments,
  use @ or varptr() to get the address of variables and arrays when the argument is a BYVAL ... PTR (v1c)
- fmod and BASS headers: all BYREF arguments changed to BYVAL ... PTR to work better with pointers (v1c)
- new SDL headers translated by Edmond Leung, no changes needed on user's code (v1c)
- fixed-len strings on arrays can now be passed as parameter to functions (v1c)
- array fields can now be passed by descriptor, as in "array(idx).arrayfield()" (v1c)
- #DEFINE now supports complex definitions like "any ptr" at right-side rule (v1c)
- pointers to pointers *MUST* now be declared as "ptr ptr ...", multiple dereferencing are only allowed on those (v1c)
- -w cmm-line option changed to -nostd (v1c)
- ERASE now accepts non-dynamic arrays and fills them with 0's (v1c)
- the crt dll on Win32 is now msvcrt.dll instead of crtdll.dll, to be able to statically link to libs
  compiled with VC 5/6 and Mingw (crtdll is not supported by M$ anymore), you can use the new -nostdlibs
  option to set a different lib (like crtdll) if you really need that -- ie: plain vanilla Windows 95/osr2
  doesn't come with msvcrt.dll installed (it can be found at M$'s site) (v1c)

[added]
- include file and import lib for the GLU library (thanks Rel for sending it) (v1c)
- include file and import lib for the FreeImage library (thanks Eric) (v1c)
- include file and import lib for the SDL_gfx 2.0 library (v1c)
- include file and static lib for the Lua (teh C-like scripting language) library (v1c)
- escape chars (\) on string literals, use "OPTION ESCAPE" to enable -- they won't be parsed within $include $inclib (v1c)
- GOTO on single-line IF's w/o THEN (v1c)
- EXTERN keyword, to declare external/global variables (not the same as COMMON) (v1c)
- EXPORT keyword, to declare exported functions on executables (not in DLL's) (v1c)
- STRPTR keyword, works like SADD, but name makes more sense (as for VARPTR, PROCPTR) (v1c)
- WITH..END WITH compound statement -- won't work with field dereference "->" (v1c)
- warning messages when passing a scalar type to a function argument that expects a pointer (v1c)
- -w cmm-line option to change the min level of warning messages shown (v1c)
- ONCE keyword to be used with $INCLUDE or #INCLUDE as in: '$include once: "includethisfileonlyonce.bi" (v1c)
- UDT arguments now can be declared and passed by value too (v1c)
- -nodeflibs cmm-line option, so no standard libraries are automatically linked (v1c)
- "*([@]variable +|- expression)" and "*@variable" support (v1c)
- pointer indexing support, as in "myptr[idx]" (v1c)

[fixed]
- COMMON arrays shared between different sources had different descriptor names (v1c)
- the UDT size returned for UDT vars when using LEN() was the real-one, w/o padding (v1c)
- LEN() can now handle arrays with no indexes given, as in QB (v1c)
- by ref arguments now accept different data types when expressions are passed (v1c)
- when an include file was not found, the executable would still built (v1c)
- the --dllname cmm-line option to dlltool.exe should not contain the path (v1c)
- udtptr.field was being accepted as valid -- it must to be udtptr->field (v1c)
- PRINT/WRITE both have much more precision now when printing floating-point numbers (v1c)
- #ELSEIF were not skipping to #ENDIF if and #IF or other #ELSEIF had already being true (v1c)
- SHARED with DIM|REDIM was being allowed inside procs (v1c)
- STATIC was was being allowed outside procs (v1c)
- indexes as "byte|short var + constant expr" could gen bad code, as var wasn't been converted to int (v1c)
- loading an ubyte to a signed one storing a sbyte to an unsigned one would make a convertion at emit (v1c)
- "DIM a as myudt, a.b as sometype" won't be allowed anymore (v1c)
- Pre-processor would fail if comparing numbers using relational operators others than = and <> (v1c)


Version 0.10 Beta:

[changed]
- some param declarations on include files were changed, don't use the old ones with this version (v1ctor)
- arrays can't no more be accessed w/o indexes (even at (0)) (v1c)
- DirectDraw include file (ddraw.bi) completed by Drv (v1c)
- GFX lib is much more modular now, executables generated are much smaller (Sterling)
- default char set on Linux is now IBM codepage 437 (same as in DOS) (lillo)
- the SDL lib is added automatically when the intrinsic GFX routines are used (v1c)
- winmm.bi renamed to mmsystem.bi to match the original C version (v1c)

[added]
- RESUME and RESUME NEXT error handling intrinsic functions (v1c)
- DIR$ intrinsic function, both for Windows and Linux (lillo)
- REALLOCATE intrinsic function (same as C's realloc) (v1c)
- SETDATE and SETTIME statements, thanks DrV for sending the patches (v1c)
- PUT# and GET# now can write/read full arrays as in VB (v1c)
- power (^) operator optimization: "var ^ 2" becomes "var * var" (v1c)
- MOD operator optimization: "var MOD power of 2 constant" becomes "var AND constant-1" (v1c)
- winmm import library that was missing (v1c)

[fixed]
- QB GFX library runs fine now, it was a makefile fault (headers changed but files didn't get rebuilt) (v1c)
- SDL and OpenGL include files are more cross-platform now (thanks Danilo) (v1c)
- alignament of UDT fields wasn't correct when they were an UDT too (v1c)
- fixed-len strings were being allowed in function arguments and results (v1c)
- reported names of not found include files still wrong (v1c)
- PRINT with no args on Linux was causing a segment-fault (lillo)
- NAME was declared as RENAME (v1c)
- function arguments with same name as the function itself were being accepted (v1c)
- PRINT USING was not doing any output if there was no chars at end of the format string (v1c)
- illegal unary/binary/convertion operations were been silently ignored (v1c)
- mytypeptr->myfieldarray(expr) is now working again (v1c)
- ON ERROR was accepting GOSUB too (v1c)
- functions with optional arguments called as parameter could try taking args from the caller function (v1c)
- CLOSE now accepts multiple files (v1c)
- COMMAND$ on Windows when the executable path had white-spaces was returning part of it (v1c)
- fpoint regs were been spilled in the wrong order when procs were called within complex expressions (v1c)
- when making a DLL the path was not being stripped, creating bad exclude symbols (v1c)
- making a static library was not saving the built lib to the source path (v1c)
- rtlib arg len calc was wrong and affected CDECL function calls when byval strings were passed (v1c)


Version 0.09 Beta:

[changed]
- FBC's command-line options are now case-sensitive, -b is NOT the same as -B anymore, pay attention (v1ctor)
- all Windows-only include files were moved to the inc\win path, fix your sources please (v1c)
- calling function pointers no more needs a * at beginning, () must now be used, even if proc has no args (v1c)
- pre-processor is now at Lex's level, so it can be used inside TYPE, UNION and ENUM blocks too (v1c)
- LOCATE now accepts a 3rd optional argument to turn cursor on and off (lillo)
- max length of literal strings was too short, 1024 chars now (also an error msg is shown if too big) (v1c)

[added]
- QB-ish GFX library (not fully functional yet, palette is buggy), all credits to Sterling for the hard work (v1c)
- DLL and static library automation, thanks to DrV for sending the patches (v1c)
- support for creating shared libraries on Linux (lillo)
- #ELSEIF pre-processor statement (lillo)
- pre-defined #defines: FB__VERSION, FB__SIGNATURE, FB__WIN32, FB__LINUX (lillo)
- double-quotes on literal-strings, as in: text = "quote=""": print text (will print: quote=") (v1c)
- more complete Windows API include files, thanks to Nek and fws for the hard work (v1c)
- dereferenced byte pointers can now be assigned to fixed and var-len strings and vice-versa (v1c)
- function calls can now be dereferenced, ie: sometype = *somefuncreturningapointer(somearg) (v1c)
- ALLOCATE and DEALLOCATE intrinsic functions, to dynamic allocate memory (as malloc/free) (v1c)
- CLEAR intrinsic function, to fill a memory block with some value (as memset) (v1c)

[fixed]
- rtlib routines still had stdcall alias (with @'s) when -w option was used (v1c)
- "."'s were being checked inside an $include directive when using apostrophes instead of quotes (v1c)
- #DEFINE's were case-sensitive and quotes weren't being preserved (v1c)
- defines passed by cmm-line were being ignored if no value was explicitly given (v1c)
- PRINT couldn't print more than 80x25 chars at time (WRITE stills limited tho) (v1c)
- TRIM$ was eating one char more (v1c)
- undefined UDT elements when accessed w/o OPTION EXPLICIT were being declarated as new variables (v1c)
- ACCESS clause on OPEN was expecting an expression, correct is READ|WRITE|READ WRITE (v1c)
- "imm op short var" was allocating the wrong register type, due an integer imm optimization at AST (v1c)
- ptr params passed byref to functions were being converted, as IR wasn't treating POINTER dtypes as UINT (v1c)
- "dim var as sometype: goto|gosub var" was being accepted (v1c)
- when an include file was not found, the compiler context was not being restored (v1c)


Version 0.08 Beta:

[added]
- pre-processor: #DEFINE ID, #UNDEF ID, #IFDEF ID, #IFNDEF ID, #IF Expression, #ELSE, #ENDIF, #PRINT (v1ctor)
- -d cmd-line option, to add compile-time pre-processor define's (v1c)
- -w cmd-line option, to treat stdcall calling convention as cdecl even on Win32 (v1c)
- NOSTDCALL define to rtlib, also all __stdcall references are now FBCALL (v1c)

[fixed]
- comparing a fpoint operand against an int operand would not load the int to the FPU stack due the comp&branch opt (v1c)
- debugging symbols were being stripped even when the -g option were used (v1c)
- sdlvideo.bi: pitch field from SDL_Surface struct redeclared as ushort - it was uinteger before (v1c)
- sdlvideo.bi: SDL_Rect fields were integer's instead of short's (v1c)
- sdlevent.bi: SDL_MouseMotionEvent, yrel was declared as unsigned (v1c)


Version 0.07 Beta:

[changed]
- DIM now can be used with non-constant indexes, what will create a dynamic array (v1ctor)

[added]
- DIM array(), dynamic arrays with unknown dimensions as in VBDOS/VB (v1c)

[fixed]
- RTRIM$ would fail with fixed-len strings as fb_StrAssign was not padding them with nulls (v1c)
- DATE$ was allocating 2 chars less than needed (v1c)
- EXIT was not checking if was inside a compound stmt or a proc, an access violation would happen (v1c)
- vars explicity declared with full type weren't be found when used with a prefix of same type (v1c)
- emit was pushing words to stack and cleaning 4 bytes when converting to/from fpoint vars to/from short vars (v1c)
- ERASE was accepting any kind of vars, including scalars and non-dynamic arrays (v1c)
- const relop expr would gen bad code (dst as immediate value) (v1c)
- functions should never be allowed to return structs (v1c)
- INPUT statement for console was generating an infinite loop at AST if no prompt string was passed (v1c)
- sdlmouse.bi: SDL_WarpMouse was named as SDL_WrapMouse (v1c)


Version 0.06 Beta:

[added]
- STATIC declared before SUB or FUNCTION like in VBDOS/VB (v1ctor)
- another quirk: ELSE and ELSEIF with statements in the same line (v1c)
- "IF expr THEN linenumber", GOTO ugly stuff (v1c)
- byte and floating-point vars can now be freely mixed (v1c)
- ALIAS declaration on SUB's or FUNCTION's (prototypes already had that) (v1c)
- FRE function (v1c)

[fixed]
- assumption that GAS would convert IDX*3 to IDX*2+IDX like MASM/TASM/NASM do (v1c)
- passing non-existent arrays by descriptor would cause an access violation (v1c)
- RND should never return 1.0 (v1c)
- too few array dimensions (limited to 16 now) (v1c)
- DATE$ was wrong, libc's localtime() returns current year less 1900 (v1c)
- FOR was accepting UDT fields as counter (v1c)
- file names with spaces, now quotes are added when passing them to AS and LD (v1c)
- when path contains spaces, EXEC, RUN and CHAIN will use a short one (v1c)


Version 0.05 Beta:

[added]
-  NEXT with multiple identifiers (NEXT a, b, ...), as many old sources seem to have that (v1ctor)

[fixed]
- PRINT and WRITE stmts were accepting expressions separated by white-spaces (BC also allows that) (v1c)
- quirks with LINE INPUT and INPUT for console, message is optional (try parsing that using a LR..) (v1c)
- and another one with CLOSE, file number is also optional and that way it works as RESET (v1c)
- CSRLIN was declared as CSRLINE (v1c)


Version 0.04 Beta:

[changed]
- fpu initialization is done at rtlib now, for better portability (v1c)

[added]
- LOCAL keyword to be used with ON ERROR statments, when inside sub-routines (v1c)
- "ERR = expr" statement, for setting the error number (the ERR function already existed) (v1c)

[fixed]
- SDL prototype for UnlockSurface, the alias was wrong (v1ctor)
- SDL include files: all BYREF args were changed to BYVAL ... PTR, for better consistency (v1c)
- line continuation char "_" was being processed inside comments and $include's file names (v1c)
- entry point name wasn't checking for "-" chars, that are valid on file names, but invalid on symbol names (v1c)
- using RESTORE w/o a label before any DATA statement would create the wrong default label (v1c)
- loading larger vars to byte ones with SI/DI was wrong as the source type was not being remapped at EMIT (v1c)


Version 0.03 Beta:

[fixed]
- entry point name was wrong when the source file had slashes in the name, and not back-slashes (v1ctor)
- IR was renaming the compare ops when operands hadn't the same class, 'cause a x86 FPU opt. done at AST (v1c)


Version 0.02 Beta:

[fixed]
- IR module was not freeing regs of the same classes while making int convertions and reusing them (v1ctor)
- optargs.bas wasn't working, it was being used just as a prototype, shouldn't be there (v1c)
- argument-less function pointers: parser wasn't accepting them when ()'s were used (v1c)
- right$ was reversing the result (v1c)
