QB64

Programmiersprache

QB64 (ursprünglich QB32) ist ein selbst erstellender BASIC-Compiler für Microsoft Windows, Linux und Mac OS X, der für die Kompatibilität mit Microsoft QBasic und QuickBASIC entwickelt wurde. QB64 ist ein C++-Emitter, der in einen C++-Compiler integriert ist, um die Kompilierung über C++-Code und GCC-Optimierung bereitzustellen.

QB64

Qb64.png
Basisdaten

Entwickler Rob Galleon, QB64Team
Erscheinungsjahr 2007
Aktuelle Version 1.5
Betriebssystem Windows, Linux, Mac OS
Kategorie BASIC-Compiler und Entwicklungsumgebung
Lizenz MIT
deutschsprachig nein
www.qb64.org

QB64 implementiert die meisten QBasic-Anweisungen und kann viele QBasic-Programme ausführen, einschließlich der QBasic Gorillas- und Nibbles-Spiele von Microsoft. Darüber hinaus enthält QB64 eine IDE, die der QBASIC IDE ähnelt. QB64 erweitert auch die QBASIC-Programmiersprache um 64-Bit-Datentypen sowie bessere Sound- und Grafikunterstützung. Es kann auch einige DOS/x86 spezifische Funktionen wie INT 33h Mauszugriff emulieren, und mehrere Timer.

Von den 1980er bis in die heutige ZeitBearbeiten

Die BASIC-Sprache war für unzählige Menschen das Tor zur Programmierung. Basic (und sein Nachfolger QBasic) war in den 80er Jahren bei Programmieranfänger beliebt und entwickelte sich in den 90er Jahren zu einem leistungsstarken professionellen Werkzeug. [Q]BASIC half vielen Programmieranfängern, eine Liebe zum Programmieren zu entwickeln. Diese Sprache stellte die grundlegende Lernplattform für die meisten heutigen professionellen Entwickler dar.

Das QB64-Projekt hat sich in den letzten zehn Jahren weiterentwickelt, um das magische und pädagogische Potenzial von BASIC aus seinen Wurzeln des 20. Jahrhunderts in die Moderne zu bringen. QB64 ist bereits im pädagogischen als auch im beruflichen Kontext im Einsatz und verfügt über eine aktive und hilfreiche Anwendergemeinschaft.

Im Gegensatz zu herkömmlichem BASIC- und QBasic-Code wird QB64 automatisch in Maschinencode kompiliert – was eine außergewöhnliche Leistung, eine einfache Verteilung und die Möglichkeit der Verknüpfung mit externen C/C++-Programmierbibliotheken sowie den dynamischen Windows-Bibliotheken ermöglicht. Kompatibel mit den meisten QBasic 4.5-Quellzeilen, fügt QB64 eine Reihe von Erweiterungen, wie OpenGL und andere moderne Funktionen hinzu und bietet somit eine Mischung aus klassischer und moderner Programmentwicklung.

EntwicklungBearbeiten

QB64 wurde ursprünglich mit QuickBASIC 4.5 kompiliert. Nach einer bedeutenden Entwicklung wurde Rob Galleon, der Entwickler, durch die Speicherbeschränkungen von QuickBASIC behindert und wechselte zu Microsoft Basic PDS 7.1, das diese Probleme für kurze Zeit löste. Nach Version 0.63 konnte sich QB64 selbst kompilieren, so dass die herkömmlichen Speicherbeschränkungen nicht mehr vorhanden waren.

Ein Entwicklungszweig des auf GitHub gehosteten Repository wird häufig mit Korrekturen und Verbesserungen aktualisiert, die schließlich zur nächsten stabilen Version werden. Die Entwicklungsbuilds werden auch über die offizielle Website für Benutzer zum Beta-Test angeboten.

SyntaxBearbeiten

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:

PRINT "Hello, World!"

Ein QB64-Beispiel für eine VGA-Speicheremulation

CLS
S$ = "Hello, World!"
DEF SEG = &HB800 'das Segment des Videospeichers setzen
FOR I = 1 TO LEN(S$)
    POKE 160 + (I - 1) * 2, ASC(MID$(S$, I, 1))
NEXT
DEF SEG 'auf das Standard-Segment zurücksetzen

Ein QB64-Beispiel und Audio-Dateien abzuspielen:

sound_effect& = _SNDOPEN("sound.wav") 'WAV, OGG oder MP3
_SNDPLAY sound_effect&

Ein QB64-Beispiel mit Bild-Dateien zu arbeiten:

SCREEN _NEWIMAGE(800, 600, 32) 'einen 800x600 Bildschirmausschnitt mit 32-bit Farben erstellen
imagename& = _LOADIMAGE("image__name.png") 'BMP, JPG, PNG, etc.
_PUTIMAGE (0, 0), imagename&
_FREEIMAGE imagename& 'zugewiesenen Speicher freigeben

Ein QB64-Beispiel für mehrere Timer:

t1 = _FREETIMER
t2 = _FREETIMER
ON TIMER(t1, 1) GOSUB Timer.Trap 'die Quellzeilen von Timer.Trap Sprungziel werden einmal in der Sekunde ausgeführt
ON TIMER(t2, .5) mySub 'QB64 kann auch eine Unter-Prozedur mit einem TIMER ausführen;
                       'in diesem Beispiel wird mySUB alle 500 Millisekunden aktiviert
