As with everything else, this list will be updated to correspond to new progress of QB64 so make sure that you are using the latest version of QB64. Please note that it may take a short time to update this list.
Q: What is QB64?
A: QB64 is a BASIC compatible Editor and C++ emitter that creates working Executable files from Qbasic BAS files that can be run on 32 or 64 bit PC's using Windows (XP to 10), Linux or macOS. The goal is to be 100% compatible with QuickBasic 4.5 plus add hundreds of new abilities such as program icons and custom sized windows and a great retro Editor with builtin help.
The new keywords add some new features such as playing music or sound files and instant access to 32 bit graphics file images. Also TCP/IP internet communication is available to download files, email messages over the web or play internet games. DLL Libraries can add more programming options and QB64 can access all of the new USB gaming controllers and printers.
QB is an abbreviation for QBasic or QuickBASIC which is an easy to learn language that grew very popular in the 90's. It uses simple syntax but holds great potential as there are methods to achieve nearly anything. QBasic is more alive than ever with QB64!
Q: Does it have modern features? Do they HAVE to be used?
A: QB64 has plenty of modern features, but they do not have to be used. You may just want to run some of your old favorites.
You could code using the original QuickBASIC syntax all the way through and it should work as you expect it to or even better. QB64 is often faster and has none of the memory limitations that plagued QBasic in the past.
QB64 is not meant to run PDS (7.1) QBX code. Most GW Basic code will run with minor changes.
The modern statements are designed to go along with the BASIC philosophy and expand QBasic into the future!
1) Full graphic functions for images up to 32 bit color. Alpha transparency supported. 2) Instant loading of image files including BMP, PNG, JPEG, GIF and more... 3) Supports stereo sound files like WAV, OGG, MP3, speaker and volume control and more... 4) Animation is easy to do using _DISPLAY instead of page flipping, to achieve flicker-free graphics. 5) Clipboard reading and writing support. 6) Networking over TCP/IP and Email. 7) True type font and Unicode support for many Languages. 8) Integrated mouse and game controller input including scroll wheel support. 9) Support for C++, OpenGL, Windows API and other custom Dynamic Link Libraries.
Q: How do I install QB64 on Windows, Linux, macOS?
A: QB64 supports the following Operating Systems:
- 1) Download the appropriate package according to your system from QB64.org
- 2) Unpack the contents to any location on your computer. Avoid unpacking to Program Files or other system folders that may require administrative privileges. QB64 need to have full write permissions to its own folder.
- Executable programs are portable between like systems by copying the stand-alone executable file.
- 1) Download the appropriate package according to your system from QB64.org
- 2) After extracting the downloaded package, run the installation batch/script called ./setup_lnx.sh in the main qb64 folder to setup QB64.
- 3) Most dependencies should be automatically downloaded by the setup script, but these are the ones you should look for if compilation fails: OpenGL developement libraries, ALSA development libraries, GNU C++ Compiler (g++)
- 1) You must install Apple's Xcode command line tools for C++ compilation from their website. The simplest way to do so is opening a terminal window and typing the following command: xcode-select --install (more info here: Xcode download)
- (you won't be using the Xcode interface, QB64 just needs to have access to the C++ compiler and libraries it installs)
- 3) Download the appropriate package according to your system from QB64.org
- Extract the downloaded package and run ./setup_osx.command, found within the QB64 folder to install the QB64 compiler.
- Executable programs are portable between macOS systems by copying the executable file.
- To help launch executables without a console, a file called programname_start.command is created along with the program.
Q: Why won't QB64 work on my computer?
QB64 currently supports Windows versions from XP to the latest version. Most Linux and macOS versions are also supported.
- Don't move QB64 executable out of the QB64 folder. The various sub-folders hold the C++ compiler files and libraries.
- QB64 does not change any settings on your machine. All required files are in the QB64 folder.
Q: Are there any known incompatibilities?
A: There are some things that QB64 cannot do, like direct hardware access, which makes older more advanced programs that make use of ABSOLUTE, INTERRUPT, PEEK, POKE and OUT not work properly. Although some older functionality is emulated, if your program doesn't use such statements you probably won't notice any difference between QB 4.5 and QB64 (and if you do, report it as a bug in the forums). You can expect the most common addresses for interrupts, etc. to be functioning.
You should be careful with CPU usage. QB64 is a lot faster than QBasic was and it does not have many of the size limitations that confined QBasic programming abilities. Having said that, care must be taken to assure that programs do not hog resources. To do that, use speed limits when possible to keep the resources used to a minimum. Also, Monitor Task Manager when your programs are running, as it can tell you how much or system resources are being used in different parts of a program. The following keywords can lower the impact of your programs on those resources by releasing them to other programs:
- _LIMIT: Limits the loops per second in any loop and thus lowers the overall CPU usage.
- _DELAY: Pauses a procedure and releases unused resources for other programs.
- SLEEP: Stops or delays program procedures and shares resources.
QB64 can be fast when you need it to be, but take the time to consider the impact of your program on other programs as people seldom have only one program running and the OS has tasks it must do too.
Q: How do I update the information in QB64's help system?
A: The help provided in the QB64 IDE Help System fetches the pages from this wiki. Use the Update current page in the IDE Help menu selection to update a page. Use the Update all pages choice to update them all, but this may take longer.
Q: Can I use the same libraries with QB64 that I used with QB 4.5?
A: If the libraries are pure QB 4.5 code then yes, otherwise no. QLB files are not supported but you can easily copy your favorite SUBs or FUNCTIONs to a text BI file and $INCLUDE them at the end of any program. Include them after all SUB and FUNCTION code in the BAS file.
DECLARE LIBRARY allows users to reference C, Windows, OpenGL and other DLL libraries. If you find some functions that you like please share them with us at the forum! The following pages list working functions our members have found and tested:
Q: I can't get my QB 4.5 source code to work in QB64! Why?
A: QB64 is 99% compatible with QB4.5 programs. The commands that haven't been implemented are either obsolete or are too obscure and have been replaced by modern functionality.
Q: What files are required to run my QB64 compiled program in my Operating System?
A: Programs compiled by QB64 (version 1.000 and up) are stand-alone so no external files are required to be with your program's EXE file.
Q: Is there a way to use the compiler without running my program or using the IDE?
A: Yes! No other program files besides the BAS file are required. Use the following command to compile a program without running it:
- QB64 -c yourfile.BAS
- QB64 -x yourfile.BAS (compiles using the console only)
- QB64 -c yourfile.BAS -o destination_path\destination executable_name.exe (compiles the .BAS file and outputs the executable to a separate folder)
Q: How do I LINK modules or INCLUDE SUB procedures in QB64?
A: QB64 allows you to $INCLUDE code or BAS modules into one module when it is compiled. Text .BI files containing SUB or FUNCTION code or entire BAS modules can be included in one module that will be compiled.
After the EXE is compiled, you do not have to even use the added code anymore! The EXE will contain ALL of the program code as ONE stand-alone program! This also allows you to add SUB code to ANY program that you desire. Use the following syntax and rules:
- 1) $INCLUDE TYPE definitions or DATA field code at the beginning of the module that will be compiled. Text code can be used, but must be renamed to .BI (cannot be a .TXT extension!) or kept as a .BAS module. SUB or FUNCTION code MUST be included at the end of the module code!
- 2) $INCLUDE SUB or FUNCTION code AFTER any SUB or FUNCTION code in the module that will be compiled to combine them. Otherwise QB64 will create an error stating that the INCLUDE statement cannot be placed there.
- 3) LINKING of program modules is accomplished by creating a NEW module and using an $INCLUDE statement for each module that is to be combined.
After you have created the include files, you can add them to ANY other program that requires them! Thus you will end up with smaller BAS files and SUB procedures that can be used over and over like libraries. The files are only used during a compilation.
Q: CHAIN doesn't work the way I'm used to...
A: CHAIN has been implemented in QB64 versions 0.851 up. Be sure to download the latest version of the compiler when available.
The statement also can use COMMON or COMMON SHARED to pass program information. However QB64 uses files to pass the information. If your program moves to a location other than the EXE file's location, the file may be inaccessable! To avoid this problem, make sure that your program can refer to that location using a path.
There are minor differences from QBasic in that it doesn't open a program in the same window and does not retain the previous screen mode or format.
Q: Some screens look small. Can I enlarge them or make them fullscreen?
- You can use the _FULLSCREEN statement to make your programs run fullscreen.
- $RESIZE can be added to a program so you can track window resize events. (version 1.000 and up)
- You can also create custom sized screens with page flipping and up to 32 bit colors using _NEWIMAGE.
- Page flipping is available in most screens and the new _DISPLAY feature allows the images to be displayed when YOU desire.
- Picture or image files such as BMP, PNG, JPEG and GIF are EASY to load using _LOADIMAGE.
- Once images are loaded, all you have to do is use the image handle with any of the new statements and functions.
- _PUTIMAGE GETs and PUTs images fast in ONE call. It can even stretch or compress the image sizes!
A: Yes, they are emulated to use the soundcard instead of the old boring monotone PC-speaker that is rapidly disappearing.
- Multiple sound tracks
- Volume and speaker control
- Background music
Q: Can I use multiple monitors or Pole Monitors?
A: Yes, program windows can be moved to them automatically using _SCREENMOVE with horizontal pixel values that are negative for a secondary monitor on the left and greater than the screen resolution for secondary monitors on the right.
Note: If _FULLSCREEN is used the program will appear in the primary monitor only. Other running program windows may be pushed onto a secondary monitor on the right so a secondary monitor on the left is preferable in those circumstances.
Q: Why isn't the IDE always working as I would expect?
A: The IDE has many features shared with modern IDEs while retaining the retro look reminiscent of QuickBasic 4.5 and QBasic. You may request new features in the Discussion subforum and they will be analyzed for implementation, although no warranty of being added is made.
You can also use QB64 as a compiler only, so that you can choose any alternate editor of your choice.
Q: If QB64 creates Basic programs why is there no Immediate Window?
A: Because there is no QB64 interpreter. All C code has to be compiled before it can be run, but you can run more than one instance.
QB64 uses the Immediate window area to suggest syntax for keyword entries and give the compiler status when compiling. To run code snippets or do program calculations using QB64 just open up another instance of the IDE. Each new instance of QB64 will create a new numbered instance of Untitled(n).exe when compiled. If you want to save the test code for later use, Save it as a BAS file name before closing that instance of QB64. Ihe IDE will always ask if you want to save new or edited code.
Qbasic and Quickbasic allowed BAS programs to be run in an interpreter to test the code. The Run Menu in QB64 allows the following:
Start F5 Compiles into EXE file and runs program(with code whiteout). ─────────────────────────── Start (Detached) Ctrl+F5 Compiles into EXE and runs program separately (no code whiteout). Make EXE Only F11 Compiles into EXE without program files if there are no errors. ───────────────────────────
In QB64 versions prior to 1.000 the provided DLL files need to be included with the program EXE after it is compiled.
(The compiler can find Windows DLL files in the System folder and C++ DLL files in the QB64 folder.)
No additional program files need to be in the QB64 folder to Make EXE Only!The compiled EXE file can then be moved to a different folder holding the program files necessary when it is run.
Q: How can I slow my program down and/or use less CPU resources?
Not by using FOR loops! It would take a lot of loops just to slow QB64 down! Try _LIMIT to slow your program down and run at the same frame rate every loop. The integer value you enter determines the loop rate whether it is a DO...LOOP or a FOR...NEXT loop.
_LIMIT also keeps the CPU memory usage lower when used correctly. Use Task Manager or another CPU manager to monitor the percentage of use if it is over 50% and it doesn't need to be. Some QB64 programs can take up over 90% of the memory needed!
Q: Can I resize the QB64 Editor(IDE)?
A: Yes, drag the window border to resize it or use the Alt + Enter key combination to switch from windowed to full screen mode. This can also be used to resize a QB64 program screen (see $RESIZE).
There is also a way to set the window size in the Options Menu. Select Display and change the size from 80 columns and 25 rows to a larger size. The size cannot be less than 80 by 25! The size denotes the TEXT column and rows only! DO NOT MAKE IT TOO LARGE!
If there is ever a problem with an OPTION that you set, just Delete the .\internal\temp\options.txt file. Then restart QB64. You can find the program listed in the taskbar. Right click and select Close from the pop-up menu.
Q: The autoformatting doesn't work correctly in the IDE...
A: The autoformatting feature allows you to set a fixed number of spaces to indent your code. You can also choose to have keywords automatically changed to UPPERCASE as well as indenting the contents inside SUB/FUNCTION procedures. If you don't like the way it alters your code (both at load time and as you type it), just disable it.
Q: Does it work on Windows 98 or any OS older than Windows 2000?
A: No, it doesn't. QB64 is made to run on new systems (WinXP and up, Linux and macOS). The .exe files produced by QB64 should work in Windows 98 as long as the required DLL libraries, if any, are supported on that system.
Q: Can Line Numbers be removed from older program code?
Q: Does QB64 support CURRENCY values from PDS or VB programs?
A: Not directly, but _FLOAT currency values up to 4 decimal places can be multiplied by 10000(10 ^ 4) and converted to MKC$ string values using _MK$ with an _INTEGER64 value. _CV with an _INTEGER64 value divided by 10000 converts it back to _FLOAT values.
Q: What files are required to run older QB64 programs (version .954 and older) in Windows?
A: Older versions of the QB64 compiler (.954 or older) and EVERY EXE file created by this version of the compiler are dependant on various DLL Library files to function properly. These files are found inside of the QB64 folder. This also explains why QB64 will create ALL EXE files in the QB64 folder no matter where the original BAS file is located on the computer. Your new program will require these files too, but you can move the DLL files to your shared SYSTEM32 folder to eliminate duplicates!
Note: QB64 produces stand-alone executable files from version 1.000 onward.
jpeg.dll libfreetype-6.dll libgcc_s_sjlj-1.dll *(.95) libogg-0.dll libpng12-0.dll libstdc++-6.dll *(.95) libtiff-3.dll libvorbis-0.dll libvorbisfile-3.dll SDL.dll SDL_image.dll SDL_mixer.dll SDL_net.dll SDL_ttf.dll smpeg.dll zlib1.dll * denotes DLL updated in (version)
cyberbit.ttf (12.7 MB v 0.92, October 2010)
C:\WINDOWS\SYSTEM32 or C:\WINDOWS\SysWOW64
This will allow all of your programs to run in any location without copies of the DLL files inside of every program folder. Administrator rights may be necessary to move them there! The DATA folder files are integrated into the compiler itself in versions .91 and above.
charset8.raw chrset16.raw qb64.pal qb64ega.pal qb64icon
Q: Do you provide changelogs?
We do. Check below:
Q: Does a User licence come with QB64?
A: Yes, as of version 0.85 a licence comes with QB64 released as freeware. Read the licence.txt that comes with the download package for more information. QB64 will always be free to use with the current library files and the licenses DO NOT LIMIT the use of those libraries! You are also allowed to sell software that you create with the following stipulations:
QB64 SDL SOFTWARE LICENSE QB64 is currently released as freeware meaning that this download may be copied/distributed free of charge. All rights to the programs you create using QB64 (in both their executable and source form) belong to you. You are under no obligation to release the source code to the programs you create. You can sell the programs you create for profit. You are under no obligation to acknowledge that the programs you create were written in QB64 or reference the QB64 website in any way. The dynamically linked libraries (the DLL files you must include with your programs) are distributed under LGPL. Requirements for this can be found at the following URL: http://www.libsdl.org/license-lgpl.php QB64 and QB64 programs dynamically link to SDL (Simple DirectMedia Layer) libraries. SDL libraries are made available under the GNU Lesser General Public License (LGPL). Details of the SDL license requirements can be found at the above URL. Libraries are used in their 'standard'/unmodified versions and source code for these libraries can be found at: http://www.libsdl.org The QB64 compiler generates C++ code which is compiled into executable form by the MINGW GCC compiler. QB64 uses a version of the MINGW & GCC compilers found at the following URL: http://www.drangon.org/mingw/ The official version of MINGW GCC compiler can be found at the following URL: http://www.mingw.org/
- The choice of license makes a big difference: using the Lesser GPL permits use of the library in proprietary programs; using the ordinary GPL for a library makes it available only for free programs.
IMPORTANT LICENSING NOTE FOR QB64 GL PROGRAMMERS All executables which perform any kind of sound operation are subject to the LGPL license (due to incorporation of mpglibdll and OpenAL). Other components are licensed under various permissive licences. When sound components are included (thus the LGPL is in effect), the easiest way to meet terms of the LGPL is to make your program's source code (.BAS) available. If you are not using sound components, you do not need to release the program's source. If you are using fonts, you are bound by the terms of FreeType's license. Somewhere in your software package should include a notice that your program includes the FreeType library (see licence_freetype_ftl.txt for details) In all cases, you should distribute the LICENSE folder with your program. It should be noted that providing source code is not the only way to meet the conditions of the LGPL (eg dynamic linking) but it is by far the easiest from a technical point of view at this current time. The license requirements for components of QB64 are as follows: Software/Library Name: QB64 (inclusive of all parts of this distribution not covered by separate licence below) Website(s): http://www.qb64.net, http://code.google.com/p/qb64/ License: LGPL with static linking of code required for generated programs to run permitted License Website: http://www.gnu.org/licenses/licenses.html#LGPL License File: license/lgpl_2_1.txt Software/Library Name: MinGW 64 Website: http://mingw-w64.sourceforge.net/ License: (see below) Each of the various packages, which is distributed by MinGW.org, is governed by its own individual copyright and licensing terms. In summary, for the most commonly deployed packages: MinGW runtime: The MinGW base runtime package has been placed in the public domain, and is not governed by copyright. This basically means that you can do what you like with the code.w32api: You are free to use, modify and copy this package. No restrictions are imposed on programs or object files linked with this library. You may not restrict the the usage of this library. You may distribute this library as part of another package or as a modified package if, and only if, you do not restrict the usage of the portions consisting of this (optionally modified) library. If distributed as a modified package, then a copy of this notice must be included. This library is distributed in the hope that it will be useful, but WITHOUT WARRANTY OF ANY KIND; without even the implied warranties of MERCHANTABILITY or of FITNESS FOR A PARTICULAR PURPOSE. MinGW profiling code: MinGW profiling code is distributed under the terms of the GNU General Public License. Binutils, GCC, GDB, GNU Make: All of the GNU development tools, such as GNU binutils, GCC, GDB and GNU Make, are governed by the terms of the GNU General Public License. License Website: http://www.gnu.org/licenses/licenses.html#GPL License File: license_gnu_gpl_3.txt Location in QB64 distribution: internal/c/c_compiler/ Software/Library Name: Opus Tools Website: http://www.opus-codec.org/ License: BSD 2-clause license License Website: http://opensource.org/licenses/BSD-2-Clause License File: license_opus.txt Location in QB64 distribution: internal/c/parts/audio/conversion/ OpusInfo, which is under a GPL licence, was included in Opus Tools but has been removed from the QB64 distribution. Software/Library Name: mpglibdll Website(s): http://www.rz.uni-frankfurt.de/~pesch http://www.mpg123.de http://www.sulaco.org/mp3 License: LGPL 2.1 License Website: http://www.gnu.org/licenses/licenses.html#LGPL License File: license_gnu_lgpl_2_1.txt Location in QB64 distribution: internal/c/parts/audio/decode/mp3/ Software/Library Name: Ogg Vorbis I audio decoder version 1.05 Website:http://nothings.org/stb_vorbis/ Date:Written in April 2007 Author:Sean Barrett, sponsored by RAD Game Tools License: Placed in the public domain April 2007 by the author: no copyright is claimed, and you may use it for any purpose you like. License Website: N/A - public domain License File: license_stbvorbis.txt Location in QB64 distribution: internal/c/parts/audio/decode/ogg/ Software/Library Name: OpenAL-soft Website:http://kcat.strangesoft.net/openal.html License: LGPL 2 License Website: http://www.gnu.org/licenses/licenses.html#LGPL License File: license_gnu_lgpl_2.txt Location in QB64 distribution: internal/c/parts/audio/out/ Software/Library Name: FreeGLUT Website: http://freeglut.sourceforge.net/ License: LGPL (note: website states LGPL, license file is not a copy of GNU LGPL) License Website: http://www.gnu.org/licenses/licenses.html#LGPL License File: license_freeglut.txt Location in QB64 distribution: internal/c/parts/core/ Software/Library Name: FreeTYPE Website: http://www.freetype.org/ License: GPL or FreeTYPE's FTL (programs must abide by one of these licenses) License Website(s): (see below) http://www.freetype.org/license.html http://www.gnu.org/licenses/licenses.html#GPL License File(s): (see below) license_freetype_ftl.txt license_gnu_gpl_2.txt Location in QB64 distribution: internal/c/parts/video/font/ttf/ Software/Library Name: NanoJPEG - KeyJ's Tiny Baseline JPEG Decoder Author: Martin J. Fiedler <firstname.lastname@example.org> License: (refer to license file) License File: nanojpeg_license.txt Location in QB64 distribution: internal/c/parts/video/image/decode/jpg Software/Library Name: NanoJPEG - KeyJ's Tiny Baseline JPEG Decoder Author: Martin J. Fiedler <email@example.com> License: (refer to license file) License File: license_nanojpeg.txt Location in QB64 distribution: internal/c/parts/video/image/decode/jpg Software/Library Name: LodePNG License: (refer to license file) License File: license_lodepng.txt Location in QB64 distribution: internal/c/parts/video/image/decode/png
Q: How can I find what caused a Compiler error?
A: Compiler errors are often actually coding errors that both you and the IDE don't notice! Often it is a syntax error such as forgetting a quotation mark in a PRINT. Look for syntax errors too.
- You will find a script/batch file called recompile_win.bat (also recompile_osx.command or recompile_lnx.sh, according to your operating system) inside the folder internal\temp (if you have more than one instance of the IDE open, look inside temp2, temp3, etc).
- Immediately after encountering a "C++ compilation failed" message, run this script to have a look at the error message returned by the gcc compiler. That usually helps track the issue.
For versions of QB64 below .954, the best way to get a clue to the problem is to run the following batch file IMMEDIATELY AFTER a compilation failure: CODE UPDATED 1/4/2011
@echo off ECHO. ECHO Diagnosing Latest Compilation Error ECHO. ECHO Please wait... ECHO. cd .\internal\c .\bin\g -w -Wall -I.\i -I..\..\ -L.\l qbx.cpp libqbx.o -mwindows .\i686-w64-mingw32\lib\libimm32.a -lwinspool -lmingw32 -ln -lmix -limg -lttf -lmn -lSDL -o ..\..\test64.exe cd ..\.. ECHO. ECHO. PAUSE
@echo off ECHO. ECHO Diagnosing Latest Compilation Error ECHO. ECHO Please wait... ECHO. cd .\internal\c .\bin\g -w -Wall -I.\i -I..\..\ -L.\l qbx.cpp libqbx.o -mwindows .\i686-w64-mingw32\lib\libimm32.a -lwinspool -lmingw32 -ln -lmix -limg -lttf -lmn -lSDL -s -o ..\..\ >..\..\0utput64.txt 2>&1 cd ..\.. ECHO. ECHO 0utput64.txt created! ECHO. PAUSE
Look for the word error in the resulting information. The errors often have to do with syntax or code errors not found by the IDE.
Q: How do I use the QB64 code Repository?
A: QB64 is open source freeware and all the codebase is freely available on GitHub at this link. You can fork it, develop your own modified version of it and most importantly: help improve the official version by making pull requests. If you are already familiar with code collaboration, versioning control using git and would like to help, become involved! Your contributions could end up becoming part of the QB64 project.
- I cannot stress enough that the QB64 repository is not an official QB64 release! Even though our contributors are individually appointed, I'm not responsible for the contributions of these other authors which could potentially be malicious.
Q: Where I can view the C++ code before it gets compiled
Look in the QB64 internal\temp folder for main.txt to get the C code used to compile the latest program.
Q: Where can I find information about a QB64 statement or function?
Information about Programming concepts