/*
- * Copyright (c) 1984, 1985, 1986 by the Regents of the
- * University of California and by Gregory Glenn Minshall.
+ * Copyright (c) 1988 Regents of the University of California.
+ * All rights reserved.
*
- * Permission to use, copy, modify, and distribute these
- * programs and their documentation for any purpose and
- * without fee is hereby granted, provided that this
- * copyright and permission appear on all copies and
- * supporting documentation, the name of the Regents of
- * the University of California not be used in advertising
- * or publicity pertaining to distribution of the programs
- * without specific prior permission, and notice be given in
- * supporting documentation that copying and distribution is
- * by permission of the Regents of the University of California
- * and by Gregory Glenn Minshall. Neither the Regents of the
- * University of California nor Gregory Glenn Minshall make
- * representations about the suitability of this software
- * for any purpose. It is provided "as is" without
- * express or implied warranty.
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at 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'' without express or implied warranty.
*/
#ifndef lint
-static char sccsid[] = "@(#)outbound.c 3.1 10/29/86";
-#endif /* lint */
-
+static char sccsid[] = "@(#)termout.c 3.4 (Berkeley) %G%";
+#endif /* not lint */
#if defined(unix)
#include <signal.h>
#include "../telnet.ext"
+#include "../api/disp_asc.h"
+
#include "../ctlr/hostctlr.h"
#include "../ctlr/inbound.ext"
#include "../ctlr/oia.h"
extern void EmptyTerminal();
#define CorrectTerminalCursor() ((TransparentClock == OutputClock)? \
- terminalCursorAddress:UnLocked? CursorAddress: HighestScreen())
+ CursorAddress:UnLocked? CursorAddress: HighestScreen())
static int terminalCursorAddress; /* where the cursor is on term */
static int screenInitd; /* the screen has been initialized */
static int screenStopped; /* the screen has been stopped */
-#if defined(SLOWSCREEN)
static int max_changes_before_poll; /* how many characters before looking */
/* at terminal and net again */
-#endif /* defined(SLOWSCREEN) */
static int needToRing; /* need to ring terinal bell */
static char *bellSequence = "\07"; /* bell sequence (may be replaced by
#endif /* defined(unix) */
-#if defined(SLOWSCREEN)
static int inHighlightMode = 0;
ScreenImage Terminal[MAXSCREENSIZE];
-#endif /* defined(SLOWSCREEN) */
/* Variables for transparent mode */
#if defined(unix)
static int savefd[2]; /* for storing fds during transcom */
extern int tin, tout; /* file descriptors */
#endif /* defined(unix) */
-
-
-#include "disp_asc.out"
-
\f
/*
init_screen()
{
bellwinup = 0;
-#if defined(SLOWSCREEN)
inHighlightMode = 0;
ClearArray(Terminal);
-#endif /* defined(SLOWSCREEN) */
}
/* NOTREACHED */
}
\f
-#if defined(SLOWSCREEN)
/* What is the screen address of the attribute byte for the terminal */
static int
return(LowestScreen()); /* unformatted screen... */
}
-#endif /* defined(SLOWSCREEN) */
\f
/*
* There are two algorithms for updating the screen.
*/
-#if defined(SLOWSCREEN)
#if defined(NOT43)
static int
#else /* defined(NOT43) */
* decide when the output has caught up.
*/
- if (Highest == HighestScreen()) {
+ if (Highest >= HighestScreen()) { /* Could be > if screen shrunk... */
Highest = ScreenDec(Highest); /* else, while loop will never end */
}
if (Lowest < LowestScreen()) {
columnsleft = NumberColumns;
}
SetHighlightMode(pointer); /* Turn on highlighting */
- while (!IsStartField(pointer) &&
- !TermIsStartField(pointer)) {
+ while ((!IsStartField(pointer)) &&
+ (!TermIsStartField(pointer))) {
c = GetHost(pointer);
DoCharacterAt(c,pointer); /* MACRO */
pointer = ScreenInc(pointer);
* the end of the screen.
*/
if (j > pointer) {
+ /*
+ * pointer is guaranteed to be higher than Highest...
+ */
+ pointer = Highest+1; /* We did the highest thing */
break;
}
} else {
EmptyTerminal(); /* move data along */
return;
}
-#endif /* defined(SLOWSCREEN) */
\f
#if defined(NOT43)
static int
extern char *tgetstr();
#endif /* defined(unix) */
-#if defined(SLOWSCREEN)
+ if (initscr() == ERR) { /* Initialize curses to get line size */
+ ExitString("InitTerminal: Error initializing curses", 1);
+ /*NOTREACHED*/
+ }
+ MaxNumberLines = LINES;
+ MaxNumberColumns = COLS;
ClearArray(Terminal);
-#endif /* defined(SLOWSCREEN) */
terminalCursorAddress = SetBufferAddress(0,0);
#if defined(unix)
signal(SIGHUP, abort);
#endif
TryToSend = FastScreen;
-#if defined(unix) && defined(SLOWSCREEN)
+#if defined(unix)
ioctl(1, TIOCGETP, (char *) &ourttyb);
if ((ourttyb.sg_ospeed < 0) || (ourttyb.sg_ospeed > B9600)) {
max_changes_before_poll = 1920;
TryToSend = SlowScreen;
HaveInput = 1; /* get signals going */
}
-#endif /* defined(unix) && defined(SLOWSCREEN) */
+#endif /* defined(unix) */
setcommandmode();
/*
* By now, initscr() (in curses) has been called (from telnet.c),
screenInitd = 1;
screenStopped = 0; /* Not stopped */
}
- Initialized = 1;
}
if (screenInitd && !screenStopped) {
move(NumberLines-1, 1);
standend();
-#if defined(SLOWSCREEN)
inHighlightMode = 0;
-#endif /* defined(SLOWSCREEN) */
DoARefresh();
setcommandmode();
endwin();
{
outputPurge(); /* flush all data to terminal */
clear(); /* clear in curses */
-#if defined(SLOWSCREEN)
ClearArray(Terminal);
-#endif /* defined(SLOWSCREEN) */
Clear3270();
Lowest = HighestScreen()+1; /* everything in sync... */
Highest = LowestScreen()+1;
delwin(bellwin);
bellwin = 0;
bellwinup = 0;
- Lowest = MIN(Lowest, LINES/2);
- Highest = MAX(Highest, (LINES/2)+3);
-#if defined(SLOWSCREEN)
- memset((char *)(Terminal+LINES/2), 0, (sizeof Terminal[0])*(3*COLS));
-#endif /* defined(SLOWSCREEN) */
touchwin(stdscr);
DoARefresh();
}
DoTerminalOutput()
{
/* called just before a select to conserve IO to terminal */
- if (!Initialized) {
+ if (!(screenInitd||screenStopped)) {
return 1; /* No output if not initialized */
}
if ((Lowest <= Highest) || needToRing ||
}
void
-TransOut(buffer, count)
+TransOut(buffer, count, kind, control)
unsigned char *buffer;
int count;
+int kind; /* 0 or 5 */
+int control; /* To see if we are done */
{
#if defined(unix)
extern char *transcom;
}
#endif /* defined(unix) */
(void) DataToTerminal(buffer, count);
+ if (control && (kind == 0)) { /* Send in AID byte */
+ SendToIBM();
+ } else {
+ TransInput(1, kind); /* Go get some data */
+ }
}