]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - menu/menu.h
ncurses 6.2 - patch 20200509
[ncurses.git] / menu / menu.h
index b63c7406f6111d937c8eca21d9d6366627c4c269..b2e845c6fa45f81e45c365742e436f6263f2fb1c 100644 (file)
@@ -1,28 +1,45 @@
-/*-----------------------------------------------------------------------------+
-|           The ncurses menu library is  Copyright (C) 1995-1997               |
-|             by Juergen Pfeifer <Juergen.Pfeifer@T-Online.de>                 |
-|                          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-2016,2017 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                                    *
+ ****************************************************************************/
+
+/* $Id: menu.h,v 1.24 2020/02/02 23:34:34 tom Exp $ */
 
 #ifndef ETI_MENU
 #define ETI_MENU
 
+#ifdef AMIGA
+#define TEXT TEXT_ncurses
+#endif
+
 #include <curses.h>
 #include <eti.h>
 
@@ -40,38 +57,47 @@ typedef int Item_Options;
 #define O_IGNORECASE    (0x08)
 #define O_SHOWMATCH     (0x10)
 #define O_NONCYCLIC     (0x20)
+#define O_MOUSE_MENU    (0x40)
 
 /* Item options: */
 #define O_SELECTABLE    (0x01)
 
+#if !NCURSES_OPAQUE_MENU
 typedef struct
 {
-  char*    str;
+  const char* str;
   unsigned short length;
 } TEXT;
+#endif /* !NCURSES_OPAQUE_MENU */
+
+struct tagMENU;
 
 typedef struct tagITEM 
+#if !NCURSES_OPAQUE_MENU
 {
   TEXT           name;        /* name of menu item                         */
   TEXT           description; /* description of item, optional in display  */ 
   struct tagMENU *imenu;      /* Pointer to parent menu                    */
-  const void     *userptr;    /* Pointer to user defined per item data     */ 
+  void           *userptr;    /* Pointer to user defined per item data     */ 
   Item_Options   opt;         /* Item options                              */ 
   short          index;       /* Item number if connected to a menu        */
   short          y;           /* y and x location of item in menu          */
   short          x;
   bool           value;       /* Selection value                           */
                              
-  struct tagITEM *left;       /* neighbour items                           */
+  struct tagITEM *left;       /* neighbor items                            */
   struct tagITEM *right;
   struct tagITEM *up;
   struct tagITEM *down;
 
-} ITEM;
+}
+#endif /* !NCURSES_OPAQUE_MENU */
+ITEM;
 
 typedef void (*Menu_Hook)(struct tagMENU *);
 
 typedef struct tagMENU 
+#if 1                                  /* not yet: !NCURSES_OPAQUE_MENU   */
 {
   short          height;                /* Nr. of chars high               */
   short          width;                 /* Nr. of chars wide               */
@@ -107,13 +133,14 @@ typedef struct tagMENU
   Menu_Hook      iteminit;
   Menu_Hook      itemterm;
 
-  const void    *userptr;               /* Pointer to menus user data      */
+  void          *userptr;               /* Pointer to menus user data      */
   char          *mark;                  /* Pointer to marker string        */
 
   Menu_Options   opt;                   /* Menu options                    */
   unsigned short status;                /* Internal state of menu          */
-
-} MENU;
+}
+#endif /* !NCURSES_OPAQUE_MENU */
+MENU;
 
 
 /* Define keys */
@@ -156,82 +183,86 @@ typedef struct tagMENU
 
 /* --------- prototypes for libmenu functions ----------------------------- */
 
