Initial revision
[AROS-Contrib.git] / development / compilers / freepascal / rtl / freebsd / termios.inc
blob7beecf802aa42e4cabe69fd468858323d0fa90d0
2 CONST
5  * Special Control Characters
6  *
7  * Index into c_cc[] character array.
8  *
9  *      Name         Subscript  Enabled by
10  }
11  VEOF           =0;     
12  VEOL           =1;     
13  VEOL2          =2;     
14  VERASE         =3;     
15  VWERASE        =4;     
16  VKILL          =5;     
17  VREPRINT       =6;     
18 {               =7;        spare 1 }
19  VINTR          =8;     
20  VQUIT          =9;     
21  VSUSP          =10;    
22  VDSUSP         =11;    
23  VSTART         =12;    
24  VSTOP          =13;    
25  VLNEXT         =14;    
26  VDISCARD       =15;    
27  VMIN           =16;    
28  VTIME          =17;    
29  VSTATUS        =18;    
30 {               =19        spare 2 }
31  NCCS           =20;
33 Type
34   winsize = packed record
35     ws_row,
36     ws_col,
37     ws_xpixel,
38     ws_ypixel : word;
39   end;
40   TWinSize=winsize;
43 type
44   Termios = packed record
45     c_iflag,
46     c_oflag,
47     c_cflag,
48     c_lflag  : longint;
49     c_line   : char;
50     c_cc     : array[0..NCCS-1] of byte;
51    {$IFDEF BSD}
52     c_ispeed,
53     c_ospeed : longint; 
54    {$endif}
55   end;
56   TTermios=Termios;
58 CONST
61  POSIX_VDISABLE=Chr($ff);
64 #define CCEQ(val, c)    ((c) == (val) ? (val) != _POSIX_VDISABLE : 0)
67 { * Input flags - software input processing}
69         IGNBRK          =       $1;     { ignore BREAK condition }
70         BRKINT          =       $2;     { map BREAK to SIGINTR }
71         IGNPAR          =       $4;     { ignore (discard) parity errors }
72         PARMRK          =       $8;     { mark parity and framing errors }
73         INPCK           =      $10;     { enable checking of parity errors }
74         ISTRIP          =      $20;     { strip 8th bit off chars }
75         INLCR           =      $40;     { map NL into CR }
76         IGNCR           =      $80;     { ignore CR }
77         ICRNL           =     $100;     { map CR to NL (ala CRMOD) }
78         IXON            =     $200;     { enable output flow control }
79         IXOFF           =     $400;     { enable input flow control }
80         IXANY           =     $800;     { any char will restart after stop }
81         IMAXBEL         =    $2000;     { ring bell on input queue full }
84  * Output flags - software output processing
86         OPOST           =       $1;     { enable following output processing }
87         ONLCR           =       $2;     { map NL to CR-NL (ala CRMOD) }
88         OXTABS          =       $4;     { expand tabs to spaces }
89         ONOEOT          =       $8;     { discard EOT's (^D) on output) }
92  * Control flags - hardware control of terminal
94         CIGNORE         =       $1;     { ignore control flags }
95         CSIZE           =     $300;     { character size mask }
96         CS5             =       $0;         { 5 bits (pseudo) }
97         CS6             =     $100;         { 6 bits }
98         CS7             =     $200;         { 7 bits }
99         CS8             =     $300;         { 8 bits }
100         CSTOPB          =     $400;     { send 2 stop bits }
101         CREAD           =     $800;     { enable receiver }
102         PARENB          =    $1000;     { parity enable }
103         PARODD          =    $2000;     { odd parity, else even }
104         HUPCL           =    $4000;     { hang up on last close }
105         CLOCAL          =    $8000;     { ignore modem status lines }
106         CCTS_OFLOW      =   $10000;     { CTS flow control of output }
107         CRTS_IFLOW      =   $20000;     { RTS flow control of input }
108         CRTSCTS         =   (CCTS_OFLOW or CRTS_IFLOW);
109         CDTR_IFLOW      =   $40000;     { DTR flow control of input }
110         CDSR_OFLOW      =   $80000;     { DSR flow control of output }
111         CCAR_OFLOW      =  $100000;     { DCD flow control of output }
112         MDMBUF          =  $100000;     { old name for CCAR_OFLOW }
115  * "Local" flags - dumping ground for other state
117  * Warning: some flags in this structure begin with
118  * the letter "I" and look like they belong in the
119  * input flag.
122         ECHOKE          =       $1;     { visual erase for line kill }
123         ECHOE           =       $2;     { visually erase chars }
124         ECHOK           =       $4;     { echo NL after line kill }
125         ECHO            =       $8;     { enable echoing }
126         ECHONL          =      $10;     { echo NL even if ECHO is off }
127         ECHOPRT         =      $20;     { visual erase mode for hardcopy }
128         ECHOCTL         =      $40;     { echo control chars as ^(Char) }
129         ISIG            =      $80;     { enable signals INTR, QUIT, [D]SUSP }
130         ICANON          =     $100;     { canonicalize input lines }
131         ALTWERASE       =     $200;     { use alternate WERASE algorithm }
132         IEXTEN          =     $400;     { enable DISCARD and LNEXT }
133         EXTPROC         =     $800;      { external processing }
134         TOSTOP          =  $400000;     { stop background jobs from output }
135         FLUSHO          =  $800000;     { output being flushed (state) }
136         NOKERNINFO      = $2000000;     { no kernel output from VSTATUS }
137         PENDIN          =$20000000;     { XXX retype pending input (state) }
138         NOFLSH          =$80000000;     { don't flush after interrupt }
143  * Commands passed to tcsetattr() for setting the termios structure.
146 CONST
148         TCSANOW         =0;             { make change immediate }
149         TCSADRAIN       =1;             { drain output, then change }
150         TCSAFLUSH       =2;             { drain output, flush input }
151         TCSASOFT        =$10;           { flag - don't alter h.w. state }
154  * Standard speeds
156         B0      =     0;
157         B50     =    50;
158         B75     =    75;
159         B110    =   110;
160         B134    =   134;
161         B150    =   150;
162         B200    =   200;
163         B300    =   300;
164         B600    =   600;
165         B1200   =  1200;
166         B1800   =  1800;
167         B2400   =  2400;
168         B4800   =  4800;
169         B9600   =  9600;
170         B19200  = 19200;
171         B38400  = 38400;
172         B7200   =  7200;
173         B14400  = 14400;
174         B28800  = 28800;
175         B57600  = 57600;
176         B76800  = 76800;
177         B115200 =115200;
178         B230400 =230400;
179         EXTA    = 19200;
180         EXTB    = 38400;
182         TCIFLUSH        =1;
183         TCOFLUSH        =2;
184         TCIOFLUSH       =3;
185         TCOOFF          =1;
186         TCOON           =2;
187         TCIOFF          =3;
188         TCION           =4;
191 #include <sys/cdefs.h>
193 __BEGIN_DECLS
194 speed_t cfgetispeed __P((const struct termios *));
195 speed_t cfgetospeed __P((const struct termios *));
196 int     cfsetispeed __P((struct termios *, speed_t));
197 int     cfsetospeed __P((struct termios *, speed_t));
198 int     tcgetattr __P((int, struct termios *));
199 int     tcsetattr __P((int, int, const struct termios *));
200 int     tcdrain __P((int));
201 int     tcflow __P((int, int));
202 int     tcflush __P((int, int));
203 int     tcsendbreak __P((int, int));
205 #ifndef _POSIX_SOURCE
206 void    cfmakeraw __P((struct termios *));
207 int     cfsetspeed __P((struct termios *, speed_t));
208 #endif { !_POSIX_SOURCE }
209 __END_DECLS
211 #endif { !_KERNEL }
215 struct winsize {
216         unsigned short  ws_row;         { rows, in characters }
217         unsigned short  ws_col;         { columns, in characters }
218         unsigned short  ws_xpixel;      { horizontal size, pixels }
219         unsigned short  ws_ypixel;      { vertical size, pixels }
223        IOCTLREAD        = $40000000;
224        IOCTLWRITE       = $80000000;
225        IOCTLVOID        = $20000000;
227         TIOCMODG        = IOCTLREAD+$47400+ 3;  { get modem control state }
228         TIOCMODS        = IOCTLWRITE+$47400+ 4; { set modem control state }
229                 TIOCM_LE        =$0001;         { line enable }
230                 TIOCM_DTR       =$0002;         { data terminal ready }
231                 TIOCM_RTS       =$0004;         { request to send }
232                 TIOCM_ST        =$0010;         { secondary transmit }
233                 TIOCM_SR        =$0020;         { secondary receive }
234                 TIOCM_CTS       =$0040;         { clear to send }
235                 TIOCM_CAR       =$0100;         { carrier detect }
236                 TIOCM_CD        =TIOCM_CAR;
237                 TIOCM_RNG       =$0200;         { ring }
238                 TIOCM_RI        =TIOCM_RNG;
239                 TIOCM_DSR       =$0400;         { data set ready }
240                                                 { 8-10 compat }
241         TIOCEXCL         =IOCTLVOID+$7400+ 13;          { set exclusive use of tty }
242         TIOCNXCL         =IOCTLVOID+$7400+ 14;          { reset exclusive use of tty }
243                                                 { 15 unused }
244         TIOCFLUSH        =IOCTLWRITE+$47400+ 16;        { flush buffers }
245                                                 { 17-18 compat }
246         TIOCGETA         =IOCTLREAD+$2C7400+ 19; { get termios struct }
247         TIOCSETA         =IOCTLWRITE+$2C7400+ 20; { set termios struct }
248         TIOCSETAW        =IOCTLWRITE+$2C7400+ 21; { drain output, set }
249         TIOCSETAF        =IOCTLWRITE+$2C7400+ 22; { drn out, fls in, set }
250         TIOCGETD         =IOCTLREAD+$47400+ 26; { get line discipline }
251         TIOCSETD         =IOCTLWRITE+$47400+ 27;        { set line discipline }
252                                                 { 127-124 compat }
253         TIOCSBRK         =IOCTLVOID+$7400+ 123;         { set break bit }
254         TIOCCBRK         =IOCTLVOID+$7400+ 122;         { clear break bit }
255         TIOCSDTR         =IOCTLVOID+$7400+ 121;         { set data terminal ready }
256         TIOCCDTR         =IOCTLVOID+$7400+ 120;         { clear data terminal ready }
257         TIOCGPGRP        =IOCTLREAD+$47400+ 119;        { get pgrp of tty }
258         TIOCSPGRP        =IOCTLWRITE+$47400+ 118;       { set pgrp of tty }
259                                                 { 117-116 compat }
260         TIOCOUTQ         =IOCTLREAD+$47400+ 115;        { output queue size }
261         TIOCSTI          =IOCTLWRITE+$17400+ 114;       { simulate terminal input }
262         TIOCNOTTY        =IOCTLVOID+$7400+ 113;         { void tty association }
263         TIOCPKT          =IOCTLWRITE+$47400+ 112;       { pty: set/clear packet mode }
264                 TIOCPKT_DATA            =$00;   { data packet }
265                 TIOCPKT_FLUSHREAD       =$01;   { flush packet }
266                 TIOCPKT_FLUSHWRITE      =$02;   { flush packet }
267                 TIOCPKT_STOP            =$04;   { stop output }
268                 TIOCPKT_START           =$08;   { start output }
269                 TIOCPKT_NOSTOP          =$10;   { no more ^S, ^Q }
270                 TIOCPKT_DOSTOP          =$20;   { now do ^S ^Q }
271                 TIOCPKT_IOCTL           =$40;   { state change of pty driver }
272         TIOCSTOP         =IOCTLVOID+$7400+ 111;         { stop output, like ^S }
273         TIOCSTART        =IOCTLVOID+$7400+ 110;         { start output, like ^Q }
274         TIOCMSET         =IOCTLWRITE+$47400+ 109;       { set all modem bits }
275         TIOCMBIS         =IOCTLWRITE+$47400+ 108;       { bis modem bits }
276         TIOCMBIC         =IOCTLWRITE+$47400+ 107;       { bic modem bits }
277         TIOCMGET         =IOCTLREAD+$47400+ 106;        { get all modem bits }
278         TIOCREMOTE       =IOCTLWRITE+$47400+ 105;       { remote input editing }
279         TIOCGWINSZ       =IOCTLREAD+$87400+ 104;        { get window size }
280         TIOCSWINSZ       =IOCTLWRITE+$87400+ 103;       { set window size }
281         TIOCUCNTL        =IOCTLWRITE+$47400+ 102;       { pty: set/clr usr cntl mode }
282         TIOCSTAT         =IOCTLVOID+$7400+ 101;         { simulate ^T status message }
283   //                       UIOCCMD(n)   _IO('u', n)     { usr cntl op "n" }
284         TIOCCONS         =IOCTLWRITE+$47400+ 98;        { become virtual console }
285         TIOCSCTTY        =IOCTLVOID+$7400+ 97;          { become controlling tty }
286         TIOCEXT          =IOCTLWRITE+$47400+ 96;        { pty: external processing }
287         TIOCSIG          =IOCTLVOID+$7400+ 95;          { pty: generate signal }
288         TIOCDRAIN        =IOCTLVOID+$7400+ 94;          { wait till output drained }
289         TIOCMSDTRWAIT    =IOCTLWRITE+$47400+ 91;        { modem: set wait on close }
290         TIOCMGDTRWAIT    =IOCTLREAD+$47400+ 90; { modem: get wait on close }
291         TIOCTIMESTAMP    =IOCTLREAD+$87400+ 89;         { enable/get timestamp
292                                                  * of last input event }
293         TIOCDCDTIMESTAMP =IOCTLREAD+$87400+ 88; { enable/get timestamp
294                                                  * of last DCd rise }
295         TIOCSDRAINWAIT   =IOCTLWRITE+$47400+ 87;        { set ttywait timeout }
296         TIOCGDRAINWAIT   =IOCTLREAD+$47400+ 86; { get ttywait timeout }
298         TTYDISC          =0;            { termios tty line discipline }
299         SLIPDISC         =4;            { serial IP discipline }
300         PPPDISC          =5;            { PPP discipline }
301         NETGRAPHDISC     =6;            { Netgraph tty node discipline }
305  * Defaults on "first" open.
307         TTYDEF_IFLAG     =(BRKINT       or ICRNL        or IMAXBEL or IXON or IXANY);
308        TTYDEF_OFLAG      =(OPOST or ONLCR);
309        TTYDEF_LFLAG      =(ECHO or ICANON or ISIG or IEXTEN or ECHOE or ECHOKE or ECHOCTL);
310         TTYDEF_CFLAG     =(CREAD or CS8 or HUPCL);
311        TTYDEF_SPEED      =(B9600);
316  * Control Character Defaults
318         CtrlMask        = $1f;  {\037}
319         CEOF            =chr( ORD('d') and CtrlMask);
320         CEOL            =chr( $ff and CtrlMask);{ XXX avoid _POSIX_VDISABLE }
321         CERASE          =chr( $7F and CtrlMask);
322         CINTR           =chr(ORD('c') and CtrlMask);
323         CSTATUS         =chr(ORD('t') and CtrlMask);
324         CKILL           =chr(ORD('u') and CtrlMask);
325         CMIN            =chr(1);
326         CQUIT           =chr(034  and CtrlMask);        { FS, ^\ }
327         CSUSP           =chr(ORD('z') and CtrlMask);
328         CTIME           =chr(0);
329         CDSUSP          =chr(ORD('y') and CtrlMask);
330         CSTART          =chr(ORD('q') and CtrlMask);
331         CSTOP           =chr(ORD('s') and CtrlMask);
332         CLNEXT          =chr(ORD('v') and CtrlMask);
333         CDISCARD        =chr(ORD('o') and CtrlMask);
334         CWERASE         =chr(ORD('w') and CtrlMask);
335         CREPRINT        =chr(ORD('r') and CtrlMask);
336         CEOT            =CEOF;
337 { compat }
338         CBRK            =CEOL;
339         CRPRNT          =CREPRINT;
340         CFLUSH          =CDISCARD;
344  *        TTYDEFCHARS to include an array of default control characters.
346     ttydefchars : array[0..NCCS-1] OF char =(
347         CEOF,   CEOL,   CEOL,   CERASE, CWERASE, CKILL, CREPRINT,
348         POSIX_VDISABLE, CINTR,  CQUIT,  CSUSP,  CDSUSP, CSTART, CSTOP,  CLNEXT,
349         CDISCARD, CMIN, CTIME,  CSTATUS, POSIX_VDISABLE);