'Aktiviert die TIMER
TIMER(t1) ON
TIMER(t2) ON
DO 'Dauerschleife, bis das Fenster geschlossen wird
    _LIMIT 1 'Die Schleife wird einmal pro Sekunde durchlaufen, um zuziehen, 
             ' dass die beiden TIMER unabhängig von einander laufen
LOOP

Timer.Trap:
PRINT "1s; ";
RETURN

SUB mySub
    PRINT "500ms; ";
END SUB

Erweiterungen zu QBasicBearbeiten

 
QB64 IDE Screenshot

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, eine eigene Bibliothek über den $INCLUDE Befehl zu inkludieren, genau wie bei QuickBASIC.

Vorteile von QB64Bearbeiten

  • QB64 unterstützt verschiedene Dateiformate und bietet auch Zugriff auf die Zwischenablage.
  • QB64 ermöglicht Zugriff auf 32-Bit-Grafikdateien (die beliebtesten Formate).
  • QB64 ermöglicht Zugriff auf mehrere Audioformate.
  • QB64 wird auf den meisten modernen Betriebssystemen unterstützt, so dass keine Emulation erforderlich ist.

KommandozeileBearbeiten

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

Abruf der SchalterBearbeiten

Aufruf der Schalter-Übersicht von QB64:

qb64 --help

Übersicht der SchalterBearbeiten

Allgemeiner Aufruf von qb64 über die Kommandozeile

qb64 [Schalter] <Datei>

Ü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-AufrufBearbeiten

Beispiel einer QB64-Übersetzung mittels Kommandozeile:

qb64 -x untitled.bas

Dieser Aufruf erzeugt die folgende Ausgabe auf der Kommandozeile:

QB64 Compiler V1.5

Beginning C++ output from QB64 code... first pass finished.

Translating code...

[..................................................] 100%

Compiling C++ code into executable...

Output: untitled

Zusätzliche ProgrammeBearbeiten

QB64 InFormBearbeiten

 
QB64 InForm Designer
 
QB64 InForm TestForm
 
QB64 InForm TestForm Ergebnis der Beispiel-Quellzeilen

InForm ist ein Rapid Application Development Werkzeug für QB64. Es besteht aus einer Bibliothek von grafischen Routinen und einem WYSIWYG-Editor, mit dem Sie Formulare entwerfen und den resultierenden Code exportieren können, um ein ereignisgesteuertes QB64-Programm zu generieren.

Im folgenden Beispiel-Code wird das Ereignis Click auf die Schaltfläche OK ausgewertet um damit den Text des Eingabefeldes dem Label zuzuweisen:

SUB __UI_Click (id AS LONG)
    SELECT CASE id
        CASE Form1

        CASE OKBT
            Caption(Label1) = Text(TextBox1)
        CASE Label1

        CASE TextBox1
    END SELECT
END SUB

QB64 vWATCH64Bearbeiten

 
QB64 vWATCH64 Debugger

vWATCH64 ist ein Echtzeit-Debug/Variable Watch-Dienstprogramm, das mit Programmen in QB64 geschrieben hilft. vWATCH64 generiert eine modifizierte Version Ihrer Quelldatei, die Haltepunkte und Echtzeit-Variablen-Uhr ermöglicht.

vWATCH64 ist kompatibel mit Windows, OS X und Linux.

BibliothekenBearbeiten

QB64 integriert FreeGLUT für seine Grafiken und Texte.

QB64 kann auch DLL-Bibliotheken für Windows-, C++- und SDL-Funktionen und -Anweisungen mit folgender Anweisung verwenden

Dynamik Link Library, kurz DLLBearbeiten

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.

DECLARE DYNAMIC LIBRARY "DLL-Dateiname ohne die Dateiendung .DLL"
END DECLARE

Ein Beispiel für den Zugriff auf eine DLL-Datei:

DECLARE DYNAMIC LIBRARY "playmidi32" 
    FUNCTION PlayMIDI& (filename AS STRING) 
END DECLARE 
' Hinweis: Der Dateiname muss mit einem CHR$(0) beendet werden.
result = PlayMIDI(".\Samples\test_midi.mid" + CHR$(0)) 
PRINT result

Die im Beispiel genutzte DLL-Datei in den Stamm-Ordner von Qb64 kopieren und aus dem heruntergeladen werden.[1]

C/C++-BibliothekenBearbeiten

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 abgelegt werden sollten und sind nach der Kompilierung eines Programms nicht mehr erforderlich.

DECLARE LIBRARY
END DECLARE

Ein Beispiel für die Deklaration auf C-Routinen:

DECLARE LIBRARY 
    'ctime.h 
    FUNCTION clock () 'arithmetic type elapsed processor representing time. 
    FUNCTION difftime# (BYVAL time2 AS _UNSIGNED LONG, BYVAL time1 AS _UNSIGNED LONG) 'seconds between time2 and time1
END DECLARE

EinzelnachweiseBearbeiten

  1. PlayMidi32.dll, auf qb64.org

WeblinksBearbeiten

Wikibooks: Quick Basic – Lern- und Lehrmaterialien