Code: (Select All)
# QB64 v2.0.x - What's new?
## New features
### All platforms
- New `$Debug` metacommand, with added breakpoint/step abilities and real-time variable watching to the IDE.
- Quick reference for commands is now shown in the status bar when syntax errors are detected.
- `_Source` is now also set to `_Console` when `$Console:Only` is used.
- Allows `Ctrl+\` to be used as a shortcut to repeat search (legacy QBasic shortcut).
- Functions `_MK$` and `_CV` can now deal with `_OFFSET` values.
- New "View on Wiki" button on help panel (launches equivalent wiki page using the default browser).
- New `_EnvironCount` function to show how many environment variables are found.
- Color schemes can now be set/saved individually for each running instance of the IDE.
### Windows
- Automatically embeds a manifest file when compiling an exe with `$VersionInfo`, so that Common Controls v6.0 gets linked at runtime.
- Adds the %TEMP%, Program Files and Program Files (x86) directories to `_Dir$()` folder specifications.
<!---
### macOS
### Linux
--->
## Fixes
### All platforms
- Improved wiki parser.
- Contextual menu would crash when right-clicking a series of high-ascii characters.
- Fixes an issue with passing an array as a Sub/Function argument (missing parenthesis now properly detected).
- Fixes `Clear` making `$Console` mode invalid.
- Fixes a syntax highlighter issue regarding scientific notation.
- Fixes an issue in Windows Vista and up with incorrect resolution returned on a scaled desktop.
- Fixes `Const` parser accepting unsupported string functions and failing with some very specific const names.
- Explicitly sets x87 fpu to extended precision mode.
- Removes 255-character limit for `Input/Line Input` with strings.
- Fixes `Data` commands failing to compile in some circumstances.
- `$NoPrefix`, `Option _Explicit` and `Option _ExplicitArray` can now be placed anywhere in a program, no longer having to be the first statement.
- Fixes `MEM` reverting to `_MEM` as a sub parameter in `$NoPrefix` mode.
- Fixes case adjustment of array names in `UBound`/`LBound` calls.
- Prevents users from creating self-referencing `Type` blocks.
- Fixes issue that prevented loading file names beginning with numbers.
- Fixes file open/save dialogs issue with path navigation.
- Complete rewrite of the internals for `Environ$()`.
- Fixes evaluation of valid var/flag names for `$Let`/`$If` - same rules for variable names now apply.
- Fixes incorrect parsing of `Type` blocks with multiple elements using the `AS type element-list` syntax.
- Fixes issue with `Put #` and variable-length strings in UDTs (`Binary` files).
- Fixes issue with recursive functions without parameters.
#### Fixed in 2.0.1
- Fix "Duplicate definition" error with Static arrays in Subs/Functions with active On Error trapping.
- Fix internal UDT arrays not resetting when a new file is loaded.
- Fix issue preventing `$Debug` from working in Windows versions prior to Windows 10.
#### Fixed in 2.0.2
- Fix issue with `LBound`/`UBound` calls in complex expressions.
### Windows
- Allows `$Console:Only` programs to return `_WindowHandle`.
- Saving a file to the root of a drive would display double backslashes in the Recent Files list.
### macOS
- Flushes the console output so `Print` can properly display text even while retaining the cursor.
#### Fixed in 2.0.2
- Fix issue preventing compilation in macOS versions prior to Catalina.
### Linux
- `xmessage` added to dependency list (setup script).
- Fixes `InKey$` acting too slow.
- Fixes compilation error with `Data` statements on gcc 11.
- Detects non-x86 based architectures.
- Flushes the console output so `Print` can properly display text even while retaining the cursor.
Code: (Select All)
QB64 v1.5 - What's new?
New features
All platforms
New _MEMSOUND function, that allows you to access raw audio data decoded by the _SNDOPEN function.
Added tiling support to PAINT for legacy SCREEN modes.
Holding CTRL while dragging colors sliders in RGB mixer locks all sliders together (useful for generating gray scale values).
Adds OPTION _EXPLICITARRAY - like OPTION _EXPLICIT but only makes array declaration mandatory, not regular variables.
EXIT SELECT/CASE implemented to allow breaking out of a SELECT CASE block or out of a CASE block, in case it's used in a SELECT EVERYCASE block.
New <New Folder> button in open/save dialogs.
Ability to disable the Syntax Highlighter entirely (Options menu).
New default color scheme "Super dark blue".
Adds Alt+F3 as a shortcut to Search->Change...
Adds Ctrl+F2 as a shortcut to clicking the "back" arrow (quick navigation).
New CTRL+K shortcut that allows you to insert _KEYHIT and _KEYDOWN codes easily.
Find and Change dialogs (Search menu) now allow you to ignore text in comments and strings - or search exclusively in comments or strings.
SUBs dialog (F2 key) now shows how many lines each procedure contains.
Adds ability to change color/cursor position in $CONSOLE mode in macOS and Linux.
Extends contextual menu (right click) to the Help area.
Warnings dialog now displays the correct line number if a warning refers to an $INCLUDE file.
New colorized output for command-line compilation.
New -w switch for command-line compilation to show warnings.
Revamped ASCII Chart dialog.
Rewritten Math Evaluator dialog.
Added dialog to show progress of updating help pages (Help->Update All Pages).
Menu items reorganized for clearer grouping. New Tools menu.
Menu items descriptions are now shown in the status bar.
New _ERRORMESSAGE$ function, to return a human-readable description of the most recent runtime error.
New $ERROR metacommand, which prevents compilation depending on an $IF precompiler block condition.
New VERSION precompiler variable which can be used to check the current version of QB64 being used.
Setting $CONSOLE:ONLY now automatically switches _DEST to _CONSOLE.
New alternative syntax for DIM, REDIM, SHARED, STATIC, COMMON, TYPE, that allows for less typing by grouping variables of the same type (like DIM AS INTEGER a, b, c, d, e, f, g '...)
Ability to have the IDE format keywords in camel case like _FullScreen instead of _FULLSCREEN (opt-out feature, check Options->Code Layout).
Menus items now have brief descriptions that get displayed in the status bar.
File menu now shows more recent files and the full path is displayed in the status bar.
Cursor shapes "HELP" and "WAIT" can now be set via _MOUSESHOW.
Fixes
All platforms
Fixed the QB4.5 binary format converter to allow some syntax blocks to be properly recognized.
Fixed an error that would prevent the QB4.5 binary format converter from being launched.
Allows the RGB mixer to be invoked with Alt+Enter when $NOPREFIX is used.
RGB mixer now inserts new color values even if _RGB32 is used with less than three parameters.
Fixes syntax highlighter for some corner case non-numbers being colorized - as well as some numbers not being colorized properly (scientific notation).
Fixes $CHECKING:OFF bug related to arrays with non-zero lower bound.
Fixes ENVIRON$() not working in some scenarios.
Fixes issue that allowed code in a SELECT CASE block but before a CASE condition.
Syntax Highlighter gets automatically disabled if rendering a page takes longer than a second.
Fixes a bug that wouldn't display the recent search history if it was too long and a help page was active.
Fixes _MOUSEMOVEMENTX and _MOUSEMOVEMENTY in Windows systems. Implements both commands for macOS and Linux (limited to the program window area).
Fixes SEEK not resetting EOF().
END/EXIT SUB/FUNCTION get correctly changed, like in QB4.5 (e.g. use EXIT SUB in a FUNCTION and it'll become EXIT FUNCTION).
CONST evaluator fixed to allow using existing constants in equations reliably.
$LET lines would be incorrectly indented in some scenarios.
Allows DATA to contain numbers with trailing data type markers, for retrocompatibility with QB4.5.
The IDE will now let you know early on that labels placed between Subs/Functions are not valid, instead of just crashing at C++ compilation. CONST statements are no longer accepted between Subs/Functions either (they would be accepted in previous versions, but inaccessible).
Classic metacommands parsing adapted to more closely behave like QB4.5.
Windows
Fixes a _LOADFONT issue when attempting to load a font from C:\Windows\Fonts when no path is passed.
macOS
The IDE would segfault at startup if the clipboard contained an image.
Fixed an issue that prevented the IDE window size to be restored from previous sessions and kept defaulting to 80x25.
Replaced all g++ and gcc calls with clang++ and clang, to prevent failures in some scenarios.
Fixes scaling for UHD/5K resolution systems.
Fixes an issue with variable-length strings in TYPEs.
Enables _SCREENX and _SCREENY to return the window position on the desktop. The IDE now properly stores its last position too.
Linux
Programs written for $CONSOLE:ONLY no longer pull in GL/X11 libs
Code: (Select All)
QB64 Version 1.4 - Changelog
First things first, we have moved development to a new GitHub repository. Follow us at https://github.com/QB64Team/qb64.
Although we don't follow a strict schedule regarding updates to QB64, every once in a while a feature that's been requested gets implemented or a new bug is found and then fixed, and eventually we have enough for a new release.
$NOPREFIX
One big change worth mentioning first, since it affects QB64 code from now on in a big way, is the new $NOPREFIX metacommand.
QB64-specific keywords, those that expand on the original set of keywords from QBasic/QuickBASIC 4.5, which we aim to replicate, are those that start with an underscore. It has been designed that way so that, in the event that you want to load an older program you wrote back in the day that had variables or procedures with identical names, they would not collide with the new keywords, making it possible to use QB64 entirely as you did with QBasic but also add the new functionality without breaking anything.
However, we have over the years been following our userbase create more and more programs that have no dependency whatsoever on older code, which means these aren't just QBasic programs with benefits, but actually QB64-native programs, written from scratch with QB64 in mind.
All that said, the new $NOPREFIX metacommand allows you, for the first time ever, to write QB64 programs without having to add the leading underscore to use the modern keywords.
That will allow code like this:
SCREEN _NEWIMAGE(800, 600, 32)
COLOR _RGB32(255), _RGB32(255, 0, 255)
m$ = "Hello, world!"
_PRINTSTRING ((_WIDTH - _PRINTWIDTH(m$)) \ 2, (_HEIGHT - _FONTHEIGHT) \ 2), m$
DO
_DISPLAY
_LIMIT 30
LOOP UNTIL _KEYHIT
To be written as:
$NOPREFIX
SCREEN NEWIMAGE(800, 600, 32)
COLOR RGB32(255), RGB32(255, 0, 255)
m$ = "Hello, world!"
PRINTSTRING ((WIDTH - PRINTWIDTH(m$)) \ 2, (HEIGHT - FONTHEIGHT) \ 2), m$
DO
DISPLAY
LIMIT 30
LOOP UNTIL KEYHIT
With the new metacommand in use, a program can both use _DISPLAY and DISPLAY, for example. User variables and procedures still cannot start with a single underscore (double underscores are accepted).
Here's the complete changelog for v1.4:
New features
All platforms
New $NOPREFIX metacommand.
New _DEFLATE$() and _INFLATE$() functions, that can be used to compress and decompress text or data strings using zlib, which has been added to our parts system.
New $ASSERTS metacommand and _ASSERT macro.
More bit-related functionality has been added: _READBIT, _SETBIT, _RESETBIT and _TOGGLEBIT.
You can now use _PUTIMAGE to place a portion of an image onto itself (source and destination can now be the same).
New $COLOR metacommand, which adds preset color constants based on HTML color names (per program).
Enhanced support for &B prefixed numbers, so the notation can now also be used in DATA lines and read by INPUT (from file & keyboard).
Windows
Enhancements to $CONSOLE: you can now use statements and functions you are already familiar with for SCREEN 0 but for console output. CSRLIN, POS(0), LOCATE, COLOR, _WIDTH, _HEIGHT, WIDTH (statement), CLS, SLEEP and END have all been reworked to deal with terminal output.
It is now possible to read input while working in $CONSOLE windows using _CONSOLEINPUT (for both keyboard and mouse support) and _CINP (to read individual key strokes).
You can now read the states of _CAPSLOCK, _NUMLOCK and _SCROLLLOCK keys, as well as set their states.
macOS
Basic detection of Retina displays has been implemented and programs should now render properly.
Fixes and improvements
All platforms
The warnings functionality can now be disabled (Options menu).
Numbers expressed in scientific notation now get properly colorized.
Enhanced "Open" and "Save as..." dialogs with added file list (save dialog) and support for wildcard filtering (* and ?).
Fixes a bug that would cause $INCLUDE lines to be duplicated in some scenarios.
Fixes a bug that wouldn't restore VIEW PRINT settings when RUN was called.
Linux
The IDE won't become unresponsive when the mouse pointer leaves the window anymore.
Windows
Fixes a bug that would prevent compilation when $EXEICON was used with $CHECKING:OFF set.
Fixed $VERSIONINFO so the embedded data gets properly displayed in newer versions of Windows.