blob: c966f9b98cb0578d0f085f64a04be253721c5d3c [file] [log] [blame]
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301-- -*- ada -*-
2define(`HTMLNAME',`terminal_interface-curses__adb.htm')dnl
3include(M4MACRO)------------------------------------------------------------------------------
4-- --
5-- GNAT ncurses Binding --
6-- --
7-- Terminal_Interface.Curses --
8-- --
9-- B O D Y --
10-- --
11------------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -040012-- Copyright 2018-2020,2024 Thomas E. Dickey --
13-- Copyright 2007-2011,2014 Free Software Foundation, Inc. --
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053014-- --
15-- Permission is hereby granted, free of charge, to any person obtaining a --
16-- copy of this software and associated documentation files (the --
17-- "Software"), to deal in the Software without restriction, including --
18-- without limitation the rights to use, copy, modify, merge, publish, --
19-- distribute, distribute with modifications, sublicense, and/or sell --
20-- copies of the Software, and to permit persons to whom the Software is --
21-- furnished to do so, subject to the following conditions: --
22-- --
23-- The above copyright notice and this permission notice shall be included --
24-- in all copies or substantial portions of the Software. --
25-- --
26-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --
27-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --
28-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --
29-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --
30-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --
31-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --
32-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --
33-- --
34-- Except as contained in this notice, the name(s) of the above copyright --
35-- holders shall not be used in advertising or otherwise to promote the --
36-- sale, use or other dealings in this Software without prior written --
37-- authorization. --
38------------------------------------------------------------------------------
39-- Author: Juergen Pfeifer, 1996
40-- Version Control:
micky3879b9f5e72025-07-08 18:04:53 -040041-- $Revision: 1.17 $
42-- $Date: 2024/03/30 13:24:07 $
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053043-- Binding Version 01.00
44------------------------------------------------------------------------------
45with System;
46
47with Terminal_Interface.Curses.Aux;
48with Interfaces.C; use Interfaces.C;
49with Interfaces.C.Strings; use Interfaces.C.Strings;
50with Ada.Characters.Handling; use Ada.Characters.Handling;
51with Ada.Strings.Fixed;
52
53package body Terminal_Interface.Curses is
54
55 use Aux;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053056
57 package ASF renames Ada.Strings.Fixed;
58
59 type chtype_array is array (size_t range <>)
60 of aliased Attributed_Character;
61 pragma Convention (C, chtype_array);
62
63------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +010064 function Key_Name (Key : Real_Key_Code) return String
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053065 is
66 function Keyname (K : C_Int) return chars_ptr;
67 pragma Import (C, Keyname, "keyname");
68
69 Ch : Character;
70 begin
71 if Key <= Character'Pos (Character'Last) then
72 Ch := Character'Val (Key);
73 if Is_Control (Ch) then
74 return Un_Control (Attributed_Character'(Ch => Ch,
75 Color => Color_Pair'First,
76 Attr => Normal_Video));
77 elsif Is_Graphic (Ch) then
78 declare
79 S : String (1 .. 1);
80 begin
81 S (1) := Ch;
82 return S;
83 end;
84 else
85 return "";
86 end if;
87 else
88 return Fill_String (Keyname (C_Int (Key)));
89 end if;
90 end Key_Name;
91
Steve Kondikae271bc2015-11-15 02:50:53 +010092 procedure Key_Name (Key : Real_Key_Code;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053093 Name : out String)
94 is
95 begin
96 ASF.Move (Key_Name (Key), Name);
97 end Key_Name;
98
99------------------------------------------------------------------------------
100 procedure Init_Screen
101 is
102 function Initscr return Window;
103 pragma Import (C, Initscr, "initscr");
104
105 W : Window;
106 begin
107 W := Initscr;
108 if W = Null_Window then
109 raise Curses_Exception;
110 end if;
111 end Init_Screen;
112
113 procedure End_Windows
114 is
115 function Endwin return C_Int;
116 pragma Import (C, Endwin, "endwin");
117 begin
118 if Endwin = Curses_Err then
119 raise Curses_Exception;
120 end if;
121 end End_Windows;
122
123 function Is_End_Window return Boolean
124 is
125 function Isendwin return Curses_Bool;
126 pragma Import (C, Isendwin, "isendwin");
127 begin
128 if Isendwin = Curses_Bool_False then
129 return False;
130 else
131 return True;
132 end if;
133 end Is_End_Window;
134------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +0100135 procedure Move_Cursor (Win : Window := Standard_Window;
136 Line : Line_Position;
137 Column : Column_Position)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530138 is
139 function Wmove (Win : Window;
140 Line : C_Int;
141 Column : C_Int
142 ) return C_Int;
143 pragma Import (C, Wmove, "wmove");
144 begin
145 if Wmove (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
146 raise Curses_Exception;
147 end if;
148 end Move_Cursor;
149------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +0100150 procedure Add (Win : Window := Standard_Window;
151 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530152 is
153 function Waddch (W : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100154 Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530155 pragma Import (C, Waddch, "waddch");
156 begin
Steve Kondikae271bc2015-11-15 02:50:53 +0100157 if Waddch (Win, Ch) = Curses_Err then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530158 raise Curses_Exception;
159 end if;
160 end Add;
161
Steve Kondikae271bc2015-11-15 02:50:53 +0100162 procedure Add (Win : Window := Standard_Window;
163 Ch : Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530164 is
165 begin
166 Add (Win,
167 Attributed_Character'(Ch => Ch,
168 Color => Color_Pair'First,
169 Attr => Normal_Video));
170 end Add;
171
172 procedure Add
Steve Kondikae271bc2015-11-15 02:50:53 +0100173 (Win : Window := Standard_Window;
174 Line : Line_Position;
175 Column : Column_Position;
176 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530177 is
178 function mvwaddch (W : Window;
179 Y : C_Int;
180 X : C_Int;
Steve Kondikae271bc2015-11-15 02:50:53 +0100181 Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530182 pragma Import (C, mvwaddch, "mvwaddch");
183 begin
184 if mvwaddch (Win, C_Int (Line),
185 C_Int (Column),
Steve Kondikae271bc2015-11-15 02:50:53 +0100186 Ch) = Curses_Err
187 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530188 raise Curses_Exception;
189 end if;
190 end Add;
191
192 procedure Add
Steve Kondikae271bc2015-11-15 02:50:53 +0100193 (Win : Window := Standard_Window;
194 Line : Line_Position;
195 Column : Column_Position;
196 Ch : Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530197 is
198 begin
199 Add (Win,
200 Line,
201 Column,
202 Attributed_Character'(Ch => Ch,
203 Color => Color_Pair'First,
204 Attr => Normal_Video));
205 end Add;
206
207 procedure Add_With_Immediate_Echo
Steve Kondikae271bc2015-11-15 02:50:53 +0100208 (Win : Window := Standard_Window;
209 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530210 is
211 function Wechochar (W : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100212 Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530213 pragma Import (C, Wechochar, "wechochar");
214 begin
Steve Kondikae271bc2015-11-15 02:50:53 +0100215 if Wechochar (Win, Ch) = Curses_Err then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530216 raise Curses_Exception;
217 end if;
218 end Add_With_Immediate_Echo;
219
220 procedure Add_With_Immediate_Echo
Steve Kondikae271bc2015-11-15 02:50:53 +0100221 (Win : Window := Standard_Window;
222 Ch : Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530223 is
224 begin
225 Add_With_Immediate_Echo
226 (Win,
227 Attributed_Character'(Ch => Ch,
228 Color => Color_Pair'First,
229 Attr => Normal_Video));
230 end Add_With_Immediate_Echo;
231------------------------------------------------------------------------------
232 function Create (Number_Of_Lines : Line_Count;
233 Number_Of_Columns : Column_Count;
234 First_Line_Position : Line_Position;
235 First_Column_Position : Column_Position) return Window
236 is
237 function Newwin (Number_Of_Lines : C_Int;
238 Number_Of_Columns : C_Int;
239 First_Line_Position : C_Int;
240 First_Column_Position : C_Int) return Window;
241 pragma Import (C, Newwin, "newwin");
242
243 W : Window;
244 begin
245 W := Newwin (C_Int (Number_Of_Lines),
246 C_Int (Number_Of_Columns),
247 C_Int (First_Line_Position),
248 C_Int (First_Column_Position));
249 if W = Null_Window then
250 raise Curses_Exception;
251 end if;
252 return W;
253 end Create;
254
255 procedure Delete (Win : in out Window)
256 is
257 function Wdelwin (W : Window) return C_Int;
258 pragma Import (C, Wdelwin, "delwin");
259 begin
260 if Wdelwin (Win) = Curses_Err then
261 raise Curses_Exception;
262 end if;
263 Win := Null_Window;
264 end Delete;
265
266 function Sub_Window
267 (Win : Window := Standard_Window;
268 Number_Of_Lines : Line_Count;
269 Number_Of_Columns : Column_Count;
270 First_Line_Position : Line_Position;
271 First_Column_Position : Column_Position) return Window
272 is
273 function Subwin
274 (Win : Window;
275 Number_Of_Lines : C_Int;
276 Number_Of_Columns : C_Int;
277 First_Line_Position : C_Int;
278 First_Column_Position : C_Int) return Window;
279 pragma Import (C, Subwin, "subwin");
280
281 W : Window;
282 begin
283 W := Subwin (Win,
284 C_Int (Number_Of_Lines),
285 C_Int (Number_Of_Columns),
286 C_Int (First_Line_Position),
287 C_Int (First_Column_Position));
288 if W = Null_Window then
289 raise Curses_Exception;
290 end if;
291 return W;
292 end Sub_Window;
293
294 function Derived_Window
295 (Win : Window := Standard_Window;
296 Number_Of_Lines : Line_Count;
297 Number_Of_Columns : Column_Count;
298 First_Line_Position : Line_Position;
299 First_Column_Position : Column_Position) return Window
300 is
301 function Derwin
302 (Win : Window;
303 Number_Of_Lines : C_Int;
304 Number_Of_Columns : C_Int;
305 First_Line_Position : C_Int;
306 First_Column_Position : C_Int) return Window;
307 pragma Import (C, Derwin, "derwin");
308
309 W : Window;
310 begin
311 W := Derwin (Win,
312 C_Int (Number_Of_Lines),
313 C_Int (Number_Of_Columns),
314 C_Int (First_Line_Position),
315 C_Int (First_Column_Position));
316 if W = Null_Window then
317 raise Curses_Exception;
318 end if;
319 return W;
320 end Derived_Window;
321
322 function Duplicate (Win : Window) return Window
323 is
324 function Dupwin (Win : Window) return Window;
325 pragma Import (C, Dupwin, "dupwin");
326
327 W : constant Window := Dupwin (Win);
328 begin
329 if W = Null_Window then
330 raise Curses_Exception;
331 end if;
332 return W;
333 end Duplicate;
334
Steve Kondikae271bc2015-11-15 02:50:53 +0100335 procedure Move_Window (Win : Window;
336 Line : Line_Position;
337 Column : Column_Position)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530338 is
339 function Mvwin (Win : Window;
340 Line : C_Int;
341 Column : C_Int) return C_Int;
342 pragma Import (C, Mvwin, "mvwin");
343 begin
344 if Mvwin (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
345 raise Curses_Exception;
346 end if;
347 end Move_Window;
348
Steve Kondikae271bc2015-11-15 02:50:53 +0100349 procedure Move_Derived_Window (Win : Window;
350 Line : Line_Position;
351 Column : Column_Position)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530352 is
353 function Mvderwin (Win : Window;
354 Line : C_Int;
355 Column : C_Int) return C_Int;
356 pragma Import (C, Mvderwin, "mvderwin");
357 begin
358 if Mvderwin (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
359 raise Curses_Exception;
360 end if;
361 end Move_Derived_Window;
362
Steve Kondikae271bc2015-11-15 02:50:53 +0100363 procedure Set_Synch_Mode (Win : Window := Standard_Window;
364 Mode : Boolean := False)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530365 is
366 function Syncok (Win : Window;
367 Mode : Curses_Bool) return C_Int;
368 pragma Import (C, Syncok, "syncok");
369 begin
370 if Syncok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
371 raise Curses_Exception;
372 end if;
373 end Set_Synch_Mode;
374------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +0100375 procedure Add (Win : Window := Standard_Window;
376 Str : String;
377 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530378 is
379 function Waddnstr (Win : Window;
380 Str : char_array;
381 Len : C_Int := -1) return C_Int;
382 pragma Import (C, Waddnstr, "waddnstr");
383
384 Txt : char_array (0 .. Str'Length);
385 Length : size_t;
386 begin
387 To_C (Str, Txt, Length);
388 if Waddnstr (Win, Txt, C_Int (Len)) = Curses_Err then
389 raise Curses_Exception;
390 end if;
391 end Add;
392
393 procedure Add
Steve Kondikae271bc2015-11-15 02:50:53 +0100394 (Win : Window := Standard_Window;
395 Line : Line_Position;
396 Column : Column_Position;
397 Str : String;
398 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530399 is
400 begin
401 Move_Cursor (Win, Line, Column);
402 Add (Win, Str, Len);
403 end Add;
404------------------------------------------------------------------------------
405 procedure Add
Steve Kondikae271bc2015-11-15 02:50:53 +0100406 (Win : Window := Standard_Window;
407 Str : Attributed_String;
408 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530409 is
410 function Waddchnstr (Win : Window;
411 Str : chtype_array;
412 Len : C_Int := -1) return C_Int;
413 pragma Import (C, Waddchnstr, "waddchnstr");
414
415 Txt : chtype_array (0 .. Str'Length);
416 begin
417 for Length in 1 .. size_t (Str'Length) loop
418 Txt (Length - 1) := Str (Natural (Length));
419 end loop;
420 Txt (Str'Length) := Default_Character;
421 if Waddchnstr (Win,
422 Txt,
Steve Kondikae271bc2015-11-15 02:50:53 +0100423 C_Int (Len)) = Curses_Err
424 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530425 raise Curses_Exception;
426 end if;
427 end Add;
428
429 procedure Add
Steve Kondikae271bc2015-11-15 02:50:53 +0100430 (Win : Window := Standard_Window;
431 Line : Line_Position;
432 Column : Column_Position;
433 Str : Attributed_String;
434 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530435 is
436 begin
437 Move_Cursor (Win, Line, Column);
438 Add (Win, Str, Len);
439 end Add;
440------------------------------------------------------------------------------
441 procedure Border
Steve Kondikae271bc2015-11-15 02:50:53 +0100442 (Win : Window := Standard_Window;
443 Left_Side_Symbol : Attributed_Character := Default_Character;
444 Right_Side_Symbol : Attributed_Character := Default_Character;
445 Top_Side_Symbol : Attributed_Character := Default_Character;
446 Bottom_Side_Symbol : Attributed_Character := Default_Character;
447 Upper_Left_Corner_Symbol : Attributed_Character := Default_Character;
448 Upper_Right_Corner_Symbol : Attributed_Character := Default_Character;
449 Lower_Left_Corner_Symbol : Attributed_Character := Default_Character;
450 Lower_Right_Corner_Symbol : Attributed_Character := Default_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530451 is
452 function Wborder (W : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100453 LS : Attributed_Character;
454 RS : Attributed_Character;
455 TS : Attributed_Character;
456 BS : Attributed_Character;
457 ULC : Attributed_Character;
458 URC : Attributed_Character;
459 LLC : Attributed_Character;
460 LRC : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530461 pragma Import (C, Wborder, "wborder");
462 begin
463 if Wborder (Win,
Steve Kondikae271bc2015-11-15 02:50:53 +0100464 Left_Side_Symbol,
465 Right_Side_Symbol,
466 Top_Side_Symbol,
467 Bottom_Side_Symbol,
468 Upper_Left_Corner_Symbol,
469 Upper_Right_Corner_Symbol,
470 Lower_Left_Corner_Symbol,
471 Lower_Right_Corner_Symbol) = Curses_Err
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530472 then
473 raise Curses_Exception;
474 end if;
475 end Border;
476
477 procedure Box
Steve Kondikae271bc2015-11-15 02:50:53 +0100478 (Win : Window := Standard_Window;
479 Vertical_Symbol : Attributed_Character := Default_Character;
480 Horizontal_Symbol : Attributed_Character := Default_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530481 is
482 begin
483 Border (Win,
484 Vertical_Symbol, Vertical_Symbol,
485 Horizontal_Symbol, Horizontal_Symbol);
486 end Box;
487
488 procedure Horizontal_Line
Steve Kondikae271bc2015-11-15 02:50:53 +0100489 (Win : Window := Standard_Window;
490 Line_Size : Natural;
491 Line_Symbol : Attributed_Character := Default_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530492 is
493 function Whline (W : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100494 Ch : Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530495 Len : C_Int) return C_Int;
496 pragma Import (C, Whline, "whline");
497 begin
498 if Whline (Win,
Steve Kondikae271bc2015-11-15 02:50:53 +0100499 Line_Symbol,
500 C_Int (Line_Size)) = Curses_Err
501 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530502 raise Curses_Exception;
503 end if;
504 end Horizontal_Line;
505
506 procedure Vertical_Line
Steve Kondikae271bc2015-11-15 02:50:53 +0100507 (Win : Window := Standard_Window;
508 Line_Size : Natural;
509 Line_Symbol : Attributed_Character := Default_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530510 is
511 function Wvline (W : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100512 Ch : Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530513 Len : C_Int) return C_Int;
514 pragma Import (C, Wvline, "wvline");
515 begin
516 if Wvline (Win,
Steve Kondikae271bc2015-11-15 02:50:53 +0100517 Line_Symbol,
518 C_Int (Line_Size)) = Curses_Err
519 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530520 raise Curses_Exception;
521 end if;
522 end Vertical_Line;
523
524------------------------------------------------------------------------------
525 function Get_Keystroke (Win : Window := Standard_Window)
526 return Real_Key_Code
527 is
528 function Wgetch (W : Window) return C_Int;
529 pragma Import (C, Wgetch, "wgetch");
530
531 C : constant C_Int := Wgetch (Win);
532 begin
533 if C = Curses_Err then
534 return Key_None;
535 else
536 return Real_Key_Code (C);
537 end if;
538 end Get_Keystroke;
539
Steve Kondikae271bc2015-11-15 02:50:53 +0100540 procedure Undo_Keystroke (Key : Real_Key_Code)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530541 is
542 function Ungetch (Ch : C_Int) return C_Int;
543 pragma Import (C, Ungetch, "ungetch");
544 begin
545 if Ungetch (C_Int (Key)) = Curses_Err then
546 raise Curses_Exception;
547 end if;
548 end Undo_Keystroke;
549
550 function Has_Key (Key : Special_Key_Code) return Boolean
551 is
552 function Haskey (Key : C_Int) return C_Int;
553 pragma Import (C, Haskey, "has_key");
554 begin
555 if Haskey (C_Int (Key)) = Curses_False then
556 return False;
557 else
558 return True;
559 end if;
560 end Has_Key;
561
562 function Is_Function_Key (Key : Special_Key_Code) return Boolean
563 is
564 L : constant Special_Key_Code := Special_Key_Code (Natural (Key_F0) +
565 Natural (Function_Key_Number'Last));
566 begin
micky3879b9f5e72025-07-08 18:04:53 -0400567 if Key >= Key_F0 and then Key <= L then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530568 return True;
569 else
570 return False;
571 end if;
572 end Is_Function_Key;
573
574 function Function_Key (Key : Real_Key_Code)
575 return Function_Key_Number
576 is
577 begin
578 if Is_Function_Key (Key) then
579 return Function_Key_Number (Key - Key_F0);
580 else
581 raise Constraint_Error;
582 end if;
583 end Function_Key;
584
585 function Function_Key_Code (Key : Function_Key_Number) return Real_Key_Code
586 is
587 begin
588 return Real_Key_Code (Natural (Key_F0) + Natural (Key));
589 end Function_Key_Code;
590------------------------------------------------------------------------------
591 procedure Standout (Win : Window := Standard_Window;
592 On : Boolean := True)
593 is
594 function wstandout (Win : Window) return C_Int;
595 pragma Import (C, wstandout, "wstandout");
596 function wstandend (Win : Window) return C_Int;
597 pragma Import (C, wstandend, "wstandend");
598
599 Err : C_Int;
600 begin
601 if On then
602 Err := wstandout (Win);
603 else
604 Err := wstandend (Win);
605 end if;
606 if Err = Curses_Err then
607 raise Curses_Exception;
608 end if;
609 end Standout;
610
611 procedure Switch_Character_Attribute
Steve Kondikae271bc2015-11-15 02:50:53 +0100612 (Win : Window := Standard_Window;
613 Attr : Character_Attribute_Set := Normal_Video;
614 On : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530615 is
616 function Wattron (Win : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100617 C_Attr : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530618 pragma Import (C, Wattron, "wattr_on");
619 function Wattroff (Win : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100620 C_Attr : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530621 pragma Import (C, Wattroff, "wattr_off");
622 -- In Ada we use the On Boolean to control whether or not we want to
623 -- switch on or off the attributes in the set.
624 Err : C_Int;
625 AC : constant Attributed_Character := (Ch => Character'First,
626 Color => Color_Pair'First,
627 Attr => Attr);
628 begin
629 if On then
Steve Kondikae271bc2015-11-15 02:50:53 +0100630 Err := Wattron (Win, AC);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530631 else
Steve Kondikae271bc2015-11-15 02:50:53 +0100632 Err := Wattroff (Win, AC);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530633 end if;
634 if Err = Curses_Err then
635 raise Curses_Exception;
636 end if;
637 end Switch_Character_Attribute;
638
639 procedure Set_Character_Attributes
Steve Kondikae271bc2015-11-15 02:50:53 +0100640 (Win : Window := Standard_Window;
641 Attr : Character_Attribute_Set := Normal_Video;
642 Color : Color_Pair := Color_Pair'First)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530643 is
644 function Wattrset (Win : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100645 C_Attr : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530646 pragma Import (C, Wattrset, "wattrset"); -- ??? wattr_set
647 begin
Steve Kondikae271bc2015-11-15 02:50:53 +0100648 if Wattrset (Win, (Ch => Character'First,
649 Color => Color,
650 Attr => Attr)) = Curses_Err
651 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530652 raise Curses_Exception;
653 end if;
654 end Set_Character_Attributes;
655
656 function Get_Character_Attribute (Win : Window := Standard_Window)
657 return Character_Attribute_Set
658 is
659 function Wattrget (Win : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100660 Atr : access Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530661 Col : access C_Short;
662 Opt : System.Address) return C_Int;
663 pragma Import (C, Wattrget, "wattr_get");
664
Steve Kondikae271bc2015-11-15 02:50:53 +0100665 Attr : aliased Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530666 Col : aliased C_Short;
667 Res : constant C_Int := Wattrget (Win, Attr'Access, Col'Access,
668 System.Null_Address);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530669 begin
670 if Res = Curses_Ok then
Steve Kondikae271bc2015-11-15 02:50:53 +0100671 return Attr.Attr;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530672 else
673 raise Curses_Exception;
674 end if;
675 end Get_Character_Attribute;
676
677 function Get_Character_Attribute (Win : Window := Standard_Window)
678 return Color_Pair
679 is
680 function Wattrget (Win : Window;
Steve Kondikae271bc2015-11-15 02:50:53 +0100681 Atr : access Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530682 Col : access C_Short;
683 Opt : System.Address) return C_Int;
684 pragma Import (C, Wattrget, "wattr_get");
685
Steve Kondikae271bc2015-11-15 02:50:53 +0100686 Attr : aliased Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530687 Col : aliased C_Short;
688 Res : constant C_Int := Wattrget (Win, Attr'Access, Col'Access,
689 System.Null_Address);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530690 begin
691 if Res = Curses_Ok then
Steve Kondikae271bc2015-11-15 02:50:53 +0100692 return Attr.Color;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530693 else
694 raise Curses_Exception;
695 end if;
696 end Get_Character_Attribute;
697
Steve Kondikae271bc2015-11-15 02:50:53 +0100698 procedure Set_Color (Win : Window := Standard_Window;
699 Pair : Color_Pair)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530700 is
701 function Wset_Color (Win : Window;
702 Color : C_Short;
703 Opts : C_Void_Ptr) return C_Int;
704 pragma Import (C, Wset_Color, "wcolor_set");
705 begin
706 if Wset_Color (Win,
707 C_Short (Pair),
Steve Kondikae271bc2015-11-15 02:50:53 +0100708 C_Void_Ptr (System.Null_Address)) = Curses_Err
709 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530710 raise Curses_Exception;
711 end if;
712 end Set_Color;
713
714 procedure Change_Attributes
Steve Kondikae271bc2015-11-15 02:50:53 +0100715 (Win : Window := Standard_Window;
716 Count : Integer := -1;
717 Attr : Character_Attribute_Set := Normal_Video;
718 Color : Color_Pair := Color_Pair'First)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530719 is
720 function Wchgat (Win : Window;
721 Cnt : C_Int;
Steve Kondikae271bc2015-11-15 02:50:53 +0100722 Attr : Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530723 Color : C_Short;
724 Opts : System.Address := System.Null_Address)
725 return C_Int;
726 pragma Import (C, Wchgat, "wchgat");
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530727 begin
Steve Kondikae271bc2015-11-15 02:50:53 +0100728 if Wchgat (Win,
729 C_Int (Count),
730 (Ch => Character'First,
731 Color => Color_Pair'First,
732 Attr => Attr),
733 C_Short (Color)) = Curses_Err
734 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530735 raise Curses_Exception;
736 end if;
737 end Change_Attributes;
738
739 procedure Change_Attributes
Steve Kondikae271bc2015-11-15 02:50:53 +0100740 (Win : Window := Standard_Window;
741 Line : Line_Position := Line_Position'First;
742 Column : Column_Position := Column_Position'First;
743 Count : Integer := -1;
744 Attr : Character_Attribute_Set := Normal_Video;
745 Color : Color_Pair := Color_Pair'First)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530746 is
747 begin
748 Move_Cursor (Win, Line, Column);
749 Change_Attributes (Win, Count, Attr, Color);
750 end Change_Attributes;
751------------------------------------------------------------------------------
752 procedure Beep
753 is
754 function Beeper return C_Int;
755 pragma Import (C, Beeper, "beep");
756 begin
757 if Beeper = Curses_Err then
758 raise Curses_Exception;
759 end if;
760 end Beep;
761
762 procedure Flash_Screen
763 is
764 function Flash return C_Int;
765 pragma Import (C, Flash, "flash");
766 begin
767 if Flash = Curses_Err then
768 raise Curses_Exception;
769 end if;
770 end Flash_Screen;
771------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +0100772 procedure Set_Cbreak_Mode (SwitchOn : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530773 is
774 function Cbreak return C_Int;
775 pragma Import (C, Cbreak, "cbreak");
776 function NoCbreak return C_Int;
777 pragma Import (C, NoCbreak, "nocbreak");
778
779 Err : C_Int;
780 begin
781 if SwitchOn then
782 Err := Cbreak;
783 else
784 Err := NoCbreak;
785 end if;
786 if Err = Curses_Err then
787 raise Curses_Exception;
788 end if;
789 end Set_Cbreak_Mode;
790
Steve Kondikae271bc2015-11-15 02:50:53 +0100791 procedure Set_Raw_Mode (SwitchOn : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530792 is
793 function Raw return C_Int;
794 pragma Import (C, Raw, "raw");
795 function NoRaw return C_Int;
796 pragma Import (C, NoRaw, "noraw");
797
798 Err : C_Int;
799 begin
800 if SwitchOn then
801 Err := Raw;
802 else
803 Err := NoRaw;
804 end if;
805 if Err = Curses_Err then
806 raise Curses_Exception;
807 end if;
808 end Set_Raw_Mode;
809
Steve Kondikae271bc2015-11-15 02:50:53 +0100810 procedure Set_Echo_Mode (SwitchOn : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530811 is
812 function Echo return C_Int;
813 pragma Import (C, Echo, "echo");
814 function NoEcho return C_Int;
815 pragma Import (C, NoEcho, "noecho");
816
817 Err : C_Int;
818 begin
819 if SwitchOn then
820 Err := Echo;
821 else
822 Err := NoEcho;
823 end if;
824 if Err = Curses_Err then
825 raise Curses_Exception;
826 end if;
827 end Set_Echo_Mode;
828
Steve Kondikae271bc2015-11-15 02:50:53 +0100829 procedure Set_Meta_Mode (Win : Window := Standard_Window;
830 SwitchOn : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530831 is
832 function Meta (W : Window; Mode : Curses_Bool) return C_Int;
833 pragma Import (C, Meta, "meta");
834 begin
835 if Meta (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then
836 raise Curses_Exception;
837 end if;
838 end Set_Meta_Mode;
839
Steve Kondikae271bc2015-11-15 02:50:53 +0100840 procedure Set_KeyPad_Mode (Win : Window := Standard_Window;
841 SwitchOn : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530842 is
843 function Keypad (W : Window; Mode : Curses_Bool) return C_Int;
844 pragma Import (C, Keypad, "keypad");
845 begin
846 if Keypad (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then
847 raise Curses_Exception;
848 end if;
849 end Set_KeyPad_Mode;
850
Steve Kondikae271bc2015-11-15 02:50:53 +0100851 function Get_KeyPad_Mode (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530852 return Boolean
853 is
854 function Is_Keypad (W : Window) return Curses_Bool;
855 pragma Import (C, Is_Keypad, "is_keypad");
856 begin
857 return (Is_Keypad (Win) /= Curses_Bool_False);
858 end Get_KeyPad_Mode;
859
Steve Kondikae271bc2015-11-15 02:50:53 +0100860 procedure Half_Delay (Amount : Half_Delay_Amount)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530861 is
862 function Halfdelay (Amount : C_Int) return C_Int;
863 pragma Import (C, Halfdelay, "halfdelay");
864 begin
865 if Halfdelay (C_Int (Amount)) = Curses_Err then
866 raise Curses_Exception;
867 end if;
868 end Half_Delay;
869
870 procedure Set_Flush_On_Interrupt_Mode
Steve Kondikae271bc2015-11-15 02:50:53 +0100871 (Win : Window := Standard_Window;
872 Mode : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530873 is
874 function Intrflush (Win : Window; Mode : Curses_Bool) return C_Int;
875 pragma Import (C, Intrflush, "intrflush");
876 begin
877 if Intrflush (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
878 raise Curses_Exception;
879 end if;
880 end Set_Flush_On_Interrupt_Mode;
881
882 procedure Set_Queue_Interrupt_Mode
Steve Kondikae271bc2015-11-15 02:50:53 +0100883 (Win : Window := Standard_Window;
884 Flush : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530885 is
886 procedure Qiflush;
887 pragma Import (C, Qiflush, "qiflush");
888 procedure No_Qiflush;
889 pragma Import (C, No_Qiflush, "noqiflush");
890 begin
891 if Win = Null_Window then
892 raise Curses_Exception;
893 end if;
894 if Flush then
895 Qiflush;
896 else
897 No_Qiflush;
898 end if;
899 end Set_Queue_Interrupt_Mode;
900
901 procedure Set_NoDelay_Mode
Steve Kondikae271bc2015-11-15 02:50:53 +0100902 (Win : Window := Standard_Window;
903 Mode : Boolean := False)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530904 is
905 function Nodelay (Win : Window; Mode : Curses_Bool) return C_Int;
906 pragma Import (C, Nodelay, "nodelay");
907 begin
908 if Nodelay (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
909 raise Curses_Exception;
910 end if;
911 end Set_NoDelay_Mode;
912
Steve Kondikae271bc2015-11-15 02:50:53 +0100913 procedure Set_Timeout_Mode (Win : Window := Standard_Window;
914 Mode : Timeout_Mode;
915 Amount : Natural)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530916 is
917 procedure Wtimeout (Win : Window; Amount : C_Int);
918 pragma Import (C, Wtimeout, "wtimeout");
919
920 Time : C_Int;
921 begin
922 case Mode is
923 when Blocking => Time := -1;
924 when Non_Blocking => Time := 0;
925 when Delayed =>
926 if Amount = 0 then
927 raise Constraint_Error;
928 end if;
929 Time := C_Int (Amount);
930 end case;
931 Wtimeout (Win, Time);
932 end Set_Timeout_Mode;
933
934 procedure Set_Escape_Timer_Mode
Steve Kondikae271bc2015-11-15 02:50:53 +0100935 (Win : Window := Standard_Window;
936 Timer_Off : Boolean := False)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530937 is
938 function Notimeout (Win : Window; Mode : Curses_Bool) return C_Int;
939 pragma Import (C, Notimeout, "notimeout");
940 begin
941 if Notimeout (Win, Curses_Bool (Boolean'Pos (Timer_Off)))
Steve Kondikae271bc2015-11-15 02:50:53 +0100942 = Curses_Err
943 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530944 raise Curses_Exception;
945 end if;
946 end Set_Escape_Timer_Mode;
947
948------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +0100949 procedure Set_NL_Mode (SwitchOn : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530950 is
951 function NL return C_Int;
952 pragma Import (C, NL, "nl");
953 function NoNL return C_Int;
954 pragma Import (C, NoNL, "nonl");
955
956 Err : C_Int;
957 begin
958 if SwitchOn then
959 Err := NL;
960 else
961 Err := NoNL;
962 end if;
963 if Err = Curses_Err then
964 raise Curses_Exception;
965 end if;
966 end Set_NL_Mode;
967
968 procedure Clear_On_Next_Update
Steve Kondikae271bc2015-11-15 02:50:53 +0100969 (Win : Window := Standard_Window;
970 Do_Clear : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530971 is
972 function Clear_Ok (W : Window; Flag : Curses_Bool) return C_Int;
973 pragma Import (C, Clear_Ok, "clearok");
974 begin
975 if Clear_Ok (Win, Curses_Bool (Boolean'Pos (Do_Clear))) = Curses_Err then
976 raise Curses_Exception;
977 end if;
978 end Clear_On_Next_Update;
979
980 procedure Use_Insert_Delete_Line
Steve Kondikae271bc2015-11-15 02:50:53 +0100981 (Win : Window := Standard_Window;
982 Do_Idl : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530983 is
984 function IDL_Ok (W : Window; Flag : Curses_Bool) return C_Int;
985 pragma Import (C, IDL_Ok, "idlok");
986 begin
987 if IDL_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idl))) = Curses_Err then
988 raise Curses_Exception;
989 end if;
990 end Use_Insert_Delete_Line;
991
992 procedure Use_Insert_Delete_Character
Steve Kondikae271bc2015-11-15 02:50:53 +0100993 (Win : Window := Standard_Window;
994 Do_Idc : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530995 is
996 procedure IDC_Ok (W : Window; Flag : Curses_Bool);
997 pragma Import (C, IDC_Ok, "idcok");
998 begin
999 IDC_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idc)));
1000 end Use_Insert_Delete_Character;
1001
1002 procedure Leave_Cursor_After_Update
Steve Kondikae271bc2015-11-15 02:50:53 +01001003 (Win : Window := Standard_Window;
1004 Do_Leave : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301005 is
1006 function Leave_Ok (W : Window; Flag : Curses_Bool) return C_Int;
1007 pragma Import (C, Leave_Ok, "leaveok");
1008 begin
1009 if Leave_Ok (Win, Curses_Bool (Boolean'Pos (Do_Leave))) = Curses_Err then
1010 raise Curses_Exception;
1011 end if;
1012 end Leave_Cursor_After_Update;
1013
1014 procedure Immediate_Update_Mode
Steve Kondikae271bc2015-11-15 02:50:53 +01001015 (Win : Window := Standard_Window;
1016 Mode : Boolean := False)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301017 is
1018 procedure Immedok (Win : Window; Mode : Curses_Bool);
1019 pragma Import (C, Immedok, "immedok");
1020 begin
1021 Immedok (Win, Curses_Bool (Boolean'Pos (Mode)));
1022 end Immediate_Update_Mode;
1023
1024 procedure Allow_Scrolling
Steve Kondikae271bc2015-11-15 02:50:53 +01001025 (Win : Window := Standard_Window;
1026 Mode : Boolean := False)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301027 is
1028 function Scrollok (Win : Window; Mode : Curses_Bool) return C_Int;
1029 pragma Import (C, Scrollok, "scrollok");
1030 begin
1031 if Scrollok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
1032 raise Curses_Exception;
1033 end if;
1034 end Allow_Scrolling;
1035
1036 function Scrolling_Allowed (Win : Window := Standard_Window)
1037 return Boolean
1038 is
1039 function Is_Scroll_Ok (W : Window) return Curses_Bool;
1040 pragma Import (C, Is_Scroll_Ok, "is_scrollok");
1041 begin
1042 return (Is_Scroll_Ok (Win) /= Curses_Bool_False);
1043 end Scrolling_Allowed;
1044
1045 procedure Set_Scroll_Region
Steve Kondikae271bc2015-11-15 02:50:53 +01001046 (Win : Window := Standard_Window;
1047 Top_Line : Line_Position;
1048 Bottom_Line : Line_Position)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301049 is
1050 function Wsetscrreg (Win : Window;
1051 Lin : C_Int;
1052 Col : C_Int) return C_Int;
1053 pragma Import (C, Wsetscrreg, "wsetscrreg");
1054 begin
1055 if Wsetscrreg (Win, C_Int (Top_Line), C_Int (Bottom_Line))
Steve Kondikae271bc2015-11-15 02:50:53 +01001056 = Curses_Err
1057 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301058 raise Curses_Exception;
1059 end if;
1060 end Set_Scroll_Region;
1061------------------------------------------------------------------------------
1062 procedure Update_Screen
1063 is
1064 function Do_Update return C_Int;
1065 pragma Import (C, Do_Update, "doupdate");
1066 begin
1067 if Do_Update = Curses_Err then
1068 raise Curses_Exception;
1069 end if;
1070 end Update_Screen;
1071
Steve Kondikae271bc2015-11-15 02:50:53 +01001072 procedure Refresh (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301073 is
1074 function Wrefresh (W : Window) return C_Int;
1075 pragma Import (C, Wrefresh, "wrefresh");
1076 begin
1077 if Wrefresh (Win) = Curses_Err then
1078 raise Curses_Exception;
1079 end if;
1080 end Refresh;
1081
1082 procedure Refresh_Without_Update
Steve Kondikae271bc2015-11-15 02:50:53 +01001083 (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301084 is
1085 function Wnoutrefresh (W : Window) return C_Int;
1086 pragma Import (C, Wnoutrefresh, "wnoutrefresh");
1087 begin
1088 if Wnoutrefresh (Win) = Curses_Err then
1089 raise Curses_Exception;
1090 end if;
1091 end Refresh_Without_Update;
1092
Steve Kondikae271bc2015-11-15 02:50:53 +01001093 procedure Redraw (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301094 is
1095 function Redrawwin (Win : Window) return C_Int;
1096 pragma Import (C, Redrawwin, "redrawwin");
1097 begin
1098 if Redrawwin (Win) = Curses_Err then
1099 raise Curses_Exception;
1100 end if;
1101 end Redraw;
1102
1103 procedure Redraw
Steve Kondikae271bc2015-11-15 02:50:53 +01001104 (Win : Window := Standard_Window;
1105 Begin_Line : Line_Position;
1106 Line_Count : Positive)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301107 is
1108 function Wredrawln (Win : Window; First : C_Int; Cnt : C_Int)
1109 return C_Int;
1110 pragma Import (C, Wredrawln, "wredrawln");
1111 begin
1112 if Wredrawln (Win,
1113 C_Int (Begin_Line),
Steve Kondikae271bc2015-11-15 02:50:53 +01001114 C_Int (Line_Count)) = Curses_Err
1115 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301116 raise Curses_Exception;
1117 end if;
1118 end Redraw;
1119
1120------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001121 procedure Erase (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301122 is
1123 function Werase (W : Window) return C_Int;
1124 pragma Import (C, Werase, "werase");
1125 begin
1126 if Werase (Win) = Curses_Err then
1127 raise Curses_Exception;
1128 end if;
1129 end Erase;
1130
Steve Kondikae271bc2015-11-15 02:50:53 +01001131 procedure Clear (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301132 is
1133 function Wclear (W : Window) return C_Int;
1134 pragma Import (C, Wclear, "wclear");
1135 begin
1136 if Wclear (Win) = Curses_Err then
1137 raise Curses_Exception;
1138 end if;
1139 end Clear;
1140
Steve Kondikae271bc2015-11-15 02:50:53 +01001141 procedure Clear_To_End_Of_Screen (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301142 is
1143 function Wclearbot (W : Window) return C_Int;
1144 pragma Import (C, Wclearbot, "wclrtobot");
1145 begin
1146 if Wclearbot (Win) = Curses_Err then
1147 raise Curses_Exception;
1148 end if;
1149 end Clear_To_End_Of_Screen;
1150
Steve Kondikae271bc2015-11-15 02:50:53 +01001151 procedure Clear_To_End_Of_Line (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301152 is
1153 function Wcleareol (W : Window) return C_Int;
1154 pragma Import (C, Wcleareol, "wclrtoeol");
1155 begin
1156 if Wcleareol (Win) = Curses_Err then
1157 raise Curses_Exception;
1158 end if;
1159 end Clear_To_End_Of_Line;
1160------------------------------------------------------------------------------
1161 procedure Set_Background
Steve Kondikae271bc2015-11-15 02:50:53 +01001162 (Win : Window := Standard_Window;
1163 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301164 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001165 procedure WBackground (W : Window; Ch : Attributed_Character);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301166 pragma Import (C, WBackground, "wbkgdset");
1167 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001168 WBackground (Win, Ch);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301169 end Set_Background;
1170
1171 procedure Change_Background
Steve Kondikae271bc2015-11-15 02:50:53 +01001172 (Win : Window := Standard_Window;
1173 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301174 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001175 function WChangeBkgd (W : Window; Ch : Attributed_Character)
1176 return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301177 pragma Import (C, WChangeBkgd, "wbkgd");
1178 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001179 if WChangeBkgd (Win, Ch) = Curses_Err then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301180 raise Curses_Exception;
1181 end if;
1182 end Change_Background;
1183
1184 function Get_Background (Win : Window := Standard_Window)
1185 return Attributed_Character
1186 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001187 function Wgetbkgd (Win : Window) return Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301188 pragma Import (C, Wgetbkgd, "getbkgd");
1189 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001190 return Wgetbkgd (Win);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301191 end Get_Background;
1192------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001193 procedure Change_Lines_Status (Win : Window := Standard_Window;
1194 Start : Line_Position;
1195 Count : Positive;
1196 State : Boolean)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301197 is
1198 function Wtouchln (Win : Window;
1199 Sta : C_Int;
1200 Cnt : C_Int;
1201 Chg : C_Int) return C_Int;
1202 pragma Import (C, Wtouchln, "wtouchln");
1203 begin
1204 if Wtouchln (Win, C_Int (Start), C_Int (Count),
Steve Kondikae271bc2015-11-15 02:50:53 +01001205 C_Int (Boolean'Pos (State))) = Curses_Err
1206 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301207 raise Curses_Exception;
1208 end if;
1209 end Change_Lines_Status;
1210
Steve Kondikae271bc2015-11-15 02:50:53 +01001211 procedure Touch (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301212 is
1213 Y : Line_Position;
1214 X : Column_Position;
1215 begin
1216 Get_Size (Win, Y, X);
Steve Kondikae271bc2015-11-15 02:50:53 +01001217 pragma Warnings (Off, X); -- unreferenced
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301218 Change_Lines_Status (Win, 0, Positive (Y), True);
1219 end Touch;
1220
Steve Kondikae271bc2015-11-15 02:50:53 +01001221 procedure Untouch (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301222 is
1223 Y : Line_Position;
1224 X : Column_Position;
1225 begin
1226 Get_Size (Win, Y, X);
Steve Kondikae271bc2015-11-15 02:50:53 +01001227 pragma Warnings (Off, X); -- unreferenced
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301228 Change_Lines_Status (Win, 0, Positive (Y), False);
1229 end Untouch;
1230
Steve Kondikae271bc2015-11-15 02:50:53 +01001231 procedure Touch (Win : Window := Standard_Window;
1232 Start : Line_Position;
1233 Count : Positive)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301234 is
1235 begin
1236 Change_Lines_Status (Win, Start, Count, True);
1237 end Touch;
1238
1239 function Is_Touched
1240 (Win : Window := Standard_Window;
1241 Line : Line_Position) return Boolean
1242 is
1243 function WLineTouched (W : Window; L : C_Int) return Curses_Bool;
1244 pragma Import (C, WLineTouched, "is_linetouched");
1245 begin
1246 if WLineTouched (Win, C_Int (Line)) = Curses_Bool_False then
1247 return False;
1248 else
1249 return True;
1250 end if;
1251 end Is_Touched;
1252
1253 function Is_Touched
1254 (Win : Window := Standard_Window) return Boolean
1255 is
1256 function WWinTouched (W : Window) return Curses_Bool;
1257 pragma Import (C, WWinTouched, "is_wintouched");
1258 begin
1259 if WWinTouched (Win) = Curses_Bool_False then
1260 return False;
1261 else
1262 return True;
1263 end if;
1264 end Is_Touched;
1265------------------------------------------------------------------------------
1266 procedure Copy
Steve Kondikae271bc2015-11-15 02:50:53 +01001267 (Source_Window : Window;
1268 Destination_Window : Window;
1269 Source_Top_Row : Line_Position;
1270 Source_Left_Column : Column_Position;
1271 Destination_Top_Row : Line_Position;
1272 Destination_Left_Column : Column_Position;
1273 Destination_Bottom_Row : Line_Position;
1274 Destination_Right_Column : Column_Position;
1275 Non_Destructive_Mode : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301276 is
1277 function Copywin (Src : Window;
1278 Dst : Window;
1279 Str : C_Int;
1280 Slc : C_Int;
1281 Dtr : C_Int;
1282 Dlc : C_Int;
1283 Dbr : C_Int;
1284 Drc : C_Int;
1285 Ndm : C_Int) return C_Int;
1286 pragma Import (C, Copywin, "copywin");
1287 begin
1288 if Copywin (Source_Window,
1289 Destination_Window,
1290 C_Int (Source_Top_Row),
1291 C_Int (Source_Left_Column),
1292 C_Int (Destination_Top_Row),
1293 C_Int (Destination_Left_Column),
1294 C_Int (Destination_Bottom_Row),
1295 C_Int (Destination_Right_Column),
1296 Boolean'Pos (Non_Destructive_Mode)
Steve Kondikae271bc2015-11-15 02:50:53 +01001297 ) = Curses_Err
1298 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301299 raise Curses_Exception;
1300 end if;
1301 end Copy;
1302
1303 procedure Overwrite
Steve Kondikae271bc2015-11-15 02:50:53 +01001304 (Source_Window : Window;
1305 Destination_Window : Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301306 is
1307 function Overwrite (Src : Window; Dst : Window) return C_Int;
1308 pragma Import (C, Overwrite, "overwrite");
1309 begin
1310 if Overwrite (Source_Window, Destination_Window) = Curses_Err then
1311 raise Curses_Exception;
1312 end if;
1313 end Overwrite;
1314
1315 procedure Overlay
Steve Kondikae271bc2015-11-15 02:50:53 +01001316 (Source_Window : Window;
1317 Destination_Window : Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301318 is
1319 function Overlay (Src : Window; Dst : Window) return C_Int;
1320 pragma Import (C, Overlay, "overlay");
1321 begin
1322 if Overlay (Source_Window, Destination_Window) = Curses_Err then
1323 raise Curses_Exception;
1324 end if;
1325 end Overlay;
1326
1327------------------------------------------------------------------------------
1328 procedure Insert_Delete_Lines
Steve Kondikae271bc2015-11-15 02:50:53 +01001329 (Win : Window := Standard_Window;
1330 Lines : Integer := 1) -- default is to insert one line above
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301331 is
1332 function Winsdelln (W : Window; N : C_Int) return C_Int;
1333 pragma Import (C, Winsdelln, "winsdelln");
1334 begin
1335 if Winsdelln (Win, C_Int (Lines)) = Curses_Err then
1336 raise Curses_Exception;
1337 end if;
1338 end Insert_Delete_Lines;
1339
Steve Kondikae271bc2015-11-15 02:50:53 +01001340 procedure Delete_Line (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301341 is
1342 begin
1343 Insert_Delete_Lines (Win, -1);
1344 end Delete_Line;
1345
Steve Kondikae271bc2015-11-15 02:50:53 +01001346 procedure Insert_Line (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301347 is
1348 begin
1349 Insert_Delete_Lines (Win, 1);
1350 end Insert_Line;
1351------------------------------------------------------------------------------
1352
1353 procedure Get_Size
Steve Kondikae271bc2015-11-15 02:50:53 +01001354 (Win : Window := Standard_Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301355 Number_Of_Lines : out Line_Count;
1356 Number_Of_Columns : out Column_Count)
1357 is
1358 function GetMaxY (W : Window) return C_Int;
1359 pragma Import (C, GetMaxY, "getmaxy");
1360
1361 function GetMaxX (W : Window) return C_Int;
1362 pragma Import (C, GetMaxX, "getmaxx");
1363
Steve Kondikae271bc2015-11-15 02:50:53 +01001364 Y : constant C_Int := GetMaxY (Win);
1365 X : constant C_Int := GetMaxX (Win);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301366 begin
1367 Number_Of_Lines := Line_Count (Y);
1368 Number_Of_Columns := Column_Count (X);
1369 end Get_Size;
1370
1371 procedure Get_Window_Position
Steve Kondikae271bc2015-11-15 02:50:53 +01001372 (Win : Window := Standard_Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301373 Top_Left_Line : out Line_Position;
1374 Top_Left_Column : out Column_Position)
1375 is
1376 function GetBegY (W : Window) return C_Int;
1377 pragma Import (C, GetBegY, "getbegy");
1378
1379 function GetBegX (W : Window) return C_Int;
1380 pragma Import (C, GetBegX, "getbegx");
1381
1382 Y : constant C_Short := C_Short (GetBegY (Win));
1383 X : constant C_Short := C_Short (GetBegX (Win));
1384 begin
1385 Top_Left_Line := Line_Position (Y);
1386 Top_Left_Column := Column_Position (X);
1387 end Get_Window_Position;
1388
1389 procedure Get_Cursor_Position
Steve Kondikae271bc2015-11-15 02:50:53 +01001390 (Win : Window := Standard_Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301391 Line : out Line_Position;
1392 Column : out Column_Position)
1393 is
1394 function GetCurY (W : Window) return C_Int;
1395 pragma Import (C, GetCurY, "getcury");
1396
1397 function GetCurX (W : Window) return C_Int;
1398 pragma Import (C, GetCurX, "getcurx");
1399
1400 Y : constant C_Short := C_Short (GetCurY (Win));
1401 X : constant C_Short := C_Short (GetCurX (Win));
1402 begin
1403 Line := Line_Position (Y);
1404 Column := Column_Position (X);
1405 end Get_Cursor_Position;
1406
1407 procedure Get_Origin_Relative_To_Parent
Steve Kondikae271bc2015-11-15 02:50:53 +01001408 (Win : Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301409 Top_Left_Line : out Line_Position;
1410 Top_Left_Column : out Column_Position;
1411 Is_Not_A_Subwindow : out Boolean)
1412 is
1413 function GetParY (W : Window) return C_Int;
1414 pragma Import (C, GetParY, "getpary");
1415
1416 function GetParX (W : Window) return C_Int;
1417 pragma Import (C, GetParX, "getparx");
1418
1419 Y : constant C_Int := GetParY (Win);
1420 X : constant C_Int := GetParX (Win);
1421 begin
1422 if Y = -1 then
1423 Top_Left_Line := Line_Position'Last;
1424 Top_Left_Column := Column_Position'Last;
1425 Is_Not_A_Subwindow := True;
1426 else
1427 Top_Left_Line := Line_Position (Y);
1428 Top_Left_Column := Column_Position (X);
1429 Is_Not_A_Subwindow := False;
1430 end if;
1431 end Get_Origin_Relative_To_Parent;
1432------------------------------------------------------------------------------
1433 function New_Pad (Lines : Line_Count;
1434 Columns : Column_Count) return Window
1435 is
1436 function Newpad (Lines : C_Int; Columns : C_Int) return Window;
1437 pragma Import (C, Newpad, "newpad");
1438
1439 W : Window;
1440 begin
1441 W := Newpad (C_Int (Lines), C_Int (Columns));
1442 if W = Null_Window then
1443 raise Curses_Exception;
1444 end if;
1445 return W;
1446 end New_Pad;
1447
1448 function Sub_Pad
1449 (Pad : Window;
1450 Number_Of_Lines : Line_Count;
1451 Number_Of_Columns : Column_Count;
1452 First_Line_Position : Line_Position;
1453 First_Column_Position : Column_Position) return Window
1454 is
1455 function Subpad
1456 (Pad : Window;
1457 Number_Of_Lines : C_Int;
1458 Number_Of_Columns : C_Int;
1459 First_Line_Position : C_Int;
1460 First_Column_Position : C_Int) return Window;
1461 pragma Import (C, Subpad, "subpad");
1462
1463 W : Window;
1464 begin
1465 W := Subpad (Pad,
1466 C_Int (Number_Of_Lines),
1467 C_Int (Number_Of_Columns),
1468 C_Int (First_Line_Position),
1469 C_Int (First_Column_Position));
1470 if W = Null_Window then
1471 raise Curses_Exception;
1472 end if;
1473 return W;
1474 end Sub_Pad;
1475
1476 procedure Refresh
Steve Kondikae271bc2015-11-15 02:50:53 +01001477 (Pad : Window;
1478 Source_Top_Row : Line_Position;
1479 Source_Left_Column : Column_Position;
1480 Destination_Top_Row : Line_Position;
1481 Destination_Left_Column : Column_Position;
1482 Destination_Bottom_Row : Line_Position;
1483 Destination_Right_Column : Column_Position)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301484 is
1485 function Prefresh
1486 (Pad : Window;
1487 Source_Top_Row : C_Int;
1488 Source_Left_Column : C_Int;
1489 Destination_Top_Row : C_Int;
1490 Destination_Left_Column : C_Int;
1491 Destination_Bottom_Row : C_Int;
1492 Destination_Right_Column : C_Int) return C_Int;
1493 pragma Import (C, Prefresh, "prefresh");
1494 begin
1495 if Prefresh (Pad,
1496 C_Int (Source_Top_Row),
1497 C_Int (Source_Left_Column),
1498 C_Int (Destination_Top_Row),
1499 C_Int (Destination_Left_Column),
1500 C_Int (Destination_Bottom_Row),
Steve Kondikae271bc2015-11-15 02:50:53 +01001501 C_Int (Destination_Right_Column)) = Curses_Err
1502 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301503 raise Curses_Exception;
1504 end if;
1505 end Refresh;
1506
1507 procedure Refresh_Without_Update
Steve Kondikae271bc2015-11-15 02:50:53 +01001508 (Pad : Window;
1509 Source_Top_Row : Line_Position;
1510 Source_Left_Column : Column_Position;
1511 Destination_Top_Row : Line_Position;
1512 Destination_Left_Column : Column_Position;
1513 Destination_Bottom_Row : Line_Position;
1514 Destination_Right_Column : Column_Position)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301515 is
1516 function Pnoutrefresh
1517 (Pad : Window;
1518 Source_Top_Row : C_Int;
1519 Source_Left_Column : C_Int;
1520 Destination_Top_Row : C_Int;
1521 Destination_Left_Column : C_Int;
1522 Destination_Bottom_Row : C_Int;
1523 Destination_Right_Column : C_Int) return C_Int;
1524 pragma Import (C, Pnoutrefresh, "pnoutrefresh");
1525 begin
1526 if Pnoutrefresh (Pad,
1527 C_Int (Source_Top_Row),
1528 C_Int (Source_Left_Column),
1529 C_Int (Destination_Top_Row),
1530 C_Int (Destination_Left_Column),
1531 C_Int (Destination_Bottom_Row),
Steve Kondikae271bc2015-11-15 02:50:53 +01001532 C_Int (Destination_Right_Column)) = Curses_Err
1533 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301534 raise Curses_Exception;
1535 end if;
1536 end Refresh_Without_Update;
1537
1538 procedure Add_Character_To_Pad_And_Echo_It
Steve Kondikae271bc2015-11-15 02:50:53 +01001539 (Pad : Window;
1540 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301541 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001542 function Pechochar (Pad : Window; Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301543 return C_Int;
1544 pragma Import (C, Pechochar, "pechochar");
1545 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001546 if Pechochar (Pad, Ch) = Curses_Err then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301547 raise Curses_Exception;
1548 end if;
1549 end Add_Character_To_Pad_And_Echo_It;
1550
1551 procedure Add_Character_To_Pad_And_Echo_It
Steve Kondikae271bc2015-11-15 02:50:53 +01001552 (Pad : Window;
1553 Ch : Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301554 is
1555 begin
1556 Add_Character_To_Pad_And_Echo_It
1557 (Pad,
1558 Attributed_Character'(Ch => Ch,
1559 Color => Color_Pair'First,
1560 Attr => Normal_Video));
1561 end Add_Character_To_Pad_And_Echo_It;
1562------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001563 procedure Scroll (Win : Window := Standard_Window;
1564 Amount : Integer := 1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301565 is
1566 function Wscrl (Win : Window; N : C_Int) return C_Int;
1567 pragma Import (C, Wscrl, "wscrl");
1568
1569 begin
1570 if Wscrl (Win, C_Int (Amount)) = Curses_Err then
1571 raise Curses_Exception;
1572 end if;
1573 end Scroll;
1574
1575------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001576 procedure Delete_Character (Win : Window := Standard_Window)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301577 is
1578 function Wdelch (Win : Window) return C_Int;
1579 pragma Import (C, Wdelch, "wdelch");
1580 begin
1581 if Wdelch (Win) = Curses_Err then
1582 raise Curses_Exception;
1583 end if;
1584 end Delete_Character;
1585
1586 procedure Delete_Character
Steve Kondikae271bc2015-11-15 02:50:53 +01001587 (Win : Window := Standard_Window;
1588 Line : Line_Position;
1589 Column : Column_Position)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301590 is
1591 function Mvwdelch (Win : Window;
1592 Lin : C_Int;
1593 Col : C_Int) return C_Int;
1594 pragma Import (C, Mvwdelch, "mvwdelch");
1595 begin
1596 if Mvwdelch (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
1597 raise Curses_Exception;
1598 end if;
1599 end Delete_Character;
1600------------------------------------------------------------------------------
1601 function Peek (Win : Window := Standard_Window)
1602 return Attributed_Character
1603 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001604 function Winch (Win : Window) return Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301605 pragma Import (C, Winch, "winch");
1606 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001607 return Winch (Win);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301608 end Peek;
1609
1610 function Peek
1611 (Win : Window := Standard_Window;
1612 Line : Line_Position;
1613 Column : Column_Position) return Attributed_Character
1614 is
1615 function Mvwinch (Win : Window;
1616 Lin : C_Int;
Steve Kondikae271bc2015-11-15 02:50:53 +01001617 Col : C_Int) return Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301618 pragma Import (C, Mvwinch, "mvwinch");
1619 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001620 return Mvwinch (Win, C_Int (Line), C_Int (Column));
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301621 end Peek;
1622------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001623 procedure Insert (Win : Window := Standard_Window;
1624 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301625 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001626 function Winsch (Win : Window; Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301627 pragma Import (C, Winsch, "winsch");
1628 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001629 if Winsch (Win, Ch) = Curses_Err then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301630 raise Curses_Exception;
1631 end if;
1632 end Insert;
1633
1634 procedure Insert
Steve Kondikae271bc2015-11-15 02:50:53 +01001635 (Win : Window := Standard_Window;
1636 Line : Line_Position;
1637 Column : Column_Position;
1638 Ch : Attributed_Character)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301639 is
1640 function Mvwinsch (Win : Window;
1641 Lin : C_Int;
1642 Col : C_Int;
Steve Kondikae271bc2015-11-15 02:50:53 +01001643 Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301644 pragma Import (C, Mvwinsch, "mvwinsch");
1645 begin
1646 if Mvwinsch (Win,
1647 C_Int (Line),
1648 C_Int (Column),
Steve Kondikae271bc2015-11-15 02:50:53 +01001649 Ch) = Curses_Err
1650 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301651 raise Curses_Exception;
1652 end if;
1653 end Insert;
1654------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001655 procedure Insert (Win : Window := Standard_Window;
1656 Str : String;
1657 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301658 is
1659 function Winsnstr (Win : Window;
1660 Str : char_array;
1661 Len : Integer := -1) return C_Int;
1662 pragma Import (C, Winsnstr, "winsnstr");
1663
1664 Txt : char_array (0 .. Str'Length);
1665 Length : size_t;
1666 begin
1667 To_C (Str, Txt, Length);
1668 if Winsnstr (Win, Txt, Len) = Curses_Err then
1669 raise Curses_Exception;
1670 end if;
1671 end Insert;
1672
1673 procedure Insert
Steve Kondikae271bc2015-11-15 02:50:53 +01001674 (Win : Window := Standard_Window;
1675 Line : Line_Position;
1676 Column : Column_Position;
1677 Str : String;
1678 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301679 is
1680 function Mvwinsnstr (Win : Window;
1681 Line : C_Int;
1682 Column : C_Int;
1683 Str : char_array;
1684 Len : C_Int) return C_Int;
1685 pragma Import (C, Mvwinsnstr, "mvwinsnstr");
1686
1687 Txt : char_array (0 .. Str'Length);
1688 Length : size_t;
1689 begin
1690 To_C (Str, Txt, Length);
1691 if Mvwinsnstr (Win, C_Int (Line), C_Int (Column), Txt, C_Int (Len))
Steve Kondikae271bc2015-11-15 02:50:53 +01001692 = Curses_Err
1693 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301694 raise Curses_Exception;
1695 end if;
1696 end Insert;
1697------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001698 procedure Peek (Win : Window := Standard_Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301699 Str : out String;
Steve Kondikae271bc2015-11-15 02:50:53 +01001700 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301701 is
1702 function Winnstr (Win : Window;
1703 Str : char_array;
1704 Len : C_Int) return C_Int;
1705 pragma Import (C, Winnstr, "winnstr");
1706
1707 N : Integer := Len;
1708 Txt : char_array (0 .. Str'Length);
1709 Cnt : Natural;
1710 begin
1711 if N < 0 then
1712 N := Str'Length;
1713 end if;
1714 if N > Str'Length then
1715 raise Constraint_Error;
1716 end if;
1717 Txt (0) := Interfaces.C.char'First;
1718 if Winnstr (Win, Txt, C_Int (N)) = Curses_Err then
1719 raise Curses_Exception;
1720 end if;
1721 To_Ada (Txt, Str, Cnt, True);
1722 if Cnt < Str'Length then
1723 Str ((Str'First + Cnt) .. Str'Last) := (others => ' ');
1724 end if;
1725 end Peek;
1726
1727 procedure Peek
Steve Kondikae271bc2015-11-15 02:50:53 +01001728 (Win : Window := Standard_Window;
1729 Line : Line_Position;
1730 Column : Column_Position;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301731 Str : out String;
Steve Kondikae271bc2015-11-15 02:50:53 +01001732 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301733 is
1734 begin
1735 Move_Cursor (Win, Line, Column);
1736 Peek (Win, Str, Len);
1737 end Peek;
1738------------------------------------------------------------------------------
1739 procedure Peek
Steve Kondikae271bc2015-11-15 02:50:53 +01001740 (Win : Window := Standard_Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301741 Str : out Attributed_String;
Steve Kondikae271bc2015-11-15 02:50:53 +01001742 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301743 is
1744 function Winchnstr (Win : Window;
1745 Str : chtype_array; -- out
1746 Len : C_Int) return C_Int;
1747 pragma Import (C, Winchnstr, "winchnstr");
1748
1749 N : Integer := Len;
1750 Txt : constant chtype_array (0 .. Str'Length)
1751 := (0 => Default_Character);
1752 Cnt : Natural := 0;
1753 begin
1754 if N < 0 then
1755 N := Str'Length;
1756 end if;
1757 if N > Str'Length then
1758 raise Constraint_Error;
1759 end if;
1760 if Winchnstr (Win, Txt, C_Int (N)) = Curses_Err then
1761 raise Curses_Exception;
1762 end if;
1763 for To in Str'Range loop
1764 exit when Txt (size_t (Cnt)) = Default_Character;
1765 Str (To) := Txt (size_t (Cnt));
1766 Cnt := Cnt + 1;
1767 end loop;
1768 if Cnt < Str'Length then
1769 Str ((Str'First + Cnt) .. Str'Last) :=
1770 (others => (Ch => ' ',
1771 Color => Color_Pair'First,
1772 Attr => Normal_Video));
1773 end if;
1774 end Peek;
1775
1776 procedure Peek
Steve Kondikae271bc2015-11-15 02:50:53 +01001777 (Win : Window := Standard_Window;
1778 Line : Line_Position;
1779 Column : Column_Position;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301780 Str : out Attributed_String;
Steve Kondikae271bc2015-11-15 02:50:53 +01001781 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301782 is
1783 begin
1784 Move_Cursor (Win, Line, Column);
1785 Peek (Win, Str, Len);
1786 end Peek;
1787------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001788 procedure Get (Win : Window := Standard_Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301789 Str : out String;
Steve Kondikae271bc2015-11-15 02:50:53 +01001790 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301791 is
1792 function Wgetnstr (Win : Window;
1793 Str : char_array;
1794 Len : C_Int) return C_Int;
1795 pragma Import (C, Wgetnstr, "wgetnstr");
1796
1797 N : Integer := Len;
1798 Txt : char_array (0 .. Str'Length);
1799 Cnt : Natural;
1800 begin
1801 if N < 0 then
1802 N := Str'Length;
1803 end if;
1804 if N > Str'Length then
1805 raise Constraint_Error;
1806 end if;
1807 Txt (0) := Interfaces.C.char'First;
1808 if Wgetnstr (Win, Txt, C_Int (N)) = Curses_Err then
1809 raise Curses_Exception;
1810 end if;
1811 To_Ada (Txt, Str, Cnt, True);
1812 if Cnt < Str'Length then
1813 Str ((Str'First + Cnt) .. Str'Last) := (others => ' ');
1814 end if;
1815 end Get;
1816
1817 procedure Get
Steve Kondikae271bc2015-11-15 02:50:53 +01001818 (Win : Window := Standard_Window;
1819 Line : Line_Position;
1820 Column : Column_Position;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301821 Str : out String;
Steve Kondikae271bc2015-11-15 02:50:53 +01001822 Len : Integer := -1)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301823 is
1824 begin
1825 Move_Cursor (Win, Line, Column);
1826 Get (Win, Str, Len);
1827 end Get;
1828------------------------------------------------------------------------------
1829 procedure Init_Soft_Label_Keys
Steve Kondikae271bc2015-11-15 02:50:53 +01001830 (Format : Soft_Label_Key_Format := Three_Two_Three)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301831 is
1832 function Slk_Init (Fmt : C_Int) return C_Int;
1833 pragma Import (C, Slk_Init, "slk_init");
1834 begin
1835 if Slk_Init (Soft_Label_Key_Format'Pos (Format)) = Curses_Err then
1836 raise Curses_Exception;
1837 end if;
1838 end Init_Soft_Label_Keys;
1839
Steve Kondikae271bc2015-11-15 02:50:53 +01001840 procedure Set_Soft_Label_Key (Label : Label_Number;
1841 Text : String;
1842 Fmt : Label_Justification := Left)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301843 is
1844 function Slk_Set (Label : C_Int;
1845 Txt : char_array;
1846 Fmt : C_Int) return C_Int;
1847 pragma Import (C, Slk_Set, "slk_set");
1848
1849 Txt : char_array (0 .. Text'Length);
1850 Len : size_t;
1851 begin
1852 To_C (Text, Txt, Len);
1853 if Slk_Set (C_Int (Label), Txt,
Steve Kondikae271bc2015-11-15 02:50:53 +01001854 C_Int (Label_Justification'Pos (Fmt))) = Curses_Err
1855 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301856 raise Curses_Exception;
1857 end if;
1858 end Set_Soft_Label_Key;
1859
1860 procedure Refresh_Soft_Label_Keys
1861 is
1862 function Slk_Refresh return C_Int;
1863 pragma Import (C, Slk_Refresh, "slk_refresh");
1864 begin
1865 if Slk_Refresh = Curses_Err then
1866 raise Curses_Exception;
1867 end if;
1868 end Refresh_Soft_Label_Keys;
1869
1870 procedure Refresh_Soft_Label_Keys_Without_Update
1871 is
1872 function Slk_Noutrefresh return C_Int;
1873 pragma Import (C, Slk_Noutrefresh, "slk_noutrefresh");
1874 begin
1875 if Slk_Noutrefresh = Curses_Err then
1876 raise Curses_Exception;
1877 end if;
1878 end Refresh_Soft_Label_Keys_Without_Update;
1879
Steve Kondikae271bc2015-11-15 02:50:53 +01001880 procedure Get_Soft_Label_Key (Label : Label_Number;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301881 Text : out String)
1882 is
1883 function Slk_Label (Label : C_Int) return chars_ptr;
1884 pragma Import (C, Slk_Label, "slk_label");
1885 begin
1886 Fill_String (Slk_Label (C_Int (Label)), Text);
1887 end Get_Soft_Label_Key;
1888
Steve Kondikae271bc2015-11-15 02:50:53 +01001889 function Get_Soft_Label_Key (Label : Label_Number) return String
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301890 is
1891 function Slk_Label (Label : C_Int) return chars_ptr;
1892 pragma Import (C, Slk_Label, "slk_label");
1893 begin
1894 return Fill_String (Slk_Label (C_Int (Label)));
1895 end Get_Soft_Label_Key;
1896
1897 procedure Clear_Soft_Label_Keys
1898 is
1899 function Slk_Clear return C_Int;
1900 pragma Import (C, Slk_Clear, "slk_clear");
1901 begin
1902 if Slk_Clear = Curses_Err then
1903 raise Curses_Exception;
1904 end if;
1905 end Clear_Soft_Label_Keys;
1906
1907 procedure Restore_Soft_Label_Keys
1908 is
1909 function Slk_Restore return C_Int;
1910 pragma Import (C, Slk_Restore, "slk_restore");
1911 begin
1912 if Slk_Restore = Curses_Err then
1913 raise Curses_Exception;
1914 end if;
1915 end Restore_Soft_Label_Keys;
1916
1917 procedure Touch_Soft_Label_Keys
1918 is
1919 function Slk_Touch return C_Int;
1920 pragma Import (C, Slk_Touch, "slk_touch");
1921 begin
1922 if Slk_Touch = Curses_Err then
1923 raise Curses_Exception;
1924 end if;
1925 end Touch_Soft_Label_Keys;
1926
1927 procedure Switch_Soft_Label_Key_Attributes
Steve Kondikae271bc2015-11-15 02:50:53 +01001928 (Attr : Character_Attribute_Set;
1929 On : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301930 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001931 function Slk_Attron (Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301932 pragma Import (C, Slk_Attron, "slk_attron");
Steve Kondikae271bc2015-11-15 02:50:53 +01001933 function Slk_Attroff (Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301934 pragma Import (C, Slk_Attroff, "slk_attroff");
1935
1936 Err : C_Int;
1937 Ch : constant Attributed_Character := (Ch => Character'First,
1938 Attr => Attr,
1939 Color => Color_Pair'First);
1940 begin
1941 if On then
Steve Kondikae271bc2015-11-15 02:50:53 +01001942 Err := Slk_Attron (Ch);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301943 else
Steve Kondikae271bc2015-11-15 02:50:53 +01001944 Err := Slk_Attroff (Ch);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301945 end if;
1946 if Err = Curses_Err then
1947 raise Curses_Exception;
1948 end if;
1949 end Switch_Soft_Label_Key_Attributes;
1950
1951 procedure Set_Soft_Label_Key_Attributes
Steve Kondikae271bc2015-11-15 02:50:53 +01001952 (Attr : Character_Attribute_Set := Normal_Video;
1953 Color : Color_Pair := Color_Pair'First)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301954 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001955 function Slk_Attrset (Ch : Attributed_Character) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301956 pragma Import (C, Slk_Attrset, "slk_attrset");
1957
1958 Ch : constant Attributed_Character := (Ch => Character'First,
1959 Attr => Attr,
1960 Color => Color);
1961 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001962 if Slk_Attrset (Ch) = Curses_Err then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301963 raise Curses_Exception;
1964 end if;
1965 end Set_Soft_Label_Key_Attributes;
1966
1967 function Get_Soft_Label_Key_Attributes return Character_Attribute_Set
1968 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001969 function Slk_Attr return Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301970 pragma Import (C, Slk_Attr, "slk_attr");
1971
Steve Kondikae271bc2015-11-15 02:50:53 +01001972 Attr : constant Attributed_Character := Slk_Attr;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301973 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001974 return Attr.Attr;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301975 end Get_Soft_Label_Key_Attributes;
1976
1977 function Get_Soft_Label_Key_Attributes return Color_Pair
1978 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001979 function Slk_Attr return Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301980 pragma Import (C, Slk_Attr, "slk_attr");
1981
Steve Kondikae271bc2015-11-15 02:50:53 +01001982 Attr : constant Attributed_Character := Slk_Attr;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301983 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01001984 return Attr.Color;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301985 end Get_Soft_Label_Key_Attributes;
1986
Steve Kondikae271bc2015-11-15 02:50:53 +01001987 procedure Set_Soft_Label_Key_Color (Pair : Color_Pair)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301988 is
Steve Kondikae271bc2015-11-15 02:50:53 +01001989 function Slk_Color (Color : C_Short) return C_Int;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301990 pragma Import (C, Slk_Color, "slk_color");
1991 begin
1992 if Slk_Color (C_Short (Pair)) = Curses_Err then
1993 raise Curses_Exception;
1994 end if;
1995 end Set_Soft_Label_Key_Color;
1996
1997------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01001998 procedure Enable_Key (Key : Special_Key_Code;
1999 Enable : Boolean := True)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302000 is
2001 function Keyok (Keycode : C_Int;
2002 On_Off : Curses_Bool) return C_Int;
2003 pragma Import (C, Keyok, "keyok");
2004 begin
2005 if Keyok (C_Int (Key), Curses_Bool (Boolean'Pos (Enable)))
Steve Kondikae271bc2015-11-15 02:50:53 +01002006 = Curses_Err
2007 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302008 raise Curses_Exception;
2009 end if;
2010 end Enable_Key;
2011------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01002012 procedure Define_Key (Definition : String;
2013 Key : Special_Key_Code)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302014 is
2015 function Defkey (Def : char_array;
2016 Key : C_Int) return C_Int;
2017 pragma Import (C, Defkey, "define_key");
2018
2019 Txt : char_array (0 .. Definition'Length);
2020 Length : size_t;
2021 begin
2022 To_C (Definition, Txt, Length);
2023 if Defkey (Txt, C_Int (Key)) = Curses_Err then
2024 raise Curses_Exception;
2025 end if;
2026 end Define_Key;
2027------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01002028 procedure Un_Control (Ch : Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302029 Str : out String)
2030 is
Steve Kondikae271bc2015-11-15 02:50:53 +01002031 function Unctrl (Ch : Attributed_Character) return chars_ptr;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302032 pragma Import (C, Unctrl, "unctrl");
2033 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01002034 Fill_String (Unctrl (Ch), Str);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302035 end Un_Control;
2036
Steve Kondikae271bc2015-11-15 02:50:53 +01002037 function Un_Control (Ch : Attributed_Character) return String
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302038 is
Steve Kondikae271bc2015-11-15 02:50:53 +01002039 function Unctrl (Ch : Attributed_Character) return chars_ptr;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302040 pragma Import (C, Unctrl, "unctrl");
2041 begin
Steve Kondikae271bc2015-11-15 02:50:53 +01002042 return Fill_String (Unctrl (Ch));
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302043 end Un_Control;
2044
Steve Kondikae271bc2015-11-15 02:50:53 +01002045 procedure Delay_Output (Msecs : Natural)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302046 is
2047 function Delayoutput (Msecs : C_Int) return C_Int;
2048 pragma Import (C, Delayoutput, "delay_output");
2049 begin
2050 if Delayoutput (C_Int (Msecs)) = Curses_Err then
2051 raise Curses_Exception;
2052 end if;
2053 end Delay_Output;
2054
2055 procedure Flush_Input
2056 is
2057 function Flushinp return C_Int;
2058 pragma Import (C, Flushinp, "flushinp");
2059 begin
2060 if Flushinp = Curses_Err then -- docu says that never happens, but...
2061 raise Curses_Exception;
2062 end if;
2063 end Flush_Input;
2064------------------------------------------------------------------------------
2065 function Baudrate return Natural
2066 is
2067 function Baud return C_Int;
2068 pragma Import (C, Baud, "baudrate");
2069 begin
2070 return Natural (Baud);
2071 end Baudrate;
2072
2073 function Erase_Character return Character
2074 is
2075 function Erasechar return C_Int;
2076 pragma Import (C, Erasechar, "erasechar");
2077 begin
2078 return Character'Val (Erasechar);
2079 end Erase_Character;
2080
2081 function Kill_Character return Character
2082 is
2083 function Killchar return C_Int;
2084 pragma Import (C, Killchar, "killchar");
2085 begin
2086 return Character'Val (Killchar);
2087 end Kill_Character;
2088
2089 function Has_Insert_Character return Boolean
2090 is
2091 function Has_Ic return Curses_Bool;
2092 pragma Import (C, Has_Ic, "has_ic");
2093 begin
2094 if Has_Ic = Curses_Bool_False then
2095 return False;
2096 else
2097 return True;
2098 end if;
2099 end Has_Insert_Character;
2100
2101 function Has_Insert_Line return Boolean
2102 is
2103 function Has_Il return Curses_Bool;
2104 pragma Import (C, Has_Il, "has_il");
2105 begin
2106 if Has_Il = Curses_Bool_False then
2107 return False;
2108 else
2109 return True;
2110 end if;
2111 end Has_Insert_Line;
2112
2113 function Supported_Attributes return Character_Attribute_Set
2114 is
Steve Kondikae271bc2015-11-15 02:50:53 +01002115 function Termattrs return Attributed_Character;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302116 pragma Import (C, Termattrs, "termattrs");
2117
Steve Kondikae271bc2015-11-15 02:50:53 +01002118 Ch : constant Attributed_Character := Termattrs;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302119 begin
2120 return Ch.Attr;
2121 end Supported_Attributes;
2122
2123 procedure Long_Name (Name : out String)
2124 is
2125 function Longname return chars_ptr;
2126 pragma Import (C, Longname, "longname");
2127 begin
2128 Fill_String (Longname, Name);
2129 end Long_Name;
2130
2131 function Long_Name return String
2132 is
2133 function Longname return chars_ptr;
2134 pragma Import (C, Longname, "longname");
2135 begin
2136 return Fill_String (Longname);
2137 end Long_Name;
2138
2139 procedure Terminal_Name (Name : out String)
2140 is
2141 function Termname return chars_ptr;
2142 pragma Import (C, Termname, "termname");
2143 begin
2144 Fill_String (Termname, Name);
2145 end Terminal_Name;
2146
2147 function Terminal_Name return String
2148 is
2149 function Termname return chars_ptr;
2150 pragma Import (C, Termname, "termname");
2151 begin
2152 return Fill_String (Termname);
2153 end Terminal_Name;
2154------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01002155 procedure Init_Pair (Pair : Redefinable_Color_Pair;
2156 Fore : Color_Number;
2157 Back : Color_Number)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302158 is
2159 function Initpair (Pair : C_Short;
2160 Fore : C_Short;
2161 Back : C_Short) return C_Int;
2162 pragma Import (C, Initpair, "init_pair");
2163 begin
2164 if Integer (Pair) >= Number_Of_Color_Pairs then
2165 raise Constraint_Error;
2166 end if;
2167 if Integer (Fore) >= Number_Of_Colors or else
Steve Kondikae271bc2015-11-15 02:50:53 +01002168 Integer (Back) >= Number_Of_Colors
2169 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302170 raise Constraint_Error;
2171 end if;
2172 if Initpair (C_Short (Pair), C_Short (Fore), C_Short (Back))
Steve Kondikae271bc2015-11-15 02:50:53 +01002173 = Curses_Err
2174 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302175 raise Curses_Exception;
2176 end if;
2177 end Init_Pair;
2178
Steve Kondikae271bc2015-11-15 02:50:53 +01002179 procedure Pair_Content (Pair : Color_Pair;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302180 Fore : out Color_Number;
2181 Back : out Color_Number)
2182 is
2183 type C_Short_Access is access all C_Short;
2184 function Paircontent (Pair : C_Short;
2185 Fp : C_Short_Access;
2186 Bp : C_Short_Access) return C_Int;
2187 pragma Import (C, Paircontent, "pair_content");
2188
2189 F, B : aliased C_Short;
2190 begin
2191 if Paircontent (C_Short (Pair), F'Access, B'Access) = Curses_Err then
2192 raise Curses_Exception;
2193 else
2194 Fore := Color_Number (F);
2195 Back := Color_Number (B);
2196 end if;
2197 end Pair_Content;
2198
2199 function Has_Colors return Boolean
2200 is
2201 function Hascolors return Curses_Bool;
2202 pragma Import (C, Hascolors, "has_colors");
2203 begin
2204 if Hascolors = Curses_Bool_False then
2205 return False;
2206 else
2207 return True;
2208 end if;
2209 end Has_Colors;
2210
Steve Kondikae271bc2015-11-15 02:50:53 +01002211 procedure Init_Color (Color : Color_Number;
2212 Red : RGB_Value;
2213 Green : RGB_Value;
2214 Blue : RGB_Value)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302215 is
2216 function Initcolor (Col : C_Short;
2217 Red : C_Short;
2218 Green : C_Short;
2219 Blue : C_Short) return C_Int;
2220 pragma Import (C, Initcolor, "init_color");
2221 begin
2222 if Initcolor (C_Short (Color), C_Short (Red), C_Short (Green),
Steve Kondikae271bc2015-11-15 02:50:53 +01002223 C_Short (Blue)) = Curses_Err
2224 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302225 raise Curses_Exception;
2226 end if;
2227 end Init_Color;
2228
2229 function Can_Change_Color return Boolean
2230 is
2231 function Canchangecolor return Curses_Bool;
2232 pragma Import (C, Canchangecolor, "can_change_color");
2233 begin
2234 if Canchangecolor = Curses_Bool_False then
2235 return False;
2236 else
2237 return True;
2238 end if;
2239 end Can_Change_Color;
2240
Steve Kondikae271bc2015-11-15 02:50:53 +01002241 procedure Color_Content (Color : Color_Number;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302242 Red : out RGB_Value;
2243 Green : out RGB_Value;
2244 Blue : out RGB_Value)
2245 is
2246 type C_Short_Access is access all C_Short;
2247
2248 function Colorcontent (Color : C_Short; R, G, B : C_Short_Access)
2249 return C_Int;
2250 pragma Import (C, Colorcontent, "color_content");
2251
2252 R, G, B : aliased C_Short;
2253 begin
2254 if Colorcontent (C_Short (Color), R'Access, G'Access, B'Access) =
Steve Kondikae271bc2015-11-15 02:50:53 +01002255 Curses_Err
2256 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302257 raise Curses_Exception;
2258 else
2259 Red := RGB_Value (R);
2260 Green := RGB_Value (G);
2261 Blue := RGB_Value (B);
2262 end if;
2263 end Color_Content;
2264
2265------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01002266 procedure Save_Curses_Mode (Mode : Curses_Mode)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302267 is
2268 function Def_Prog_Mode return C_Int;
2269 pragma Import (C, Def_Prog_Mode, "def_prog_mode");
2270 function Def_Shell_Mode return C_Int;
2271 pragma Import (C, Def_Shell_Mode, "def_shell_mode");
2272
2273 Err : C_Int;
2274 begin
2275 case Mode is
2276 when Curses => Err := Def_Prog_Mode;
2277 when Shell => Err := Def_Shell_Mode;
2278 end case;
2279 if Err = Curses_Err then
2280 raise Curses_Exception;
2281 end if;
2282 end Save_Curses_Mode;
2283
Steve Kondikae271bc2015-11-15 02:50:53 +01002284 procedure Reset_Curses_Mode (Mode : Curses_Mode)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302285 is
2286 function Reset_Prog_Mode return C_Int;
2287 pragma Import (C, Reset_Prog_Mode, "reset_prog_mode");
2288 function Reset_Shell_Mode return C_Int;
2289 pragma Import (C, Reset_Shell_Mode, "reset_shell_mode");
2290
2291 Err : C_Int;
2292 begin
2293 case Mode is
2294 when Curses => Err := Reset_Prog_Mode;
2295 when Shell => Err := Reset_Shell_Mode;
2296 end case;
2297 if Err = Curses_Err then
2298 raise Curses_Exception;
2299 end if;
2300 end Reset_Curses_Mode;
2301
2302 procedure Save_Terminal_State
2303 is
2304 function Savetty return C_Int;
2305 pragma Import (C, Savetty, "savetty");
2306 begin
2307 if Savetty = Curses_Err then
2308 raise Curses_Exception;
2309 end if;
2310 end Save_Terminal_State;
2311
2312 procedure Reset_Terminal_State
2313 is
2314 function Resetty return C_Int;
2315 pragma Import (C, Resetty, "resetty");
2316 begin
2317 if Resetty = Curses_Err then
2318 raise Curses_Exception;
2319 end if;
2320 end Reset_Terminal_State;
2321
Steve Kondikae271bc2015-11-15 02:50:53 +01002322 procedure Rip_Off_Lines (Lines : Integer;
2323 Proc : Stdscr_Init_Proc)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302324 is
2325 function Ripoffline (Lines : C_Int;
2326 Proc : Stdscr_Init_Proc) return C_Int;
2327 pragma Import (C, Ripoffline, "_nc_ripoffline");
2328 begin
2329 if Ripoffline (C_Int (Lines), Proc) = Curses_Err then
2330 raise Curses_Exception;
2331 end if;
2332 end Rip_Off_Lines;
2333
2334 procedure Set_Cursor_Visibility (Visibility : in out Cursor_Visibility)
2335 is
2336 function Curs_Set (Curs : C_Int) return C_Int;
2337 pragma Import (C, Curs_Set, "curs_set");
2338
2339 Res : C_Int;
2340 begin
2341 Res := Curs_Set (Cursor_Visibility'Pos (Visibility));
2342 if Res /= Curses_Err then
2343 Visibility := Cursor_Visibility'Val (Res);
2344 end if;
2345 end Set_Cursor_Visibility;
2346
Steve Kondikae271bc2015-11-15 02:50:53 +01002347 procedure Nap_Milli_Seconds (Ms : Natural)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302348 is
2349 function Napms (Ms : C_Int) return C_Int;
2350 pragma Import (C, Napms, "napms");
2351 begin
2352 if Napms (C_Int (Ms)) = Curses_Err then
2353 raise Curses_Exception;
2354 end if;
2355 end Nap_Milli_Seconds;
2356------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01002357 function Lines return Line_Count
2358 is
2359 function LINES_As_Function return Interfaces.C.int;
2360 pragma Import (C, LINES_As_Function, "LINES_as_function");
2361 begin
2362 return Line_Count (LINES_As_Function);
2363 end Lines;
2364
2365 function Columns return Column_Count
2366 is
2367 function COLS_As_Function return Interfaces.C.int;
2368 pragma Import (C, COLS_As_Function, "COLS_as_function");
2369 begin
2370 return Column_Count (COLS_As_Function);
2371 end Columns;
2372
2373 function Tab_Size return Natural
2374 is
2375 function TABSIZE_As_Function return Interfaces.C.int;
2376 pragma Import (C, TABSIZE_As_Function, "TABSIZE_as_function");
2377
2378 begin
2379 return Natural (TABSIZE_As_Function);
2380 end Tab_Size;
2381
2382 function Number_Of_Colors return Natural
2383 is
2384 function COLORS_As_Function return Interfaces.C.int;
2385 pragma Import (C, COLORS_As_Function, "COLORS_as_function");
2386 begin
2387 return Natural (COLORS_As_Function);
2388 end Number_Of_Colors;
2389
2390 function Number_Of_Color_Pairs return Natural
2391 is
2392 function COLOR_PAIRS_As_Function return Interfaces.C.int;
2393 pragma Import (C, COLOR_PAIRS_As_Function, "COLOR_PAIRS_as_function");
2394 begin
2395 return Natural (COLOR_PAIRS_As_Function);
2396 end Number_Of_Color_Pairs;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302397------------------------------------------------------------------------------
2398 procedure Transform_Coordinates
Steve Kondikae271bc2015-11-15 02:50:53 +01002399 (W : Window := Standard_Window;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302400 Line : in out Line_Position;
2401 Column : in out Column_Position;
Steve Kondikae271bc2015-11-15 02:50:53 +01002402 Dir : Transform_Direction := From_Screen)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302403 is
2404 type Int_Access is access all C_Int;
2405 function Transform (W : Window;
2406 Y, X : Int_Access;
2407 Dir : Curses_Bool) return C_Int;
2408 pragma Import (C, Transform, "wmouse_trafo");
2409
2410 X : aliased C_Int := C_Int (Column);
2411 Y : aliased C_Int := C_Int (Line);
2412 D : Curses_Bool := Curses_Bool_False;
2413 R : C_Int;
2414 begin
2415 if Dir = To_Screen then
2416 D := 1;
2417 end if;
2418 R := Transform (W, Y'Access, X'Access, D);
2419 if R = Curses_False then
2420 raise Curses_Exception;
2421 else
2422 Line := Line_Position (Y);
2423 Column := Column_Position (X);
2424 end if;
2425 end Transform_Coordinates;
2426------------------------------------------------------------------------------
2427 procedure Use_Default_Colors is
2428 function C_Use_Default_Colors return C_Int;
2429 pragma Import (C, C_Use_Default_Colors, "use_default_colors");
2430 Err : constant C_Int := C_Use_Default_Colors;
2431 begin
2432 if Err = Curses_Err then
2433 raise Curses_Exception;
2434 end if;
2435 end Use_Default_Colors;
2436
2437 procedure Assume_Default_Colors (Fore : Color_Number := Default_Color;
2438 Back : Color_Number := Default_Color)
2439 is
2440 function C_Assume_Default_Colors (Fore : C_Int;
2441 Back : C_Int) return C_Int;
2442 pragma Import (C, C_Assume_Default_Colors, "assume_default_colors");
2443
2444 Err : constant C_Int := C_Assume_Default_Colors (C_Int (Fore),
2445 C_Int (Back));
2446 begin
2447 if Err = Curses_Err then
2448 raise Curses_Exception;
2449 end if;
2450 end Assume_Default_Colors;
2451------------------------------------------------------------------------------
2452 function Curses_Version return String
2453 is
2454 function curses_versionC return chars_ptr;
2455 pragma Import (C, curses_versionC, "curses_version");
2456 Result : constant chars_ptr := curses_versionC;
2457 begin
2458 return Fill_String (Result);
2459 end Curses_Version;
2460------------------------------------------------------------------------------
2461 procedure Curses_Free_All is
2462 procedure curses_freeall;
2463 pragma Import (C, curses_freeall, "_nc_freeall");
2464 begin
2465 -- Use this only for testing: you cannot use curses after calling it,
2466 -- so it has to be the "last" thing done before exiting the program.
2467 -- This will not really free ALL of memory used by curses. That is
2468 -- because it cannot free the memory used for stdout's setbuf. The
2469 -- _nc_free_and_exit() procedure can do that, but it can be invoked
2470 -- safely only from C - and again, that only as the "last" thing done
2471 -- before exiting the program.
2472 curses_freeall;
2473 end Curses_Free_All;
2474------------------------------------------------------------------------------
2475 function Use_Extended_Names (Enable : Boolean) return Boolean
2476 is
2477 function use_extended_namesC (e : Curses_Bool) return C_Int;
2478 pragma Import (C, use_extended_namesC, "use_extended_names");
2479
2480 Res : constant C_Int :=
2481 use_extended_namesC (Curses_Bool (Boolean'Pos (Enable)));
2482 begin
2483 if Res = C_Int (Curses_Bool_False) then
2484 return False;
2485 else
2486 return True;
2487 end if;
2488 end Use_Extended_Names;
2489------------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01002490 procedure Screen_Dump_To_File (Filename : String)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302491 is
2492 function scr_dump (f : char_array) return C_Int;
2493 pragma Import (C, scr_dump, "scr_dump");
2494 Txt : char_array (0 .. Filename'Length);
2495 Length : size_t;
2496 begin
2497 To_C (Filename, Txt, Length);
2498 if Curses_Err = scr_dump (Txt) then
2499 raise Curses_Exception;
2500 end if;
2501 end Screen_Dump_To_File;
2502
Steve Kondikae271bc2015-11-15 02:50:53 +01002503 procedure Screen_Restore_From_File (Filename : String)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302504 is
2505 function scr_restore (f : char_array) return C_Int;
2506 pragma Import (C, scr_restore, "scr_restore");
2507 Txt : char_array (0 .. Filename'Length);
2508 Length : size_t;
2509 begin
2510 To_C (Filename, Txt, Length);
2511 if Curses_Err = scr_restore (Txt) then
2512 raise Curses_Exception;
2513 end if;
2514 end Screen_Restore_From_File;
2515
Steve Kondikae271bc2015-11-15 02:50:53 +01002516 procedure Screen_Init_From_File (Filename : String)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302517 is
2518 function scr_init (f : char_array) return C_Int;
2519 pragma Import (C, scr_init, "scr_init");
2520 Txt : char_array (0 .. Filename'Length);
2521 Length : size_t;
2522 begin
2523 To_C (Filename, Txt, Length);
2524 if Curses_Err = scr_init (Txt) then
2525 raise Curses_Exception;
2526 end if;
2527 end Screen_Init_From_File;
2528
Steve Kondikae271bc2015-11-15 02:50:53 +01002529 procedure Screen_Set_File (Filename : String)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302530 is
2531 function scr_set (f : char_array) return C_Int;
2532 pragma Import (C, scr_set, "scr_set");
2533 Txt : char_array (0 .. Filename'Length);
2534 Length : size_t;
2535 begin
2536 To_C (Filename, Txt, Length);
2537 if Curses_Err = scr_set (Txt) then
2538 raise Curses_Exception;
2539 end if;
2540 end Screen_Set_File;
2541------------------------------------------------------------------------------
2542 procedure Resize (Win : Window := Standard_Window;
2543 Number_Of_Lines : Line_Count;
2544 Number_Of_Columns : Column_Count) is
2545 function wresize (win : Window;
2546 lines : C_Int;
2547 columns : C_Int) return C_Int;
2548 pragma Import (C, wresize);
2549 begin
2550 if wresize (Win,
2551 C_Int (Number_Of_Lines),
Steve Kondikae271bc2015-11-15 02:50:53 +01002552 C_Int (Number_Of_Columns)) = Curses_Err
2553 then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302554 raise Curses_Exception;
2555 end if;
2556 end Resize;
2557------------------------------------------------------------------------------
2558
2559end Terminal_Interface.Curses;