[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]

    (*
    > Can anyone post some code on swapping a TP (7.0) program out of
    > memory and executing a batch file (or EXE file; show both if they're
    > different please). Thanx.  [I can do it in assembly... :)... but
    > Pascal's a different story].

    With this you must increase the maximum heap with {$M....}. But I found a
    very good exec-Routine, which gives all the heap free before executing the
    shell:
    *)

    Function DosShell(command:String):Integer;Var
     OldHeapEnd,
     NewHeapEnd: Word;
     Error:Integer;
    Begin
     Error:=0;
     If MemAvail<$1000 then Error:=8;
     If Error=0 then Begin
      NewHeapEnd:=Seg(HeapPtr^)-PrefixSeg;
      OldHeapEnd:=Seg(HeapEnd^)-PrefixSeg;
       asm
        mov ah,4Ah
        mov bx,NewHeapEnd
        mov es,PrefixSeg
        Int 21h
        jnc @EXIT
        mov Error,ax
        @EXIT:
       end; {asm}
      If Error=0 then begin
       SwapVectors;
       Exec(GetEnv('COMSPEC'),command);
       SwapVectors;
        asm
         mov ah,4Ah
         mov bx,OldHeapEnd
         mov es,PrefixSeg
         Int 21h
         jnc @EXIT
         mov Error,ax
         @EXIT:
        end; {asm}
      end;   {If}
     end;    {If}
     DosShell:=Error;
    end;     {Function}

    Procedure LittleShellDemo;
    Begin
     DosShell('');               { a simple DOS-Shell }
     DosShell('/c TEST.BAT');    { Start the batch-file TEST.BAT }
    End;

[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]