Reduce extern's.
[unix-history] / usr / src / usr.bin / telnet / terminal.c
#include <arpa/telnet.h>
#include <sys/types.h>
#include "ring.h"
#include "externs.h"
#include "types.h"
Ring ttyoring, ttyiring;
char ttyobuf[2*BUFSIZ], ttyibuf[BUFSIZ];
char
termEofChar,
termEraseChar,
termFlushChar,
termIntChar,
termKillChar,
termLiteralNextChar,
termQuitChar;
/*
* initialize the terminal data structures.
*/
init_terminal()
{
ring_init(&ttyoring, ttyobuf, sizeof ttyobuf);
ring_init(&ttyiring, ttyibuf, sizeof ttyibuf);
autoflush = TerminalAutoFlush();
}
/*
* Send as much data as possible to the terminal.
*
* The return value indicates whether we did any
* useful work.
*/
int
ttyflush(drop)
int drop;
{
register int n, n0, n1;
n0 = ring_full_count(&ttyoring);
if ((n1 = n = ring_full_consecutive(&ttyoring)) > 0) {
if (drop) {
TerminalFlushOutput();
/* we leave 'n' alone! */
} else {
n = TerminalWrite(ttyoring.consume, n);
}
}
if (n > 0) {
/*
* If we wrote everything, and the full count is
* larger than what we wrote, then write the
* rest of the buffer.
*/
if (n1 == n && n0 > n) {
n1 = n0 - n;
if (!drop)
n1 = TerminalWrite(ttyoring.bottom, n1);
n += n1;
}
ring_consumed(&ttyoring, n);
}
return n > 0;
}
\f
/*
* These routines decides on what the mode should be (based on the values
* of various global variables).
*/
int
getconnmode()
{
static char newmode[16] =
{ 4, 5, 3, 3, 2, 2, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6 };
int modeindex = 0;
if (dontlecho && (clocks.echotoggle > clocks.modenegotiated)) {
modeindex += 1;
}
if (hisopts[TELOPT_ECHO]) {
modeindex += 2;
}
if (hisopts[TELOPT_SGA]) {
modeindex += 4;
}
if (In3270) {
modeindex += 8;
}
return newmode[modeindex];
}
void
setconnmode()
{
TerminalNewMode(getconnmode());
}
void
setcommandmode()
{
TerminalNewMode(0);
}