ncurses 6.2 - patch 20200829
[ncurses.git] / Ada95 / gen / terminal_interface-curses-menus.ads.m4
1 --  -*- ada -*-
2 define(`HTMLNAME',`terminal_interface-curses-menus__ads.htm')dnl
3 include(M4MACRO)dnl
4 ------------------------------------------------------------------------------
5 --                                                                          --
6 --                           GNAT ncurses Binding                           --
7 --                                                                          --
8 --                      Terminal_Interface.Curses.Menu                      --
9 --                                                                          --
10 --                                 S P E C                                  --
11 --                                                                          --
12 ------------------------------------------------------------------------------
13 -- Copyright 2020 Thomas E. Dickey                                          --
14 -- Copyright 1998-2009,2014 Free Software Foundation, Inc.                  --
15 --                                                                          --
16 -- Permission is hereby granted, free of charge, to any person obtaining a  --
17 -- copy of this software and associated documentation files (the            --
18 -- "Software"), to deal in the Software without restriction, including      --
19 -- without limitation the rights to use, copy, modify, merge, publish,      --
20 -- distribute, distribute with modifications, sublicense, and/or sell       --
21 -- copies of the Software, and to permit persons to whom the Software is    --
22 -- furnished to do so, subject to the following conditions:                 --
23 --                                                                          --
24 -- The above copyright notice and this permission notice shall be included  --
25 -- in all copies or substantial portions of the Software.                   --
26 --                                                                          --
27 -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
28 -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
29 -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
30 -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
31 -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
32 -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
33 -- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
34 --                                                                          --
35 -- Except as contained in this notice, the name(s) of the above copyright   --
36 -- holders shall not be used in advertising or otherwise to promote the     --
37 -- sale, use or other dealings in this Software without prior written       --
38 -- authorization.                                                           --
39 ------------------------------------------------------------------------------
40 --  Author:  Juergen Pfeifer, 1996
41 --  Version Control:
42 --  $Revision: 1.32 $
43 --  $Date: 2020/02/02 23:34:34 $
44 --  Binding Version 01.00
45 ------------------------------------------------------------------------------
46 with System;
47 with Ada.Characters.Latin_1;
48
49 package Terminal_Interface.Curses.Menus is
50    pragma Preelaborate (Terminal_Interface.Curses.Menus);
51    pragma Linker_Options ("-lmenu" & Curses_Constants.DFT_ARG_SUFFIX);
52
53    Space : Character renames Ada.Characters.Latin_1.Space;
54
55    type Item is private;
56    type Menu is private;
57
58    ---------------------------
59    --  Interface constants  --
60    ---------------------------
61    Null_Item : constant Item;
62    Null_Menu : constant Menu;
63
64    subtype Menu_Request_Code is Key_Code
65      range (Key_Max + 1) .. (Key_Max + 17);
66
67    --  The prefix M_ stands for "Menu Request"
68    M_Left_Item       : constant Menu_Request_Code := Key_Max + 1;
69    M_Right_Item      : constant Menu_Request_Code := Key_Max + 2;
70    M_Up_Item         : constant Menu_Request_Code := Key_Max + 3;
71    M_Down_Item       : constant Menu_Request_Code := Key_Max + 4;
72    M_ScrollUp_Line   : constant Menu_Request_Code := Key_Max + 5;
73    M_ScrollDown_Line : constant Menu_Request_Code := Key_Max + 6;
74    M_ScrollDown_Page : constant Menu_Request_Code := Key_Max + 7;
75    M_ScrollUp_Page   : constant Menu_Request_Code := Key_Max + 8;
76    M_First_Item      : constant Menu_Request_Code := Key_Max + 9;
77    M_Last_Item       : constant Menu_Request_Code := Key_Max + 10;
78    M_Next_Item       : constant Menu_Request_Code := Key_Max + 11;
79    M_Previous_Item   : constant Menu_Request_Code := Key_Max + 12;
80    M_Toggle_Item     : constant Menu_Request_Code := Key_Max + 13;
81    M_Clear_Pattern   : constant Menu_Request_Code := Key_Max + 14;
82    M_Back_Pattern    : constant Menu_Request_Code := Key_Max + 15;
83    M_Next_Match      : constant Menu_Request_Code := Key_Max + 16;
84    M_Previous_Match  : constant Menu_Request_Code := Key_Max + 17;
85
86    --  For those who like the old 'C' names for the request codes
87    REQ_LEFT_ITEM     : Menu_Request_Code renames M_Left_Item;
88    REQ_RIGHT_ITEM    : Menu_Request_Code renames M_Right_Item;
89    REQ_UP_ITEM       : Menu_Request_Code renames M_Up_Item;
90    REQ_DOWN_ITEM     : Menu_Request_Code renames M_Down_Item;
91    REQ_SCR_ULINE     : Menu_Request_Code renames M_ScrollUp_Line;
92    REQ_SCR_DLINE     : Menu_Request_Code renames M_ScrollDown_Line;
93    REQ_SCR_DPAGE     : Menu_Request_Code renames M_ScrollDown_Page;
94    REQ_SCR_UPAGE     : Menu_Request_Code renames M_ScrollUp_Page;
95    REQ_FIRST_ITEM    : Menu_Request_Code renames M_First_Item;
96    REQ_LAST_ITEM     : Menu_Request_Code renames M_Last_Item;
97    REQ_NEXT_ITEM     : Menu_Request_Code renames M_Next_Item;
98    REQ_PREV_ITEM     : Menu_Request_Code renames M_Previous_Item;
99    REQ_TOGGLE_ITEM   : Menu_Request_Code renames M_Toggle_Item;
100    REQ_CLEAR_PATTERN : Menu_Request_Code renames M_Clear_Pattern;
101    REQ_BACK_PATTERN  : Menu_Request_Code renames M_Back_Pattern;
102    REQ_NEXT_MATCH    : Menu_Request_Code renames M_Next_Match;
103    REQ_PREV_MATCH    : Menu_Request_Code renames M_Previous_Match;
104
105    procedure Request_Name (Key  : Menu_Request_Code;
106                            Name : out String);
107
108    function  Request_Name (Key : Menu_Request_Code) return String;
109    --  Same as function
110
111    ------------------
112    --  Exceptions  --
113    ------------------
114
115    Menu_Exception : exception;
116    --
117    --  Menu options
118    --
119    type Menu_Option_Set is
120       record
121          One_Valued        : Boolean;
122          Show_Descriptions : Boolean;
123          Row_Major_Order   : Boolean;
124          Ignore_Case       : Boolean;
125          Show_Matches      : Boolean;
126          Non_Cyclic        : Boolean;
127       end record;
128    pragma Convention (C_Pass_By_Copy, Menu_Option_Set);
129
130    for Menu_Option_Set use
131       record
132          One_Valued        at 0 range Curses_Constants.O_ONEVALUE_First
133            .. Curses_Constants.O_ONEVALUE_Last;
134          Show_Descriptions at 0 range Curses_Constants.O_SHOWDESC_First
135            .. Curses_Constants.O_SHOWDESC_Last;
136          Row_Major_Order   at 0 range Curses_Constants.O_ROWMAJOR_First
137            .. Curses_Constants.O_ROWMAJOR_Last;
138          Ignore_Case       at 0 range Curses_Constants.O_IGNORECASE_First
139            .. Curses_Constants.O_IGNORECASE_Last;
140          Show_Matches      at 0 range Curses_Constants.O_SHOWMATCH_First
141            .. Curses_Constants.O_SHOWMATCH_Last;
142          Non_Cyclic        at 0 range Curses_Constants.O_NONCYCLIC_First
143            .. Curses_Constants.O_NONCYCLIC_Last;
144       end record;
145    pragma Warnings (Off);
146    for Menu_Option_Set'Size use Curses_Constants.Menu_Options_Size;
147    pragma Warnings (On);
148
149    function Default_Menu_Options return Menu_Option_Set;
150    --  Initial default options for a menu.
151    pragma Inline (Default_Menu_Options);
152    --
153    --  Item options
154    --
155    type Item_Option_Set is
156       record
157          Selectable : Boolean;
158       end record;
159    pragma Convention (C_Pass_By_Copy, Item_Option_Set);
160
161    for Item_Option_Set use
162       record
163          Selectable at 0 range Curses_Constants.O_SELECTABLE_First
164            ..  Curses_Constants.O_SELECTABLE_Last;
165       end record;
166    pragma Warnings (Off);
167    for Item_Option_Set'Size use Curses_Constants.Item_Options_Size;
168    pragma Warnings (On);
169
170    function Default_Item_Options return Item_Option_Set;
171    --  Initial default options for an item.
172    pragma Inline (Default_Item_Options);
173
174    --
175    --  Item Array
176    --
177    type Item_Array is array (Positive range <>) of aliased Item;
178    pragma Convention (C, Item_Array);
179
180    type Item_Array_Access is access Item_Array;
181
182    procedure Free (IA         : in out Item_Array_Access;
183                    Free_Items : Boolean := False);
184    --  Release the memory for an allocated item array
185    --  If Free_Items is True, call Delete() for all the items in
186    --  the array.
187
188    --  MANPAGE(`mitem_new.3x')
189
190    --  ANCHOR(`new_item()',`Create')
191    function Create (Name        : String;
192                     Description : String := "") return Item;
193    --  AKA
194    --  Not inlined.
195
196    --  ANCHOR(`new_item()',`New_Item')
197    function New_Item (Name        : String;
198                       Description : String := "") return Item
199      renames Create;
200    --  AKA
201
202    --  ANCHOR(`free_item()',`Delete')
203    procedure Delete (Itm : in out Item);
204    --  AKA
205    --  Resets Itm to Null_Item
206
207    --  MANPAGE(`mitem_value.3x')
208
209    --  ANCHOR(`set_item_value()',`Set_Value')
210    procedure Set_Value (Itm   : Item;
211                         Value : Boolean := True);
212    --  AKA
213    pragma Inline (Set_Value);
214
215    --  ANCHOR(`item_value()',`Value')
216    function Value (Itm : Item) return Boolean;
217    --  AKA
218    pragma Inline (Value);
219
220    --  MANPAGE(`mitem_visible.3x')
221
222    --  ANCHOR(`item_visible()',`Visible')
223    function Visible (Itm : Item) return Boolean;
224    --  AKA
225    pragma Inline (Visible);
226
227    --  MANPAGE(`mitem_opts.3x')
228
229    --  ANCHOR(`set_item_opts()',`Set_Options')
230    procedure Set_Options (Itm     : Item;
231                           Options : Item_Option_Set);
232    --  AKA
233    --  An overloaded Set_Options is defined later. Pragma Inline appears there
234
235    --  ANCHOR(`item_opts_on()',`Switch_Options')
236    procedure Switch_Options (Itm     : Item;
237                              Options : Item_Option_Set;
238                              On      : Boolean := True);
239    --  AKA
240    --  ALIAS(`item_opts_off()')
241    --  An overloaded Switch_Options is defined later.
242    --  Pragma Inline appears there
243
244    --  ANCHOR(`item_opts()',`Get_Options')
245    procedure Get_Options (Itm     : Item;
246                           Options : out Item_Option_Set);
247    --  AKA
248
249    --  ANCHOR(`item_opts()',`Get_Options')
250    function Get_Options (Itm : Item := Null_Item) return Item_Option_Set;
251    --  AKA
252    --  An overloaded Get_Options is defined later. Pragma Inline appears there
253
254    --  MANPAGE(`mitem_name.3x')
255
256    --  ANCHOR(`item_name()',`Name')
257    procedure Name (Itm  : Item;
258                    Name : out String);
259    --  AKA
260    function  Name (Itm : Item) return String;
261    --  AKA
262    --  Implemented as function
263    pragma Inline (Name);
264
265    --  ANCHOR(`item_description();',`Description')
266    procedure Description (Itm         : Item;
267                           Description : out String);
268    --  AKA
269
270    function  Description (Itm : Item) return String;
271    --  AKA
272    --  Implemented as function
273    pragma Inline (Description);
274
275    --  MANPAGE(`mitem_current.3x')
276
277    --  ANCHOR(`set_current_item()',`Set_Current')
278    procedure Set_Current (Men : Menu;
279                           Itm : Item);
280    --  AKA
281    pragma Inline (Set_Current);
282
283    --  ANCHOR(`current_item()',`Current')
284    function Current (Men : Menu) return Item;
285    --  AKA
286    pragma Inline (Current);
287
288    --  ANCHOR(`set_top_row()',`Set_Top_Row')
289    procedure Set_Top_Row (Men  : Menu;
290                           Line : Line_Position);
291    --  AKA
292    pragma Inline (Set_Top_Row);
293
294    --  ANCHOR(`top_row()',`Top_Row')
295    function Top_Row (Men : Menu) return Line_Position;
296    --  AKA
297    pragma Inline (Top_Row);
298
299    --  ANCHOR(`item_index()',`Get_Index')
300    function Get_Index (Itm : Item) return Positive;
301    --  AKA
302    --  Please note that in this binding we start the numbering of items
303    --  with 1. So this is number is one more than you get from the low
304    --  level call.
305    pragma Inline (Get_Index);
306
307    --  MANPAGE(`menu_post.3x')
308
309    --  ANCHOR(`post_menu()',`Post')
310    procedure Post (Men  : Menu;
311                    Post : Boolean := True);
312    --  AKA
313    --  ALIAS(`unpost_menu()')
314    pragma Inline (Post);
315
316    --  MANPAGE(`menu_opts.3x')
317
318    --  ANCHOR(`set_menu_opts()',`Set_Options')
319    procedure Set_Options (Men     : Menu;
320                           Options : Menu_Option_Set);
321    --  AKA
322    pragma Inline (Set_Options);
323
324    --  ANCHOR(`menu_opts_on()',`Switch_Options')
325    procedure Switch_Options (Men     : Menu;
326                              Options : Menu_Option_Set;
327                              On      : Boolean := True);
328    --  AKA
329    --  ALIAS(`menu_opts_off()')
330    pragma Inline (Switch_Options);
331
332    --  ANCHOR(`menu_opts()',`Get_Options')
333    procedure Get_Options (Men     : Menu;
334                           Options : out Menu_Option_Set);
335    --  AKA
336
337    --  ANCHOR(`menu_opts()',`Get_Options')
338    function Get_Options (Men : Menu := Null_Menu) return Menu_Option_Set;
339    --  AKA
340    pragma Inline (Get_Options);
341
342    --  MANPAGE(`menu_win.3x')
343
344    --  ANCHOR(`set_menu_win()',`Set_Window')
345    procedure Set_Window (Men : Menu;
346                          Win : Window);
347    --  AKA
348    pragma Inline (Set_Window);
349
350    --  ANCHOR(`menu_win()',`Get_Window')
351    function Get_Window (Men : Menu) return Window;
352    --  AKA
353    pragma Inline (Get_Window);
354
355    --  ANCHOR(`set_menu_sub()',`Set_Sub_Window')
356    procedure Set_Sub_Window (Men : Menu;
357                              Win : Window);
358    --  AKA
359    pragma Inline (Set_Sub_Window);
360
361    --  ANCHOR(`menu_sub()',`Get_Sub_Window')
362    function Get_Sub_Window (Men : Menu) return Window;
363    --  AKA
364    pragma Inline (Get_Sub_Window);
365
366    --  ANCHOR(`scale_menu()',`Scale')
367    procedure Scale (Men     : Menu;
368                     Lines   : out Line_Count;
369                     Columns : out Column_Count);
370    --  AKA
371    pragma Inline (Scale);
372
373    --  MANPAGE(`menu_cursor.3x')
374
375    --  ANCHOR(`pos_menu_cursor()',`Position_Cursor')
376    procedure Position_Cursor (Men : Menu);
377    --  AKA
378    pragma Inline (Position_Cursor);
379
380    --  MANPAGE(`menu_mark.3x')
381
382    --  ANCHOR(`set_menu_mark()',`Set_Mark')
383    procedure Set_Mark (Men  : Menu;
384                        Mark : String);
385    --  AKA
386    pragma Inline (Set_Mark);
387
388    --  ANCHOR(`menu_mark()',`Mark')
389    procedure Mark (Men  : Menu;
390                    Mark : out String);
391    --  AKA
392
393    function  Mark (Men : Menu) return String;
394    --  AKA
395    --  Implemented as function
396    pragma Inline (Mark);
397
398    --  MANPAGE(`menu_attributes.3x')
399
400    --  ANCHOR(`set_menu_fore()',`Set_Foreground')
401    procedure Set_Foreground
402      (Men   : Menu;
403       Fore  : Character_Attribute_Set := Normal_Video;
404       Color : Color_Pair := Color_Pair'First);
405    --  AKA
406    pragma Inline (Set_Foreground);
407
408    --  ANCHOR(`menu_fore()',`Foreground')
409    procedure Foreground (Men   : Menu;
410                          Fore  : out Character_Attribute_Set);
411    --  AKA
412
413    --  ANCHOR(`menu_fore()',`Foreground')
414    procedure Foreground (Men   : Menu;
415                          Fore  : out Character_Attribute_Set;
416                          Color : out Color_Pair);
417    --  AKA
418    pragma Inline (Foreground);
419
420    --  ANCHOR(`set_menu_back()',`Set_Background')
421    procedure Set_Background
422      (Men   : Menu;
423       Back  : Character_Attribute_Set := Normal_Video;
424       Color : Color_Pair := Color_Pair'First);
425    --  AKA
426    pragma Inline (Set_Background);
427
428    --  ANCHOR(`menu_back()',`Background')
429    procedure Background (Men  : Menu;
430                          Back : out Character_Attribute_Set);
431    --  AKA
432    --  ANCHOR(`menu_back()',`Background')
433
434    procedure Background (Men   : Menu;
435                          Back  : out Character_Attribute_Set;
436                          Color : out Color_Pair);
437    --  AKA
438    pragma Inline (Background);
439
440    --  ANCHOR(`set_menu_grey()',`Set_Grey')
441    procedure Set_Grey
442      (Men   : Menu;
443       Grey  : Character_Attribute_Set := Normal_Video;
444       Color : Color_Pair := Color_Pair'First);
445    --  AKA
446    pragma Inline (Set_Grey);
447
448    --  ANCHOR(`menu_grey()',`Grey')
449    procedure Grey (Men  : Menu;
450                    Grey : out Character_Attribute_Set);
451    --  AKA
452
453    --  ANCHOR(`menu_grey()',`Grey')
454    procedure Grey
455      (Men   : Menu;
456       Grey  : out Character_Attribute_Set;
457       Color : out Color_Pair);
458    --  AKA
459    pragma Inline (Grey);
460
461    --  ANCHOR(`set_menu_pad()',`Set_Pad_Character')
462    procedure Set_Pad_Character (Men : Menu;
463                                 Pad : Character := Space);
464    --  AKA
465    pragma Inline (Set_Pad_Character);
466
467    --  ANCHOR(`menu_pad()',`Pad_Character')
468    procedure Pad_Character (Men : Menu;
469                             Pad : out Character);
470    --  AKA
471    pragma Inline (Pad_Character);
472
473    --  MANPAGE(`menu_spacing.3x')
474
475    --  ANCHOR(`set_menu_spacing()',`Set_Spacing')
476    procedure Set_Spacing (Men   : Menu;
477                           Descr : Column_Position := 0;
478                           Row   : Line_Position   := 0;
479                           Col   : Column_Position := 0);
480    --  AKA
481    pragma Inline (Set_Spacing);
482
483    --  ANCHOR(`menu_spacing()',`Spacing')
484    procedure Spacing (Men   : Menu;
485                       Descr : out Column_Position;
486                       Row   : out Line_Position;
487                       Col   : out Column_Position);
488    --  AKA
489    pragma Inline (Spacing);
490
491    --  MANPAGE(`menu_pattern.3x')
492
493    --  ANCHOR(`set_menu_pattern()',`Set_Pattern')
494    function Set_Pattern (Men  : Menu;
495                          Text : String) return Boolean;
496    --  AKA
497    --  Return TRUE if the pattern matches, FALSE otherwise
498    pragma Inline (Set_Pattern);
499
500    --  ANCHOR(`menu_pattern()',`Pattern')
501    procedure Pattern (Men  : Menu;
502                       Text : out String);
503    --  AKA
504    pragma Inline (Pattern);
505
506    --  MANPAGE(`menu_format.3x')
507
508    --  ANCHOR(`set_menu_format()',`Set_Format')
509    procedure Set_Format (Men     : Menu;
510                          Lines   : Line_Count;
511                          Columns : Column_Count);
512    --  Not implemented: 0 argument for Lines or Columns;
513    --  instead use Format to get the current sizes
514    --      The  default  format  is  16  rows,  1  column.    Calling
515    --      set_menu_format  with a null menu pointer will change this
516    --      default.  A zero row or column argument to set_menu_format
517    --      is  interpreted  as  a  request  not to change the current
518    --      value.
519    --  AKA
520    pragma Inline (Set_Format);
521
522    --  ANCHOR(`menu_format()',`Format')
523    procedure Format (Men     : Menu;
524                      Lines   : out Line_Count;
525                      Columns : out Column_Count);
526    --  AKA
527    pragma Inline (Format);
528
529    --  MANPAGE(`menu_hook.3x')
530
531    type Menu_Hook_Function is access procedure (Men : Menu);
532    pragma Convention (C, Menu_Hook_Function);
533
534    --  ANCHOR(`set_item_init()',`Set_Item_Init_Hook')
535    procedure Set_Item_Init_Hook (Men  : Menu;
536                                  Proc : Menu_Hook_Function);
537    --  AKA
538    pragma Inline (Set_Item_Init_Hook);
539
540    --  ANCHOR(`set_item_term()',`Set_Item_Term_Hook')
541    procedure Set_Item_Term_Hook (Men  : Menu;
542                                  Proc : Menu_Hook_Function);
543    --  AKA
544    pragma Inline (Set_Item_Term_Hook);
545
546    --  ANCHOR(`set_menu_init()',`Set_Menu_Init_Hook')
547    procedure Set_Menu_Init_Hook (Men  : Menu;
548                                  Proc : Menu_Hook_Function);
549    --  AKA
550    pragma Inline (Set_Menu_Init_Hook);
551
552    --  ANCHOR(`set_menu_term()',`Set_Menu_Term_Hook')
553    procedure Set_Menu_Term_Hook (Men  : Menu;
554                                  Proc : Menu_Hook_Function);
555    --  AKA
556    pragma Inline (Set_Menu_Term_Hook);
557
558    --  ANCHOR(`item_init()',`Get_Item_Init_Hook')
559    function Get_Item_Init_Hook (Men : Menu) return Menu_Hook_Function;
560    --  AKA
561    pragma Inline (Get_Item_Init_Hook);
562
563    --  ANCHOR(`item_term()',`Get_Item_Term_Hook')
564    function Get_Item_Term_Hook (Men : Menu) return Menu_Hook_Function;
565    --  AKA
566    pragma Inline (Get_Item_Term_Hook);
567
568    --  ANCHOR(`menu_init()',`Get_Menu_Init_Hook')
569    function Get_Menu_Init_Hook (Men : Menu) return Menu_Hook_Function;
570    --  AKA
571    pragma Inline (Get_Menu_Init_Hook);
572
573    --  ANCHOR(`menu_term()',`Get_Menu_Term_Hook')
574    function Get_Menu_Term_Hook (Men : Menu) return Menu_Hook_Function;
575    --  AKA
576    pragma Inline (Get_Menu_Term_Hook);
577
578    --  MANPAGE(`menu_items.3x')
579
580    --  ANCHOR(`set_menu_items()',`Redefine')
581    procedure Redefine (Men   : Menu;
582                        Items : Item_Array_Access);
583    --  AKA
584    pragma Inline (Redefine);
585
586    procedure Set_Items (Men   : Menu;
587                         Items : Item_Array_Access) renames Redefine;
588    --  pragma Inline (Set_Items);
589
590    --  ANCHOR(`menu_items()',`Items')
591    function Items (Men   : Menu;
592                    Index : Positive) return Item;
593    --  AKA
594    pragma Inline (Items);
595
596    --  ANCHOR(`item_count()',`Item_Count')
597    function Item_Count (Men : Menu) return Natural;
598    --  AKA
599    pragma Inline (Item_Count);
600
601    --  MANPAGE(`menu_new.3x')
602
603    --  ANCHOR(`new_menu()',`Create')
604    function Create (Items : Item_Array_Access) return Menu;
605    --  AKA
606    --  Not inlined
607
608    function New_Menu (Items : Item_Array_Access) return Menu renames Create;
609
610    --  ANCHOR(`free_menu()',`Delete')
611    procedure Delete (Men : in out Menu);
612    --  AKA
613    --  Reset Men to Null_Menu
614    --  Not inlined
615
616    --  MANPAGE(`menu_driver.3x')
617
618    type Driver_Result is (Menu_Ok,
619                           Request_Denied,
620                           Unknown_Request,
621                           No_Match);
622
623    --  ANCHOR(`menu_driver()',`Driver')
624    function Driver (Men : Menu;
625                     Key : Key_Code) return Driver_Result;
626    --  AKA
627    --  Driver is not inlined
628
629    --  ANCHOR(`menu_requestname.3x')
630    --  Not Implemented: menu_request_name, menu_request_by_name
631 -------------------------------------------------------------------------------
632 private
633    type Item   is new System.Storage_Elements.Integer_Address;
634    type Menu   is new System.Storage_Elements.Integer_Address;
635
636    Null_Item : constant Item := 0;
637    Null_Menu : constant Menu := 0;
638
639 end Terminal_Interface.Curses.Menus;