-extern ITEM     **menu_items(const MENU *),
-                *current_item(const MENU *),
-                *new_item(const char *,const char *);
-
-extern MENU     *new_menu(ITEM **);
-
-extern Item_Options  item_opts(const ITEM *);
-extern Menu_Options  menu_opts(const MENU *);
-
-Menu_Hook       item_init(const MENU *),
-                item_term(const MENU *),
-                menu_init(const MENU *),
-                menu_term(const MENU *);
-
-extern WINDOW   *menu_sub(const MENU *),
-                *menu_win(const MENU *);
-
-extern const char *item_description(const ITEM *),
-                  *item_name(const ITEM *),
-                  *menu_mark(const MENU *),
-                  *menu_request_name(int);
-
-extern char       *menu_pattern(const MENU *);
-
-extern const void *menu_userptr(const MENU *),
-                  *item_userptr(const ITEM *);
-
-extern chtype   menu_back(const MENU *),
-                menu_fore(const MENU *),
-                menu_grey(const MENU *);
-
-extern int      free_item(ITEM *),
-                free_menu(MENU *),
-                item_count(const MENU *),
-                item_index(const ITEM *),
-                item_opts_off(ITEM *,Item_Options),
-                item_opts_on(ITEM *,Item_Options),
-                menu_driver(MENU *,int),
-                menu_opts_off(MENU *,Menu_Options),
-                menu_opts_on(MENU *,Menu_Options),
-                menu_pad(const MENU *),
-                pos_menu_cursor(const MENU *),
-                post_menu(MENU *),
-                scale_menu(const MENU *,int *,int *),
-                set_current_item(MENU *menu,ITEM *item),
-                set_item_init(MENU *,void(*)(MENU *)),
-                set_item_opts(ITEM *,Item_Options),
-                set_item_term(MENU *,void(*)(MENU *)),
-                set_item_userptr(ITEM *, const void *),
-                set_item_value(ITEM *,bool),
-                set_menu_back(MENU *,chtype),
-                set_menu_fore(MENU *,chtype),
-                set_menu_format(MENU *,int,int),
-                set_menu_grey(MENU *,chtype),
-                set_menu_init(MENU *,void(*)(MENU *)),
-                set_menu_items(MENU *,ITEM **),
-                set_menu_mark(MENU *, const char *),
-                set_menu_opts(MENU *,Menu_Options),
-                set_menu_pad(MENU *,int),
-                set_menu_pattern(MENU *,const char *),
-                set_menu_sub(MENU *,WINDOW *),
-                set_menu_term(MENU *,void(*)(MENU *)),
-                set_menu_userptr(MENU *,const void *),
-                set_menu_win(MENU *,WINDOW *),
-                set_top_row(MENU *,int),
-                top_row(const MENU *),
-                unpost_menu(MENU *),
-                menu_request_by_name(const char *),
-                set_menu_spacing(MENU *,int,int,int),
-                menu_spacing(const MENU *,int *,int *,int *);
-
-
-extern bool     item_value(const ITEM *),
-                item_visible(const ITEM *);
-
-void            menu_format(const MENU *,int *,int *);
+extern NCURSES_EXPORT(ITEM **) menu_items (const MENU *);
+extern NCURSES_EXPORT(ITEM *)  current_item (const MENU *);
+extern NCURSES_EXPORT(ITEM *)  new_item (const char *,const char *);
+
+extern NCURSES_EXPORT(MENU *)  new_menu (ITEM **);
+
+extern NCURSES_EXPORT(Item_Options)    item_opts (const ITEM *);
+extern NCURSES_EXPORT(Menu_Options)    menu_opts (const MENU *);
+
+extern NCURSES_EXPORT(Menu_Hook)       item_init (const MENU *);
+extern NCURSES_EXPORT(Menu_Hook)       item_term (const MENU *);
+extern NCURSES_EXPORT(Menu_Hook)       menu_init (const MENU *);
+extern NCURSES_EXPORT(Menu_Hook)       menu_term (const MENU *);
+
+extern NCURSES_EXPORT(WINDOW *)        menu_sub (const MENU *);
+extern NCURSES_EXPORT(WINDOW *)        menu_win (const MENU *);
+
+extern NCURSES_EXPORT(const char *)    item_description (const ITEM *);
+extern NCURSES_EXPORT(const char *)    item_name (const ITEM *);
+extern NCURSES_EXPORT(const char *)    menu_mark (const MENU *);
+extern NCURSES_EXPORT(const char *)    menu_request_name (int);
+
+extern NCURSES_EXPORT(char *)  menu_pattern (const MENU *);
+
+extern NCURSES_EXPORT(void *)  menu_userptr (const MENU *);
+extern NCURSES_EXPORT(void *)  item_userptr (const ITEM *);
+
+extern NCURSES_EXPORT(chtype)  menu_back (const MENU *);
+extern NCURSES_EXPORT(chtype)  menu_fore (const MENU *);
+extern NCURSES_EXPORT(chtype)  menu_grey (const MENU *);
+
+extern NCURSES_EXPORT(int)     free_item (ITEM *);
+extern NCURSES_EXPORT(int)     free_menu (MENU *);
+extern NCURSES_EXPORT(int)     item_count (const MENU *);
+extern NCURSES_EXPORT(int)     item_index (const ITEM *);
+extern NCURSES_EXPORT(int)     item_opts_off (ITEM *,Item_Options);
+extern NCURSES_EXPORT(int)     item_opts_on (ITEM *,Item_Options);
+extern NCURSES_EXPORT(int)     menu_driver (MENU *,int);
+extern NCURSES_EXPORT(int)     menu_opts_off (MENU *,Menu_Options);
+extern NCURSES_EXPORT(int)     menu_opts_on (MENU *,Menu_Options);
+extern NCURSES_EXPORT(int)     menu_pad (const MENU *);
+extern NCURSES_EXPORT(int)     pos_menu_cursor (const MENU *);
+extern NCURSES_EXPORT(int)     post_menu (MENU *);
+extern NCURSES_EXPORT(int)     scale_menu (const MENU *,int *,int *);
+extern NCURSES_EXPORT(int)     set_current_item (MENU *menu,ITEM *item);
+extern NCURSES_EXPORT(int)     set_item_init (MENU *, Menu_Hook);
+extern NCURSES_EXPORT(int)     set_item_opts (ITEM *,Item_Options);
+extern NCURSES_EXPORT(int)     set_item_term (MENU *, Menu_Hook);
+extern NCURSES_EXPORT(int)     set_item_userptr (ITEM *, void *);
+extern NCURSES_EXPORT(int)     set_item_value (ITEM *,bool);
+extern NCURSES_EXPORT(int)     set_menu_back (MENU *,chtype);
+extern NCURSES_EXPORT(int)     set_menu_fore (MENU *,chtype);
+extern NCURSES_EXPORT(int)     set_menu_format (MENU *,int,int);
+extern NCURSES_EXPORT(int)     set_menu_grey (MENU *,chtype);
+extern NCURSES_EXPORT(int)     set_menu_init (MENU *, Menu_Hook);
+extern NCURSES_EXPORT(int)     set_menu_items (MENU *,ITEM **);
+extern NCURSES_EXPORT(int)     set_menu_mark (MENU *, const char *);
+extern NCURSES_EXPORT(int)     set_menu_opts (MENU *,Menu_Options);
+extern NCURSES_EXPORT(int)     set_menu_pad (MENU *,int);
+extern NCURSES_EXPORT(int)     set_menu_pattern (MENU *,const char *);
+extern NCURSES_EXPORT(int)     set_menu_sub (MENU *,WINDOW *);
+extern NCURSES_EXPORT(int)     set_menu_term (MENU *, Menu_Hook);
+extern NCURSES_EXPORT(int)     set_menu_userptr (MENU *,void *);
+extern NCURSES_EXPORT(int)     set_menu_win (MENU *,WINDOW *);
+extern NCURSES_EXPORT(int)     set_top_row (MENU *,int);
+extern NCURSES_EXPORT(int)     top_row (const MENU *);
+extern NCURSES_EXPORT(int)     unpost_menu (MENU *);
+extern NCURSES_EXPORT(int)     menu_request_by_name (const char *);
+extern NCURSES_EXPORT(int)     set_menu_spacing (MENU *,int,int,int);
+extern NCURSES_EXPORT(int)     menu_spacing (const MENU *,int *,int *,int *);
+
+
+extern NCURSES_EXPORT(bool)    item_value (const ITEM *);
+extern NCURSES_EXPORT(bool)    item_visible (const ITEM *);
+
+extern NCURSES_EXPORT(void)    menu_format (const MENU *,int *,int *);
+
+#if NCURSES_SP_FUNCS
+extern NCURSES_EXPORT(MENU *)  NCURSES_SP_NAME(new_menu) (SCREEN*, ITEM **);
+#endif
 
 #ifdef __cplusplus
   }