[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]