* Copyright (c) 1982, 1986 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
* @(#)tty_compat.c 7.2 (Berkeley) %G%
* mapping routines for old line discipline (yuck)
/* XXX - fold these two tables into one */
static struct speedtab compatspeeds
[] = {
static int compatspcodes
[16] = {
0, 50, 75, 110, 134, 150, 200, 300, 600, 1200,
1800, 2400, 4800, 9600, 19200, 38400,
ttcompat(tp
, com
, data
, flag
)
register struct sgttyb
*sg
= (struct sgttyb
*)data
;
register u_char
*cc
= tp
->t_cc
;
speed
= ttspeedtab(tp
->t_ospeed
, compatspeeds
);
sg
->sg_ospeed
= (speed
== -1) ? 15 : speed
;
sg
->sg_ispeed
= sg
->sg_ospeed
;
speed
= ttspeedtab(tp
->t_ispeed
, compatspeeds
);
sg
->sg_ispeed
= (speed
== -1) ? 15 : speed
;
sg
->sg_erase
= cc
[VERASE
];
sg
->sg_flags
= ttcompatgetflags(tp
);
register struct sgttyb
*sg
= (struct sgttyb
*)data
;
if ((speed
= sg
->sg_ispeed
) > 15 || speed
< 0)
term
.c_ispeed
= compatspcodes
[speed
];
if ((speed
= sg
->sg_ospeed
) > 15 || speed
< 0)
term
.c_ospeed
= compatspcodes
[speed
];
term
.c_cc
[VERASE
] = sg
->sg_erase
;
term
.c_cc
[VKILL
] = sg
->sg_kill
;
term
.c_cc
[VERASE2
] = _POSIX_VDISABLE
;
tp
->t_flags
= (tp
->t_flags
&0xffff0000) | sg
->sg_flags
;
ttcompatsetflags(tp
, &term
);
return (ttioctl(tp
, com
== TIOCSETP
? TIOCSETAF
: TIOCSETA
,
struct tchars
*tc
= (struct tchars
*)data
;
register u_char
*cc
= tp
->t_cc
;
tc
->t_startc
= cc
[VSTART
];
struct tchars
*tc
= (struct tchars
*)data
;
register u_char
*cc
= tp
->t_cc
;
cc
[VSTART
] = tc
->t_startc
;
cc
[VEOL2
] = _POSIX_VDISABLE
;
struct ltchars
*ltc
= (struct ltchars
*)data
;
register u_char
*cc
= tp
->t_cc
;
cc
[VSUSP
] = ltc
->t_suspc
;
cc
[VDSUSP
] = ltc
->t_dsuspc
;
cc
[VREPRINT
] = ltc
->t_rprntc
;
cc
[VFLUSHO
] = ltc
->t_flushc
;
cc
[VWERASE
] = ltc
->t_werasc
;
cc
[VLNEXT
] = ltc
->t_lnextc
;
struct ltchars
*ltc
= (struct ltchars
*)data
;
register u_char
*cc
= tp
->t_cc
;
ltc
->t_suspc
= cc
[VSUSP
];
ltc
->t_dsuspc
= cc
[VDSUSP
];
ltc
->t_rprntc
= cc
[VREPRINT
];
ltc
->t_flushc
= cc
[VFLUSHO
];
ltc
->t_werasc
= cc
[VWERASE
];
ltc
->t_lnextc
= cc
[VLNEXT
];
tp
->t_flags
= (tp
->t_flags
&0xffff) | *(int *)data
<<16;
(ttcompatgetflags(tp
)&0xffff0000)|(tp
->t_flags
&0xffff);
tp
->t_flags
|= *(int *)data
<<16;
tp
->t_flags
&= ~(*(int *)data
<<16);
ttcompatsetlflags(tp
, &term
);
return (ttioctl(tp
, TIOCSETA
, &term
, flag
));
*(int *)data
= ttcompatgetflags(tp
)>>16;
printf("CLGET: returning %x\n", *(int *)data
);
*(int *)data
= tp
->t_line
? tp
->t_line
: 2;
return(ttioctl(tp
, TIOCSETD
,
*(int *)data
== 2 ? (caddr_t
)&ldisczero
: data
, flag
));
register long iflag
= tp
->t_iflag
;
register long lflag
= tp
->t_lflag
;
register long oflag
= tp
->t_oflag
;
register long cflag
= tp
->t_cflag
;
if (iflag
&ICRNL
|| oflag
&ONLCR
)
if ((tp
->t_flags
&LITOUT
) && !(oflag
&OPOST
))
if ((lflag
&ICANON
) == 0) {
if (iflag
&IXON
|| lflag
&ISIG
|| lflag
&IEXTEN
|| cflag
&PARENB
)
flags
|= lflag
&(ECHO
|MDMBUF
|TOSTOP
|FLUSHO
|NOHANG
|PENDIN
|NOFLSH
);
printf("getflags: %x\n", flags
);
register struct termios
*t
;
register flags
= tp
->t_flags
;
register long iflag
= t
->c_iflag
;
register long oflag
= t
->c_oflag
;
register long lflag
= t
->c_lflag
;
register long cflag
= t
->c_cflag
;
lflag
&= ~(ECHOCTL
|ISIG
|ICANON
|IEXTEN
);
iflag
|= BRKINT
|IXON
|IMAXBEL
;
if (flags
&(RAW
|LITOUT
|PASS8
)) {
cflag
&= ~(CSIZE
|PARENB
);
if ((flags
&(RAW
|PASS8
)) == 0)
if ((flags
&(EVENP
|ODDP
)) == EVENP
) {
} else if ((flags
&(EVENP
|ODDP
)) == ODDP
) {
oflag
&= ~OPOST
; /* move earlier ? */
register struct termios
*t
;
register flags
= tp
->t_flags
;
register long iflag
= t
->c_iflag
;
register long oflag
= t
->c_oflag
;
register long lflag
= t
->c_lflag
;
register long cflag
= t
->c_cflag
;
lflag
&= ~(MDMBUF
|TOSTOP
|FLUSHO
|NOHANG
|PENDIN
|NOFLSH
);
lflag
|= flags
&(MDMBUF
|TOSTOP
|FLUSHO
|NOHANG
|PENDIN
|NOFLSH
);
if (flags
&(LITOUT
|PASS8
)) {
cflag
&= ~(CSIZE
|PARENB
);
if ((flags
&(PASS8
|RAW
)) == 0)
} else if ((flags
&RAW
) == 0) {