aboutsummaryrefslogtreecommitdiff
path: root/menu/m_new.c
diff options
context:
space:
mode:
Diffstat (limited to 'menu/m_new.c')
-rw-r--r--menu/m_new.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/menu/m_new.c b/menu/m_new.c
index c20c66517790..79f9292a7b3c 100644
--- a/menu/m_new.c
+++ b/menu/m_new.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 1998-2004,2006 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2009,2010 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 *
@@ -37,11 +37,11 @@
#include "menu.priv.h"
-MODULE_ID("$Id: m_new.c,v 1.18 2006/11/04 19:04:06 tom Exp $")
+MODULE_ID("$Id: m_new.c,v 1.21 2010/01/23 21:20:11 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
-| Function : MENU *new_menu(ITEM **items)
+| Function : MENU* _nc_new_menu(SCREEN*, ITEM **items)
|
| Description : Creates a new menu connected to the item pointer
| array items and returns a pointer to the new menu.
@@ -51,18 +51,25 @@ MODULE_ID("$Id: m_new.c,v 1.18 2006/11/04 19:04:06 tom Exp $")
| Return Values : NULL on error
+--------------------------------------------------------------------------*/
NCURSES_EXPORT(MENU *)
-new_menu(ITEM ** items)
+NCURSES_SP_NAME(new_menu) (NCURSES_SP_DCLx ITEM ** items)
{
int err = E_SYSTEM_ERROR;
- MENU *menu = (MENU *) calloc(1, sizeof(MENU));
+ MENU *menu = typeCalloc(MENU, 1);
- T((T_CALLED("new_menu(%p)"), items));
+ T((T_CALLED("new_menu(%p,%p)"), (void *)SP_PARM, (void *)items));
if (menu)
{
*menu = _nc_Default_Menu;
menu->status = 0;
menu->rows = menu->frows;
menu->cols = menu->fcols;
+#if NCURSES_SP_FUNCS
+ /* This ensures userwin and usersub are always non-null,
+ so we can derive always the SCREEN that this menu is
+ running on. */
+ menu->userwin = SP_PARM->_stdscr;
+ menu->usersub = SP_PARM->_stdscr;
+#endif
if (items && *items)
{
if (!_nc_Connect_Items(menu, items))
@@ -71,6 +78,8 @@ new_menu(ITEM ** items)
free(menu);
menu = (MENU *) 0;
}
+ else
+ err = E_OK;
}
}
@@ -82,6 +91,25 @@ new_menu(ITEM ** items)
/*---------------------------------------------------------------------------
| Facility : libnmenu
+| Function : MENU *new_menu(ITEM **items)
+|
+| Description : Creates a new menu connected to the item pointer
+| array items and returns a pointer to the new menu.
+| The new menu is initialized with the values from the
+| default menu.
+|
+| Return Values : NULL on error
++--------------------------------------------------------------------------*/
+#if NCURSES_SP_FUNCS
+NCURSES_EXPORT(MENU *)
+new_menu(ITEM ** items)
+{
+ return NCURSES_SP_NAME(new_menu) (CURRENT_SCREEN, items);
+}
+#endif
+
+/*---------------------------------------------------------------------------
+| Facility : libnmenu
| Function : int free_menu(MENU *menu)
|
| Description : Disconnects menu from its associated item pointer
@@ -94,7 +122,7 @@ new_menu(ITEM ** items)
NCURSES_EXPORT(int)
free_menu(MENU * menu)
{
- T((T_CALLED("free_menu(%p)"), menu));
+ T((T_CALLED("free_menu(%p)"), (void *)menu));
if (!menu)
RETURN(E_BAD_ARGUMENT);