[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]
{
RG> I am writing a simple program which executes other programs. I am using
RG> the function
RG> EXEC(ProgramName,CmdLine)
RG> which is working just fine. However, I would like to somehow prevent the
RG> executed program from writing to the screen, rather I just want to display
RG> in my program something like
RG> Working...
RG> While still maintaining the screen which the program is using for output.
RG> So my questions is, how would I go about doing this?
Try this unit! }
unit Redir;
interface
uses
Dos;
function SetOutput(FileName: PathStr): Boolean;
procedure CancelOutput;
implementation
const
OutRedir: Boolean = False;
function SetOutput(FileName: PathStr): Boolean;
begin
FileName:=FileName+#0;
SetOutput:=False;
asm
push ds
mov ax, ss
mov ds, ax
lea dx, FileName[1]
mov ah, 3Ch
int 21h
pop ds
jnc @@1
ret
@@1:
push ax
mov bx, ax
mov cx, Output.FileRec.Handle
mov ah, 46h
int 21h
mov ah, 3Eh
pop bx
jnc @@2
ret
@@2:
int 21h
end;
OutRedir:=True;
SetOutput:=True;
end;
procedure CancelOutput;
var
FileName: String[4];
begin
if not OutRedir then Exit;
FileName:='CON'#0;
asm
push ds
mov ax, ss
mov ds, ax
lea dx, FileName[1]
mov ax, 3D01h
int 21h
pop ds
jnc @@1
ret
@@1:
push ax
mov bx, ax
mov cx, Output.FileRec.Handle
mov ah, 46h
int 21h
mov ah, 3Eh
pop bx
int 21h
end;
OutRedir:=False;
end;
end.
________________
Standard output will be changed to FileName. The FileName can be NUL. When your
executed program is using int $10, all is hardly. In your main program use:
SetOutput('NUL');
Exec(....);
CancelOutput;
{change the dos prompt when Shelling to DOS without
having to change the current or master enviroment(It makes it's own).}
[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]