PBXB64 unterstützt einen wachsenden PowerBASIC-kompatiblen Dialekt. V12+ fügt Typsuffixe, Literalpräfixe, #DEFINE/#COMPILE, dynamische Arrays (DIM/REDIM/ERASE), OPTIONALE Parameter, SELECT CASE mit IS/TO, ON GOTO/GOSUB, DATA/READ/RESTORE, CODEPTR/FUNCPTR und über 60 integrierte Funktionen hinzu.
Referenzseiten
Diese Seite ist die Uebersicht zum Frontend. Die verlinkten Einzelseiten enthalten Syntax, getestete Beispiele, Status und Grenzen fuer die jeweiligen Befehle oder Sprachkonstrukte.
- Kontrollfluss
- Deklarationen
- Variablen und Bereich
- Eingabe/Ausgabe
- Operatoren
- String-Funktionen
- Mathematik-Funktionen
- Fehlerbehandlung
Programm-Einstiegspunkt
FUNCTION PBMAIN() AS LONG
FUNCTION = 0 ' Return code
END FUNCTION
Variablendeklarationen
LOCAL x AS LONG ' Stack variable (explicit type) LOCAL s AS STRING ' Heap-managed string LOCAL f AS SINGLE ' 32-bit float DIM arr(10) AS LONG ' Static array (0-10) GLOBAL g AS LONG ' Module-level global ' Type suffixes (PBWin style) LOCAL intvar% ' INTEGER via % suffix LOCAL longvar& ' LONG via & suffix LOCAL sngvar! ' SINGLE via ! suffix LOCAL dblvar# ' DOUBLE via # suffix LOCAL strvar$ ' STRING via $ suffix LOCAL curvar## ' CURRENCY via ## suffix LOCAL cuxvar?# ' CURRENCYX via ?# suffix LOCAL extvar?? ' EXTENDED via ?? suffix
Literale Präfixe
x = &HFF ' Hex: 255 x = &O77 ' Octal: 63 x = &B1010 ' Binary: 10
Entspricht
%WIN_WIDTH = 800 ' Integer equate %MAX_ITEMS = 100 $APP_NAME = "MyApp" ' String equate ' Usage in expressions: w = %WIN_WIDTH n = %MAX_ITEMS
Zuweisung und Betreiber
x = 42 s = "Hello World" x = x + 1 y = a * b - c / d z = (x > 0) AND (y < 10)
PRINT-Anweisung
PRINT "Hello" PRINT "A"; "B" ' Semicolon: no separator PRINT "A", "B" ' Comma: tab stop (~8 chars) PRINT TAB(4); "D" ' TAB(n): pad with spaces
Kontrollfluss
' IF/THEN/ELSE
IF x > 0 THEN
PRINT "positive"
ELSE
PRINT "negative"
END IF
' FOR/NEXT
FOR i = 1 TO 10 STEP 2
PRINT i
NEXT i
' WHILE/WEND
WHILE x < 100
x = x * 2
WEND
WinAPI-Integration
#INCLUDE "windows_core.pbi"
FUNCTION PBMAIN() AS LONG
CALL MessageBoxA(0, "Hello", "PBXB64", 0)
CALL Sleep(1000)
FUNCTION = 0
END FUNCTION
String-Operationen (V7/V8)
LOCAL s AS STRING, t AS STRING s = "Hello" t = s + " World" ' Concatenation s = "" ' Reassignment frees old heap string automatically s = LEFT$(t, 5) ' Built-in string functions
Makros (V9+)
PBXB64 unterstützt mehrzeilige MACRO-Definitionen mit Parameterersetzung, lokalen Labels und MACROTEMP-Variablen.
Mehrzeiliges MAKRO
MACRO AddEm(a, b, result)
result = a + b
END MACRO
' Usage:
AddEm x, y, z ' Expands to: z = x + y
MACROTEMP (lokale Variablen)
MACROTEMP deklariert Variablen, die pro Erweiterung eindeutige Namen erhalten, wodurch Kollisionen verhindert werden.
MACRO DoSwap(p, q)
MACROTEMP t
LOCAL t AS LONG
t = p : p = q : q = t
END MACRO
DoSwap x, y ' t_1 = x; x = y; y = t_1
DoSwap a, b ' t_2 = a; a = b; b = t_2
Lokale Etiketten
Beschriftungen in Makros werden automatisch entstellt, um Konflikte zwischen Erweiterungen zu vermeiden.
MACRO CheckVal(n)
IF n > 0 THEN GOTO Done
n = 0
Done:
END MACRO
CheckVal 42 ' goto Done_1 ... Done_1:
CheckVal -1 ' goto Done_2 ... Done_2:
%PARAMCOUNT
Gibt die Anzahl der an das Makro übergebenen Argumente zurück.
MACRO LogArgs(a, b, c)
x = %PARAMCOUNT ' x = 3
END MACRO
Präprozessoranweisungen (V12+)
#COMPILE EXE ' Output type (EXE/DLL/CONSOLE)
#DEFINE MAX_SIZE 100 ' Text replacement (resolved in expressions)
#UNDEF MAX_SIZE ' Remove a #DEFINE
#INCLUDE ONCE "file.pbi" ' Include with guard against re-inclusion
' Conditional compilation with comparison operators
%VERSION = 5
#IF %VERSION >= 3
PRINT "Version 3+"
#ELSEIF %VERSION = 2
PRINT "Version 2"
#ELSE
PRINT "Version 1"
#ENDIF
Dynamische Arrays (V12+)
DIM arr(5) AS LONG ' Allocate 5-element heap array arr(2) = 100 ' Write to element x = arr(2) ' Read from element REDIM arr(10) AS LONG ' Resize (discards old data) REDIM PRESERVE arr(20) ' Resize (preserves old data) ERASE arr() ' Free heap buffer ' Bounds n = LBOUND(arr()) ' Lower bound (usually 0) n = UBOUND(arr()) ' Upper bound = element count - 1
OPTIONALE Parameter (V12+)
FUNCTION add(a AS LONG, OPTIONAL b AS LONG) AS LONG
FUNCTION = a + b ' b defaults to 0 if not passed
END FUNCTION
result = add(10) ' b = 0
result = add(10, 20) ' b = 20
ON GOTO / ON GOSUB (V12+)
ON choice GOTO lab1, lab2, lab3 ' Computed goto ON choice GOSUB sub1, sub2, sub3 ' Computed gosub DATA 1, 2, 3, 4, 5 ' Data block READ a, b, c ' Read from data RESTORE ' Reset to start of data
Verschachtelung und Grenzen
- Maximale Verschachtelungstiefe: 16 Ebenen
- Makros werden vor dem Hauptdurchlauf vorab gescannt (Weiterleitungsreferenzen OK)
- Bei der Parameterersetzung wird an der Wortgrenze die Groß-/Kleinschreibung nicht beachtet
MACRO name(x) = expressiongibt ein C ab#defineund wird auch unterstützt.Wide-Integer-Typen (V8+)
PBXB64 unterstützt native 128-Bit-, 256-Bit- und 512-Bit-Ganzzahlen mit und ohne Vorzeichen mit Inline-x64-Arithmetik – keine Laufzeitbibliotheksaufrufe.
LOCAL a AS INT128 ' 128-bit signed LOCAL b AS I128 ' Alias for INT128 LOCAL c AS UINT128 ' 128-bit unsigned LOCAL d AS U128 ' Alias for UINT128 LOCAL e AS INT256 ' 256-bit signed LOCAL f AS I256 ' Alias for INT256 LOCAL g AS UINT256 ' 256-bit unsigned LOCAL h AS U256 ' Alias for UINT256 LOCAL i AS INT512 ' 512-bit signed LOCAL j AS I512 ' Alias for INT512 LOCAL k AS UINT512 ' 512-bit unsigned LOCAL l AS U512 ' Alias for UINT512 ' All standard arithmetic operators are supported: a = 1000000000000000000000 ' 10^21 b = a + a ' 2*10^21 c = a * b ' 2*10^42 (fits in 128 bits)
MODUL-System (V8+)
Kapseln Sie Code mit Sichtbarkeitskontrolle in benannte Bereiche.
MODULE MyModule
' Private by default — only visible inside this module
FUNCTION PrivateHelper() AS LONG
FUNCTION = 42
END FUNCTION
' Public — callable from outside via module prefix
PUBLIC FUNCTION PublicFunc() AS LONG
FUNCTION = PrivateHelper()
END FUNCTION
' Module-scoped equates and globals
%MY_CONST = 100
GLOBAL gCounter AS LONG
END MODULE
' Call from another module or the main program:
FUNCTION PBMAIN() AS LONG
result = MyModule.PublicFunc() ' OK: PUBLIC
' result = MyModule.PrivateHelper() ' ERROR: PRIVATE
FUNCTION = result
END FUNCTION
Native H-Lib-Container (V8+)
23 Containerfamilien mit automatischer Initialisierung, Methodenverteilungssyntax und UDT-Nutzlastunterstützung.
LOCAL q AS LNQUE ' FIFO queue of LONGs q = q.New q.Push 10 q.Push 20 PRINT q.Pop ' 10 q.Final LOCAL h AS LNHSH ' Hash table (LONG key, LONG value) h = h.New h.Set(1, 100) PRINT h.Get(1) ' 100 h.Final ' Subscript access: LOCAL a AS LNARR a = a.New a[0] = 42 PRINT a[0] ' 42 a.Final
LIKE/ALIKE-Operator (V8+)
Mustervergleich mit Platzhaltern und Zeichenklassen.
IF "Hello" LIKE "H*" THEN ' true: * matches any sequence IF "abc" LIKE "a[bc]c" THEN ' true: bracket list IF "abc" LIKE "a[!b]c" THEN ' false: complemented class IF "abc" LIKE "a[a-z]c" THEN ' true: character range IF "test.txt" LIKE "*.txt" THEN ' true: wildcard extension ' ALIKE is always case-insensitive: IF "Hello" ALIKE "h*" THEN ' true
Qualifizierte V15-Erweiterungen
- Native DLL-/Export-Ausgabe und Import-Library-Erzeugung sind durch fokussierte Linker-Spuren belegt.
#COMPILE SLLbleibt eine getrennte native Archiv-Kompatibilitätsoberfläche. - Die StringX-Funktionen
COMPARE,COMPARE$,LIKE$,MATCH$,REGEX$,REGEXREPLACE$,FIND$,FINDREV$,REPLACES$undREMOVES$besitzen positive und negative Tests. REGEXPRundREGREPLverwenden die eingebettete REGEXPR-v1.25.0-Engine über die PB-Dialektschicht.TIMEBASEunterstützt Abfrage und Zuweisung.ROTATEbesitzt getestete Ausdrucks- und Anweisungsformen mit strikten Fehlerdiagnosen.- Fokussierte native Abdeckung umfasst TAB-Steuerelemente, begrenzte DIALOG-/GUI-Operationen, XPRINT/LPRINT-Druckerfunktionen, Preview-Callbacks und SAPI-gestütztes
SAY. - COM/OOP-Abdeckung umfasst Vererbung/Override, ausgewählte echte Automation-Server-Proben, BYREF-Ausgaben,
OBJRESULT$und threadlokaleIDISPINFO/EXCEPINFO-Details. - Qualifizierte Metaanweisungen erzeugen Code oder Konfiguration wie dokumentiert. Nicht unterstützte Typbibliotheks-Ausgabe bricht mit klarer Diagnose ab.
Bekannte Einschränkungen (V15)
- Vollständige WinAPI .pbi-Include-Bibliothek verfügbar in
includes/(1.272 Header) - DLL-Ausgabe mit
#COMPILE DLLund exportierten PB-Funktionen ist fuer den getesteten nativen PE-/Exporttabellen-Teil verfuegbar;#COMPILE SLLbleibt offen - Die vollständige PowerBASIC-Kompatibilität ist noch in Arbeit
