# QB64

QB64 (ursprünglich QB32) ist ein BASIC-Compiler für Windows, Linux und Mac OS X, der für die Kompatibilität mit Microsoft QBasic und QuickBASIC entwickelt wurde. QB64 emittiert C-Quellcode und integriert selbst einen C++-Compiler, um die letztendliche Kompilierung des generierten Zwischencodes mit gcc-Optimierung zu ermöglichen. Mit der derzeit technisch genauesten Nachbildung des originalen Microsoft-Produkts zählt QB64 zu den Anwendungen im Bereich Retrocomputing.
QB64 implementiert die meisten QBasic-Funktionen und kann viele QBasic-Programme ausführen, einschließlich der Beispielprogramme Gorillas und Nibbles, die von Microsoft geschrieben und dem Originalprodukt beigelegt waren. Darüber hinaus enthält QB64 eine Entwicklungsumgebung, die der QBasic-Entwicklungsumgebung ähnelt. QB64 erweitert auch die QBASIC-Programmiersprache um 64-Bit-Datentypen, bessere Sound- und Grafikunterstützung und bessere Anbindung an Betriebssystemfunktionen. Es kann auch einige DOS/x86-spezifische Funktionen wie Mauszugriff über den Interrupt 33h und mehrere Timer emulieren.

## Hintergrund

Der Beginner's All-Purpose Symbolic Instruction Code war sowohl Programmiersprache als auch Betriebssystem für die meisten der in den 1980er Jahren verbreiteten Heimcomputer, wodurch in dem entstehenden Massenmarkt für Mikroelektronik praktisch alle Konsumenten dieser Computer Kontakt mit dieser Programmiersprache hatten. Die meisten dieser BASIC-Dialekte waren eine Version des Microsoft BASIC von 1976, welches für zahlreiche damals erhältlichen Plattformen lizenziert und angepasst wurde. Außerdem wurde BASIC gezielt für Anfänger entwickelt. Aus diesen beiden Gründen war BASIC in den 80er Jahren bei Programmieranfängern beliebt und entwickelte sich durch die professionellen Microsoft-Produkte QBasic, QuickBASIC und Visual Basic in den 90er Jahren zu einem leistungsstarken, professionellen Werkzeug der Anwendungsentwicklung. Die meisten professionellen Entwickler der 90er Jahre und der ersten Dekade des 21. Jahrhunderts lernten das Programmieren zuerst mit einem BASIC-Dialekt.
QB64 wurde (als QB32) von Rob Galleon im Jahr 2007 das erste Mal veröffentlicht, als sich mit der Veröffentlichung von Windows Vista abzeichnete, dass MS-DOS-Programme unter modernen Betriebssystemen bald nicht mehr lauffähig sein würden. QB64 wird von Anfang an selbst in QuickBASIC programmiert. Der Quellcode diente bis zur Version 0.63 der Emittierung von C++-Quellcode, welcher anschließend durch einen Compiler übersetzt wurde. Der Codegenerator wurde zunächst in der Originalversion von QuickBASIC 4.5 ausgeführt, bevor die bekannten Einschränkungen des originalen QuickBASIC-Interpreters mit dem Arbeitsspeicher ein Problem für die Weiterentwicklung von QB64 wurden. Für eine kurze Zeit wechselte Galleon daher zu Microsoft BASIC PDS 7.1, bevor QB64 sich ab seiner Version 0.63 unter Verwendung einer Vorgängerversion vollständig selbst kompilieren konnte.
Der Haupt-Quellcode der Version 2.01 von QB64 enthält mehr als 26.000 Zeilen ausschließlichen QuickBASIC-Codes in einer mehr als ein Megabyte großen Textdatei.
Der pädagogische Wert der Entstehungsgeschichte und der Softwarearchitektur von QB64, des Projekts und der Software, wird von Bildungseinrichtungen und -projekten wahrgenommen. Die Software findet in der Lehre und unter einigen professionellen Entwicklern Anwendung. Schülern im Informatikunterricht wird durch QB64, im Vergleich zu moderner Applikationsentwicklung, ein leichterer und unkomplizierter Zugang zum Erlernen des Programmierens mit zügig zu erreichenden Erfolgserlebnissen geboten, da weiterführende Teilschritte des Arbeitsprozesses wie die Einrichtung einer Entwicklungsumgebung und einer Laufzeitumgebung entfallen und das Basissystem, in dem und mit dem die Anwendung ausgeführt wird, sich auf einfache Text-, Sound- und Farbgrafik-Ausgabe beschränkt, ohne vom Entwickler weitergehende Kenntnisse der Systemprogrammierung zu erfordern.
Im Gegensatz zu herkömmlichem BASIC- und QBasic-Code werden die mit QB64 geschriebenen Anwendungen in ausführbare Dateien kompiliert und ausgeführt, was eine gesteigerte Rechenleistung und eine einfache Verteilung ermöglicht. Die Sprache wurde um die Möglichkeit erweitert, Quellcode mit externen C/C++-Programmierbibliotheken sowie (unter Windows) den dynamischen Windows-Bibliotheken zu verknüpfen.
Mit Funktionen für OpenGL und Anbindungen an moderne Betriebssystemfunktionen, wie etwa die Drucker-Schnittstelle des Betriebssystems, ist es möglich, die ursprünglichen Beschränkungen des MS-DOS-basierten Ausführungsumfelds zu verlassen und modernere Anwendungen zu programmieren. Ereignisgesteuerte und dialogorientierte Programmierung mit grafischen Benutzeroberflächen werden in QB64 mit der freien Erweiterung InForm ermöglicht.

