Linux ist ein wahres Paradies für Programmierer, denn nahezu jede aktuelle oder in der Vergangenheit verwendete Programmiersprache gibt es auch für das freie Betriebssystem. Im Auftakt zu unserer neuen Serie über Programmiersprachen schauen wir auf einen echten Klassiker: BASIC.
Wer schon länger mit Computern arbeitet, erinnert sich an die Zeit der Home-Computer: Commodore C64, Sinclair Spectrum oder Schneider CPC hießen die Geräte, die in der Regel an einen Fernseher angeschlossen wurden und den kompletten Rechner in der Tastatur unterbrachten. Was all diese Home-Computer gemeinsam hatten, war das Booten eines simplen Betriebssystems mit einem BASIC-Interpreter; das klassische “Hello-World”-Programm war in BASIC schnell geschrieben, und die nötigen Zeilen beschränkten sich auf
10 PRINT "Hello World" 20 GOTO 10 run
Um die alten Tage in Erinnerung zu rufen oder einfach aus Interesse an einer leicht zu erlernenden Sprache ein wenig mit BASIC zu experimentieren, bietet sich unter Linux (und anderen Unix-Plattformen) das bwBASIC-System (http://www.bwbasic.com) an. bwBASIC ist ein BASIC-Interpreter, der als Shell verwendet werden kann: Wenn Sie bwBASIC starten, können Sie weiterhin externe Programme wie ls oder vi aufrufen, als würden Sie in einer Bash arbeiten; zusätzlich lassen sich aber Skripte erstellen, die den Syntaxregeln von BASIC folgen.
Woher nehmen?
SuSE Linux enthält in allen Versionen bwBASIC 2.20, und dieses Paket lässt sich einfach über den rpm-Befehl installieren. Anwender von Red Hat und Mandrake Linux können das RPM-Paket unter ftp://ftp.uwsg.indiana.edu/linux/redhat/contrib/libc5/i386/bwbasic-2.20pl1-1.i386.rpm verwenden. Nach der Installation zeigt ein ldd-Aufruf, dass bwBASIC sehr genügsam ist, was die benötigten Bibliotheken angeht:
[root@dual basic]# ldd /usr/bin/bwbasic libm.so.5 => /usr/i486-linux-libc5/lib/libm.so.5 (0x40010000) libc.so.5 => /usr/i486-linux-libc5/lib/libc.so.5 (0x40018000)
Außer libc und libm wird hier nichts benötigt, die beiden Standard-Bibliotheken müssen allerdings in der veralteten Version 5 vorliegen (aktuell ist libc6, auch glibc2 genannt).
Lieber aus den Sourcen?
bwBASIC ist auch im Quellcode verfügbar. Die aktuellste, aber vom Hersteller nicht unterstützte Version findet sich unter ftp://ftp.rahul.net/pub/rhn/bwbasic-2.20.tar.Z. Diese ließen sich allerdings unter Red Hat Linux 6.0 und 6.2 sowie SuSE Linux 7.1 nicht übersetzen, so dass wir von einer Verwendung der Sourcen abraten.
BASIC-Grundlagen
BASIC ist eine sehr alte Programmiersprache, die für den Einsatz auf schmalbrüstigen Maschinen mit teilweise nur 16 KB RAM entwickelt wurde. Dementsprechend wartet sie nicht mit Features wie Pointern oder Objekt-Orientierung auf. Ein BASIC-Programm besteht aus Programmzeilen, die mit einer Zeilennummer beginnen; es wird dann in der Reihenfolge dieser Zeilennummern abgearbeitet. Während Sie prinzipiell wie bei Shell-Skripten ein BASIC-Programm im Editor schreiben, als meinprogramm.bas abspeichern und dann von der Kommandozeile direkt über
bwbasic meinprogramm.bas
aufrufen können, erlaubt der bwBASIC-Interpreter auch die interaktive Eingabe eines Programmes; Sie können also am “bwBASIC:”-Prompt einfach Programmzeilen der Form “10 Befehl” eingeben. Ein auf diese Weise erstelltes Programm kann dann jederzeit über den Befehl run ausgeführt werden. Mit dem Befehl save “programm.bas” kann es für spätere Verwendung im aktuellen Verzeichnis gespeichert und mit load “programm.bas” wieder geladen werden.
Variablen
BASIC verwendet unterschiedliche Schreibweisen für numerische und Text-Variablen: Zahlenwerte (egal ob Integer oder Real) werden in Variablen mit einfachen Namen (a, meinevariable etc.) gespeichert, Text-Strings wird zur Unterscheidung das Dollar-Zeichen angefügt (eingabe$, ausgabe$). Eine Deklaration von Variablen ist zwar möglich, in der Regel aber nicht nötig – lediglich wenn Sie Arrays verwenden wollen, sind diese vorher einzurichten: so definiert etwa
dim feld$(20)
ein String-Array mit 20 Einträgen: Diese können über feld$(1) bis feld$(20) angesprochen werden. Variablenzuweisungen erfolgen über einfache Kommandos der Form summe=a+b. BASIC-Befehle werden übrigens nicht mit einem Semikolon oder sonstigem Zeichen abgeschlossen; es kann aber ein Befehls-Trenner “:” verwendet werden, um mehrere Befehle in einer Zeile unterzubringen, etwa: summe=a+b: print summe/100.
Euro-Rechner
Mit BASIC lassen sich schnell zum Beispiel kleinere Rechenaufgaben lösen: Das folgende Beispielprogramm fragt nach einem Betrag in EURO und gibt den entsprechenden Wert in DM aus:
10 print "Wechselkurs" 20 print "———--" 30 dmeuro=1.95583 40 print "Geben Sie den Betrag in Euro ein: "; 50 input "",euro 60 if euro=0 then goto 100 70 dm=euro*dmeuro 80 print "In DM sind das: ";dm 90 goto 40 100 end
Durch die Abfrage, ob ein Betrag von 0 eingegeben wurde, wird eine Abbruchbedingung geprüft: BASIC springt zur Zeile 100, falls der Wert 0 ist; dann wird das Programm beendet. Anderenfalls wird immer wieder ein neuer Wert erfragt, da am Ende der Berechnung über den goto-Befehl wieder zur Befehlszeile zurückgesprungen wird, die die Werteingabe einleitet. Ein Programmlauf sieht dann folgendermaßen aus:
bwBASIC: run Wechselkurs ———– Geben Sie den Betrag in Euro ein: 150 In DM sind das: 293.3745000 Geben Sie den Betrag in Euro ein: 20 In DM sind das: 39.1166000 Geben Sie den Betrag in Euro ein: 0 bwBASIC:
Auch Schleifen lassen sich in BASIC leicht programmieren. Wahlweise können Sie mit Befehlen der Form
10 for i=1 to 10 20 print i, i*3, i*10 30 next
eine Variable (hier i) der Reihe nach alle Werte vom Start- zum Endwert durchlaufen lassen, oder Sie verwenden Schleifen, deren Abbruch von einer Bedingung abhängt: Dies sind while-Schleifen der Form
10 wert=-1 20 while wert<>0 30 print "Wert eingeben, 0 fuer Ende: "; 40 input "",wert 50 print "Wert ist: ";wert 60 wend
In unserem Euro-DM-Rechner hätten wir statt des GOTO-Sprungs also auch eine WHILE-Schleife verwenden können: Dank WHILE-Schleifen kann auf die explizite Angabe eines Sprungziels verzichtet werden. Wenn Sie Ihr BASIC-Programm in einer Datei ablegen, können Sie übrigens ganz auf die Vergabe von Zeilennummern verzichten: BASIC interpretiert die Befehle dann in der Reihenfolge, wie sie in der Datei auftauchen. Das obige Programm wird dann zur folgenden Version, die fast schon wie ein Shell-Skript aussieht:
wert=-1 while wert<>0 print "Wert eingeben, 0 fuer Ende: "; input "",wert print "Wert ist: ";wert wend
Kurzreferenz
Eine etwas magere Kurzreferenz zu den Befehlen von bwBASIC bietet der Hersteller unter http://www.bwbasic.com/extended.html; für einen ausführlicheren Einstieg in BASIC sind zum Beispiel die folgenden Seiten interessant:
- http://www.antonis.purespace.de/adok/start.htm: QBasic Tutorial
- http://www.antonis.de/qbkoch10.htm: QBasic “Kochbuch” Diese Seiten beziehen sich auf QBasic, einen BASIC-Dialekt von Microsoft, deren erstes Produkt überhaupt ein BASIC-Interpreter gewesen ist; QBasic wurde erstmals mit MS-DOS 5.0 ausgeliefert. (Informationen zur Geschichte der MS-BASIC-Dialekte finden Sie unter http://www.emsps.com/oldtools/msbasv.htm.) QBasic und bwBASIC sind sich recht ähnlich, allerdings werden nicht alle Programme auch mit bwBASIC funktionieren. Nun Viel Spaß bei ersten Schritten in BASIC.





