<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <!-- **************************************************************************** * Copyright (c) 1998,2002 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. * **************************************************************************** * @Id: menu_driver.3x,v 1.10 2002/02/16 22:40:59 tom Exp @ --> <HTML> <HEAD> <TITLE>menu_driver 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>menu_driver 3x</H1> <HR> <PRE> <!-- Manpage converted by man2html 3.0.1 --> </PRE> <H2>NAME</H2><PRE> <STRONG>menu_driver</STRONG> - command-processing loop of the menu system </PRE> <H2>SYNOPSIS</H2><PRE> <STRONG>#include</STRONG> <STRONG><menu.h></STRONG> int menu_driver(MENU *menu, int c); </PRE> <H2>DESCRIPTION</H2><PRE> Once a menu has been posted (displayed), you should funnel input events to it through <STRONG>menu_driver</STRONG>. This routine has three major input cases; either the input is a menu navi- gation request, it's a printable ASCII character or it is the KEY_MOUSE special key associated with an mouse event. The menu driver requests are as follows: REQ_LEFT_ITEM Move left to an item. REQ_RIGHT_ITEM Move right to an item. REQ_UP_ITEM Move up to an item. REQ_DOWN_ITEM Move down to an item. REQ_SCR_ULINE Scroll up a line. REQ_SCR_DLINE Scroll down a line. REQ_SCR_DPAGE Scroll down a page. REQ_SCR_UPAGE Scroll up a page. REQ_FIRST_ITEM Move to the first item. REQ_LAST_ITEM Move to the last item. REQ_NEXT_ITEM Move to the next item. REQ_PREV_ITEM Move to the previous item. REQ_TOGGLE_ITEM Select/deselect an item. REQ_CLEAR_PATTERN Clear the menu pattern buffer. REQ_BACK_PATTERN Delete the previous character from the pattern buffer. REQ_NEXT_MATCH Move to the next item matching the pattern match. REQ_PREV_MATCH Move to the previous item matching the pattern match. If the second argument is a printable ASCII character, the code appends it to the pattern buffer and attempts to move to the next item matching the new pattern. If there is no such match, <STRONG>menu_driver</STRONG> returns <STRONG>E_NO_MATCH</STRONG> and deletes the appended character from the buffer. If the second argument is one of the above pre-defined requests, the corresponding action is performed. If the second argument is the KEY_MOUSE special key, the associated mouse event is translated into one of the above pre-defined requests. Currently only clicks in the user window (e.g. inside the menu display area or the decora- tion window) are handled. If you click above the display region of the menu, a REQ_SCR_ULINE is generated, if you doubleclick a REQ_SCR_UPAGE is generated and if you tripleclick a REQ_FIRST_ITEM is generated. If you click below the display region of the menu, a REQ_SCR_DLINE is generated, if you doubleclick a REQ_SCR_DPAGE is generated and if you tripleclick a REQ_LAST_ITEM is generated. If you click at an item inside the display area of the menu, the menu cursor is positioned to that item. If you double- click at an item a REQ_TOGGLE_ITEM is generated and <STRONG>E_UNKNOWN_COMMAND</STRONG> is returned. This return value makes sense, because a double click usually means that an item- specific action should be returned. It's exactly the pur- pose of this return value to signal that an application specific command should be executed. If a translation into a request was done, <STRONG>menu_driver</STRONG> returns the result of this request. If you clicked outside the user window or the mouse event couldn't be translated into a menu request an <STRONG>E_REQUEST_DENIED</STRONG> is returned. If the second argument is neither printable ASCII nor one of the above pre-defined menu requests or KEY_MOUSE, the drive assumes it is an application-specific command and returns <STRONG>E_UNKNOWN_COMMAND</STRONG>. Application-defined commands should be defined relative to <STRONG>MAX_COMMAND</STRONG>, the maximum value of these pre-defined requests. </PRE> <H2>RETURN VALUE</H2><PRE> <STRONG>menu_driver</STRONG> return one of the following error codes: <STRONG>E_OK</STRONG> The routine succeeded. <STRONG>E_SYSTEM_ERROR</STRONG> System error occurred (see <STRONG>errno</STRONG>). <STRONG>E_BAD_ARGUMENT</STRONG> Routine detected an incorrect or out-of-range argu- ment. <STRONG>E_BAD_STATE</STRONG> Routine was called from an initialization or termina- tion function. <STRONG>E_NOT_POSTED</STRONG> The menu has not been posted. <STRONG>E_UNKNOWN_COMMAND</STRONG> The menu driver code saw an unknown request code. <STRONG>E_NO_MATCH</STRONG> Character failed to match. <STRONG>E_REQUEST_DENIED</STRONG> The menu driver could not process the request. </PRE> <H2>SEE ALSO</H2><PRE> <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="menu.3x.html">menu(3x)</A></STRONG>. </PRE> <H2>NOTES</H2><PRE> The header file <STRONG><menu.h></STRONG> automatically includes the header files <STRONG><curses.h></STRONG>. </PRE> <H2>PORTABILITY</H2><PRE> These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. The sup- port for mouse events is ncurses specific. </PRE> <H2>AUTHORS</H2><PRE> Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. </PRE> <HR> <ADDRESS> Man(1) output converted with <a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a> </ADDRESS> </BODY> </HTML>