[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;
[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]