blob: 6914c16b761951a0e4662da60777457681e27d7c [file] [log] [blame]
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301-- -*- 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------------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -040013-- Copyright 2020 Thomas E. Dickey --
14-- Copyright 1998-2009,2014 Free Software Foundation, Inc. --
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053015-- --
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:
micky3879b9f5e72025-07-08 18:04:53 -040042-- $Revision: 1.32 $
43-- $Date: 2020/02/02 23:34:34 $
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053044-- Binding Version 01.00
45------------------------------------------------------------------------------
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053046with System;
47with Ada.Characters.Latin_1;
48
49package Terminal_Interface.Curses.Menus is
50 pragma Preelaborate (Terminal_Interface.Curses.Menus);
Steve Kondikae271bc2015-11-15 02:50:53 +010051 pragma Linker_Options ("-lmenu" & Curses_Constants.DFT_ARG_SUFFIX);
52
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053053 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
Steve Kondikae271bc2015-11-15 02:50:53 +0100105 procedure Request_Name (Key : Menu_Request_Code;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530106 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 --
Steve Kondikae271bc2015-11-15 02:50:53 +0100119 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);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530129
Steve Kondikae271bc2015-11-15 02:50:53 +0100130 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;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530147 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 --
Steve Kondikae271bc2015-11-15 02:50:53 +0100155 type Item_Option_Set is
156 record
157 Selectable : Boolean;
158 end record;
159 pragma Convention (C_Pass_By_Copy, Item_Option_Set);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530160
Steve Kondikae271bc2015-11-15 02:50:53 +0100161 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;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530168 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100210 procedure Set_Value (Itm : Item;
211 Value : Boolean := True);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530212 -- 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100230 procedure Set_Options (Itm : Item;
231 Options : Item_Option_Set);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530232 -- AKA
233 -- An overloaded Set_Options is defined later. Pragma Inline appears there
234
235 -- ANCHOR(`item_opts_on()',`Switch_Options')
Steve Kondikae271bc2015-11-15 02:50:53 +0100236 procedure Switch_Options (Itm : Item;
237 Options : Item_Option_Set;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530238 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100245 procedure Get_Options (Itm : Item;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530246 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100257 procedure Name (Itm : Item;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530258 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100266 procedure Description (Itm : Item;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530267 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100278 procedure Set_Current (Men : Menu;
279 Itm : Item);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530280 -- 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100289 procedure Set_Top_Row (Men : Menu;
290 Line : Line_Position);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530291 -- 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100310 procedure Post (Men : Menu;
311 Post : Boolean := True);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530312 -- AKA
313 -- ALIAS(`unpost_menu()')
314 pragma Inline (Post);
315
316 -- MANPAGE(`menu_opts.3x')
317
318 -- ANCHOR(`set_menu_opts()',`Set_Options')
Steve Kondikae271bc2015-11-15 02:50:53 +0100319 procedure Set_Options (Men : Menu;
320 Options : Menu_Option_Set);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530321 -- AKA
322 pragma Inline (Set_Options);
323
324 -- ANCHOR(`menu_opts_on()',`Switch_Options')
Steve Kondikae271bc2015-11-15 02:50:53 +0100325 procedure Switch_Options (Men : Menu;
326 Options : Menu_Option_Set;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530327 On : Boolean := True);
328 -- AKA
329 -- ALIAS(`menu_opts_off()')
330 pragma Inline (Switch_Options);
331
332 -- ANCHOR(`menu_opts()',`Get_Options')
Steve Kondikae271bc2015-11-15 02:50:53 +0100333 procedure Get_Options (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530334 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100345 procedure Set_Window (Men : Menu;
346 Win : Window);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530347 -- 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100356 procedure Set_Sub_Window (Men : Menu;
357 Win : Window);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530358 -- 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100367 procedure Scale (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530368 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100383 procedure Set_Mark (Men : Menu;
384 Mark : String);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530385 -- AKA
386 pragma Inline (Set_Mark);
387
388 -- ANCHOR(`menu_mark()',`Mark')
Steve Kondikae271bc2015-11-15 02:50:53 +0100389 procedure Mark (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530390 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
Steve Kondikae271bc2015-11-15 02:50:53 +0100402 (Men : Menu;
403 Fore : Character_Attribute_Set := Normal_Video;
404 Color : Color_Pair := Color_Pair'First);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530405 -- AKA
406 pragma Inline (Set_Foreground);
407
408 -- ANCHOR(`menu_fore()',`Foreground')
Steve Kondikae271bc2015-11-15 02:50:53 +0100409 procedure Foreground (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530410 Fore : out Character_Attribute_Set);
411 -- AKA
412
413 -- ANCHOR(`menu_fore()',`Foreground')
Steve Kondikae271bc2015-11-15 02:50:53 +0100414 procedure Foreground (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530415 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
Steve Kondikae271bc2015-11-15 02:50:53 +0100422 (Men : Menu;
423 Back : Character_Attribute_Set := Normal_Video;
424 Color : Color_Pair := Color_Pair'First);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530425 -- AKA
426 pragma Inline (Set_Background);
427
428 -- ANCHOR(`menu_back()',`Background')
Steve Kondikae271bc2015-11-15 02:50:53 +0100429 procedure Background (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530430 Back : out Character_Attribute_Set);
431 -- AKA
432 -- ANCHOR(`menu_back()',`Background')
433
Steve Kondikae271bc2015-11-15 02:50:53 +0100434 procedure Background (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530435 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
Steve Kondikae271bc2015-11-15 02:50:53 +0100442 (Men : Menu;
443 Grey : Character_Attribute_Set := Normal_Video;
444 Color : Color_Pair := Color_Pair'First);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530445 -- AKA
446 pragma Inline (Set_Grey);
447
448 -- ANCHOR(`menu_grey()',`Grey')
Steve Kondikae271bc2015-11-15 02:50:53 +0100449 procedure Grey (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530450 Grey : out Character_Attribute_Set);
451 -- AKA
452
453 -- ANCHOR(`menu_grey()',`Grey')
454 procedure Grey
Steve Kondikae271bc2015-11-15 02:50:53 +0100455 (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530456 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100462 procedure Set_Pad_Character (Men : Menu;
463 Pad : Character := Space);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530464 -- AKA
465 pragma Inline (Set_Pad_Character);
466
467 -- ANCHOR(`menu_pad()',`Pad_Character')
Steve Kondikae271bc2015-11-15 02:50:53 +0100468 procedure Pad_Character (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530469 Pad : out Character);
470 -- AKA
471 pragma Inline (Pad_Character);
472
473 -- MANPAGE(`menu_spacing.3x')
474
475 -- ANCHOR(`set_menu_spacing()',`Set_Spacing')
Steve Kondikae271bc2015-11-15 02:50:53 +0100476 procedure Set_Spacing (Men : Menu;
477 Descr : Column_Position := 0;
478 Row : Line_Position := 0;
479 Col : Column_Position := 0);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530480 -- AKA
481 pragma Inline (Set_Spacing);
482
483 -- ANCHOR(`menu_spacing()',`Spacing')
Steve Kondikae271bc2015-11-15 02:50:53 +0100484 procedure Spacing (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530485 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100501 procedure Pattern (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530502 Text : out String);
503 -- AKA
504 pragma Inline (Pattern);
505
506 -- MANPAGE(`menu_format.3x')
507
508 -- ANCHOR(`set_menu_format()',`Set_Format')
Steve Kondikae271bc2015-11-15 02:50:53 +0100509 procedure Set_Format (Men : Menu;
510 Lines : Line_Count;
511 Columns : Column_Count);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530512 -- 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100523 procedure Format (Men : Menu;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530524 Lines : out Line_Count;
525 Columns : out Column_Count);
526 -- AKA
527 pragma Inline (Format);
528
529 -- MANPAGE(`menu_hook.3x')
530
Steve Kondikae271bc2015-11-15 02:50:53 +0100531 type Menu_Hook_Function is access procedure (Men : Menu);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530532 pragma Convention (C, Menu_Hook_Function);
533
534 -- ANCHOR(`set_item_init()',`Set_Item_Init_Hook')
Steve Kondikae271bc2015-11-15 02:50:53 +0100535 procedure Set_Item_Init_Hook (Men : Menu;
536 Proc : Menu_Hook_Function);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530537 -- AKA
538 pragma Inline (Set_Item_Init_Hook);
539
540 -- ANCHOR(`set_item_term()',`Set_Item_Term_Hook')
Steve Kondikae271bc2015-11-15 02:50:53 +0100541 procedure Set_Item_Term_Hook (Men : Menu;
542 Proc : Menu_Hook_Function);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530543 -- AKA
544 pragma Inline (Set_Item_Term_Hook);
545
546 -- ANCHOR(`set_menu_init()',`Set_Menu_Init_Hook')
Steve Kondikae271bc2015-11-15 02:50:53 +0100547 procedure Set_Menu_Init_Hook (Men : Menu;
548 Proc : Menu_Hook_Function);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530549 -- AKA
550 pragma Inline (Set_Menu_Init_Hook);
551
552 -- ANCHOR(`set_menu_term()',`Set_Menu_Term_Hook')
Steve Kondikae271bc2015-11-15 02:50:53 +0100553 procedure Set_Menu_Term_Hook (Men : Menu;
554 Proc : Menu_Hook_Function);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530555 -- 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')
Steve Kondikae271bc2015-11-15 02:50:53 +0100581 procedure Redefine (Men : Menu;
582 Items : Item_Array_Access);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530583 -- AKA
584 pragma Inline (Redefine);
585
Steve Kondikae271bc2015-11-15 02:50:53 +0100586 procedure Set_Items (Men : Menu;
587 Items : Item_Array_Access) renames Redefine;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530588 -- 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;