X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/0cbc39183d9b43753f8f5a8cd951e157b06028a9..refs/tags/BSD-4_3_Net_2:/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 f83e26f228..f456c64e17 100644 --- a/usr/src/usr.bin/tn3270/sys_curses/termout.c +++ b/usr/src/usr.bin/tn3270/sys_curses/termout.c @@ -1,22 +1,38 @@ -/* - * Copyright (c) 1988 Regents of the University of California. +/*- + * Copyright (c) 1988 The Regents of the University of California. * All rights reserved. * - * 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. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ #ifndef lint -static char sccsid[] = "@(#)termout.c 3.8 (Berkeley) %G%"; +static char sccsid[] = "@(#)termout.c 4.3 (Berkeley) 4/26/91"; #endif /* not lint */ #if defined(unix) @@ -188,8 +204,10 @@ SlowScreen() register int fieldattr, termattr; register int columnsleft; +#define NORMAL 0 #define HIGHLIGHT 1 /* Mask bits */ #define NONDISPLAY 4 /* Mask bits */ +#define UNDETERMINED 8 /* Mask bits */ #define DoAttributes(x) \ switch (x&ATTR_DSPD_MASK) { \ @@ -298,10 +316,18 @@ SlowScreen() move(ScreenLine(pointer), ScreenLineOffset(pointer)); /* what is the field attribute of the current position */ - fieldattr = FieldAttributes(pointer); - DoAttributes(fieldattr); - termattr = TermAttributes(pointer); - DoAttributes(termattr); + if (FormattedScreen()) { + fieldattr = FieldAttributes(pointer); + DoAttributes(fieldattr); + } else { + fieldattr = NORMAL; + } + if (TerminalFormattedScreen()) { + termattr = TermAttributes(pointer); + DoAttributes(termattr); + } else { + termattr = NORMAL; + } SetHighlightMode(fieldattr); /* @@ -326,8 +352,7 @@ SlowScreen() if (TermIsStartField(pointer)) { is = DISP_BLANK; isattr = 0; - termattr = GetTerminal(pointer); - DoAttributes(termattr); + termattr = UNDETERMINED; /* Need to find out AFTER update */ } else { if (termattr&NONDISPLAY) { is = DISP_BLANK; @@ -350,8 +375,23 @@ SlowScreen() DoCharacterAt(shouldbe, pointer); if (IsStartField(pointer)) { TermNewField(pointer, FieldAttributes(pointer)); + termattr = GetTerminal(pointer); + DoAttributes(termattr); } else { SetTerminal(pointer, GetHost(pointer)); + /* + * If this USED to be a start field location, + * recompute the terminal attributes. + */ + if (termattr == UNDETERMINED) { + termattr = WhereTermAttrByte(pointer); + if ((termattr != 0) || TermIsStartField(0)) { + termattr = GetTerminal(termattr); + DoAttributes(termattr); + } else { /* Unformatted screen */ + termattr = NORMAL; + } + } } pointer = ScreenInc(pointer); if (!(--columnsleft)) { @@ -512,11 +552,12 @@ FastScreen() *tmp++ = 0; /* close out */ addstr((char *)tmpbuf); tmp = tmpbuf; - tmpend = tmpbuf + NumberColumns - ScreenLineOffset(p-Host); + tmpend = tmpbuf+NumberColumns-ScreenLineOffset(p-Host)-1; } + standend(); + addch(' '); fieldattr = FieldAttributesPointer(p); /* Get attributes */ DoAttribute(fieldattr); /* Set standout, non-display */ - *tmp++ = ' '; } else { if (fieldattr) { /* Should we display? */ /* Display translated data */