home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
utility
/
misc
/
master
/
source
/
system.lst
< prev
next >
Wrap
File List
|
1989-04-04
|
3KB
|
88 lines
' ----------------------------------------------------------------------------
' Beispielprogramm zum Test des Shellaufrufs für GFA Basic 3.0
'
DO
PRINT "Beispielroutine zum Shellaufruf"
INPUT "Gewünschtes Kommando oder ENDE für Programmstop: ",a$
EXIT IF a$="ENDE" OR a$="Ende" OR a$="ende"
RESERVE 2560 ! Minimalspeicher zurückbehalten, den Rest freigeben
exit_status=@system_call(a$)
RESERVE ! wieder allen Speicher holen
PRINT "Systemaufruf mit ";exit_status;" beendet."
LOOP
END
'
'
' Die eigentliche Schnittstelle zur Shell für GFA-BASIC 3.0
'
FUNCTION system_call(shell_cmd$)
' Eingabe: Ein String mit dem auzuführenden Kommando
' Ausgabe: -999 fuer nicht ausgeführte Kommandos oder
' der Rückgabewert der aufgerufenen Shell
'
'
LOCAL exit_code% ! Der Rückgabewert
LOCAL shell_p% ! Adresse der Shell
LOCAL shelltyp% ! Art der Shell: 0=Keine Shell
' 1=Unbekannte Shell
' 2=GULAM
' 3=MASTER
'
' Zeiger auf die Shell aus der entsprechenden Systemvariablen holen
shell_p%=LPEEK(&H4F6)
'
' Zunächst die Art der eventuell vorhandenen Shell bestimmen
IF shell_p%=0 THEN
shelltyp%=0 ! Keine Shell vorhanden
ELSE
shelltyp%=1 ! Irgendeine Shell vorhanden
IF LPEEK(shell_p%-10)=&H420135 THEN ! dann genauer unterscheiden:
shelltyp=2 ! Die Shell GULAM
ELSE
IF LPEEK(shell_p%-4)=&HCDCEC5D2 OR LPEEK(shell_p%-8)=&H4D415354 THEN
shelltyp=3 ! Die Shell MASTER
ENDIF
ENDIF
ENDIF
'
' Nur wenn GULAM oder MASTER vorhanden sind, diese aufrufen
IF shelltyp>1 THEN
IF shelltyp=2 AND shell_cmd$="-i" THEN ! Interaktive Shell
shell_cmd$="" ! "" fÜr GULAM "-i" fÜr MASTER
ENDIF
shell_cmd$=shell_cmd$+CHR$(0) ! C-String endet mit Nullbyte
exit_code%=C:shell_p%(L:VARPTR(shell_cmd$)) ! und aufrufen
ELSE
exit_code%=-999 ! Kommando NICHT ausgeführt
ENDIF
'
'
RETURN exit_code
ENDFUNC
'
'
' Anmerkung #1: Die Änderungen für die alten Gfa Basic Versionen liegen
' nur am dort fehlenden FUNKTION ENDFUNC Befehlspaar. So
' kann dort dies z.B. mit PROCEDURE simuliert werden, wenn
' exit_code% GLOBAL zugänglich ist:
'
' @system_call(a$)
' PRINT "Rückgabe des Shellaufrufs: "; exit_code%
' ...
' END
'
' PROCEDURE system_call...
' ' LOCAL exit_code%
' ...
' RETURN
'
' Anmerkung #2: Da sich Gfa Basic zunächst allen Speicher grabscht, muss
' mit dem RESERVE Befehl zuerst die für den Interpreter not-
' wendige Anzahl reserviert werden, sodass der Rest für die
' Shell und zu startende Programme nutzbar wird. Anschliessend
' muss jedoch dieser Platz mit einem weiteren RESERVE Befehl
' wieder zusammengefügt werden, da sonst der Gesamtspeicher
' sich immer mehr verkleinert.
'
' ----------------------------------------------------------------------------