mirror of https://github.com/red-prig/fpPS4.git
83 lines
1.2 KiB
Plaintext
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.
|
|
|