FPPS4/sys/sys_crt.pas

71 lines
990 B
Plaintext

unit sys_crt;
{$mode ObjFPC}{$H+}
interface
uses
sys_tty;
Procedure sys_tty_init;
implementation
uses
md_tty,
kern_thread;
Procedure CrtOutWrite(var t:TextRec);
var
tp:p_tty;
Begin
if (t.BufPos=0) then Exit;
tp:=PPointer(@t.UserData)^;
if (tp=nil) then Exit;
ttycrt_write(tp,t.Bufptr,t.BufPos);
t.BufPos:=0;
end;
Procedure CrtClose(Var F:TextRec);
Begin
F.Mode:=fmClosed;
end;
Procedure CrtOpenOut(Var F:TextRec);
Begin
F.InOutFunc:=@CrtOutWrite;
F.FlushFunc:=@CrtOutWrite;
F.CloseFunc:=@CrtClose;
end;
procedure AssignTTY(var F:Text;tp:p_tty);
begin
Assign(F,'');
//
TextRec(F).OpenFunc :=@CrtOpenOut;
//
PPointer(@TextRec(F).UserData)^:=tp;
end;
Procedure sys_tty_init;
begin
AssignTTY(Output ,@std_tty[ 1]);
AssignTTY(StdOut ,@std_tty[ 1]);
AssignTTY(ErrOutput,@std_tty[ 2]);
AssignTTY(StdErr ,@std_tty[ 2]);
//
Rewrite(Output);
Rewrite(StdOut);
Rewrite(ErrOutput);
Rewrite(StdErr);
end;
initialization
init_tty_cb:=@sys_tty_init;
end.