<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<!-- 
  ****************************************************************************
  * Copyright (c) 1998-2004,2006 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * Author: Thomas E. Dickey 1997
  * @Id: define_key.3x,v 1.12 2006/02/25 21:49:19 tom Exp @
-->
<HTML>
<HEAD>
<TITLE>define_key 3x</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1>define_key 3x</H1>
<HR>
<PRE>
<!-- Manpage converted by man2html 3.0.1 -->
<STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG>                                           <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG>




</PRE>
<H2>NAME</H2><PRE>
       <STRONG>define_key</STRONG> - define a keycode


</PRE>
<H2>SYNOPSIS</H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>

       <STRONG>int</STRONG> <STRONG>define_key(const</STRONG> <STRONG>char</STRONG> <STRONG>*definition,</STRONG> <STRONG>int</STRONG> <STRONG>keycode);</STRONG>


</PRE>
<H2>DESCRIPTION</H2><PRE>
       This is an extension to the curses library.  It permits an
       application to define keycodes  with  their  corresponding
       control  strings,  so that the ncurses library will inter-
       pret them just as it would the  predefined  codes  in  the
       terminfo database.

       If  the  given string is null, any existing definition for
       the keycode is removed.  Similarly, if the  given  keycode
       is  negative  or  zero,  any existing string for the given
       definition is removed.


</PRE>
<H2>RETURN VALUE</H2><PRE>
       The keycode  must  be  greater  than  zero,  else  ERR  is
       returned.


</PRE>
<H2>PORTABILITY</H2><PRE>
       These  routines  are  specific  to ncurses.  They were not
       supported on Version 7, BSD or System  V  implementations.
       It  is recommended that any code depending on them be con-
       ditioned using NCURSES_VERSION.


</PRE>
<H2>SEE ALSO</H2><PRE>
       <STRONG><A HREF="keyok.3x.html">keyok(3x)</A></STRONG>, <STRONG><A HREF="key_defined.3x.html">key_defined(3x)</A></STRONG>.


</PRE>
<H2>AUTHOR</H2><PRE>
       Thomas Dickey.



                                                         <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG>
</PRE>
<HR>
<ADDRESS>
Man(1) output converted with
<a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a>
</ADDRESS>
</BODY>
</HTML>
