blob: 37f70842907d755b5f53e2138b95b10aeb39b158 [file] [log] [blame]
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301/****************************************************************************
Steve Kondikae271bc2015-11-15 02:50:53 +01002 * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. *
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05303 * *
4 * Permission is hereby granted, free of charge, to any person obtaining a *
5 * copy of this software and associated documentation files (the *
6 * "Software"), to deal in the Software without restriction, including *
7 * without limitation the rights to use, copy, modify, merge, publish, *
8 * distribute, distribute with modifications, sublicense, and/or sell *
9 * copies of the Software, and to permit persons to whom the Software is *
10 * furnished to do so, subject to the following conditions: *
11 * *
12 * The above copyright notice and this permission notice shall be included *
13 * in all copies or substantial portions of the Software. *
14 * *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
18 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
21 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
22 * *
23 * Except as contained in this notice, the name(s) of the above copyright *
24 * holders shall not be used in advertising or otherwise to promote the *
25 * sale, use or other dealings in this Software without prior written *
26 * authorization. *
27 ****************************************************************************/
28
29/****************************************************************************
30 * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
31 * and: Eric S. Raymond <esr@snark.thyrsus.com> *
Steve Kondikae271bc2015-11-15 02:50:53 +010032 * and: Thomas E. Dickey 2002 *
33 * and: Juergen Pfeifer 2009 *
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053034 ****************************************************************************/
35
36/*
37 * lib_kernel.c
38 *
39 * Misc. low-level routines:
40 * erasechar()
41 * killchar()
42 * flushinp()
43 *
44 * The baudrate() and delay_output() functions could logically live here,
45 * but are in other modules to reduce the static-link size of programs
46 * that use only these facilities.
47 */
48
49#include <curses.priv.h>
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053050
Steve Kondikae271bc2015-11-15 02:50:53 +010051MODULE_ID("$Id: lib_kernel.c,v 1.31 2010/12/19 01:21:19 tom Exp $")
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053052
53static int
54_nc_vdisable(void)
55{
56 int value = -1;
57#if defined(_POSIX_VDISABLE) && HAVE_UNISTD_H
58 value = _POSIX_VDISABLE;
59#endif
60#if defined(_PC_VDISABLE)
61 if (value == -1) {
Steve Kondikae271bc2015-11-15 02:50:53 +010062 value = (int) fpathconf(0, _PC_VDISABLE);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053063 if (value == -1) {
64 value = 0377;
65 }
66 }
67#elif defined(VDISABLE)
68 if (value == -1)
69 value = VDISABLE;
70#endif
71 return value;
72}
73
74/*
75 * erasechar()
76 *
77 * Return erase character as given in cur_term->Ottyb.
78 *
79 */
80
81NCURSES_EXPORT(char)
Steve Kondikae271bc2015-11-15 02:50:53 +010082NCURSES_SP_NAME(erasechar) (NCURSES_SP_DCL0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053083{
84 int result = ERR;
Steve Kondikae271bc2015-11-15 02:50:53 +010085 TERMINAL *termp = TerminalOf(SP_PARM);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053086
Steve Kondikae271bc2015-11-15 02:50:53 +010087 T((T_CALLED("erasechar(%p)"), (void *) SP_PARM));
88
89 if (termp != 0) {
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053090#ifdef TERMIOS
Steve Kondikae271bc2015-11-15 02:50:53 +010091 result = termp->Ottyb.c_cc[VERASE];
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053092 if (result == _nc_vdisable())
93 result = ERR;
94#else
Steve Kondikae271bc2015-11-15 02:50:53 +010095 result = termp->Ottyb.sg_erase;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053096#endif
97 }
Steve Kondikae271bc2015-11-15 02:50:53 +010098 returnChar((char) result);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053099}
100
Steve Kondikae271bc2015-11-15 02:50:53 +0100101#if NCURSES_SP_FUNCS
102NCURSES_EXPORT(char)
103erasechar(void)
104{
105 return NCURSES_SP_NAME(erasechar) (CURRENT_SCREEN);
106}
107#endif
108
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530109/*
110 * killchar()
111 *
112 * Return kill character as given in cur_term->Ottyb.
113 *
114 */
115
116NCURSES_EXPORT(char)
Steve Kondikae271bc2015-11-15 02:50:53 +0100117NCURSES_SP_NAME(killchar) (NCURSES_SP_DCL0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530118{
119 int result = ERR;
Steve Kondikae271bc2015-11-15 02:50:53 +0100120 TERMINAL *termp = TerminalOf(SP_PARM);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530121
Steve Kondikae271bc2015-11-15 02:50:53 +0100122 T((T_CALLED("killchar(%p)"), (void *) SP_PARM));
123
124 if (termp != 0) {
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530125#ifdef TERMIOS
Steve Kondikae271bc2015-11-15 02:50:53 +0100126 result = termp->Ottyb.c_cc[VKILL];
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530127 if (result == _nc_vdisable())
128 result = ERR;
129#else
Steve Kondikae271bc2015-11-15 02:50:53 +0100130 result = termp->Ottyb.sg_kill;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530131#endif
132 }
Steve Kondikae271bc2015-11-15 02:50:53 +0100133 returnChar((char) result);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530134}
135
Steve Kondikae271bc2015-11-15 02:50:53 +0100136#if NCURSES_SP_FUNCS
137NCURSES_EXPORT(char)
138killchar(void)
139{
140 return NCURSES_SP_NAME(killchar) (CURRENT_SCREEN);
141}
142#endif
143
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530144/*
145 * flushinp()
146 *
147 * Flush any input on cur_term->Filedes
148 *
149 */
150
151NCURSES_EXPORT(int)
Steve Kondikae271bc2015-11-15 02:50:53 +0100152NCURSES_SP_NAME(flushinp) (NCURSES_SP_DCL0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530153{
Steve Kondikae271bc2015-11-15 02:50:53 +0100154 TERMINAL *termp = TerminalOf(SP_PARM);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530155
Steve Kondikae271bc2015-11-15 02:50:53 +0100156 T((T_CALLED("flushinp(%p)"), (void *) SP_PARM));
157
158 if (termp != 0) {
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530159#ifdef TERMIOS
Steve Kondikae271bc2015-11-15 02:50:53 +0100160 tcflush(termp->Filedes, TCIFLUSH);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530161#else
162 errno = 0;
163 do {
Steve Kondikae271bc2015-11-15 02:50:53 +0100164 ioctl(termp->Filedes, TIOCFLUSH, 0);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530165 } while
166 (errno == EINTR);
167#endif
Steve Kondikae271bc2015-11-15 02:50:53 +0100168 if (SP_PARM) {
169 SP_PARM->_fifohead = -1;
170 SP_PARM->_fifotail = 0;
171 SP_PARM->_fifopeek = 0;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530172 }
173 returnCode(OK);
174 }
175 returnCode(ERR);
176}
Steve Kondikae271bc2015-11-15 02:50:53 +0100177
178#if NCURSES_SP_FUNCS
179NCURSES_EXPORT(int)
180flushinp(void)
181{
182 return NCURSES_SP_NAME(flushinp) (CURRENT_SCREEN);
183}
184#endif