Contributor: ARNE DE.BRUIJN
{
 Small program to demostrate redirection of TP's Output variable
 Arne de Bruijn, 1994, PD
}
Unit SmallCrt;
interface
procedure AssignCrt(var F:text);
implementation
uses Dos; {For TextRec, fmClosed, fmOutput}
function InOutCrtOut(var F:text):byte; far; assembler;
asm
 cld { Count forwards }
 mov dx,ds { Save DS }
 lds si,F { Get address of F }
 mov cx,[si].TextRec.BufPos { Get number of bytes to write }
 lds si,[si].TextRec.BufPtr { Get address of buffer }
@OutChars:
 lodsb { Load character to output in AL, and }
 { set SI to next character }
 int 29h { Output AL with DOS undocumented fast write }
 loop @OutChars { Do all characters (dec(cx); until cx=0) }
 mov ds,dx { Restore DS }
end;
function CloseCrtOut(var F:text):byte; far;
begin
 TextRec(F).Mode:=fmClosed;
 CloseCrtOut:=0;
end;
function OpenCrtOut(var F:text):byte; far;
begin
 with TextRec(F) do
 begin
 Mode:=fmOutput;
 BufPos:=0; BufEnd:=0;
 InOutFunc:=@InOutCrtOut;
 FlushFunc:=@InOutCrtOut;
 CloseFunc:=@CloseCrtOut;
 end;
 OpenCrtOut:=0;
end;
procedure AssignCrt(var F:text);
begin
 with TextRec(F) do
 begin
 Mode:=fmClosed;
 BufSize:=SizeOf(Buffer);
 BufPtr:=@Buffer;
 Name[0]:=#0;
 OpenFunc:=@OpenCrtOut;
 end;
end;
begin
 AssignCrt(Output);
 Rewrite(Output);
end.


AltStyle によって変換されたページ (->オリジナル) /