mirror of https://github.com/red-prig/fpPS4.git
70 lines
1.4 KiB
Plaintext
70 lines
1.4 KiB
Plaintext
unit vselect;
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
{$CALLING SysV_ABI_CDecl}
|
|
|
|
interface
|
|
|
|
type
|
|
pp_fd_mask=^p_fd_mask;
|
|
p_fd_mask=^fd_mask;
|
|
fd_mask=QWORD;
|
|
|
|
{
|
|
* Select uses bit masks of file descriptors in longs. These macros
|
|
* manipulate such bit fields (the filesystem macros use chars).
|
|
* FD_SETSIZE may be defined by the user, but the default here should
|
|
* be enough for most uses.
|
|
}
|
|
const
|
|
FD_SETSIZE=1024;
|
|
NFDBITS =(sizeof(fd_mask) * 8); { bits per mask }
|
|
|
|
type
|
|
p_fd_set=^t_fd_set;
|
|
t_fd_set=packed record
|
|
fds_bits:array[0..((FD_SETSIZE + (NFDBITS - 1)) div NFDBITS)-1] of fd_mask;
|
|
end;
|
|
|
|
procedure FD_CLR(n:Integer;p:p_fd_set);
|
|
procedure FD_COPY(f,t:p_fd_set);
|
|
function FD_ISSET(n:Integer;p:p_fd_set):Boolean;
|
|
procedure FD_SET(n:Integer;p:p_fd_set);
|
|
procedure FD_ZERO(p:p_fd_set);
|
|
|
|
implementation
|
|
|
|
function __fdset_mask(n:Integer):fd_mask; inline;
|
|
begin
|
|
Result:=fd_mask(1) shl (n mod NFDBITS);
|
|
end;
|
|
|
|
procedure FD_CLR(n:Integer;p:p_fd_set);
|
|
begin
|
|
p^.fds_bits[n div NFDBITS]:=p^.fds_bits[n div NFDBITS] and (not __fdset_mask(n));
|
|
end;
|
|
|
|
procedure FD_COPY(f,t:p_fd_set);
|
|
begin
|
|
f^:=t^;
|
|
end;
|
|
|
|
function FD_ISSET(n:Integer;p:p_fd_set):Boolean;
|
|
begin
|
|
Result:=(p^.fds_bits[n div NFDBITS] and __fdset_mask(n))<>0;
|
|
end;
|
|
|
|
procedure FD_SET(n:Integer;p:p_fd_set);
|
|
begin
|
|
p^.fds_bits[n div NFDBITS]:=p^.fds_bits[n div NFDBITS] or __fdset_mask(n);
|
|
end;
|
|
|
|
procedure FD_ZERO(p:p_fd_set);
|
|
begin
|
|
p^:=Default(t_fd_set);
|
|
end;
|
|
|
|
|
|
end.
|
|
|