## Syntax

Die Syntax von QB64 ist vollständig abwärtskompatibel mit QuickBASIC. Zeilennummern sind nicht erforderlich, und Anweisungen werden durch Zeilenlinien beendet oder durch Doppelpunkte getrennt (:).
Ein Beispiel „Hallo, Welt!“ Programm ist:
Ein QB64-Beispiel für eine VGA-Speicheremulation
Ein QB64-Beispiel und Audio-Dateien abzuspielen:
Ein QB64-Beispiel mit Bild-Dateien zu arbeiten:
Ein QB64-Beispiel für mehrere Timer:

## Erweiterungen zu QBasic

Die erweiterten Befehle von QB64 beginnen mit einem Unterstrich, um Konflikte mit Namen zu vermeiden, die in einem QuickBASIC-Programm verwendet werden können. Ab Version 1.4 kann das Unterstrichpräfix mit dem Metabefehl $NOPREFIX gelöscht werden. QB64 erweitert die QuickBASIC-Sprache auf verschiedene Weise. Es fügt die neuen Datentypen hinzu, einschließlich _BIT, _BYTE, _INTEGER64 und _FLOAT sowie vorzeichenlose Datentypen. Die neuen Datentypen haben Suffixe wie die herkömmlichen BASIC-Datentypen. QB64 enthält auch eine Audiobibliothek, die das Abspielen der gängigsten Audioformate, einschließlich MP3-, Ogg Vorbis- und WAV-Dateien, sowie Bibliotheken, die es Benutzern ermöglichen, Grafiken mit höherer Auflösung als die 640×480 von QuickBASIC sowie verschiedene Schriftarten zu verwenden und Bilder in BMP-, PNG- und JPEG-Formaten zu zeichnen. Es ermöglicht auch die Verwendung von 32-Bit-Farben im Gegensatz zu den begrenzten 16 bzw. 256 Farben, die ursprünglich angeboten wurden. Der Programmierer hat die Möglichkeit, genau wie bei QuickBASIC eine eigene Bibliothek über den $INCLUDE Befehl zu inkludieren.

## Kommandozeile

