home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
02
/
tricks
/
shelldem.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-11-14
|
4KB
|
100 lines
(* ------------------------------------------------------ *)
(* SHELLDEM.PAS *)
(* Zum Aufruf eines weiteren Befehlsinterpreters *)
(* Rückkehr von Dos mit Exit. *)
(* (C) 1989 Hubert Hopf & TOOLBOX *)
(* ------------------------------------------------------ *)
PROGRAM ShellDemo;
USES Crt, Dos;
{$M 32768,0,0 }
(* Heap muß begrenzt werden, da sonst Abbruch mit *)
(* Fehler "Nicht genug Hauptspeicher" erfolgt. *)
TYPE
Strg60 = STRING [60];
VArray = ARRAY [0..3999] OF BYTE;
VAR
Rueck : INTEGER;
ch : CHAR;
(* VRAM wird durch ABSOLUTE an den Anfang des Bild- *)
(* schirmspeichers gesetzt. Ein Zugriff auf VRAM[I] *)
(* bedeutet dann einen direkten Zugriff auf das *)
(* I. Element des Bildschirmspeichers. *)
VRAM : VArray ABSOLUTE $B800:$0000;
(* Für Mono $B000:$0000 *)
VR : VArray; (* Zum Abspeichern des Bildschirms *)
PROCEDURE Fenster(Text : Strg60);
(* Prozedur zur Ausgabe eines Textes in einem Fenster *)
(* z. B. für Fehlermeldungen. *)
(* Bildschirm wird vor der Ausgabe gerettet und *)
(* danach wieder hergestellt. *)
VAR
ch : CHAR;
BEGIN
VR := VRAM; (* Bildschirminhalt retten *)
Window(10, 10, 70, 13);
TextAttr := BLUE SHL 4 OR YELLOW; (* Farbe setzen *)
ClrScr;
GotoXY(30-(Length(Text) DIV 2),2);
Write(Text); (* Text ausgeben *)
GotoXY(8, 4);
Write('Weiter mit beliebiger Taste, Abbruch mit ESC');
ch := ReadKey; (* Warten auf Tastendruck *)
TextAttr := BLACK SHL 4 OR WHITE; (* Fenster zurück *)
Window(1, 1, 80, 25);
ClrScr;
VRAM := VR; (* alter Bildschirminhalt *)
IF ch = #27 THEN Halt; (* Abbruch bei ESC *)
END;
PROCEDURE Fehler(FehlerNr : BYTE);
(* Fehlerbehandlung : *)
(* Bei EXEC können die Fehler 2,8,10 und 11 auftreten *)
BEGIN
CASE FehlerNr OF
2 : Fenster('Datei nicht gefunden');
8 : Fenster('Nicht genug Speicherpl. im Hauptsp.');
10 : Fenster('Ungültiger Umgebungs-Parameter');
11 : Fenster('Ungültiges Befehlsformat');
END;
END;
FUNCTION Shell(Prog, Param : Strg60) : INTEGER;
BEGIN
Fenster('Zurück mit EXIT'); (* Hinweis zur Rückkehr *)
Exec(Prog, Param); (* Aufruf des Befehlsin- *)
(* terpreters *)
IF DosError <> 0 THEN BEGIN
Fehler(DosError); (* Fehler aufgetreten *)
Shell := -1; (* Im Fehlerfall -1
zurückgeben *)
END ELSE BEGIN
Shell := DosExitCode; (* sonst ExitCode des auf-*)
(* gerufenen Programmes. *)
END;
END;
BEGIN
TextAttr := BLACK SHL 4 OR WHITE;
ClrScr;
GotoXY(1, 1);
WriteLn('Aufruf eines neuen Befehlsinterpreters aus');
WriteLn('einem laufenden Turbo-Pascal-Programm mittels');
WriteLn('der EXEC-Funktion');
Rueck := Shell('\COMMAND.COM','');
WriteLn;
WriteLn('Exitcode des aufgerufenen Programmes : ', Rueck);
ch := ReadKey;
END.
(* ------------------------------------------------------ *)
(* Ende von SHELLDEM.PAS *)