FPPS4/sys/sys_crt.pas

83 lines
1.2 KiB
Plaintext

unit sys_crt;
{$mode ObjFPC}{$H+}
interface
uses
sys_tty;
Procedure sys_tty_init;
implementation
uses
vuio,
md_tty,
kern_thread;
Procedure CrtOutWrite(var t:TextRec);
var
tp:p_tty;
aiov:iovec;
auio:t_uio;
Begin
if (t.BufPos=0) then Exit;
tp:=PPointer(@t.UserData)^;
if (tp=nil) then Exit;
aiov.iov_base :=t.Bufptr;
aiov.iov_len :=t.BufPos;
auio.uio_iov :=@aiov;
auio.uio_iovcnt:=1;
auio.uio_offset:=0;
auio.uio_resid :=t.BufPos;
auio.uio_segflg:=UIO_SYSSPACE;
auio.uio_rw :=UIO_WRITE;
ttydisc_write(tp,@auio,0);
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.