jcs's openbsd hax
openbsd
1/* $OpenBSD: m_hook.c,v 1.8 2023/10/17 09:52:10 nicm Exp $ */
2
3/****************************************************************************
4 * Copyright 2018-2020,2021 Thomas E. Dickey *
5 * Copyright 1998-2012,2016 Free Software Foundation, Inc. *
6 * *
7 * Permission is hereby granted, free of charge, to any person obtaining a *
8 * copy of this software and associated documentation files (the *
9 * "Software"), to deal in the Software without restriction, including *
10 * without limitation the rights to use, copy, modify, merge, publish, *
11 * distribute, distribute with modifications, sublicense, and/or sell *
12 * copies of the Software, and to permit persons to whom the Software is *
13 * furnished to do so, subject to the following conditions: *
14 * *
15 * The above copyright notice and this permission notice shall be included *
16 * in all copies or substantial portions of the Software. *
17 * *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
21 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
24 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 * *
26 * Except as contained in this notice, the name(s) of the above copyright *
27 * holders shall not be used in advertising or otherwise to promote the *
28 * sale, use or other dealings in this Software without prior written *
29 * authorization. *
30 ****************************************************************************/
31
32/****************************************************************************
33 * Author: Juergen Pfeifer, 1995,1997 *
34 ****************************************************************************/
35
36/***************************************************************************
37* Module m_hook *
38* Assign application specific routines for automatic invocation by menus *
39***************************************************************************/
40
41#include "menu.priv.h"
42
43MODULE_ID("$Id: m_hook.c,v 1.8 2023/10/17 09:52:10 nicm Exp $")
44
45/* "Template" macro to generate function to set application specific hook */
46#define GEN_HOOK_SET_FUNCTION( typ, name ) \
47MENU_EXPORT(int) NCURSES_API set_ ## typ ## _ ## name (MENU *menu, Menu_Hook func )\
48{\
49 TR_FUNC_BFR(1);\
50 T((T_CALLED("set_" #typ "_" #name "(%p,%s)"), (void *) menu, TR_FUNC_ARG(0, func)));\
51 (Normalize_Menu(menu) -> typ ## name = func );\
52 RETURN(E_OK);\
53}
54
55/* "Template" macro to generate function to get application specific hook */
56#define GEN_HOOK_GET_FUNCTION( typ, name ) \
57MENU_EXPORT(Menu_Hook) NCURSES_API typ ## _ ## name ( const MENU *menu )\
58{\
59 T((T_CALLED(#typ "_" #name "(%p)"), (const void *) menu));\
60 returnMenuHook(Normalize_Menu(menu) -> typ ## name);\
61}
62
63/*---------------------------------------------------------------------------
64| Facility : libnmenu
65| Function : int set_menu_init(MENU *menu, void (*f)(MENU *))
66|
67| Description : Set user-exit which is called when menu is posted
68| or just after the top row changes.
69|
70| Return Values : E_OK - success
71+--------------------------------------------------------------------------*/
72GEN_HOOK_SET_FUNCTION(menu, init)
73
74/*---------------------------------------------------------------------------
75| Facility : libnmenu
76| Function : void (*)(MENU *) menu_init(const MENU *menu)
77|
78| Description : Return address of user-exit function which is called
79| when a menu is posted or just after the top row
80| changes.
81|
82| Return Values : Menu init function address or NULL
83+--------------------------------------------------------------------------*/
84GEN_HOOK_GET_FUNCTION(menu, init)
85
86/*---------------------------------------------------------------------------
87| Facility : libnmenu
88| Function : int set_menu_term (MENU *menu, void (*f)(MENU *))
89|
90| Description : Set user-exit which is called when menu is unposted
91| or just before the top row changes.
92|
93| Return Values : E_OK - success
94+--------------------------------------------------------------------------*/
95GEN_HOOK_SET_FUNCTION(menu, term)
96
97/*---------------------------------------------------------------------------
98| Facility : libnmenu
99| Function : void (*)(MENU *) menu_term(const MENU *menu)
100|
101| Description : Return address of user-exit function which is called
102| when a menu is unposted or just before the top row
103| changes.
104|
105| Return Values : Menu finalization function address or NULL
106+--------------------------------------------------------------------------*/
107GEN_HOOK_GET_FUNCTION(menu, term)
108
109/*---------------------------------------------------------------------------
110| Facility : libnmenu
111| Function : int set_item_init (MENU *menu, void (*f)(MENU *))
112|
113| Description : Set user-exit which is called when menu is posted
114| or just after the current item changes.
115|
116| Return Values : E_OK - success
117+--------------------------------------------------------------------------*/
118GEN_HOOK_SET_FUNCTION(item, init)
119
120/*---------------------------------------------------------------------------
121| Facility : libnmenu
122| Function : void (*)(MENU *) item_init (const MENU *menu)
123|
124| Description : Return address of user-exit function which is called
125| when a menu is posted or just after the current item
126| changes.
127|
128| Return Values : Item init function address or NULL
129+--------------------------------------------------------------------------*/
130GEN_HOOK_GET_FUNCTION(item, init)
131
132/*---------------------------------------------------------------------------
133| Facility : libnmenu
134| Function : int set_item_term (MENU *menu, void (*f)(MENU *))
135|
136| Description : Set user-exit which is called when menu is unposted
137| or just before the current item changes.
138|
139| Return Values : E_OK - success
140+--------------------------------------------------------------------------*/
141GEN_HOOK_SET_FUNCTION(item, term)
142
143/*---------------------------------------------------------------------------
144| Facility : libnmenu
145| Function : void (*)(MENU *) item_init (const MENU *menu)
146|
147| Description : Return address of user-exit function which is called
148| when a menu is unposted or just before the current item
149| changes.
150|
151| Return Values : Item finalization function address or NULL
152+--------------------------------------------------------------------------*/
153GEN_HOOK_GET_FUNCTION(item, term)
154
155/* m_hook.c ends here */