* Copyright (c) 1988 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
static char sccsid
[] = "@(#)terminal.c 1.14 (Berkeley) %G%";
char ttyobuf
[2*BUFSIZ
], ttyibuf
[BUFSIZ
];
#endif /* defined(MSDOS) */
* initialize the terminal data structures.
if (ring_init(&ttyoring
, ttyobuf
, sizeof ttyobuf
) != 1) {
if (ring_init(&ttyiring
, ttyibuf
, sizeof ttyibuf
) != 1) {
autoflush
= TerminalAutoFlush();
* Send as much data as possible to the terminal.
* The return value indicates whether we did any
n0
= ring_full_count(&ttyoring
);
if ((n1
= n
= ring_full_consecutive(&ttyoring
)) > 0) {
/* we leave 'n' alone! */
n
= TerminalWrite(ttyoring
.consume
, n
);
* If we wrote everything, and the full count is
* larger than what we wrote, then write the
n1
= TerminalWrite(ttyoring
.bottom
, n1
);
ring_consumed(&ttyoring
, n
);
* These routines decides on what the mode should be (based on the values
* of various global variables).
static char newmode
[16] =
{ 4, 5, 3, 3, 2, 2, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6 };
if (dontlecho
&& (clocks
.echotoggle
> clocks
.modenegotiated
)) {
if (should_he(TELOPT_ECHO
)) {
if (should_he(TELOPT_SGA
)) {
return newmode
[modeindex
];
TerminalNewMode(getconnmode());