BASIC-Kompaktor
Aus C64-Wiki
Zur Navigation springenZur Suche springenEin BASIC-Kompaktor ist ein Computerprogramm zur Verkleinerung von BASIC-Programmen. Der Quellcode des BASIC-Programms wird dabei nicht strukturell neu geschrieben oder kompiliert. Als weiterer Effekt ergibt sich bei BASIC V2 eine leichte Beschleunigung.
Funktion[Bearbeiten | Quelltext bearbeiten]
Ein BASIC-Kompaktor kann unter anderem die folgenden Kompaktierungsmethoden anwenden (siehe Beispiel):
- Entfernen überflüssiger BASIC-Befehle wie END, REM oder LET.
- Entfernen von Zeichen, die im Anschluss von Zeilennummern bei GOTO, GOSUB und THEN zu finden sind, aber nicht mehr zur Zeilennummer gehören und daher vom Interpreter überlesen werden.
- Abkürzung überlanger Variablennamen (länger als zwei Zeichen).
- Entfernung überflüssiger Leerzeichen oder mehrfacher Trennzeichen (Doppelpunkt).
- Reduzierung der Anzahl von BASIC-Zeilen durch das Verschmelzen mehrerer separater Zeilen in eine möglichst lange Zeile mit einer Gesamtlänge bis zu 255 Zeichen (wobei hier bereits tokenisierte Darstellung einer BASIC-Zeile zugrunde liegt).
- Renumber der Zeilen, um kürzere Zeilennummern zu erhalten, mit Anpassung der Sprungziele in den Befehlen GOTO, GOSUB (auch bei der ON-Variante) und THEN.
Der kompaktierte Quellcode hat die Vorteile
- Platzersparnis,
- leicht beschleunigte Ausführung, da der Interpreter weniger Daten lesen muss
aber auch die Nachteile
- Lesbarkeit des Programms und eine Fehlersuche darin ist erschwert,
- Programmänderungen sind nur noch bedingt möglich (da im Wesentlichen der BASIC-Editor das bearbeiten von 255 Zeichen langen Zeilen nicht vorsieht).
Allerdings lassen sich große Programme ohne Verlust der Lesbarkeit z.B. in Paradoxon-Basic erstellen und bearbeiten, und mit Compilern gibt es wesentlich größere Geschwindigkeitsgewinne als durch Kompaktierung.
Beispiel[Bearbeiten | Quelltext bearbeiten]
Ausgangsprogramm:
0 REM Wuerfelspiel fuers C64-Wiki (W) by Jodigi 2007 10 POKE 53280, 0: POKE 53281, 0: POKE 646, 15 : REM Farben setzen 20 PRINT CHR$(147) ; "Mein 1. BASIC-Programm" : REM Bildschirm löschen 30 LET COMMODORE$ = "C64": REM Variable COMMODORE definieren 40 PRINT "Hallo, ich bin der " ; COMMODORE$ ; " und wie heisst Du? "; 50 INPUT NAME$: REM Abfrage des Benutzers in NAME$ 60 PRINT "Hallo" ; NAME$ : REM NAME$-Ausgabe 70 FOR X=0 TO 255 : REM Bildschirmflackern 80 POKE 53280,X 90 NEXT X 100 POKE 53280,6 : REM Farbaenderung fuer Wuerfelspiel 110 PRINT : PRINT "Wie waere es mit einem Wuerfelspiel? (Y/N)" 120 GET ABFRAGE$: IF ABFRAGE$="" THEN GOTO 120 : REM Tastaturabfrage 130 IF ABFRAGE$ <> "Y" THEN GOTO 230 : REM Ende wenn keine Taste Y 140 LET WUERFEL = INT ( RND (1) *6 ) + 1 : REM 1. Wuerfel 150 PRINT "Ich habe"; WUERFEL : REM Ausgabe 1. Wuerfel 160 LET W2 = INT ( RND (1) *6 ) + 1 : REM 2. Wuerfel 170 PRINT "Du hast"; W2 : REM Ausgabe 2. Wuerfel 180 POKE 53280,15 : REM Farbaenderung fuer Spielende und Gewinnerausgabe 190 IF WUERFEL = W2 THEN PRINT "Ungleich - Wir wuerfeln nochmal...": GOTO 130 200 IF WUERFEL > W2 THEN PRINT "Ich gewinne *Freude*": GOTO 220 210 PRINT "Du gewinnst" 220 PRINT "Wollen wir nochmal wuerfeln? ": GOTO 120 : REM Erneutes Wuerfeln? 230 END
Nach einer Kompaktierung:
10 POKE53280,0:POKE53281,0:POKE646,15:PRINTCHR$(147)"Mein 1. BASIC-Programm":CO$="C64" 11 PRINT"Hallo, ich bin der "CO$" und wie heisst Du? ";:INPUTNA$:PRINT"Hallo"NA$:FORX=0TO255:POKE53280,X 12 NEXT:POKE53280,6:PRINT:PRINT"Wie waere es mit einem Wuerfelspiel? (Y/N)" 13 GETAB$:IFAB$=""THEN13 14 IFAB$<>"Y"THENEND 15 WU=INT(RND(1)*6)+1:PRINT"Ich habe"WU:W2=INT(RND(1)*6)+1:PRINT"Du hast"W2:POKE53280,15 16 IFWU=W2THENPRINT"Ungleich - Wir wuerfeln nochmal...":GOTO15 17 IFWU>W2THENPRINT"Ich gewinne *Freude*":GOTO19 18 PRINT"Du gewinnst" 19 PRINT"Wollen wir nochmal wuerfeln? ":GOTO13
Implementierungen[Bearbeiten | Quelltext bearbeiten]
- Integriertes Kommando (#C) der Help Plus-Erweiterung (Fa. Print-Technik).
- Zeilenmampfer:
- CSDb- Release Nr. 163164
- Disk 64 Ausgabe 5/1988