3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1995, by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 #pragma ident "%Z%%M% %I% %E% SMI"
28
29 /*
30 * doupdate.c
31 *
32 * XCurses Library
33 *
34 * Copyright 1990, 1995 by Mortice Kern Systems Inc. All rights reserved.
35 *
36 */
37
38 #ifdef M_RCSID
39 #ifndef lint
40 static char const rcsID[] = "$Header: /rd/src/libc/xcurses/rcs/doupdate.c 1.9 1995/07/26 17:45:06 ant Exp $";
41 #endif
42 #endif
43
44 #include <private.h>
45 #include <string.h>
46 #include <setjmp.h>
47 #include <signal.h>
48
896 * Send all changes made to _newscr to the physical terminal.
897 *
898 * If idlok() is set TRUE then doupdate will try and use hardware insert
899 * and delete line sequences in an effort to optimize output. idlok()
900 * should really only be used in applications that want a proper scrolling
901 * effect.
902 *
903 * Added scroll heuristic to handle special case where a full size window
904 * with full size scroll region, will scroll the window and replace dirty
905 * lines instead of performing usual cost/script operations.
906 */
907 int
908 doupdate()
909 {
910 #ifdef SIGTSTP
911 int (*oldsig)(int) = signal(SIGTSTP, SIG_IGN);
912 #endif
913
914 #ifdef M_CURSES_TYPEAHEAD
915 unsigned char cc;
916 int min, time, icanon;
917
918 if (__m_screen->_flags & S_ISATTY) {
919 /* Set up non-blocking input for typeahead trapping. */
920 min = cur_term->_prog.c_cc[VMIN];
921 time = cur_term->_prog.c_cc[VTIME];
922 icanon = cur_term->_prog.c_lflag & ICANON;
923
924 cur_term->_prog.c_cc[VMIN] = 0;
925 cur_term->_prog.c_cc[VTIME] = 0;
926 cur_term->_prog.c_lflag &= ~ICANON;
927
928 (void) tcsetattr(__m_screen->_kfd, TCSANOW, &cur_term->_prog);
929 }
930 #endif /* M_CURSES_TYPEAHEAD */
931
932 #ifdef M_CURSES_TRACE
933 __m_trace(
934 "doupdate(void) using %s algorithm.",
935 (__m_screen->_flags & S_INS_DEL_LINE) ? "complex" : "simple"
936 );
|
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright 2015 Gary Mills
24 * Copyright (c) 1995, by Sun Microsystems, Inc.
25 * All rights reserved.
26 */
27
28 /*
29 * doupdate.c
30 *
31 * XCurses Library
32 *
33 * Copyright 1990, 1995 by Mortice Kern Systems Inc. All rights reserved.
34 *
35 */
36
37 #ifdef M_RCSID
38 #ifndef lint
39 static char const rcsID[] = "$Header: /rd/src/libc/xcurses/rcs/doupdate.c 1.9 1995/07/26 17:45:06 ant Exp $";
40 #endif
41 #endif
42
43 #include <private.h>
44 #include <string.h>
45 #include <setjmp.h>
46 #include <signal.h>
47
895 * Send all changes made to _newscr to the physical terminal.
896 *
897 * If idlok() is set TRUE then doupdate will try and use hardware insert
898 * and delete line sequences in an effort to optimize output. idlok()
899 * should really only be used in applications that want a proper scrolling
900 * effect.
901 *
902 * Added scroll heuristic to handle special case where a full size window
903 * with full size scroll region, will scroll the window and replace dirty
904 * lines instead of performing usual cost/script operations.
905 */
906 int
907 doupdate()
908 {
909 #ifdef SIGTSTP
910 int (*oldsig)(int) = signal(SIGTSTP, SIG_IGN);
911 #endif
912
913 #ifdef M_CURSES_TYPEAHEAD
914 unsigned char cc;
915 volatile int min, time, icanon;
916
917 if (__m_screen->_flags & S_ISATTY) {
918 /* Set up non-blocking input for typeahead trapping. */
919 min = cur_term->_prog.c_cc[VMIN];
920 time = cur_term->_prog.c_cc[VTIME];
921 icanon = cur_term->_prog.c_lflag & ICANON;
922
923 cur_term->_prog.c_cc[VMIN] = 0;
924 cur_term->_prog.c_cc[VTIME] = 0;
925 cur_term->_prog.c_lflag &= ~ICANON;
926
927 (void) tcsetattr(__m_screen->_kfd, TCSANOW, &cur_term->_prog);
928 }
929 #endif /* M_CURSES_TYPEAHEAD */
930
931 #ifdef M_CURSES_TRACE
932 __m_trace(
933 "doupdate(void) using %s algorithm.",
934 (__m_screen->_flags & S_INS_DEL_LINE) ? "complex" : "simple"
935 );
|