-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-menus_s.html')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Menu -- -- -- -- S P E C -- -- -- -- Version 00.92 -- -- -- -- The ncurses Ada95 binding is copyrighted 1996 by -- -- Juergen Pfeifer, Email: Juergen.Pfeifer@T-Online.de -- -- -- -- Permission is hereby granted to reproduce and distribute this -- -- binding by any means and for any fee, whether alone or as part -- -- of a larger distribution, in source or in binary form, PROVIDED -- -- this notice is included with any such distribution, and is not -- -- removed from any of its header files. Mention of ncurses and the -- -- author of this binding in any applications linked with it is -- -- highly appreciated. -- -- -- -- This binding comes AS IS with no warranty, implied or expressed. -- ------------------------------------------------------------------------------ -- Version Control: -- $Revision: 1.7 $ ------------------------------------------------------------------------------ include(`Menu_Base_Defs') with System; with Interfaces.C; with Ada.Characters.Latin_1; package Terminal_Interface.Curses.Menus is include(`Menu_Linker_Options') Space : Character renames Ada.Characters.Latin_1.Space; type Item is private; type Menu is private; --------------------------- -- Interface constants -- --------------------------- Null_Item : constant Item; Null_Menu : constant Menu; subtype Menu_Request_Code is Key_Code range (Key_Max + 1) .. (Key_Max + 17); -- The prefix M_ stands for "Menu Request" M_Left_Item : constant Menu_Request_Code := Key_Max + 1; M_Right_Item : constant Menu_Request_Code := Key_Max + 2; M_Up_Item : constant Menu_Request_Code := Key_Max + 3; M_Down_Item : constant Menu_Request_Code := Key_Max + 4; M_ScrollUp_Line : constant Menu_Request_Code := Key_Max + 5; M_ScrollDown_Line : constant Menu_Request_Code := Key_Max + 6; M_ScrollDown_Page : constant Menu_Request_Code := Key_Max + 7; M_ScrollUp_Page : constant Menu_Request_Code := Key_Max + 8; M_First_Item : constant Menu_Request_Code := Key_Max + 9; M_Last_Item : constant Menu_Request_Code := Key_Max + 10; M_Next_Item : constant Menu_Request_Code := Key_Max + 11; M_Previous_Item : constant Menu_Request_Code := Key_Max + 12; M_Toggle_Item : constant Menu_Request_Code := Key_Max + 13; M_Clear_Pattern : constant Menu_Request_Code := Key_Max + 14; M_Back_Pattern : constant Menu_Request_Code := Key_Max + 15; M_Next_Match : constant Menu_Request_Code := Key_Max + 16; M_Previous_Match : constant Menu_Request_Code := Key_Max + 17; -- For those who like the old 'C' names for the request codes REQ_LEFT_ITEM : Menu_Request_Code renames M_Left_Item; REQ_RIGHT_ITEM : Menu_Request_Code renames M_Right_Item; REQ_UP_ITEM : Menu_Request_Code renames M_Up_Item; REQ_DOWN_ITEM : Menu_Request_Code renames M_Down_Item; REQ_SCR_ULINE : Menu_Request_Code renames M_ScrollUp_Line; REQ_SCR_DLINE : Menu_Request_Code renames M_ScrollDown_Line; REQ_SCR_DPAGE : Menu_Request_Code renames M_ScrollDown_Page; REQ_SCR_UPAGE : Menu_Request_Code renames M_ScrollUp_Page; REQ_FIRST_ITEM : Menu_Request_Code renames M_First_Item; REQ_LAST_ITEM : Menu_Request_Code renames M_Last_Item; REQ_NEXT_ITEM : Menu_Request_Code renames M_Next_Item; REQ_PREV_ITEM : Menu_Request_Code renames M_Previous_Item; REQ_TOGGLE_ITEM : Menu_Request_Code renames M_Toggle_Item; REQ_CLEAR_PATTERN : Menu_Request_Code renames M_Clear_Pattern; REQ_BACK_PATTERN : Menu_Request_Code renames M_Back_Pattern; REQ_NEXT_MATCH : Menu_Request_Code renames M_Next_Match; REQ_PREV_MATCH : Menu_Request_Code renames M_Previous_Match; procedure Request_Name (Key : in Menu_Request_Code; Name : out String); ------------------ -- Exceptions -- ------------------ Menu_Exception : exception; -- -- Menu options -- include(`Menu_Opt_Rep') Default_Menu_Options : Menu_Option_Set; -- Initial default options for a menu. -- -- Item options -- include(`Item_Rep') Default_Item_Options : Item_Option_Set; -- Initial default options for an item. -- -- Item Array -- type Item_Array is array (Positive range <>) of aliased Item; pragma Convention (C, Item_Array); type Item_Array_Access is access all Item_Array; -- MANPAGE(`mitem_new.3x') -- ANCHOR(`new_item()',`Create') function Create (Name : String; Description : String := "") return Item; -- AKA -- ANCHOR(`new_item()',`New_Item') function New_Item (Name : String; Description : String := "") return Item renames Create; -- AKA -- ANCHOR(`free_item()',`Delete') procedure Delete (Itm : in out Item); -- AKA -- Resets Itm to Null_Item -- MANPAGE(`mitem_value.3x') -- ANCHOR(`set_item_value()',`Set_Value') procedure Set_Value (Itm : in Item; Value : in Boolean := True); -- AKA -- ANCHOR(`item_value()',`Value') function Value (Itm : Item) return Boolean; -- AKA -- MANPAGE(`mitem_visible.3x') -- ANCHOR(`item_visible()',`Visible') function Visible (Itm : Item) return Boolean; -- AKA -- MANPAGE(`mitem_opts.3x') -- ANCHOR(`set_item_opts()',`Set_Options') procedure Set_Options (Itm : in Item; Options : in Item_Option_Set); -- AKA -- ANCHOR(`item_opts_on()',`Switch_Options') procedure Switch_Options (Itm : in Item; Options : in Item_Option_Set; On : Boolean := True); -- AKA -- ALIAS(`item_opts_off()') -- ANCHOR(`item_opts()',`Get_Options') procedure Get_Options (Itm : in Item; Options : out Item_Option_Set); -- AKA -- ANCHOR(`item_opts()',`Get_Options') function Get_Options (Itm : Item := Null_Item) return Item_Option_Set; -- AKA -- MANPAGE(`mitem_name.3x') -- ANCHOR(`item_name()',`Name') procedure Name (Itm : in Item; Name : out String); -- AKA -- ANCHOR(`item_description();',`Description') procedure Description (Itm : in Item; Description : out String); -- AKA -- MANPAGE(`mitem_current.3x') -- ANCHOR(`set_current_item()',`Set_Current') procedure Set_Current (Men : in Menu; Itm : in Item); -- AKA -- ANCHOR(`current_item()',`Current') function Current (Men : Menu) return Item; -- AKA -- ANCHOR(`set_top_row()',`Set_Top_Row') procedure Set_Top_Row (Men : in Menu; Line : in Line_Position); -- AKA -- ANCHOR(`top_row()',`Top_Row') function Top_Row (Men : Menu) return Line_Position; -- AKA -- ANCHOR(`item_index()',`Get_Index') function Get_Index (Itm : Item) return Positive; -- AKA -- Please note that in this binding we start the numbering of items -- with 1. So this is number is one more than you get from the low -- level call. -- MANPAGE(`menu_post.3x') -- ANCHOR(`post_menu()',`Post') procedure Post (Men : in Menu; Post : in Boolean := True); -- AKA -- ALIAS(`unpost_menu()') -- MANPAGE(`menu_opts.3x') -- ANCHOR(`set_menu_opts()',`Set_Options') procedure Set_Options (Men : in Menu; Options : in Menu_Option_Set); -- AKA -- ANCHOR(`menu_opts_on()',`Switch_Options') procedure Switch_Options (Men : in Menu; Options : in Menu_Option_Set; On : Boolean := True); -- AKA -- ALIAS(`menu_opts_off()') -- ANCHOR(`menu_opts()',`Get_Options') procedure Get_Options (Men : in Menu; Options : out Menu_Option_Set); -- AKA -- ANCHOR(`menu_opts()',`Get_Options') function Get_Options (Men : Menu := Null_Menu) return Menu_Option_Set; -- AKA -- MANPAGE(`menu_win.3x') -- ANCHOR(`set_menu_win()',`Set_Window') procedure Set_Window (Men : in Menu; Win : in Window); -- AKA -- ANCHOR(`menu_win()',`Get_Window') function Get_Window (Men : Menu) return Window; -- AKA -- ANCHOR(`set_menu_sub()',`Set_Sub_Window') procedure Set_Sub_Window (Men : in Menu; Win : in Window); -- AKA -- ANCHOR(`menu_sub()',`Get_Sub_Window') function Get_Sub_Window (Men : Menu) return Window; -- AKA -- ANCHOR(`scale_menu()',`Scale') procedure Scale (Men : in Menu; Lines : out Line_Count; Columns : out Column_Count); -- AKA -- MANPAGE(`menu_cursor.3x') -- ANCHOR(`pos_menu_cursor()',`Position_Cursor') procedure Position_Cursor (Men : Menu); -- AKA -- MANPAGE(`menu_mark.3x') -- ANCHOR(`set_menu_mark()',`Set_Mark') procedure Set_Mark (Men : in Menu; Mark : in String); -- AKA -- ANCHOR(`menu_mark()',`Mark') procedure Mark (Men : in Menu; Mark : out String); -- AKA -- MANPAGE(`menu_attribs.3x') -- ANCHOR(`set_menu_fore()',`Set_Foreground') procedure Set_Foreground (Men : in Menu; Fore : in Character_Attribute_Set := Normal_Video; Color : in Color_Pair := Color_Pair'First); -- AKA -- ANCHOR(`menu_fore()',`Foreground') procedure Foreground (Men : in Menu; Fore : out Character_Attribute_Set); -- AKA -- ANCHOR(`menu_fore()',`Foreground') procedure Foreground (Men : in Menu; Fore : out Character_Attribute_Set; Color : out Color_Pair); -- AKA -- ANCHOR(`set_menu_back()',`Set_Background') procedure Set_Background (Men : in Menu; Back : in Character_Attribute_Set := Normal_Video; Color : in Color_Pair := Color_Pair'First); -- AKA -- ANCHOR(`menu_back()',`Background') procedure Background (Men : in Menu; Back : out Character_Attribute_Set); -- AKA -- ANCHOR(`menu_back()',`Background') procedure Background (Men : in Menu; Back : out Character_Attribute_Set; Color : out Color_Pair); -- AKA -- ANCHOR(`set_menu_grey()',`Set_Grey') procedure Set_Grey (Men : in Menu; Grey : in Character_Attribute_Set := Normal_Video; Color : in Color_Pair := Color_Pair'First); -- AKA -- ANCHOR(`menu_grey()',`Grey') procedure Grey (Men : in Menu; Grey : out Character_Attribute_Set); -- AKA -- ANCHOR(`menu_grey()',`Grey') procedure Grey (Men : in Menu; Grey : out Character_Attribute_Set; Color : out Color_Pair); -- AKA -- ANCHOR(`set_menu_pad()',`Set_Pad_Character') procedure Set_Pad_Character (Men : in Menu; Pad : in Character := Space); -- AKA -- ANCHOR(`menu_pad()',`Pad_Character') procedure Pad_Character (Men : in Menu; Pad : out Character); -- AKA -- MANPAGE(`menu_spacing.3x') -- ANCHOR(`set_menu_spacing()',`Set_Spacing') procedure Set_Spacing (Men : in Menu; Descr : in Column_Position := 0; Row : in Line_Position := 0; Col : in Column_Position := 0); -- AKA -- ANCHOR(`menu_spacing()',`Spacing') procedure Spacing (Men : in Menu; Descr : out Column_Position; Row : out Line_Position; Col : out Column_Position); -- AKA -- MANPAGE(`menu_pattern.3x') -- ANCHOR(`set_menu_pattern()',`Set_Pattern') function Set_Pattern (Men : Menu; Text : String) return Boolean; -- AKA -- Return TRUE if the pattern matches, FALSE otherwise -- ANCHOR(`menu_pattern()',`Pattern') procedure Pattern (Men : in Menu; Text : out String); -- AKA -- MANPAGE(`menu_format.3x') -- ANCHOR(`set_menu_format()',`Set_Format') procedure Set_Format (Men : in Menu; Lines : in Line_Count; Columns : in Column_Count); -- AKA -- ANCHOR(`menu_format()',`Format') procedure Format (Men : in Menu; Lines : out Line_Count; Columns : out Column_Count); -- AKA -- MANPAGE(`menu_hook.3x') type Menu_Hook_Function is access procedure (Men : in Menu); pragma Convention (C, Menu_Hook_Function); -- ANCHOR(`set_item_init()',`Set_Item_Init_Hook') procedure Set_Item_Init_Hook (Men : in Menu; Proc : in Menu_Hook_Function); -- AKA -- ANCHOR(`set_item_term()',`Set_Item_Term_Hook') procedure Set_Item_Term_Hook (Men : in Menu; Proc : in Menu_Hook_Function); -- AKA -- ANCHOR(`set_menu_init()',`Set_Menu_Init_Hook') procedure Set_Menu_Init_Hook (Men : in Menu; Proc : in Menu_Hook_Function); -- AKA -- ANCHOR(`set_menu_term()',`Set_Menu_Term_Hook') procedure Set_Menu_Term_Hook (Men : in Menu; Proc : in Menu_Hook_Function); -- AKA -- ANCHOR(`item_init()',`Get_Item_Init_Hook') function Get_Item_Init_Hook (Men : Menu) return Menu_Hook_Function; -- AKA -- ANCHOR(`item_term()',`Get_Item_Term_Hook') function Get_Item_Term_Hook (Men : Menu) return Menu_Hook_Function; -- AKA -- ANCHOR(`menu_init()',`Get_Menu_Init_Hook') function Get_Menu_Init_Hook (Men : Menu) return Menu_Hook_Function; -- AKA -- ANCHOR(`menu_term()',`Get_Menu_Term_Hook') function Get_Menu_Term_Hook (Men : Menu) return Menu_Hook_Function; -- AKA -- MANPAGE(`menu_items.3x') -- ANCHOR(`set_menu_items()',`Redefine') procedure Redefine (Men : in Menu; Items : in Item_Array); -- AKA -- With a bit more comfort. You donīt need to terminate the Item_Array -- with a null entry. This is handled internally in the binding. procedure Set_Items (Men : in Menu; Items : in Item_Array) renames Redefine; -- ANCHOR(`menu_items()',`Items') function Items (Men : Menu) return Item_Array_Access; -- AKA -- ANCHOR(`item_count()',`Item_Count') function Item_Count (Men : Menu) return Natural; -- AKA -- MANPAGE(`menu_new.3x') -- ANCHOR(`new_menu()',`Create') function Create (Items : Item_Array) return Menu; -- AKA function New_Menu (Items : Item_Array) return Menu renames Create; -- ANCHOR(`free_menu()',`Delete') procedure Delete (Men : in out Menu); -- AKA -- Reset Men to Null_Menu -- MANPAGE(`menu_new.3x') type Driver_Result is (Menu_Ok, Request_Denied, Unknown_Request, No_Match); -- ANCHOR(`menu_driver()',`Driver') function Driver (Men : Menu; Key : Key_Code) return Driver_Result; -- AKA ------------------------------------------------------------------------------- private type Item is new System.Address; type Menu is new System.Address; Null_Item : constant Item := Item (System.Null_Address); Null_Menu : constant Menu := Menu (System.Null_Address); -- This binding uses the original user pointer mechanism of a menu to store -- specific informations about a menu. This wrapper record carries this -- specifics and contains a field to maintain a new user pointer. Please -- note that you must take this into account if you wan't to use the user -- pointer mechanism of a menu created with this binding in low-level C -- routines. type Ada_User_Wrapper is record U : System.Address; I : Item_Array_Access; end record; pragma Convention (C, Ada_User_Wrapper); type Ada_User_Wrapper_Access is access all Ada_User_Wrapper; pragma Controlled (Ada_User_Wrapper_Access); Generation_Bit_Order : constant System.Bit_Order := System.M4_BIT_ORDER; -- This constant may be different on your system. end Terminal_Interface.Curses.Menus;