BASIC-SHELL: Übersichtlicher Zugriff auf Interpreter und Compiler

Über diese BASIC-Shell kann man auf einfache Art und Weise den GFA-Interpreter und -Compiler benutzen. Man erspart sich das lästige Suchen im Inhaltsverzeichnis und kann so auf Tastendruck das gewünschte Programm laden und starten. Natürlich funktioniert das auch mit anderen Programmen wie in unserem Beispiel das OMIKRON-BASIC.

Das Programm besteht im wesentlichen aus vier Teilen. Der erste Teil Zeilennummer 1-7) trifft die wichtigsten Vorbereitungen für das gesamte Programm. VOID FRE(O) erlaubt es dem Compiler, einen besonders effektiven Kode zu produzieren -wie auch im GFA-BASIC-Handbuch auf Seite F 34 beschrieben. Dieser Befehl hat für das Programm ansonsten keine Bedeutung. Wichtiger ist hingegen die Zeile 2, die 10000 Bytes für das Programm reserviert und dadurch dafür sorgt, daß es nicht selber durch die gestarteten Programme zerstört wird.

Die Tex$()-Variable hat eine zentrale Rolle im Programm. Sie enthält neben dem Text für den Monitor GFA_BASIC { Editor...}) standardmäßig eine “0” für ein existierendes Programm (Näheres im 3. Teil) und den Dateinamen inklusive des Pfades, da von verschiedenen Laufwerken (A und O) geladen wird. Diese eine Variable enthält also drei Variablen. Das habe ich so gelöst, damit nicht unnötig viele Variablenfelder aufgebaut werden müssen.

Der zweite Teil (Zeilennummern 8-14 und 37-39) sorgt für den Bildschirmaufbau, also den großen Kasten in der Mitte mit dem Programmnamen “BASIC_SHELL” und dem fünften Menüpunkt, der Beendigung des Programmes, denn dieser ist immer anwählbar.

Der dritte Teil ist mit im zweiten eingebaut (Zeilennummer 25-36). Hier werden die Programmnamen aufgelistet und gleichzeitig kontrolliert, ob das entsprechende Programm überhaupt anwählbar ist, d.h. ob sich die richtige Diskette im Laufwerk befindet. Dieses wird durch den Befehl EXIST(“Dateiname”) (s. GFA-Handbuch Anhang A) ermöglicht. Ist das Programm nicht auf der Diskette, ist also “IF NOT EXIST(...) THEN” wahr, wird die Textausgabe auf hell (Zeile 27) und die Teilvariable von Tex$() von “0” auf “1” geändert (Zeile 28). Ist das Programm vorhanden, wird die Teilvariable von Tex$() auf “0” gesetzt. Das 24. Zeichen der Variablen Tex$() gibt also Auskunft darüber, ob die Datei geladen und gestartet werden kann.

Im vierten und letzten Teil kann man das Programm auswählen, mit dem man gerne arbeiten möchte. Dazu muß man die Variable 1$ löschen (Zeile 41) und warten, bis eine Taste gedrückt wird (Zeile 42-44). Der Inhalt der Taste ist 1$ bzw. der Wert (Zahl) in 1% (Zeile 45).

Ich habe mich absichtlich auf eine einfache Tastatureingabe beschränkt, da das Programm selber nicht zu kompliziert werden sollte, und dieses für diesen Zweck voll und ganz genügt. Darum habe ich auch die Maus in Zeile 9 ausgeschaltet, damit der Pfeil nicht irritiert.

Falls eine “5” gedrückt wird, erfolgt der Abbruch des Programms. (Zeile 46-48). Wenn eine ungültige Taste gedrückt wird, also ein Buchstabe oder Sonderzeichen, eine “0” oder eine Zahl größer als fünf, wird wieder auf eine neue Tastatureingabe gewartet.

Ist jetzt eine Zahl zwischen “1” und “4" gedrückt worden, kommt wieder das 24. Zeichen zur Geltung. Ist es gleich “1”, also Datei nicht vorhanden (Zeile 52), wird kein Programm gestartet, sondern es wird auf eine neue Tastatureingabe gewartet (GOTO Starten_2). Mit IF BIOS(9,0)>0 THEN wird gleichzeitig noch überprüft, ob nicht zwischenzeitlich die Diskette gewechselt wurde. Wenn ja, dann muß der Bildschirm neu aufgebaut und das 24. Zeichen in Tex$() korrigiert werden, d.h. prüfen, ob die Dateien noch immer auf einer Diskette im Laufwerk sind (Zeile 54 GOTO star-ten_l).

Ist jetzt ein Programmstart möglich, wird dieser in Zeile 60 durch den Befehl EXEC 0,"Dateiname”,””,”” erledigt.

EXEC flg,nam,cmd,env: “flg” kann “0” oder “3” sein. In diesem Programm ist jedoch nur “0” sinnvoll, da das Programm nicht nur geladen (flg=3), sondern auch gestartet werden soll, “nam” ist der Dateiname “cmd” ist eine zu übergebende Kommandozeile, auf die im Normalfall verzichtet werden kann; daher ein Leerstring “”. “env” ist der Environment-String, der jedoch auch hier unwichtig ist.

Lars Reinirkens

Listing für die Basic-Shell

Void Fre(0)
Reserve 10000 
Dim Tex$(3)
Tex$(0)="GFA_BASIC { Editor... }0A:\GFABASIC.PRG" 
Tex$(1)="GFA_BASIC { Compiler. }0A:\GFA_BCOM.PRG" 
Tex$(2)="GFA_BASIC { Run_only. }0A:\GFABASRO.PRG"
Tex$(3)="OMIKRON_Interpreter.___OO:\OM-BASIC.PRG"
Starten_1:
Hidem
Cls
Deffill 1,2,4
Box 1,1, 638,398
Box 2,2, 637,397
Box 4,4, 635,395
Pbox 7,7,632,392
Deffill 1,0,0
Pbox 200,100,439,299
Graphmode 2
Deftext 1,17,2700,6
Text 445,110,"(c) by L.REINIRKENS"
Deftext 0,16,0,32
Text 220,90,"BASIC_SHELL"
Graphmode 0 
Deftext 1,0,0,13 
For T%=0 To 3
    If Not Exist(Right$(Tex$(T%>,15)) Then 
        Deftext 1,2,0,13
        Tex$(T%)=Left$(Tex$(T%),23)+"1"+Right$(Tex$(T%),15)
    Else
        Tex$(T%)=Left$(Tex$(T%),23)+"0M+Right$(Tex$(T%),15)
    Endif
    Box 210,110+T%*40,230,130+T%*40 
    Text 217,125+T%*40,T%+1 
    Text 240,125+T%*40,Left$(Tex$(T%),23) 
    Deftext 1,0,0,13 
Next T%
Box 210,270,230,290 
Text 217,285,5
Text 240,285,"E N D E {zum Desktop}" 
Starten_2:
I$=""
While I$=""
    I$=Inkey$
Wend
I%=Val(I$)
If I%=5 
    End 
Endif
If I%<1 Or I%>4 Then 
    Goto Starten_2 
Else
    If Val(Mid$(Tex$(I%-1),24,1))=1 Then 
        If Bios(9,0)>0 Then 
            Goto Starten_1 
        Else
            Goto Starten_2 
        Endif 
    Else 
        Showm
        Exec 0,Right$(Tex$(I%-1),15),"" 
    Endif 
Endif
Goto Starten_1


Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]