BASIC-Kompaktor
Aus C64-Wiki
Zur Navigation springenZur Suche springenEin 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 | Quelltext 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 | 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 der Help Plus-Erweiterung (Fa. Print-Technik)