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 char (V7 compatability) } VCEOF = NCC; { RESERVED true EOL char } 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;