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