home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* 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 *)