• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--  -*- ada -*-
2define(`HTMLNAME',`terminal_interface-curses-menus__ads.htm')dnl
3include(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------------------------------------------------------------------------------
46with System;
47with Ada.Characters.Latin_1;
48
49package 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-------------------------------------------------------------------------------
632private
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
639end Terminal_Interface.Curses.Menus;
640