FreeBASIC 1.06.0

FreeBASIC is a multi-platform BASIC compiler with syntax similar to MS-QuickBASIC (including graphics statements). It adds features like pointers, unsigned data types, inline assembly, C and C++ bindings (e.g. Allegro, SDL, OpenGL, GTK+, Windows API), and a pre-processor with macro support. FBedit is an additional IDE to the compiler.

Tags basic compiler qbasic
License GNU GPLv3
State initial

Recent Releases

1.06.006 Feb 2016 21:05 major feature: changed . added . . Win/ no longer has a hard-coded #inclib "d3dx9d". d3dx9d.dll is apparently not a generally valid choice. In practice programs have to be linked against d3dx9_33.dll or d3dx9_39.dll, etc.
1.05.002 Oct 2015 20:25 major feature: changed . added . . 0.90.0 regression: Self-op optimizations stopped handling some cases and should now work again, for example: optimizing A=A+1 = A+=1 where A is a Long, should give nice ASM code with -gen gas again.
1.04.004 Jul 2015 18:45 minor bugfix: False-positive "ambigious sizeof" warnings if the identifier could refer only to a type or procedure (in that case it should already be fairly clear that the type will be chosen, not the procedure, because sizeof() can't be applied to procedures at all), or if an expression such as "array(0)" is given to sizeof() (i.e. something that starts with an identifier but is followed by further tokens that clarify that it's not refering to a type). Adjusted "ambigious sizeof" warning message for the case when it could refer to a forward reference or a variable.
1.03.010 Apr 2015 09:05 minor feature: Package name + version to all the new/updated bindings. Fixed regression: win/ Renamed INPUT typedef to INPUT_ to avoid conflicts with the quirk keyword. Regression: OpenGL binding: glGetString() and some others use ZString Ptr instead of GLubyte Ptr again. Regression: Windows API binding: REFIID and some other REF* types were missing.
1.02.031 Dec 2014 06:45 minor feature: Potential bad code generation for dynamic array field copying
1.01.015 Dec 2014 08:05 minor feature: On Linux/*BSD, the FB runtime will now delay using VT100 terminal escape sequences to query terminal window size and cursor position until the first use of a console I/O command WITH ... END WITH blocks now have an implicit scope, like SELECT, DO ... LOOP, etc. Variables declared inside will no longer be visible outside. On Linux/*BSD, the FB runtime will now respect the __fb_enable_vt100_escapes global variable . FB programs can set it to 0 in order to manually disable the use of hard-coded VT100-specific escape sequences by FB's console I/O commands. This can help getting FB programs to run on older terminals which don't accept these escape sequences. However, it may also cause FB's console I/O commands and functions to behave differently. For example, if the use of the escape sequence for querying cursor position is disabled, then the FB runtime will assume that the cursor starts out at position 1,1 even if that is not actually true. WITH compounds now also accept type and UDT expressions Bindings : Allegro 4.4.2 algif 1.3 alpng 1.3 Allegro 5.0.10 CGUI 2.0.3 CUnit 2.1-3 for the old FMOD 3.75 IUP 3.11.2 libclang 3.5.0 libcurl 7.39.0 libffi 3.1 libjit a8293e141b79c28734a3633a81a43f92f29fc2d7 libpng 1.2.51, 1.4.13, 1.5.19, 1.6.14 libzip 0.11.2 LLVM-C 3.5.0 Lua 5.2.3 ncurses 5.9 PDCurses 3.4 zlib 1.2.8 crt/sys/ now provides off_t on Windows, like and MinGW-w64 1.00.0 regression: DRAW x/y pen position was reset during X subcommands, instead of being preserved and passed to/from the subcommands 1.00.0 regression: C backend: Bad code generated when taking the address of __FB_ARGV__, resulting in a gcc error. Linux/*BSD: FB programs run in the background could hang on exit due to the FB runtime triggering a SIGTTOU gen gcc: Single-precision constants were being emitted with precision less than 24 bits 1.00.0 regression: When compiling on DOS, backslashes were passed to the linker as causing it to fail opening the passed files An fixe
1.00.015 Sep 2014 02:42 major feature: This release adds 64 bit support for the compiler and integers in general. Greatly improved overload resolution. Dynamic arrays inside UDTs (for example: array(ANY) AS INTEGER). New syntax for declaring dynamic arrays with certain amount of dimensions but no initial bounds: dim array1(any), array2(any, any). All function results can now be ignored at the call site. BYVAL AS STRING is now working properly. NEW/DELETE now work with STRING. Operator overloading. Len() can now be overloaded for UDTs. Thread-safe version of the FB graphics library (libfbgfxmt). And a long list of bugfixes.