projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix bug of clearing terminal screen in wrong place (curses
[unix-history]
/
usr
/
src
/
usr.bin
/
tn3270
/
sys_curses
/
termout.c
diff --git
a/usr/src/usr.bin/tn3270/sys_curses/termout.c
b/usr/src/usr.bin/tn3270/sys_curses/termout.c
index
db1ba6a
..
d7bfa91
100644
(file)
--- a/
usr/src/usr.bin/tn3270/sys_curses/termout.c
+++ b/
usr/src/usr.bin/tn3270/sys_curses/termout.c
@@
-31,21
+31,24
@@
static char sccsid[] = "@(#)outbound.c 3.1 10/29/86";
#include <stdio.h>
#include <curses.h>
#include <stdio.h>
#include <curses.h>
-#include "../general.h"
+#include "../general
/general
.h"
#include "terminal.h"
#include "../telnet.ext"
#include "terminal.h"
#include "../telnet.ext"
+#include "../apilib/disp_asc.h"
+
#include "../ctlr/hostctlr.h"
#include "../ctlr/inbound.ext"
#include "../ctlr/hostctlr.h"
#include "../ctlr/inbound.ext"
+#include "../ctlr/oia.h"
#include "../ctlr/options.ext"
#include "../ctlr/outbound.ext"
#include "../ctlr/screen.h"
#include "../ctlr/options.ext"
#include "../ctlr/outbound.ext"
#include "../ctlr/screen.h"
-#include "../
keyboard
/map3270.ext"
+#include "../
ascii
/map3270.ext"
-#include "../
system
/globals.h"
+#include "../
general
/globals.h"
extern void EmptyTerminal();
extern void EmptyTerminal();
@@
-56,10
+59,8
@@
extern void EmptyTerminal();
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 */
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 */
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
static int needToRing; /* need to ring terinal bell */
static char *bellSequence = "\07"; /* bell sequence (may be replaced by
@@
-73,10
+74,8
@@
static char *KS, *KE;
#endif /* defined(unix) */
#endif /* defined(unix) */
-#if defined(SLOWSCREEN)
static int inHighlightMode = 0;
ScreenImage Terminal[MAXSCREENSIZE];
static int inHighlightMode = 0;
ScreenImage Terminal[MAXSCREENSIZE];
-#endif /* defined(SLOWSCREEN) */
/* Variables for transparent mode */
#if defined(unix)
/* Variables for transparent mode */
#if defined(unix)
@@
-84,10
+83,6
@@
static int tcflag = -1; /* transparent mode command flag */
static int savefd[2]; /* for storing fds during transcom */
extern int tin, tout; /* file descriptors */
#endif /* 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
/*
\f
/*
@@
-100,10
+95,8
@@
void
init_screen()
{
bellwinup = 0;
init_screen()
{
bellwinup = 0;
-#if defined(SLOWSCREEN)
inHighlightMode = 0;
ClearArray(Terminal);
inHighlightMode = 0;
ClearArray(Terminal);
-#endif /* defined(SLOWSCREEN) */
}
}
@@
-147,7
+140,6
@@
int where; /* cursor address */
/* NOTREACHED */
}
\f
/* NOTREACHED */
}
\f
-#if defined(SLOWSCREEN)
/* What is the screen address of the attribute byte for the terminal */
static int
/* What is the screen address of the attribute byte for the terminal */
static int
@@
-167,7
+159,6
@@
register int p;
return(LowestScreen()); /* unformatted screen... */
}
return(LowestScreen()); /* unformatted screen... */
}
-#endif /* defined(SLOWSCREEN) */
\f
/*
* There are two algorithms for updating the screen.
\f
/*
* There are two algorithms for updating the screen.
@@
-187,7
+178,6
@@
register int p;
*/
*/
-#if defined(SLOWSCREEN)
#if defined(NOT43)
static int
#else /* defined(NOT43) */
#if defined(NOT43)
static int
#else /* defined(NOT43) */
@@
-335,8
+325,8
@@
SlowScreen()
columnsleft = NumberColumns;
}
SetHighlightMode(pointer); /* Turn on highlighting */
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);
c = GetHost(pointer);
DoCharacterAt(c,pointer); /* MACRO */
pointer = ScreenInc(pointer);
@@
-383,6
+373,10
@@
SlowScreen()
* the end of the screen.
*/
if (j > 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 {
break;
}
} else {
@@
-441,7
+435,6
@@
SlowScreen()
EmptyTerminal(); /* move data along */
return;
}
EmptyTerminal(); /* move data along */
return;
}
-#endif /* defined(SLOWSCREEN) */
\f
#if defined(NOT43)
static int
\f
#if defined(NOT43)
static int
@@
-498,7
+491,8
@@
FastScreen()
FastScreen(); /* Recurse */
return;
} else if (fieldattr) { /* Should we display? */
FastScreen(); /* Recurse */
return;
} else if (fieldattr) { /* Should we display? */
- addch(disp_asc[p->data]); /* Display translated data */
+ /* Display translated data */
+ addch(disp_asc[GetTerminalPointer(p)]);
} else {
addch(' '); /* Display a blank */
}
} else {
addch(' '); /* Display a blank */
}
@@
-540,7
+534,7
@@
FastScreen()
} else {
if (fieldattr) { /* Should we display? */
/* Display translated data */
} else {
if (fieldattr) { /* Should we display? */
/* Display translated data */
- *tmp++ = disp_asc[
p->data
];
+ *tmp++ = disp_asc[
GetTerminalPointer(p)
];
} else {
*tmp++ = ' ';
}
} else {
*tmp++ = ' ';
}
@@
-593,6
+587,13
@@
void
#endif /* defined(NOT43) */
(*TryToSend)() = FastScreen;
\f
#endif /* defined(NOT43) */
(*TryToSend)() = FastScreen;
\f
+void
+ScreenOIA(oia)
+OIA *oia;
+{
+}
+
+
/* InitTerminal - called to initialize the screen, etc. */
void
/* InitTerminal - called to initialize the screen, etc. */
void
@@
-613,16
+614,14
@@
InitTerminal()
extern char *tgetstr();
#endif /* defined(unix) */
extern char *tgetstr();
#endif /* defined(unix) */
-#if defined(SLOWSCREEN)
ClearArray(Terminal);
ClearArray(Terminal);
-#endif /* defined(SLOWSCREEN) */
terminalCursorAddress = SetBufferAddress(0,0);
#if defined(unix)
signal(SIGHUP, abort);
#endif
TryToSend = FastScreen;
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;
ioctl(1, TIOCGETP, (char *) &ourttyb);
if ((ourttyb.sg_ospeed < 0) || (ourttyb.sg_ospeed > B9600)) {
max_changes_before_poll = 1920;
@@
-634,7
+633,7
@@
InitTerminal()
TryToSend = SlowScreen;
HaveInput = 1; /* get signals going */
}
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),
setcommandmode();
/*
* By now, initscr() (in curses) has been called (from telnet.c),
@@
-666,7
+665,6
@@
InitTerminal()
screenInitd = 1;
screenStopped = 0; /* Not stopped */
}
screenInitd = 1;
screenStopped = 0; /* Not stopped */
}
- Initialized = 1;
}
}
@@
-679,9
+677,7
@@
int doNewLine;
if (screenInitd && !screenStopped) {
move(NumberLines-1, 1);
standend();
if (screenInitd && !screenStopped) {
move(NumberLines-1, 1);
standend();
-#if defined(SLOWSCREEN)
inHighlightMode = 0;
inHighlightMode = 0;
-#endif /* defined(SLOWSCREEN) */
DoARefresh();
setcommandmode();
endwin();
DoARefresh();
setcommandmode();
endwin();
@@
-734,9
+730,7
@@
LocalClearScreen()
{
outputPurge(); /* flush all data to terminal */
clear(); /* clear in curses */
{
outputPurge(); /* flush all data to terminal */
clear(); /* clear in curses */
-#if defined(SLOWSCREEN)
ClearArray(Terminal);
ClearArray(Terminal);
-#endif /* defined(SLOWSCREEN) */
Clear3270();
Lowest = HighestScreen()+1; /* everything in sync... */
Highest = LowestScreen()+1;
Clear3270();
Lowest = HighestScreen()+1; /* everything in sync... */
Highest = LowestScreen()+1;
@@
-750,11
+744,6
@@
BellOff()
delwin(bellwin);
bellwin = 0;
bellwinup = 0;
delwin(bellwin);
bellwin = 0;
bellwinup = 0;
- Lowest = MIN(Lowest, LINES/2);
- Highest = MAX(Highest, (LINES/2)+3);
-#if defined(SLOWSCREEN)
- memset(Terminal+LINES/2, 0, (sizeof Terminal[0])*(3*COLS));
-#endif /* defined(SLOWSCREEN) */
touchwin(stdscr);
DoARefresh();
}
touchwin(stdscr);
DoARefresh();
}
@@
-804,7
+793,7
@@
int
DoTerminalOutput()
{
/* called just before a select to conserve IO to terminal */
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 ||
return 1; /* No output if not initialized */
}
if ((Lowest <= Highest) || needToRing ||