/****************************************************************************
- * Copyright (c) 1998-2004,2009 Free Software Foundation, Inc. *
+ * Copyright 2020-2021,2022 Thomas E. Dickey *
+ * Copyright 1998-2010,2012 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 *
#include "menu.priv.h"
-MODULE_ID("$Id: m_post.c,v 1.27 2009/02/28 21:02:46 juergen Exp $")
+MODULE_ID("$Id: m_post.c,v 1.38 2022/09/24 09:38:44 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Post_Item(const MENU * menu, const ITEM * item)
+MENU_EXPORT(void)
+_nc_Post_Item(const MENU *menu, const ITEM *item)
{
int i;
chtype ch;
int count = 0;
bool isfore = FALSE, isback = FALSE, isgrey = FALSE;
int name_len;
- int desc_len;
assert(menu->win);
- it is a onevalued menu and it is the current item
- or it has a selection value
*/
- wattron(menu->win, menu->back);
+ wattron(menu->win, (int)menu->back);
if (item->value || (item == menu->curitem))
{
if (menu->marklen)
item. */
if (!(menu->opt & O_ONEVALUE) && item->value && item != menu->curitem)
{
- wattron(menu->win, menu->fore);
+ wattron(menu->win, (int)menu->fore);
isfore = TRUE;
}
waddstr(menu->win, menu->mark);
if (isfore)
{
- wattron(menu->win, menu->fore);
+ wattron(menu->win, (int)menu->fore);
isfore = FALSE;
}
}
else /* otherwise we have to wipe out the marker area */
for (ch = ' ', i = menu->marklen; i > 0; i--)
waddch(menu->win, ch);
- wattroff(menu->win, menu->back);
+ wattroff(menu->win, (int)menu->back);
count += menu->marklen;
/* First we have to calculate the attribute depending on selectability
*/
if (!(item->opt & O_SELECTABLE))
{
- wattron(menu->win, menu->grey);
+ wattron(menu->win, (int)menu->grey);
isgrey = TRUE;
}
else
{
if (item->value || item == menu->curitem)
{
- wattron(menu->win, menu->fore);
+ wattron(menu->win, (int)menu->fore);
isfore = TRUE;
}
else
{
- wattron(menu->win, menu->back);
+ wattron(menu->win, (int)menu->back);
isback = TRUE;
}
}
{
int m = menu->spc_desc / 2;
int cy = -1, cx = -1;
+ int desc_len;
for (ch = ' ', i = 0; i < menu->spc_desc; i++)
{
assert(cx >= 0 && cy >= 0);
getyx(menu->win, ncy, ncx);
if (isgrey)
- wattroff(menu->win, menu->grey);
+ wattroff(menu->win, (int)menu->grey);
else if (isfore)
- wattroff(menu->win, menu->fore);
- wattron(menu->win, menu->back);
+ wattroff(menu->win, (int)menu->fore);
+ wattron(menu->win, (int)menu->back);
for (j = 1; j < menu->spc_rows; j++)
{
if ((item_y + j) < getmaxy(menu->win))
waddch(menu->win, ' ');
}
if ((cy + j) < getmaxy(menu->win))
- mvwaddch(menu->win, cy + j, cx - 1, menu->pad);
+ (void)mvwaddch(menu->win, cy + j, cx - 1, menu->pad);
}
wmove(menu->win, ncy, ncx);
if (!isback)
- wattroff(menu->win, menu->back);
+ wattroff(menu->win, (int)menu->back);
}
}
/* Remove attributes */
if (isfore)
- wattroff(menu->win, menu->fore);
+ wattroff(menu->win, (int)menu->fore);
if (isback)
- wattroff(menu->win, menu->back);
+ wattroff(menu->win, (int)menu->back);
if (isgrey)
- wattroff(menu->win, menu->grey);
+ wattroff(menu->win, (int)menu->grey);
}
/*---------------------------------------------------------------------------
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Draw_Menu(const MENU * menu)
+MENU_EXPORT(void)
+_nc_Draw_Menu(const MENU *menu)
{
ITEM *item = menu->items[0];
- ITEM *lasthor, *lastvert;
+ ITEM *lastvert;
ITEM *hitem;
- int y = 0;
chtype s_bkgd;
assert(item && menu->win);
werase(menu->win);
wbkgdset(menu->win, s_bkgd);
- lastvert = (menu->opt & O_NONCYCLIC) ? (ITEM *) 0 : item;
+ lastvert = (menu->opt & O_NONCYCLIC) ? (ITEM *)0 : item;
- do
+ if (item != NULL)
{
- wmove(menu->win, y, 0);
-
- hitem = item;
- lasthor = (menu->opt & O_NONCYCLIC) ? (ITEM *) 0 : hitem;
+ int y = 0;
do
{
- _nc_Post_Item(menu, hitem);
+ ITEM *lasthor;
+
+ wmove(menu->win, y, 0);
- wattron(menu->win, menu->back);
- if (((hitem = hitem->right) != lasthor) && hitem)
+ hitem = item;
+ lasthor = (menu->opt & O_NONCYCLIC) ? (ITEM *)0 : hitem;
+
+ do
{
- int i, j, cy, cx;
- chtype ch = ' ';
+ _nc_Post_Item(menu, hitem);
- getyx(menu->win, cy, cx);
- for (j = 0; j < menu->spc_rows; j++)
+ wattron(menu->win, (int)menu->back);
+ if (((hitem = hitem->right) != lasthor) && hitem)
{
- wmove(menu->win, cy + j, cx);
- for (i = 0; i < menu->spc_cols; i++)
+ int i, j, cy, cx;
+ chtype ch = ' ';
+
+ getyx(menu->win, cy, cx);
+ for (j = 0; j < menu->spc_rows; j++)
{
- waddch(menu->win, ch);
+ wmove(menu->win, cy + j, cx);
+ for (i = 0; i < menu->spc_cols; i++)
+ {
+ waddch(menu->win, ch);
+ }
}
+ wmove(menu->win, cy, cx + menu->spc_cols);
}
- wmove(menu->win, cy, cx + menu->spc_cols);
}
- }
- while (hitem && (hitem != lasthor));
- wattroff(menu->win, menu->back);
+ while (hitem && (hitem != lasthor));
+ wattroff(menu->win, (int)menu->back);
- item = item->down;
- y += menu->spc_rows;
+ item = item->down;
+ y += menu->spc_rows;
+ }
+ while (item && (item != lastvert));
}
- while (item && (item != lastvert));
}
/*---------------------------------------------------------------------------
| E_BAD_STATE - Menu in userexit routine
| E_POSTED - Menu already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-post_menu(MENU * menu)
+MENU_EXPORT(int)
+post_menu(MENU *menu)
{
- T((T_CALLED("post_menu(%p)"), menu));
+ T((T_CALLED("post_menu(%p)"), (void *)menu));
if (!menu)
RETURN(E_BAD_ARGUMENT);
if (menu->items && *(menu->items))
{
- int y;
int h = 1 + menu->spc_rows * (menu->rows - 1);
WINDOW *win = Get_Menu_Window(menu);
if ((menu->win = newpad(h, menu->width)))
{
- y = (maxy >= h) ? h : maxy;
+ int y = (maxy >= h) ? h : maxy;
+
if (y >= menu->height)
y = menu->height;
if (!(menu->sub = subpad(menu->win, y, menu->width, 0, 0)))
else
RETURN(E_NOT_CONNECTED);
- menu->status |= _POSTED;
+ SetStatus(menu, _POSTED);
if (!(menu->opt & O_ONEVALUE))
{
| E_BAD_STATE - menu in userexit routine
| E_NOT_POSTED - menu is not posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-unpost_menu(MENU * menu)
+MENU_EXPORT(int)
+unpost_menu(MENU *menu)
{
WINDOW *win;
- T((T_CALLED("unpost_menu(%p)"), menu));
+ T((T_CALLED("unpost_menu(%p)"), (void *)menu));
if (!menu)
RETURN(E_BAD_ARGUMENT);
delwin(menu->win);
menu->win = (WINDOW *)0;
- menu->status &= ~_POSTED;
+ ClrStatus(menu, _POSTED);
RETURN(E_OK);
}