home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* T_EXEC.PAS *)
- (* (c) 1989 R.Hoffmann & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT t_exec;
-
- INTERFACE
-
- USES Crt, Dos;
-
- PROCEDURE ExecProg(path, cmdline : STRING);
- PROCEDURE ExecDos(command : STRING);
-
- IMPLEMENTATION
-
- PROCEDURE Fehlermeldung;
- VAR c : CHAR;
- BEGIN
- WriteLn; WriteLn('Fehler ', DosError);
- CASE DosError OF
- 2 : WriteLn('Datei nicht gefunden');
- 3 : WriteLn('Suchweg nicht gefunden');
- 5 : WriteLn('Zugriff verweigert');
- 6 : WriteLn('Handle nicht definiert oder ungültig');
- 8 : WriteLn('nicht genügend Platz im Hauptspeicher');
- 10 : WriteLn('Umgebungsparameter ungültig');
- 11 : WriteLn('ungültiges Befehlsformat');
- 18 : WriteLn('keine weiteren Dateieinträge');
- END;
- WriteLn; Write('weiter mit beliebiger Taste ');
- c := ReadKey; IF c = #0 THEN c := ReadKey;
- END;
-
- PROCEDURE ExecProg(path, cmdline : STRING);
- VAR anz : WORD;
- fp, t : POINTER;
- regs : Registers;
- c : CHAR;
- BEGIN
- fp := Ptr(Seg(freeptr^), Ofs(freeptr^));
- anz := $FFFF - Ofs(freeptr^) + 10;
- GetMem(t, anz); Move(fp^, t^, anz);
- WITH regs DO BEGIN
- ah := $4A;
- es := PrefixSeg;
- bx := Seg(heapptr^) + 1 - PrefixSeg;
- MsDos(regs);
- END;
- SwapVectors;
- Exec(path, cmdline);
- SwapVectors;
- WITH regs DO BEGIN
- ah := $4A;
- es := PrefixSeg;
- bx := $FFFF;
- MsDos(regs);
- ah := $4A;
- es := PrefixSeg;
- MsDos(regs);
- END;
- IF DosError <> 0 THEN Fehlermeldung;
- Move(t^, fp^, anz); FreeMem(t, anz);
- END;
-
- PROCEDURE ExecDos(command : STRING);
- VAR screen : WORD;
- cx, cy : BYTE;
- p : POINTER;
- c : CHAR;
- env : STRING;
- BEGIN
- IF MemW[$40:$49] = 7 THEN screen := $B000
- ELSE screen := $B800;
- GetMem(p, 2000); Move(Mem[screen:0], p^, 2000);
- cx := WhereX; cy := WhereY; ClrScr;
- Write(' mit beliebiger Taste zurück ');
- Env := Getenv('COMSPEC');
- ExecProg(env, '/C ' + command);
- c := Readkey; IF c = #0 THEN c := ReadKey;
- Move(p^, Mem[screen:0], 2000); FreeMem(p, 2000);
- GotoXY(cx, cy);
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von T_EXEC.PAS *)