home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SHELLDEMO.PAS *)
- (* Zum Aufruf eines weiteren Befehlsinterpreters *)
- (* Rückkehr von Dos mit Exit. *)
- (* (C) 1990 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 *)
- (* kann auch zum Aufruf
- anderer Programme
- dienen. *)
- 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','');
- (* Aufruf der SHELL-Funktion *)
- (* mit Rückgabe des Exitcodes *)
- WriteLn;
- WriteLn('Exitcode des aufgerufenen Programmes : ',RUECK);
- CH := ReadKey;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SHELLDEMO.PAS *)