X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=menu%2Fm_format.c;h=9738dbf25d2d50b88c48b87c7bb28ebf75ed7353;hp=71b974dfbe4cd9d55b15629d7dcbf18d3481ad1f;hb=7503e8d82292a2a0a4d8bb55bdf3f8a203159f68;hpb=3a9b6a3bf0269231bef7de74757a910dedd04e0c diff --git a/menu/m_format.c b/menu/m_format.c index 71b974df..9738dbf2 100644 --- a/menu/m_format.c +++ b/menu/m_format.c @@ -1,40 +1,51 @@ -/*-----------------------------------------------------------------------------+ -| The ncurses menu library is Copyright (C) 1995-1997 | -| by Juergen Pfeifer | -| All Rights Reserved. | -| | -| Permission to use, copy, modify, and distribute this software and its | -| documentation for any purpose and without fee is hereby granted, provided | -| that the above copyright notice appear in all copies and that both that | -| copyright notice and this permission notice appear in supporting | -| documentation, and that the name of the above listed copyright holder(s) not | -| be used in advertising or publicity pertaining to distribution of the | -| software without specific, written prior permission. | -| | -| THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD TO | -| THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- | -| NESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR | -| ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RE- | -| SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, | -| NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH | -| THE USE OR PERFORMANCE OF THIS SOFTWARE. | -+-----------------------------------------------------------------------------*/ +/**************************************************************************** + * Copyright 2020 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 * + * "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: Juergen Pfeifer, 1995,1997 * + ****************************************************************************/ /*************************************************************************** -* Module menu_format * +* Module m_format * * Set and get maximum numbers of rows and columns in menus * ***************************************************************************/ #include "menu.priv.h" -MODULE_ID("$Id: m_format.c,v 1.5 1997/05/01 16:47:26 juergen Exp $") +MODULE_ID("$Id: m_format.c,v 1.19 2020/02/02 23:34:34 tom Exp $") #define minimum(a,b) ((a)<(b) ? (a): (b)) /*--------------------------------------------------------------------------- -| Facility : libnmenu +| Facility : libnmenu | Function : int set_menu_format(MENU *menu, int rows, int cols) -| +| | Description : Sets the maximum number of rows and columns of items | that may be displayed at one time on a menu. If the | menu contains more items than can be displayed at @@ -45,66 +56,72 @@ MODULE_ID("$Id: m_format.c,v 1.5 1997/05/01 16:47:26 juergen Exp $") | E_NOT_CONNECTED - there are no items connected | E_POSTED - the menu is already posted +--------------------------------------------------------------------------*/ -int set_menu_format(MENU *menu, int rows, int cols) +NCURSES_EXPORT(int) +set_menu_format(MENU * menu, int rows, int cols) { int total_rows, total_cols; - - if (rows<0 || cols<0) + + T((T_CALLED("set_menu_format(%p,%d,%d)"), (void *)menu, rows, cols)); + + if (rows < 0 || cols < 0) RETURN(E_BAD_ARGUMENT); - + if (menu) { - if ( menu->status & _POSTED ) + if (menu->status & _POSTED) RETURN(E_POSTED); - + if (!(menu->items)) RETURN(E_NOT_CONNECTED); - - if (rows==0) + + if (rows == 0) rows = menu->frows; - if (cols==0) + if (cols == 0) cols = menu->fcols; - + if (menu->pattern) Reset_Pattern(menu); - - menu->frows = rows; - menu->fcols = cols; - - assert(rows>0 && cols>0); - total_rows = (menu->nitems - 1)/cols + 1; - total_cols = (menu->status & O_ROWMAJOR) ? - minimum(menu->nitems,cols) : - (menu->nitems-1)/total_rows + 1; - - menu->rows = total_rows; - menu->cols = total_cols; - menu->arows = minimum(total_rows,rows); - menu->toprow = 0; + + menu->frows = (short)rows; + menu->fcols = (short)cols; + + assert(rows > 0 && cols > 0); + total_rows = (menu->nitems - 1) / cols + 1; + total_cols = (menu->opt & O_ROWMAJOR) ? + minimum(menu->nitems, cols) : + (menu->nitems - 1) / total_rows + 1; + + menu->rows = (short)total_rows; + menu->cols = (short)total_cols; + menu->arows = (short)minimum(total_rows, rows); + menu->toprow = 0; menu->curitem = *(menu->items); assert(menu->curitem); - menu->status |= _LINK_NEEDED; + SetStatus(menu, _LINK_NEEDED); _nc_Calculate_Item_Length_and_Width(menu); } else { - if (rows>0) _nc_Default_Menu.frows = rows; - if (cols>0) _nc_Default_Menu.fcols = cols; + if (rows > 0) + _nc_Default_Menu.frows = (short)rows; + if (cols > 0) + _nc_Default_Menu.fcols = (short)cols; } - + RETURN(E_OK); } /*--------------------------------------------------------------------------- -| Facility : libnmenu +| Facility : libnmenu | Function : void menu_format(const MENU *menu, int *rows, int *cols) -| +| | Description : Returns the maximum number of rows and columns that may | be displayed at one time on menu. | | Return Values : - +--------------------------------------------------------------------------*/ -void menu_format(const MENU *menu, int *rows, int *cols) +NCURSES_EXPORT(void) +menu_format(const MENU * menu, int *rows, int *cols) { if (rows) *rows = Normalize_Menu(menu)->frows;