mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 08:18:12 +02:00
565 lines
13 KiB
PHP
565 lines
13 KiB
PHP
|
|
|
|
const
|
|
{ Disable special character functions }
|
|
_POSIX_VDISABLE = 0;
|
|
{ was #define dname(params) para_def_expr }
|
|
{ argument types are unknown }
|
|
|
|
|
|
const
|
|
IBSHIFT = 16;
|
|
{ required by termio.h and VCEOF/VCEOL }
|
|
|
|
const
|
|
_NCC = 8;
|
|
|
|
const
|
|
NCC = _NCC;
|
|
{ some defines required by POSIX }
|
|
|
|
const
|
|
NCCS = 19;
|
|
{
|
|
* types defined by POSIX. These are better off in types.h, but
|
|
* the standard says that they have to be in termios.h.
|
|
}
|
|
|
|
type
|
|
|
|
tcflag_t = dword;
|
|
|
|
cc_t = byte;
|
|
|
|
speed_t = dword;
|
|
{
|
|
* Ioctl control packet
|
|
}
|
|
ptermios = ^termios;
|
|
termios = record
|
|
{ input modes }
|
|
c_iflag : tcflag_t;
|
|
{ output modes }
|
|
c_oflag : tcflag_t;
|
|
{ control modes }
|
|
c_cflag : tcflag_t;
|
|
{ line discipline modes }
|
|
c_lflag : tcflag_t;
|
|
{ control chars }
|
|
c_cc : array[0..(NCCS)-1] of cc_t;
|
|
end;
|
|
ttermios = termios;
|
|
|
|
{
|
|
* POSIX termios functions
|
|
* These functions get mapped into ioctls.
|
|
}
|
|
(* Const before type ignored *)
|
|
|
|
function cfgetospeed(_para1:Ptermios):speed_t;cdecl;external;
|
|
|
|
function cfsetospeed(_para1:Ptermios; _para2:speed_t):cint;cdecl;external;
|
|
|
|
(* Const before type ignored *)
|
|
function cfgetispeed(_para1:Ptermios):speed_t;cdecl;external;
|
|
|
|
function cfsetispeed(_para1:Ptermios; _para2:speed_t):cint;cdecl;external;
|
|
|
|
function tcgetattr(_para1:cint; var _para2:termios):cint;cdecl;external;
|
|
|
|
function tcgetattr(_para1:cint; _para2:Ptermios):cint;cdecl;external;
|
|
|
|
(* Const before type ignored *)
|
|
function tcsetattr(_para1:cint; _para2:cint; _para3:Ptermios):cint;cdecl;external;
|
|
(* Const before type ignored *)
|
|
function tcsetattr(_para1:cint; _para2:cint; const _para3:termios):cint;cdecl;
|
|
|
|
|
|
// function tcsendbreak(_para1:cint; _para2:cint):cint;cdecl;
|
|
|
|
// function tcdrain(_para1:cint):cint;cdecl;
|
|
|
|
// function tcflush(_para1:cint; _para2:cint):cint;cdecl;
|
|
|
|
// function tcflow(_para1:cint; _para2:cint):cint;cdecl;
|
|
|
|
|
|
function tcgetsid(_para1:cint):pid_t;cdecl;external;
|
|
|
|
function tcgetsid:pid_t;cdecl;external;
|
|
|
|
{ control characters }
|
|
const
|
|
VINTR = 0;
|
|
VQUIT = 1;
|
|
VERASE = 2;
|
|
VKILL = 3;
|
|
VEOF = 4;
|
|
VEOL = 5;
|
|
|
|
const
|
|
VEOL2 = 6;
|
|
|
|
const
|
|
VMIN = 4;
|
|
VTIME = 5;
|
|
|
|
const
|
|
VSWTCH = 7;
|
|
|
|
const
|
|
VSTART = 8;
|
|
VSTOP = 9;
|
|
VSUSP = 10;
|
|
|
|
const
|
|
VDSUSP = 11;
|
|
VREPRINT = 12;
|
|
VDISCARD = 13;
|
|
VWERASE = 14;
|
|
VLNEXT = 15;
|
|
{ 16 thru 19 reserved for future use }
|
|
{
|
|
* control characters form Xenix termio.h
|
|
}
|
|
{ RESERVED true EOF AnsiChar (V7 compatability) }
|
|
VCEOF = NCC;
|
|
{ RESERVED true EOL AnsiChar }
|
|
VCEOL = NCC+1;
|
|
CNUL = 0;
|
|
CDEL = 0177;
|
|
{ S5 default control chars }
|
|
{ CINTR, CERASE and CKILL modified to SunOS traditional values }
|
|
CESC = '\\';
|
|
{ return type might be wrong }
|
|
|
|
{ FS, cntl | }
|
|
|
|
const
|
|
CQUIT = 034;
|
|
{ DEL }
|
|
CERASE = 0177;
|
|
{ was #define dname def_expr }
|
|
|
|
const
|
|
CEOT = 04;
|
|
CEOL = 0;
|
|
CEOL2 = 0;
|
|
{ cntl d }
|
|
CEOF = 04;
|
|
{ cntl q }
|
|
CSTART = 021;
|
|
{ cntl s }
|
|
CSTOP = 023;
|
|
{ cntl z }
|
|
CSWTCH = 032;
|
|
CNSWTCH = 0;
|
|
{
|
|
{ was #define dname def_expr }
|
|
function CSUSP : longint;
|
|
{ return type might be wrong }
|
|
|
|
{ was #define dname def_expr }
|
|
function CDSUSP : longint;
|
|
{ return type might be wrong }
|
|
|
|
{ was #define dname def_expr }
|
|
function CRPRNT : longint;
|
|
{ return type might be wrong }
|
|
|
|
{ was #define dname def_expr }
|
|
function CFLUSH : longint;
|
|
{ return type might be wrong }
|
|
|
|
{ was #define dname def_expr }
|
|
function CWERASE : longint;
|
|
{ return type might be wrong }
|
|
|
|
{ was #define dname def_expr }
|
|
function CLNEXT : longint;
|
|
{ return type might be wrong }
|
|
}
|
|
{ input modes }
|
|
|
|
const
|
|
IGNBRK = &0000001;
|
|
BRKINT = &0000002;
|
|
IGNPAR = &0000004;
|
|
PARMRK = &0000010;
|
|
INPCK = &0000020;
|
|
ISTRIP = &0000040;
|
|
INLCR = &0000100;
|
|
IGNCR = &0000200;
|
|
ICRNL = &0000400;
|
|
IUCLC = &0001000;
|
|
IXON = &0002000;
|
|
IXANY = &0004000;
|
|
IXOFF = &0010000;
|
|
IMAXBEL = &0020000;
|
|
{ for 386 compatibility }
|
|
DOSMODE = 0100000;
|
|
{ output modes }
|
|
OPOST = &0000001;
|
|
OLCUC = &0000002;
|
|
ONLCR = &0000004;
|
|
OCRNL = &0000010;
|
|
ONOCR = &0000020;
|
|
ONLRET = &0000040;
|
|
OFILL = &0000100;
|
|
OFDEL = &0000200;
|
|
NLDLY = &0000400;
|
|
NL0 = 0;
|
|
NL1 = &0000400;
|
|
CRDLY = &0003000;
|
|
CR0 = 0;
|
|
CR1 = &0001000;
|
|
CR2 = &0002000;
|
|
CR3 = &0003000;
|
|
TABDLY = &0014000;
|
|
TAB0 = 0;
|
|
TAB1 = &0004000;
|
|
TAB2 = &0010000;
|
|
TAB3 = &0014000;
|
|
XTABS = &0014000;
|
|
BSDLY = &0020000;
|
|
BS0 = 0;
|
|
BS1 = &0020000;
|
|
VTDLY = &0040000;
|
|
VT0 = 0;
|
|
VT1 = &0040000;
|
|
FFDLY = 0100000;
|
|
FF0 = 0;
|
|
FF1 = 0100000;
|
|
PAGEOUT = 0200000;
|
|
WRAP = 0400000;
|
|
{ control modes }
|
|
CBAUD = &0000017;
|
|
CSIZE = &0000060;
|
|
CS5 = 0;
|
|
CS6 = &0000020;
|
|
CS7 = &0000040;
|
|
CS8 = &0000060;
|
|
CSTOPB = &0000100;
|
|
CREAD = &0000200;
|
|
PARENB = &0000400;
|
|
PARODD = &0001000;
|
|
HUPCL = &0002000;
|
|
CLOCAL = &0004000;
|
|
RCV1EN = &0010000;
|
|
XMT1EN = &0020000;
|
|
LOBLK = &0040000;
|
|
{ *V7* exclusive use coming fron XENIX }
|
|
XCLUDE = 0100000;
|
|
CRTSXOFF = 010000000000;
|
|
CRTSCTS = 020000000000;
|
|
CIBAUD = 03600000;
|
|
PAREXT = 04000000;
|
|
CBAUDEXT = 010000000;
|
|
CIBAUDEXT = 020000000;
|
|
{
|
|
* 4.4BSD hardware flow control flags
|
|
}
|
|
CRTS_IFLOW = 010000000000;
|
|
CCTS_OFLOW = 020000000000;
|
|
{ line discipline 0 modes }
|
|
ISIG = &0000001;
|
|
ICANON = &0000002;
|
|
XCASE = &0000004;
|
|
ECHO = &0000010;
|
|
ECHOE = &0000020;
|
|
ECHOK = &0000040;
|
|
ECHONL = &0000100;
|
|
NOFLSH = &0000200;
|
|
TOSTOP = &0000400;
|
|
ECHOCTL = &0001000;
|
|
ECHOPRT = &0002000;
|
|
ECHOKE = &0004000;
|
|
DEFECHO = &0010000;
|
|
FLUSHO = &0020000;
|
|
PENDIN = &0040000;
|
|
{ POSIX flag - enable POSIX extensions }
|
|
IEXTEN = &0100000;
|
|
_TIOC = ord('T') shl 8;
|
|
TIOC = _TIOC;
|
|
TCGETA = _TIOC or 1;
|
|
TCSETA = _TIOC or 2;
|
|
TCSETAW = _TIOC or 3;
|
|
TCSETAF = _TIOC or 4;
|
|
TCSBRK = _TIOC or 5;
|
|
TCXONC = _TIOC or 6;
|
|
TCFLSH = _TIOC or 7;
|
|
{ Slots reserved for 386/XENIX compatibility - keyboard control }
|
|
TIOCKBON = _TIOC or 8;
|
|
TIOCKBOF = _TIOC or 9;
|
|
KBENABLED = _TIOC or 10;
|
|
IOCTYPE = $ff00;
|
|
TCDSET = _TIOC or 32;
|
|
{ 386 - "RTS" toggle define 8A1 protocol }
|
|
RTS_TOG = _TIOC or 33;
|
|
TIOCGWINSZ = _TIOC or 104;
|
|
TIOCSWINSZ = _TIOC or 103;
|
|
{
|
|
* Softcarrier ioctls
|
|
}
|
|
TIOCGSOFTCAR = _TIOC or 105;
|
|
TIOCSSOFTCAR = _TIOC or 106;
|
|
{ termios ioctls }
|
|
TCGETS = _TIOC or 13;
|
|
TCSETS = _TIOC or 14;
|
|
{ same as TCSETS }
|
|
TCSANOW = _TIOC or 14;
|
|
TCSETSW = _TIOC or 15;
|
|
{ same as TCSETSW }
|
|
TCSADRAIN = _TIOC or 15;
|
|
TCSETSF = _TIOC or 16;
|
|
{
|
|
* NTP PPS ioctls
|
|
}
|
|
TIOCGPPS = _TIOC or 125;
|
|
TIOCSPPS = _TIOC or 126;
|
|
TIOCGPPSEV = _TIOC or 127;
|
|
{ Argument filled in by TIOCGPPSEV }
|
|
|
|
type
|
|
ppsclockev = record
|
|
tv : timeval;
|
|
serial : cuint;
|
|
end;
|
|
|
|
ppsclockev32 = record
|
|
tv : timeval32;
|
|
serial : cuint32;
|
|
end;
|
|
|
|
{ same as TCSETSF }
|
|
|
|
const
|
|
TCSAFLUSH = _TIOC or 16;
|
|
{ termios option flags }
|
|
{ flush data received but not read }
|
|
TCIFLUSH = 0;
|
|
{ flush data written but not transmitted }
|
|
TCOFLUSH = 1;
|
|
{ flush both data both input and output queues }
|
|
TCIOFLUSH = 2;
|
|
{ suspend output }
|
|
TCOOFF = 0;
|
|
{ restart suspended output }
|
|
TCOON = 1;
|
|
{ suspend input }
|
|
TCIOFF = 2;
|
|
{ restart suspended input }
|
|
TCION = 3;
|
|
{ Slots for 386/XENIX compatibility }
|
|
{ BSD includes these ioctls in ttold.h }
|
|
|
|
const
|
|
TIOCGETD = tIOC or 0;
|
|
TIOCSETD = tIOC or 1;
|
|
TIOCHPCL = tIOC or 2;
|
|
TIOCGETP = tIOC or 8;
|
|
TIOCSETP = tIOC or 9;
|
|
TIOCSETN = tIOC or 10;
|
|
TIOCEXCL = tIOC or 13;
|
|
TIOCNXCL = tIOC or 14;
|
|
TIOCFLUSH = tIOC or 16;
|
|
TIOCSETC = tIOC or 17;
|
|
TIOCGETC = tIOC or 18;
|
|
{
|
|
* BSD ioctls that are not the same as XENIX are included here.
|
|
* There are also some relevant ioctls from SUN/BSD sys/ttycom.h
|
|
* BSD pty ioctls like TIOCPKT are not supported in SVR4.
|
|
}
|
|
{ bis local mode bits }
|
|
TIOCLBIS = tIOC or 127;
|
|
{ bic local mode bits }
|
|
TIOCLBIC = tIOC or 126;
|
|
{ set entire local mode word }
|
|
TIOCLSET = tIOC or 125;
|
|
{ get local modes }
|
|
TIOCLGET = tIOC or 124;
|
|
{ set break bit }
|
|
TIOCSBRK = tIOC or 123;
|
|
{ clear break bit }
|
|
TIOCCBRK = tIOC or 122;
|
|
{ set data terminal ready }
|
|
TIOCSDTR = tIOC or 121;
|
|
{ clear data terminal ready }
|
|
TIOCCDTR = tIOC or 120;
|
|
{ set local special chars }
|
|
TIOCSLTC = tIOC or 117;
|
|
{ get local special chars }
|
|
TIOCGLTC = tIOC or 116;
|
|
{ driver output queue size }
|
|
TIOCOUTQ = tIOC or 115;
|
|
{ void tty association }
|
|
TIOCNOTTY = tIOC or 113;
|
|
{ stop output, like ^S }
|
|
TIOCSTOP = tIOC or 111;
|
|
{ start output, like ^Q }
|
|
TIOCSTART = tIOC or 110;
|
|
{ private to Sun; do not use }
|
|
TIOCSILOOP = tIOC or 109;
|
|
{ end _SYS_TTOLD_H }
|
|
{ POSIX job control ioctls }
|
|
|
|
{ get pgrp of tty }
|
|
const
|
|
TIOCGPGRP = tIOC or 20;
|
|
{ set pgrp of tty }
|
|
TIOCSPGRP = tIOC or 21;
|
|
{ get session id on ctty }
|
|
TIOCGSID = tIOC or 22;
|
|
{ Miscellaneous }
|
|
{ simulate terminal input }
|
|
TIOCSTI = tIOC or 23;
|
|
{ Modem control }
|
|
{ set all modem bits }
|
|
TIOCMSET = tIOC or 26;
|
|
{ bis modem bits }
|
|
TIOCMBIS = tIOC or 27;
|
|
{ bic modem bits }
|
|
TIOCMBIC = tIOC or 28;
|
|
{ get all modem bits }
|
|
TIOCMGET = tIOC or 29;
|
|
{ line enable }
|
|
TIOCM_LE = &0001;
|
|
{ data terminal ready }
|
|
TIOCM_DTR = &0002;
|
|
{ request to send }
|
|
TIOCM_RTS = &0004;
|
|
{ secondary transmit }
|
|
TIOCM_ST = &0010;
|
|
{ secondary receive }
|
|
TIOCM_SR = &0020;
|
|
{ clear to send }
|
|
TIOCM_CTS = &0040;
|
|
{ carrier detect }
|
|
TIOCM_CAR = &0100;
|
|
TIOCM_CD = TIOCM_CAR;
|
|
{ ring }
|
|
TIOCM_RNG = &0200;
|
|
TIOCM_RI = TIOCM_RNG;
|
|
{ data set ready }
|
|
TIOCM_DSR = &0400;
|
|
{ pseudo-tty }
|
|
{ remote input editing }
|
|
TIOCREMOTE = tIOC or 30;
|
|
{ pty: send signal to slave }
|
|
TIOCSIGNAL = tIOC or 31;
|
|
{ Some more 386 xenix stuff }
|
|
LDIOC = ord('D') shl 8;
|
|
LDOPEN = LDIOC or 0;
|
|
LDCLOSE = LDIOC or 1;
|
|
LDCHG = LDIOC or 2;
|
|
LDGETT = LDIOC or 8;
|
|
LDSETT = LDIOC or 9;
|
|
{ Slots for 386 compatibility }
|
|
LDSMAP = LDIOC or 110;
|
|
LDGMAP = LDIOC or 111;
|
|
LDNMAP = LDIOC or 112;
|
|
LDEMAP = LDIOC or 113;
|
|
LDDMAP = LDIOC or 114;
|
|
{
|
|
* These are retained for 386/XENIX compatibility.
|
|
}
|
|
DIOC = ord('d') shl 8;
|
|
{ V7 }
|
|
DIOCGETP = DIOC or 8;
|
|
{ V7 }
|
|
DIOCSETP = DIOC or 9;
|
|
{
|
|
* Returns a non-zero value if there
|
|
* are characters in the input queue.
|
|
*
|
|
* XXX - somebody is confused here. V7 had no such "ioctl", although XENIX may
|
|
* have added it; 4BSD had FIONREAD, which returned the number of characters
|
|
* waiting, and was supposed to work on all descriptors (i.e., every driver
|
|
* should make a stab at implementing it).
|
|
}
|
|
{ V7 }
|
|
FIORDCHK = (ord('f') shl 8) or 3;
|
|
{
|
|
* Speeds
|
|
}
|
|
|
|
{ parameter length, at most 255 bytes }
|
|
IOCPARM_MASK = $ff;
|
|
|
|
{ max size of ioctl args }
|
|
IOCPARM_MAX = IOCPARM_MASK + 1;
|
|
|
|
{ no parameters }
|
|
IOC_VOID = culong($20000000);
|
|
|
|
{ copy parameters out }
|
|
IOC_OUT = culong($40000000);
|
|
|
|
{ copy parameters in }
|
|
IOC_IN = culong($80000000);
|
|
|
|
{ copy paramters in and out }
|
|
IOC_INOUT = (IOC_IN or IOC_OUT);
|
|
|
|
{ mask for IN/OUT/VOID }
|
|
IOC_DIRMASK = culong($e0000000);
|
|
|
|
FIOCLEX = (IOC_VOID or (0 and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 1);
|
|
FIONCLEX = (IOC_VOID or (0 and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 2);
|
|
FIONREAD = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 127);
|
|
FIONBIO = (IOC_IN or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 126);
|
|
FIOASYNC = (IOC_IN or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 125);
|
|
FIOSETOWN = (IOC_IN or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 124);
|
|
FIOGETOWN = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 123);
|
|
FIODTYPE = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 122);
|
|
|
|
const
|
|
B0 = 0;
|
|
B50 = 1;
|
|
B75 = 2;
|
|
B110 = 3;
|
|
B134 = 4;
|
|
B150 = 5;
|
|
B200 = 6;
|
|
B300 = 7;
|
|
B600 = 8;
|
|
B1200 = 9;
|
|
B1800 = 10;
|
|
B2400 = 11;
|
|
B4800 = 12;
|
|
B9600 = 13;
|
|
B19200 = 14;
|
|
B38400 = 15;
|
|
B57600 = 16;
|
|
B76800 = 17;
|
|
B115200 = 18;
|
|
B153600 = 19;
|
|
B230400 = 20;
|
|
B307200 = 21;
|
|
B460800 = 22;
|
|
{ Windowing structure to support JWINSIZE/TIOCSWINSZ/TIOCGWINSZ }
|
|
{ rows, in characters }
|
|
{ columns, in character }
|
|
{ horizontal size, pixels }
|
|
{ vertical size, pixels }
|
|
|
|
type
|
|
winsize = record
|
|
ws_row : word;
|
|
ws_col : word;
|
|
ws_xpixel : word;
|
|
ws_ypixel : word;
|
|
end;
|
|
twinsize = winsize;
|
|
pwinsize = ^twinsize;
|
|
|
|
const
|
|
{ alias for FPC rtl }
|
|
TIOCGETA = _TIOC or 1;
|
|
TIOCSETA = _TIOC or 2;
|
|
TIOCSETAW = _TIOC or 3;
|
|
TIOCSETAF = _TIOC or 4;
|
|
|
|
{ same as TCSETSW }
|
|
TIOCDRAIN = _TIOC or 15;
|