[Back to REDIRECT SWAG index]  [Back to Main SWAG index]  [Original]

{ From: tjacobs@clark.net (Todd A. Jacobs) }
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 REDIRECT SWAG index]  [Back to Main SWAG index]  [Original]