QB64 lässt sich auch über die Kommandozeile aufrufen. Mittels Argumenten kann die Übersetzung von BASIC Quellzeilen-Dateien darüber gesteuert und in Skripten eingebettet werden.

### Abruf der Schalter

Aufruf der Schalter-Übersicht von QB64:

### Übersicht der Schalter

Allgemeiner Aufruf von qb64 über die Kommandozeile
Übersicht der QB64-Schalter Schalter:
<Datei> zu ladende Quellzeilen-Datei
-v Erweiterte Ausgabe
-q Keine Ausgabe
-c Übersetzen anstatt bearbeiten
-x Übersetzen anstatt bearbeiten und die Ausgabe wird auf der Konsole ausgegeben
-p Alle Inhalte vor der Übersetzung werden entfernt
-z Erzeugt C-Quellzeilen ohne eine Übersetzung in eine ausführbare Datei
-o <Ausgabe-Datei> Erzeugt eine ausführbare Datei mit dem angegebenen Namen <Ausgabe-Datei>
-e Schaltet OPTION _EXPLICIT ein, erzwingt die Deklaration von Variablen, aber das nur pro Übersetzung, die nicht die Quellzeilen-Datei selber oder globale Einstellungen verändert
-s[:switch=true/false] Ausgabe/Setzen von Übersetzer-Einstellungen
-l:<Zeilennummer> Startet die IDE an der angegebenen Zeilennummer

### Beispiel-Aufruf

Beispiel einer QB64-Übersetzung mittels Kommandozeile:
Dieser Aufruf erzeugt die folgende Ausgabe auf der Kommandozeile:

## Zusätzliche Programme
### QB64 InForm

InForm ist ein Rapid-Application-Development-Werkzeug für QB64 mit einem WYSIWYG-Editor und einer grafischen Bibliothek, mit dem dialogorientierte Software für grafische Betriebssysteme entworfen werden kann, um ein ereignisgesteuertes QB64-Programm zu generieren.
Im folgenden Beispiel-Code wird das Ereignis Click auf der Schaltfläche mit der Beschriftung „OK“ ausgewertet, um damit den Text des Eingabefeldes dem Label zuzuweisen:

### QB64 vWATCH64

vWATCH64 ist ein Dienstprogramm zum Debuggen von QB64-Programmen. vWATCH64 generiert eine modifizierte Version der Quelldatei und unterstützt sowohl Haltepunkte, als auch die Echtzeit-Beobachtung von Variablen ermöglicht.
vWATCH64 ist kompatibel mit Windows, Mac OS X und Linux.

## Bibliotheken

QB64 integriert freeglut für Grafiken und Texte.
QB64 kann auch DLL-Bibliotheken für Windows-, C++- und SDL-Funktionen und -Anweisungen verwenden, wie in den folgenden Beispielen verdeutlicht wird.

### Dynamik Link Library, kurz DLL

QB64 unterstützt Dynamik Link Library-Anweisungen und -Funktionen, kurz DLL und haben in den allermeisten Fällen die Dateiendung .DLL. Die angegebene DLL-Datei ist entweder im Windows-Systemordner (C:\WINDOWS\System32) oder im Stamm-Ordner von QB64 vorhanden.
Ein Beispiel für den Zugriff auf eine DLL-Datei:
Die im Beispiel genutzte DLL-Datei muss sich im Stamm-Ordner von Qb64 befinden. Sie kann aus dem Internet heruntergeladen werden.

### C/C++-Bibliotheken

Benutzer können auch auf C-Headerdateien zugreifen, um C-Funktionen auszuführen. QB64 verwendet C++, um ein BASIC-Programm in ein ausführbares Programm zu kompilieren. Dabei ist wichtig, C++-Header-Dateien in den Stamm-Ordner von QB64 abzulegen. Nach der Kompilierung eines Programms sind sie nicht mehr erforderlich.
Ein Beispiel für die Deklaration auf C-Routinen: