home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 02 / tricks / shelldem.pas < prev    next >
Pascal/Delphi Source File  |  1989-11-14  |  4KB  |  100 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   SHELLDEM.PAS                         *)
  3. (* Zum Aufruf eines weiteren Befehlsinterpreters          *)
  4. (* Rückkehr von Dos mit Exit.                             *)
  5. (*          (C) 1989 Hubert Hopf & TOOLBOX                *)
  6. (* ------------------------------------------------------ *)
  7. PROGRAM ShellDemo;
  8.  
  9. USES Crt, Dos;
  10.  
  11. {$M 32768,0,0 }
  12.         (* Heap muß begrenzt werden, da sonst Abbruch mit *)
  13.         (* Fehler "Nicht genug Hauptspeicher" erfolgt.    *)
  14. TYPE
  15.   Strg60 = STRING [60];
  16.   VArray = ARRAY [0..3999] OF BYTE;
  17.  
  18. VAR
  19.   Rueck  : INTEGER;
  20.   ch     : CHAR;
  21.  
  22.      (* VRAM wird durch ABSOLUTE an den Anfang des Bild-  *)
  23.      (* schirmspeichers gesetzt. Ein Zugriff auf VRAM[I]  *)
  24.      (* bedeutet dann einen direkten Zugriff auf das      *)
  25.      (* I. Element des Bildschirmspeichers.               *)
  26.  
  27.   VRAM   : VArray ABSOLUTE $B800:$0000;
  28.                                   (* Für Mono $B000:$0000 *)
  29.   VR     : VArray;  (* Zum Abspeichern des Bildschirms    *)
  30.  
  31.   PROCEDURE Fenster(Text : Strg60);
  32.  
  33.   (* Prozedur zur Ausgabe eines Textes in einem Fenster   *)
  34.   (* z. B. für Fehlermeldungen.                           *)
  35.   (* Bildschirm wird vor der Ausgabe gerettet und         *)
  36.   (* danach wieder hergestellt.                           *)
  37.  
  38.   VAR
  39.     ch : CHAR;
  40.   BEGIN
  41.     VR := VRAM;                (* Bildschirminhalt retten *)
  42.     Window(10, 10, 70, 13);
  43.     TextAttr := BLUE SHL 4 OR YELLOW;     (* Farbe setzen *)
  44.     ClrScr;
  45.     GotoXY(30-(Length(Text) DIV 2),2);
  46.     Write(Text);                         (* Text ausgeben *)
  47.     GotoXY(8, 4);
  48.     Write('Weiter mit beliebiger Taste, Abbruch mit ESC');
  49.     ch := ReadKey;              (* Warten auf Tastendruck *)
  50.     TextAttr := BLACK SHL 4 OR WHITE;   (* Fenster zurück *)
  51.     Window(1, 1, 80, 25);
  52.     ClrScr;
  53.     VRAM := VR;                 (* alter Bildschirminhalt *)
  54.     IF ch = #27 THEN Halt;             (* Abbruch bei ESC *)
  55.   END;
  56.  
  57.   PROCEDURE Fehler(FehlerNr : BYTE);
  58.  
  59.   (* Fehlerbehandlung :                                   *)
  60.   (* Bei EXEC können die Fehler 2,8,10 und 11 auftreten   *)
  61.  
  62.   BEGIN
  63.     CASE FehlerNr OF
  64.       2 : Fenster('Datei nicht gefunden');
  65.       8 : Fenster('Nicht genug Speicherpl. im Hauptsp.');
  66.      10 : Fenster('Ungültiger Umgebungs-Parameter');
  67.      11 : Fenster('Ungültiges Befehlsformat');
  68.     END;
  69.   END;
  70.  
  71.   FUNCTION Shell(Prog, Param : Strg60) : INTEGER;
  72.   BEGIN
  73.     Fenster('Zurück mit EXIT'); (* Hinweis zur Rückkehr   *)
  74.     Exec(Prog, Param);          (* Aufruf des Befehlsin-  *)
  75.                                 (*            terpreters  *)
  76.     IF DosError <> 0 THEN BEGIN
  77.       Fehler(DosError);         (* Fehler aufgetreten     *)
  78.       Shell := -1;              (* Im Fehlerfall -1
  79.                                            zurückgeben    *)
  80.     END ELSE BEGIN
  81.       Shell := DosExitCode;     (* sonst ExitCode des auf-*)
  82.                                 (* gerufenen Programmes.  *)
  83.     END;
  84.   END;
  85.  
  86. BEGIN
  87.   TextAttr := BLACK SHL 4 OR WHITE;
  88.   ClrScr;
  89.   GotoXY(1, 1);
  90.   WriteLn('Aufruf eines neuen Befehlsinterpreters aus');
  91.   WriteLn('einem laufenden Turbo-Pascal-Programm mittels');
  92.   WriteLn('der EXEC-Funktion');
  93.   Rueck := Shell('\COMMAND.COM','');
  94.   WriteLn;
  95.   WriteLn('Exitcode des aufgerufenen Programmes : ', Rueck);
  96.   ch := ReadKey;
  97. END.
  98. (* ------------------------------------------------------ *)
  99. (*                  Ende von SHELLDEM.PAS                 *)
  100.