Contributor: KELD R. HANSEN (* KELD R. HANSEN > I need to *simulate* something like: > {$M 16384,0,0} {reduce heap} > Exec('c:\myprgm.exe',''); {run myprgm.exe} > {$M 16384,110000,110000} {restore heap} EXECUTE shrinks your programs memory allocation to the smallest possible value, then runs the program and then expands it back up again. Works in TP 6.0 and 7.0! *) USES DOS; TYPE STR127 = STRING[127]; PROCEDURE ReallocateMemory(P : POINTER); ASSEMBLER; ASM MOV AX, PrefixSeg MOV ES, AX MOV BX, WORD PTR P+2 CMP WORD PTR P,0 JE @OK INC BX @OK: SUB BX, AX MOV AH, 4Ah INT 21h JC @X LES DI, P MOV WORD PTR HeapEnd,DI MOV WORD PTR HeapEnd+2,ES @X: END; FUNCTION EXECUTE(Name : PathStr ; Tail : STR127) : WORD; ASSEMBLER; ASM {$IFDEF CPU386} DB 66h PUSH WORD PTR HeapEnd DB 66h PUSH WORD PTR Name DB 66h PUSH WORD PTR Tail DB 66h PUSH WORD PTR HeapPtr {$ELSE} PUSH WORD PTR HeapEnd+2 PUSH WORD PTR HeapEnd PUSH WORD PTR Name+2 PUSH WORD PTR Name PUSH WORD PTR Tail+2 PUSH WORD PTR Tail PUSH WORD PTR HeapPtr+2 PUSH WORD PTR HeapPtr {$ENDIF} CALL ReallocateMemory CALL SwapVectors CALL DOS.EXEC CALL SwapVectors CALL ReallocateMemory MOV AX, DosError OR AX, AX JNZ @OUT MOV AH, 4Dh INT 21h @OUT: END;