lib_options.c revision 62449
150276Speter/**************************************************************************** 262449Speter * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. * 350276Speter * * 450276Speter * Permission is hereby granted, free of charge, to any person obtaining a * 550276Speter * copy of this software and associated documentation files (the * 650276Speter * "Software"), to deal in the Software without restriction, including * 750276Speter * without limitation the rights to use, copy, modify, merge, publish, * 850276Speter * distribute, distribute with modifications, sublicense, and/or sell * 950276Speter * copies of the Software, and to permit persons to whom the Software is * 1050276Speter * furnished to do so, subject to the following conditions: * 1150276Speter * * 1250276Speter * The above copyright notice and this permission notice shall be included * 1350276Speter * in all copies or substantial portions of the Software. * 1450276Speter * * 1550276Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 1650276Speter * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 1750276Speter * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 1850276Speter * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 1950276Speter * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 2050276Speter * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 2150276Speter * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 2250276Speter * * 2350276Speter * Except as contained in this notice, the name(s) of the above copyright * 2450276Speter * holders shall not be used in advertising or otherwise to promote the * 2550276Speter * sale, use or other dealings in this Software without prior written * 2650276Speter * authorization. * 2750276Speter ****************************************************************************/ 2850276Speter 2950276Speter/**************************************************************************** 3050276Speter * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * 3150276Speter * and: Eric S. Raymond <esr@snark.thyrsus.com> * 3250276Speter ****************************************************************************/ 3350276Speter 3450276Speter/* 3550276Speter** lib_options.c 3650276Speter** 3750276Speter** The routines to handle option setting. 3850276Speter** 3950276Speter*/ 4050276Speter 4150276Speter#include <curses.priv.h> 4250276Speter 4362449Speter#include <term.h> 4450276Speter 4562449SpeterMODULE_ID("$Id: lib_options.c,v 1.39 2000/03/12 00:19:11 tom Exp $") 4650276Speter 4762449Speterint 4862449Speteridlok(WINDOW *win, bool flag) 4950276Speter{ 5062449Speter T((T_CALLED("idlok(%p,%d)"), win, flag)); 5150276Speter 5262449Speter if (win) { 5362449Speter _nc_idlok = win->_idlok = (flag && (has_il() || change_scroll_region)); 5462449Speter returnCode(OK); 5562449Speter } else 5662449Speter returnCode(ERR); 5750276Speter} 5850276Speter 5962449Spetervoid 6062449Speteridcok(WINDOW *win, bool flag) 6150276Speter{ 6262449Speter T((T_CALLED("idcok(%p,%d)"), win, flag)); 6350276Speter 6462449Speter if (win) 6562449Speter _nc_idcok = win->_idcok = (flag && has_ic()); 6650276Speter 6762449Speter returnVoid; 6850276Speter} 6950276Speter 7062449Speterint 7162449Speterhalfdelay(int t) 7250276Speter{ 7362449Speter T((T_CALLED("halfdelay(%d)"), t)); 7450276Speter 7562449Speter if (t < 1 || t > 255) 7662449Speter returnCode(ERR); 7750276Speter 7862449Speter cbreak(); 7962449Speter SP->_cbreak = t + 1; 8062449Speter returnCode(OK); 8150276Speter} 8250276Speter 8362449Speterint 8462449Speternodelay(WINDOW *win, bool flag) 8550276Speter{ 8662449Speter T((T_CALLED("nodelay(%p,%d)"), win, flag)); 8750276Speter 8862449Speter if (win) { 8962449Speter if (flag == TRUE) 9050276Speter win->_delay = 0; 9150276Speter else 9262449Speter win->_delay = -1; 9362449Speter returnCode(OK); 9462449Speter } else 9562449Speter returnCode(ERR); 9650276Speter} 9750276Speter 9862449Speterint 9962449Speternotimeout(WINDOW *win, bool f) 10050276Speter{ 10162449Speter T((T_CALLED("notimout(%p,%d)"), win, f)); 10250276Speter 10362449Speter if (win) { 10462449Speter win->_notimeout = f; 10562449Speter returnCode(OK); 10662449Speter } else 10762449Speter returnCode(ERR); 10850276Speter} 10950276Speter 11062449Spetervoid 11162449Speterwtimeout(WINDOW *win, int delay) 11250276Speter{ 11362449Speter T((T_CALLED("wtimeout(%p,%d)"), win, delay)); 11450276Speter 11562449Speter if (win) { 11662449Speter win->_delay = delay; 11762449Speter } 11850276Speter} 11950276Speter 12062449Speterint 12162449Speterkeypad(WINDOW *win, bool flag) 12250276Speter{ 12362449Speter T((T_CALLED("keypad(%p,%d)"), win, flag)); 12450276Speter 12562449Speter if (win) { 12662449Speter win->_use_keypad = flag; 12762449Speter returnCode(_nc_keypad(flag)); 12862449Speter } else 12962449Speter returnCode(ERR); 13050276Speter} 13150276Speter 13262449Speterint 13362449Spetermeta(WINDOW *win GCC_UNUSED, bool flag) 13450276Speter{ 13562449Speter /* Ok, we stay relaxed and don't signal an error if win is NULL */ 13662449Speter T((T_CALLED("meta(%p,%d)"), win, flag)); 13750276Speter 13862449Speter SP->_use_meta = flag; 13950276Speter 14062449Speter if (flag && meta_on) { 14162449Speter TPUTS_TRACE("meta_on"); 14262449Speter putp(meta_on); 14362449Speter } else if (!flag && meta_off) { 14462449Speter TPUTS_TRACE("meta_off"); 14562449Speter putp(meta_off); 14662449Speter } 14762449Speter returnCode(OK); 14850276Speter} 14950276Speter 15050276Speter/* curs_set() moved here to narrow the kernel interface */ 15150276Speter 15262449Speterint 15362449Spetercurs_set(int vis) 15450276Speter{ 15562449Speter int cursor = SP->_cursor; 15650276Speter 15762449Speter T((T_CALLED("curs_set(%d)"), vis)); 15850276Speter 15962449Speter if (vis < 0 || vis > 2) 16062449Speter returnCode(ERR); 16150276Speter 16262449Speter if (vis == cursor) 16362449Speter returnCode(cursor); 16450276Speter 16562449Speter switch (vis) { 16662449Speter case 2: 16762449Speter if (cursor_visible) { 16862449Speter TPUTS_TRACE("cursor_visible"); 16962449Speter putp(cursor_visible); 17062449Speter } else 17162449Speter returnCode(ERR); 17262449Speter break; 17362449Speter case 1: 17462449Speter if (cursor_normal) { 17562449Speter TPUTS_TRACE("cursor_normal"); 17662449Speter putp(cursor_normal); 17762449Speter } else 17862449Speter returnCode(ERR); 17962449Speter break; 18062449Speter case 0: 18162449Speter if (cursor_invisible) { 18262449Speter TPUTS_TRACE("cursor_invisible"); 18362449Speter putp(cursor_invisible); 18462449Speter } else 18562449Speter returnCode(ERR); 18662449Speter break; 18762449Speter } 18862449Speter SP->_cursor = vis; 18962449Speter _nc_flush(); 19050276Speter 19162449Speter returnCode(cursor == -1 ? 1 : cursor); 19250276Speter} 19350276Speter 19462449Speterint 19562449Spetertypeahead(int fd) 19650276Speter{ 19762449Speter T((T_CALLED("typeahead(%d)"), fd)); 19862449Speter SP->_checkfd = fd; 19962449Speter returnCode(OK); 20050276Speter} 20150276Speter 20250276Speter/* 20350276Speter** has_key() 20450276Speter** 20550276Speter** Return TRUE if the current terminal has the given key 20650276Speter** 20750276Speter*/ 20850276Speter 20950276Speter#ifdef NCURSES_EXT_FUNCS 21062449Speterstatic int 21162449Speterhas_key_internal(int keycode, struct tries *tp) 21250276Speter{ 21350276Speter if (tp == 0) 21462449Speter return (FALSE); 21550276Speter else if (tp->value == keycode) 21662449Speter return (TRUE); 21750276Speter else 21862449Speter return (has_key_internal(keycode, tp->child) 21962449Speter || has_key_internal(keycode, tp->sibling)); 22050276Speter} 22150276Speter 22262449Speterint 22362449Speterhas_key(int keycode) 22450276Speter{ 22550276Speter T((T_CALLED("has_key(%d)"), keycode)); 22650276Speter returnCode(has_key_internal(keycode, SP->_keytry)); 22750276Speter} 22850276Speter#endif /* NCURSES_EXT_FUNCS */ 22950276Speter 23050276Speter/* Turn the keypad on/off 23150276Speter * 23250276Speter * Note: we flush the output because changing this mode causes some terminals 23350276Speter * to emit different escape sequences for cursor and keypad keys. If we don't 23450276Speter * flush, then the next wgetch may get the escape sequence that corresponds to 23550276Speter * the terminal state _before_ switching modes. 23650276Speter */ 23762449Speterint 23862449Speter_nc_keypad(bool flag) 23950276Speter{ 24062449Speter if (flag && keypad_xmit) { 24162449Speter TPUTS_TRACE("keypad_xmit"); 24262449Speter putp(keypad_xmit); 24362449Speter _nc_flush(); 24462449Speter } else if (!flag && keypad_local) { 24562449Speter TPUTS_TRACE("keypad_local"); 24662449Speter putp(keypad_local); 24762449Speter _nc_flush(); 24862449Speter } 24950276Speter 25062449Speter if (flag && !SP->_tried) { 25162449Speter _nc_init_keytry(); 25262449Speter SP->_tried = TRUE; 25362449Speter } 25462449Speter return (OK); 25550276Speter} 256