BASIC-Kompaktor

Aus C64-Wiki
Wechseln zu: Navigation, Suche

Ein Computerprogramm zur Beschleunigung und Verkleinerung von BASIC-Programmen, ohne dass dabei der Quellcode des BASIC-Programms strukturell neu geschrieben oder gar kompiliert wird.

Funktion[Bearbeiten]

Der Hintergedanke solch eines BASIC-Kompaktors ist es, dass aus einem ausführlichen BASIC-Programm (siehe Beispiel) durch Anwendung folgender Kompaktierungsmethoden:

  • Entfernen überflüssiger BASIC-Befehle wie END, REM oder LET.
  • Abkürzung überlanger Variablennamen.
  • Auffüllung der BASIC-Zeilen durch Nutzung von Befehlsabkürzungen bzw. Tokens und Entfernung von überflüssigen Leerzeichen oder mehrfacher Trennzeichen (Doppelpunkt) zu einer Gesamtlänge bis zu 255 Zeichen.
  • Reduzierung der Anzahl von BASIC-Zeilen (siehe Punkt zuvor) und deren Neuordnung mit einhergehender Anpassung der Sprungziele in den Befehlen GOTO, GOSUB (auch bei der ON-Variante) und THEN.

Der kompaktierte Quellcode hat die Vorteile

  • Platzersparnis,
  • etwas schnellere Ausführungszeit,

aber auch die Nachteile

  • Lesbarkeit des Programms und eine Fehlersuche darin ist erschwert,
  • Programmänderungen sind nur noch bedingt möglich.

Beispiel[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]