home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 03 / praxis / exec.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-12-14  |  1.6 KB  |  81 lines

  1. PROCEDURE Exec (Path, cmdline : STRING);
  2. VAR   anz         : WORD;
  3.       fp,t        : POINTER;
  4.       regs        : REGISTERS;
  5.       int00save,
  6.       int23save,
  7.       int24save,
  8.       int1bsave   : POINTER;
  9. {$ifopt N+}
  10.       int02save,
  11.       int75save   : POINTER;
  12. {$endif}
  13.  
  14. BEGIN
  15.  
  16. { freelist sichern }
  17.  
  18.   fp := ptr(seg(freeptr^), ofs(freeptr^));
  19.   anz := $FFFF - ofs(freeptr^) + 10;
  20.   getmem(t, anz);
  21.   move(fp^, t^, anz);
  22.  
  23. { speicher freigeben }
  24.  
  25.   WITH regs DO BEGIN
  26.     ah := $4A;
  27.     es := prefixseg;
  28.     bx := seg(heapptr^) + 1 - prefixseg;
  29.     msdos(regs);
  30.   END; { whith regs }
  31.  
  32. { interruptvektoren zurücksetzen}
  33.  
  34.   getintvec($00, int00save);
  35.   setintvec($00, saveint00);
  36.   getintvec($23, int23save);
  37.   setintvec($23, saveint23);
  38.   getintvec($24, int24save);
  39.   setintvec($24, saveint24);
  40.   getintvec($1b, int1bsave);
  41.   setintvec($1b, saveint1b);
  42. {$ifopt N+}
  43.   getintvec($02, int02save);
  44.   setintvec($02, saveint02);
  45.   getintvec($75, int75save);
  46.   setintvec($75, saveint75);
  47. {$endif}
  48.  
  49. { programm starten }
  50.  
  51.   Dos.Exec(path, cmdline);
  52.  
  53. { interruptvektoren einsetzen }
  54.  
  55.   setintvec($00, int00save);
  56.   setintvec($23, int23save);
  57.   setintvec($24, int24save);
  58.   setintvec($1b, int1bsave);
  59. {$ifopt N+}
  60.   setintvec($02, int02save);
  61.   setintvec($75, int75save);
  62. {$endif}
  63.  
  64. { Speicher wieder belegen }
  65.  
  66.   WITH regs DO BEGIN
  67.     ah := $4A;
  68.     es := prefixseg;
  69.     bx := $FFFF;
  70.     msdos(regs);
  71.     ah := $4A;
  72.     es := prefixseg;
  73.     msdos(regs);
  74.   END; { whith regs }
  75.  
  76. { freelist restaurieren }
  77.  
  78.   move(t^, fp^, anz);
  79.   freemem(t, anz);
  80. END; { exec }
  81.