------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                         Terminal_Interface.Curses                        --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
--  Version 00.92                                                           --
--                                                                          --
--  The ncurses Ada95 binding is copyrighted 1996 by                        --
--  Jürgen Pfeifer, Email: Juergen.Pfeifer@T-Online.de                      --
--                                                                          --
--  Permission is hereby granted to reproduce and distribute this           --
--  binding by any means and for any fee, whether alone or as part          --
--  of a larger distribution, in source or in binary form, PROVIDED         --
--  this notice is included with any such distribution, and is not          --
--  removed from any of its header files. Mention of ncurses and the        --
--  author of this binding in any applications linked with it is            --
--  highly appreciated.                                                     --
--                                                                          --
--  This binding comes AS IS with no warranty, implied or expressed.        --
------------------------------------------------------------------------------
--  Version Control:
--  @Revision: 1.7 @
------------------------------------------------------------------------------
--  curses binding, generated at Sun Feb  2 17:21:42 1997
--  This module is generated. Please don't change it manually!
--  Run the generator instead.
--  |
with System;
with Interfaces.C;   --  We need this for some assertions.

package Terminal_Interface.Curses is

   pragma Linker_Options ("-lncurses");

   type Window is private;
   Null_Window : constant Window;

   type Line_Position   is new Natural; --  line coordinate
   type Column_Position is new Natural; --  column coordinate

   subtype Line_Count   is Line_Position   range 1 .. Line_Position'Last;
   --  Type to count lines. We do not allow null windows, so must be positive
   subtype Column_Count is Column_Position range 1 .. Column_Position'Last;
   --  Type to count columns. We do not allow null windows, so must be positive

   type Key_Code is new Natural;
   --  That is anything including real characters, special keys and logical
   --  request codes.

   subtype Real_Key_Code is Key_Code range 0 .. 8#777#;
   --  This are the codes that potentially represent a real keystroke.
   --  Not all codes may be possible on a specific terminal. To check the
   --  availability of a special key, the Has_Key function is provided.

   subtype Special_Key_Code is Real_Key_Code
     range 8#400# .. Real_Key_Code'Last;
   --  Type for a function- or special key number

   subtype Normal_Key_Code is Real_Key_Code range
     Character'Pos (Character'First) .. Character'Pos (Character'Last);
   --  This are the codes for regular (incl. non-graphical) characters.

   --  Constants for function- and special keys
   --
   Key_None                       : constant Special_Key_Code := 8#400#;
   Key_Code_Yes                   : constant Special_Key_Code := 8#400#;
   Key_Min                        : constant Special_Key_Code := 8#401#;
   Key_Break                      : constant Special_Key_Code := 8#401#;
   Key_Cursor_Down                : constant Special_Key_Code := 8#402#;
   Key_Cursor_Up                  : constant Special_Key_Code := 8#403#;
   Key_Cursor_Left                : constant Special_Key_Code := 8#404#;
   Key_Cursor_Right               : constant Special_Key_Code := 8#405#;
   Key_Home                       : constant Special_Key_Code := 8#406#;
   Key_Backspace                  : constant Special_Key_Code := 8#407#;
   Key_F0                         : constant Special_Key_Code := 8#410#;
   Key_F1                         : constant Special_Key_Code := 8#411#;
   Key_F2                         : constant Special_Key_Code := 8#412#;
   Key_F3                         : constant Special_Key_Code := 8#413#;
   Key_F4                         : constant Special_Key_Code := 8#414#;
   Key_F5                         : constant Special_Key_Code := 8#415#;
   Key_F6                         : constant Special_Key_Code := 8#416#;
   Key_F7                         : constant Special_Key_Code := 8#417#;
   Key_F8                         : constant Special_Key_Code := 8#420#;
   Key_F9                         : constant Special_Key_Code := 8#421#;
   Key_F10                        : constant Special_Key_Code := 8#422#;
   Key_F11                        : constant Special_Key_Code := 8#423#;
   Key_F12                        : constant Special_Key_Code := 8#424#;
   Key_F13                        : constant Special_Key_Code := 8#425#;
   Key_F14                        : constant Special_Key_Code := 8#426#;
   Key_F15                        : constant Special_Key_Code := 8#427#;
   Key_F16                        : constant Special_Key_Code := 8#430#;
   Key_F17                        : constant Special_Key_Code := 8#431#;
   Key_F18                        : constant Special_Key_Code := 8#432#;
   Key_F19                        : constant Special_Key_Code := 8#433#;
   Key_F20                        : constant Special_Key_Code := 8#434#;
   Key_F21                        : constant Special_Key_Code := 8#435#;
   Key_F22                        : constant Special_Key_Code := 8#436#;
   Key_F23                        : constant Special_Key_Code := 8#437#;
   Key_F24                        : constant Special_Key_Code := 8#440#;
   Key_Delete_Line                : constant Special_Key_Code := 8#510#;
   Key_Insert_Line                : constant Special_Key_Code := 8#511#;
   Key_Delete_Char                : constant Special_Key_Code := 8#512#;
   Key_Insert_Char                : constant Special_Key_Code := 8#513#;
   Key_Exit_Insert_Mode           : constant Special_Key_Code := 8#514#;
   Key_Clear_Screen               : constant Special_Key_Code := 8#515#;
   Key_Clear_End_Of_Screen        : constant Special_Key_Code := 8#516#;
   Key_Clear_End_Of_Line          : constant Special_Key_Code := 8#517#;
   Key_Scroll_1_Forward           : constant Special_Key_Code := 8#520#;
   Key_Scroll_1_Backward          : constant Special_Key_Code := 8#521#;
   Key_Next_Page                  : constant Special_Key_Code := 8#522#;
   Key_Previous_Page              : constant Special_Key_Code := 8#523#;
   Key_Set_Tab                    : constant Special_Key_Code := 8#524#;
   Key_Clear_Tab                  : constant Special_Key_Code := 8#525#;
   Key_Clear_All_Tabs             : constant Special_Key_Code := 8#526#;
   Key_Enter_Or_Send              : constant Special_Key_Code := 8#527#;
   Key_Soft_Reset                 : constant Special_Key_Code := 8#530#;
   Key_Reset                      : constant Special_Key_Code := 8#531#;
   Key_Print                      : constant Special_Key_Code := 8#532#;
   Key_Bottom                     : constant Special_Key_Code := 8#533#;
   Key_Upper_Left_Of_Keypad       : constant Special_Key_Code := 8#534#;
   Key_Upper_Right_Of_Keypad      : constant Special_Key_Code := 8#535#;
   Key_Center_Of_Keypad           : constant Special_Key_Code := 8#536#;
   Key_Lower_Left_Of_Keypad       : constant Special_Key_Code := 8#537#;
   Key_Lower_Right_Of_Keypad      : constant Special_Key_Code := 8#540#;
   Key_Back_Tab                   : constant Special_Key_Code := 8#541#;
   Key_Beginning                  : constant Special_Key_Code := 8#542#;
   Key_Cancel                     : constant Special_Key_Code := 8#543#;
   Key_Close                      : constant Special_Key_Code := 8#544#;
   Key_Command                    : constant Special_Key_Code := 8#545#;
   Key_Copy                       : constant Special_Key_Code := 8#546#;
   Key_Create                     : constant Special_Key_Code := 8#547#;
   Key_End                        : constant Special_Key_Code := 8#550#;
   Key_Exit                       : constant Special_Key_Code := 8#551#;
   Key_Find                       : constant Special_Key_Code := 8#552#;
   Key_Help                       : constant Special_Key_Code := 8#553#;
   Key_Mark                       : constant Special_Key_Code := 8#554#;
   Key_Message                    : constant Special_Key_Code := 8#555#;
   Key_Move                       : constant Special_Key_Code := 8#556#;
   Key_Next                       : constant Special_Key_Code := 8#557#;
   Key_Open                       : constant Special_Key_Code := 8#560#;
   Key_Options                    : constant Special_Key_Code := 8#561#;
   Key_Previous                   : constant Special_Key_Code := 8#562#;
   Key_Redo                       : constant Special_Key_Code := 8#563#;
   Key_Reference                  : constant Special_Key_Code := 8#564#;
   Key_Refresh                    : constant Special_Key_Code := 8#565#;
   Key_Replace                    : constant Special_Key_Code := 8#566#;
   Key_Restart                    : constant Special_Key_Code := 8#567#;
   Key_Resume                     : constant Special_Key_Code := 8#570#;
   Key_Save                       : constant Special_Key_Code := 8#571#;
   Key_Shift_Begin                : constant Special_Key_Code := 8#572#;
   Key_Shift_Cancel               : constant Special_Key_Code := 8#573#;
   Key_Shift_Command              : constant Special_Key_Code := 8#574#;
   Key_Shift_Copy                 : constant Special_Key_Code := 8#575#;
   Key_Shift_Create               : constant Special_Key_Code := 8#576#;
   Key_Shift_Delete_Char          : constant Special_Key_Code := 8#577#;
   Key_Shift_Delete_Line          : constant Special_Key_Code := 8#600#;
   Key_Select                     : constant Special_Key_Code := 8#601#;
   Key_Shift_End                  : constant Special_Key_Code := 8#602#;
   Key_Shift_Clear_End_Of_Line    : constant Special_Key_Code := 8#603#;
   Key_Shift_Exit                 : constant Special_Key_Code := 8#604#;
   Key_Shift_Find                 : constant Special_Key_Code := 8#605#;
   Key_Shift_Help                 : constant Special_Key_Code := 8#606#;
   Key_Shift_Home                 : constant Special_Key_Code := 8#607#;
   Key_Shift_Insert_Char          : constant Special_Key_Code := 8#610#;
   Key_Shift_Cursor_Left          : constant Special_Key_Code := 8#611#;
   Key_Shift_Message              : constant Special_Key_Code := 8#612#;
   Key_Shift_Move                 : constant Special_Key_Code := 8#613#;
   Key_Shift_Next_Page            : constant Special_Key_Code := 8#614#;
   Key_Shift_Options              : constant Special_Key_Code := 8#615#;
   Key_Shift_Previous_Page        : constant Special_Key_Code := 8#616#;
   Key_Shift_Print                : constant Special_Key_Code := 8#617#;
   Key_Shift_Redo                 : constant Special_Key_Code := 8#620#;
   Key_Shift_Replace              : constant Special_Key_Code := 8#621#;
   Key_Shift_Cursor_Right         : constant Special_Key_Code := 8#622#;
   Key_Shift_Resume               : constant Special_Key_Code := 8#623#;
   Key_Shift_Save                 : constant Special_Key_Code := 8#624#;
   Key_Shift_Suspend              : constant Special_Key_Code := 8#625#;
   Key_Shift_Undo                 : constant Special_Key_Code := 8#626#;
   Key_Suspend                    : constant Special_Key_Code := 8#627#;
   Key_Undo                       : constant Special_Key_Code := 8#630#;
   Key_Mouse                      : constant Special_Key_Code := 8#631#;

   Key_Max                        : constant Special_Key_Code
     := Special_Key_Code'Last;

   subtype User_Key_Code is Key_Code
     range (Key_Max + 129) .. Key_Code'Last;
   --  This is reserved for user defined key codes. The range between Key_Max
   --  and the first user code is reserved for subsystems like menu and forms.

   --  For those who like to use the original key names we produce them were
   --  they differ from the original. Please note that they may differ in
   --  lower/upper case.
   KEY_DOWN         : Special_Key_Code renames Key_Cursor_Down;
   KEY_UP           : Special_Key_Code renames Key_Cursor_Up;
   KEY_LEFT         : Special_Key_Code renames Key_Cursor_Left;
   KEY_RIGHT        : Special_Key_Code renames Key_Cursor_Right;
   KEY_DL           : Special_Key_Code renames Key_Delete_Line;
   KEY_IL           : Special_Key_Code renames Key_Insert_Line;
   KEY_DC           : Special_Key_Code renames Key_Delete_Char;
   KEY_IC           : Special_Key_Code renames Key_Insert_Char;
   KEY_EIC          : Special_Key_Code renames Key_Exit_Insert_Mode;
   KEY_CLEAR        : Special_Key_Code renames Key_Clear_Screen;
   KEY_EOS          : Special_Key_Code renames Key_Clear_End_Of_Screen;
   KEY_EOL          : Special_Key_Code renames Key_Clear_End_Of_Line;
   KEY_SF           : Special_Key_Code renames Key_Scroll_1_Forward;
   KEY_SR           : Special_Key_Code renames Key_Scroll_1_Backward;
   KEY_NPAGE        : Special_Key_Code renames Key_Next_Page;
   KEY_PPAGE        : Special_Key_Code renames Key_Previous_Page;
   KEY_STAB         : Special_Key_Code renames Key_Set_Tab;
   KEY_CTAB         : Special_Key_Code renames Key_Clear_Tab;
   KEY_CATAB        : Special_Key_Code renames Key_Clear_All_Tabs;
   KEY_ENTER        : Special_Key_Code renames Key_Enter_Or_Send;
   KEY_SRESET       : Special_Key_Code renames Key_Soft_Reset;
   KEY_LL           : Special_Key_Code renames Key_Bottom;
   KEY_A1           : Special_Key_Code renames Key_Upper_Left_Of_Keypad;
   KEY_A3           : Special_Key_Code renames Key_Upper_Right_Of_Keypad;
   KEY_B2           : Special_Key_Code renames Key_Center_Of_Keypad;
   KEY_C1           : Special_Key_Code renames Key_Lower_Left_Of_Keypad;
   KEY_C3           : Special_Key_Code renames Key_Lower_Right_Of_Keypad;
   KEY_BTAB         : Special_Key_Code renames Key_Back_Tab;
   KEY_BEG          : Special_Key_Code renames Key_Beginning;
   KEY_SBEG         : Special_Key_Code renames Key_Shift_Begin;
   KEY_SCANCEL      : Special_Key_Code renames Key_Shift_Cancel;
   KEY_SCOMMAND     : Special_Key_Code renames Key_Shift_Command;
   KEY_SCOPY        : Special_Key_Code renames Key_Shift_Copy;
   KEY_SCREATE      : Special_Key_Code renames Key_Shift_Create;
   KEY_SDC          : Special_Key_Code renames Key_Shift_Delete_Char;
   KEY_SDL          : Special_Key_Code renames Key_Shift_Delete_Line;
   KEY_SEND         : Special_Key_Code renames Key_Shift_End;
   KEY_SEOL         : Special_Key_Code renames Key_Shift_Clear_End_Of_Line;
   KEY_SEXIT        : Special_Key_Code renames Key_Shift_Exit;
   KEY_SFIND        : Special_Key_Code renames Key_Shift_Find;
   KEY_SHELP        : Special_Key_Code renames Key_Shift_Help;
   KEY_SHOME        : Special_Key_Code renames Key_Shift_Home;
   KEY_SIC          : Special_Key_Code renames Key_Shift_Insert_Char;
   KEY_SLEFT        : Special_Key_Code renames Key_Shift_Cursor_Left;
   KEY_SMESSAGE     : Special_Key_Code renames Key_Shift_Message;
   KEY_SMOVE        : Special_Key_Code renames Key_Shift_Move;
   KEY_SNEXT        : Special_Key_Code renames Key_Shift_Next_Page;
   KEY_SOPTIONS     : Special_Key_Code renames Key_Shift_Options;
   KEY_SPREVIOUS    : Special_Key_Code renames Key_Shift_Previous_Page;
   KEY_SPRINT       : Special_Key_Code renames Key_Shift_Print;
   KEY_SREDO        : Special_Key_Code renames Key_Shift_Redo;
   KEY_SREPLACE     : Special_Key_Code renames Key_Shift_Replace;
   KEY_SRIGHT       : Special_Key_Code renames Key_Shift_Cursor_Right;
   KEY_SRSUME       : Special_Key_Code renames Key_Shift_Resume;
   KEY_SSAVE        : Special_Key_Code renames Key_Shift_Save;
   KEY_SSUSPEND     : Special_Key_Code renames Key_Shift_Suspend;
   KEY_SUNDO        : Special_Key_Code renames Key_Shift_Undo;


------------------------------------------------------------------------------

   type Color_Number is range 0 .. Integer (Interfaces.C.short'Last);
   for Color_Number'Size use Interfaces.C.short'Size;
   --  (n)curses uses a short for the color index
   --  The model is, that a Color_Number is an index into an array of
   --  (potentially) definable colors. Some of those indices are
   --  predefined (see below), although they may not really exist.

   Black    : constant Color_Number := 0;
   Red      : constant Color_Number := 1;
   Green    : constant Color_Number := 2;
   Yellow   : constant Color_Number := 3;
   Blue     : constant Color_Number := 4;
   Magenta  : constant Color_Number := 5;
   Cyan     : constant Color_Number := 6;
   White    : constant Color_Number := 7;

   type RGB_Value is range 0 .. Integer (Interfaces.C.Short'Last);
   for RGB_Value'Size use Interfaces.C.short'Size;
   --  Some system may allow to redefine a color by setting RGB values.

   type Color_Pair is range 0 .. 255;
   for Color_Pair'Size use 8;
   subtype Redefinable_Color_Pair is Color_Pair range 1 .. 255;
   --  (n)curses reserves 1 Byte for the color-pair number. Color Pair 0
   --  is fixed (Black & White). A color pair is simply a combination of
   --  two colors described by Color_Numbers, one for the foreground and
   --  the other for the background

   type Character_Attribute_Set is
      record
         Stand_Out               : Boolean;
         Under_Line              : Boolean;
         Reverse_Video           : Boolean;
         Blink                   : Boolean;
         Dim_Character           : Boolean;
         Bold_Character          : Boolean;
         Alternate_Character_Set : Boolean;
         Invisible_Character     : Boolean;
         Protected_Character     : Boolean;
         Horizontal              : Boolean;
         Left                    : Boolean;
         Low                     : Boolean;
         Right                   : Boolean;
         Top                     : Boolean;
         Vertical                : Boolean;
         Reserved                : Boolean;
      end record;
   pragma Pack (Character_Attribute_Set);
   pragma Convention (C, Character_Attribute_Set);

   for Character_Attribute_Set use
      record
         Stand_Out               at 0 range  0 ..  0;
         Under_Line              at 0 range  1 ..  1;
         Reverse_Video           at 0 range  2 ..  2;
         Blink                   at 0 range  3 ..  3;
         Dim_Character           at 0 range  4 ..  4;
         Bold_Character          at 0 range  5 ..  5;
         Alternate_Character_Set at 0 range  6 ..  6;
         Invisible_Character     at 0 range  7 ..  7;
         Protected_Character     at 0 range  8 ..  8;
         Horizontal              at 0 range  9 ..  9;
         Left                    at 0 range 10 .. 10;
         Low                     at 0 range 11 .. 11;
         Right                   at 0 range 12 .. 12;
         Top                     at 0 range 13 .. 13;
         Vertical                at 0 range 14 .. 14;
         Reserved                at 0 range 15 .. 15;
      end record;
   for Character_Attribute_Set'Size use Interfaces.C.int'Size / 2;
   --  Please note: this rep. clause is generated and may be
   --               different on your system.
   --  (n)curses uses half of an integer for attributes.

   Normal_Video : constant Character_Attribute_Set := (others => False);

   type Attributed_Character is
      record
         Attr  : Character_Attribute_Set := Normal_Video;
         Color : Color_Pair := 0;
         Ch    : Character  := ' ';
      end record;
   pragma Convention (C, Attributed_Character);
   --  This is the counterpart for the chtype in C.

   for Attributed_Character use
      record
         Ch    at 0 range  0 ..  7;
         Color at 0 range  8 .. 15;
         Attr  at 0 range 16 .. 31;
      end record;
   for Attributed_Character'Size use Interfaces.C.int'Size;
      --  Please note: this rep. clause is generated and may be
      --               different on your system.

   Default_Character : constant Attributed_Character
     := (Ch    => Character'First,
         Color => Color_Pair'First,
         Attr  => Normal_Video);

   type Attributed_String is array (Positive range <>) of Attributed_Character;
   pragma Pack (Attributed_String);
   --  In this binding we allow strings of attributed characters.

   ------------------
   --  Exceptions  --
   ------------------
   Curses_Exception : exception;

   --  Those exceptions are raised by the ETI (Extended Terminal Interface)
   --  subpackets for Menu and Forms handling.
   --
   Eti_System_Error    : exception;
   Eti_Bad_Argument    : exception;
   Eti_Posted          : exception;
   Eti_Connected       : exception;
   Eti_Bad_State       : exception;
   Eti_No_Room         : exception;
   Eti_Not_Posted      : exception;
   Eti_Unknown_Command : exception;
   Eti_No_Match        : exception;
   Eti_Not_Selectable  : exception;
   Eti_Not_Connected   : exception;
   Eti_Request_Denied  : exception;
   Eti_Invalid_Field   : exception;
   Eti_Current         : exception;

   --------------------------------------------------------------------------
   --  External C variables
   --  Conceptually even in C this are kind of constants, but they are
   --  initialized and sometimes changed by the library routines at runtime
   --  depending on the type of terminal. I believe the best way to model
   --  this is to use functions.
   --------------------------------------------------------------------------

   function Lines            return Line_Count;
   pragma Inline (Lines);

   function Columns          return Column_Count;
   pragma Inline (Columns);

   function Tab_Size         return Natural;
   pragma Inline (Tab_Size);

   function Number_Of_Colors return Natural;
   pragma Inline (Number_Of_Colors);

   function Number_Of_Color_Pairs return Natural;
   pragma Inline (Number_Of_Color_Pairs);

   ACS_Map : array (Character'Val (0) .. Character'Val (127)) of
     Attributed_Character;
   pragma Import (C, ACS_Map, "acs_map");
   --
   --
   --  Constants for several symbols from the Alternate Character Set
   --  You must use this constants as indices into the ACS_Map array
   --  to get the corresponding attributed character at runtime.
   --
   ACS_Upper_Left_Corner    : constant Character := 'l';
   ACS_Lower_Left_Corner    : constant Character := 'm';
   ACS_Upper_Right_Corner   : constant Character := 'k';
   ACS_Lower_Right_Corner   : constant Character := 'j';
   ACS_Left_Tee             : constant Character := 't';
   ACS_Right_Tee            : constant Character := 'u';
   ACS_Bottom_Tee           : constant Character := 'v';
   ACS_Top_Tee              : constant Character := 'w';
   ACS_Horizontal_Line      : constant Character := 'q';
   ACS_Vertical_Line        : constant Character := 'x';
   ACS_Plus_Symbol          : constant Character := 'n';
   ACS_Scan_Line_1          : constant Character := 'o';
   ACS_Scan_Line_9          : constant Character := 's';
   ACS_Diamond              : constant Character := Character'Val (96);
   ACS_Checker_Board        : constant Character := 'a';
   ACS_Degree               : constant Character := 'f';
   ACS_Plus_Minus           : constant Character := 'g';
   ACS_Bullet               : constant Character := '~';
   ACS_Left_Arrow           : constant Character := ',';
   ACS_Right_Arrow          : constant Character := '+';
   ACS_Down_Arrow           : constant Character := '.';
   ACS_Up_Arrow             : constant Character := '-';
   ACS_Board_Of_Squares     : constant Character := 'h';
   ACS_Lantern              : constant Character := 'I';
   ACS_Solid_Block          : constant Character := '0';
   ACS_Scan_Line_3          : constant Character := 'p';
   ACS_Scan_Line_7          : constant Character := 'r';
   ACS_Less_Or_Equal        : constant Character := 'y';
   ACS_Greater_Or_Equal     : constant Character := 'z';
   ACS_PI                   : constant Character := '{';
   ACS_Not_Equal            : constant Character := '|';
   ACS_Sterling             : constant Character := '}';


   --  |=====================================================================
   --  | Man page curs_initscr.3x
   --  |=====================================================================
   --  | Not implemented: newterm, set_term, delscreen

   --  |
   function Standard_Window return Window;
   --  AKA: stdscr
   pragma Inline (Standard_Window);

   --  |
   procedure Init_Screen;

   --  |
   procedure Init_Windows renames Init_Screen;
   --  AKA: initscr()

   --  |
   procedure End_Windows;
   --  AKA: endwin()
   procedure End_Screen renames End_Windows;

   --  |
   function Is_End_Window return Boolean;
   --  AKA: isendwin()

   --  |=====================================================================
   --  | Man page curs_move.3x
   --  |=====================================================================

   --  |
   procedure Move_Cursor (Win    : in Window := Standard_Window;
                          Line   : in Line_Position;
                          Column : in Column_Position);
   --  AKA: wmove()

   --  |=====================================================================
   --  | Man page curs_addch.3x
   --  |=====================================================================

   --  |
   procedure Add (Win :  in Window := Standard_Window;
                  Ch  :  in Attributed_Character);
   --  AKA: waddch()

   procedure Add (Win :  in Window := Standard_Window;
                  Ch  :  in Character);
   --  Add a single character at the current logical cursor position to
   --  the window. Use the current windows attributes.

   --  |
   procedure Add
     (Win    : in Window := Standard_Window;
      Line   : in Line_Position;
      Column : in Column_Position;
      Ch     : in Attributed_Character);
   --  AKA: mvwaddch()

   procedure Add
     (Win    : in Window := Standard_Window;
      Line   : in Line_Position;
      Column : in Column_Position;
      Ch     : in Character);
   --  Move to the position and add a single character into the window

   --  |
   procedure Add_With_Immediate_Echo
     (Win : in Window := Standard_Window;
      Ch  : in Attributed_Character);
   --  AKA: wechochar()

   procedure Add_With_Immediate_Echo
     (Win : in Window := Standard_Window;
      Ch  : in Character);
   --  Add a character and do an immediate resfresh of the screen.

   --  |=====================================================================
   --  | Man page curs_window.3x
   --  |=====================================================================

   --  |
   function Create
     (Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  AKA: newwin()

   function New_Window
     (Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window
     renames Create;

   --  |
   procedure Delete (Win : in out Window);
   --  AKA: delwin()
   --  Reset Win to Null_Window

   --  |
   function Sub_Window
     (Win                   : Window := Standard_Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  AKA: subwin()

   --  |
   function Derived_Window
     (Win                   : Window := Standard_Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  AKA: derwin()

   --  |
   function Duplicate (Win : Window) return Window;
   --  AKA: dupwin()

   --  |
   procedure Move_Window (Win    : in Window;
                          Line   : in Line_Position;
                          Column : in Column_Position);
   --  AKA: mvwin()

   --  |
   procedure Move_Derived_Window (Win    : in Window;
                                  Line   : in Line_Position;
                                  Column : in Column_Position);
   --  AKA: mvderwin()

   --  |
   procedure Synchronize_Upwards (Win : in Window);
   --  AKA: wsyncup()
   pragma Import (C, Synchronize_Upwards, "wsyncup");

   --  |
   procedure Synchronize_Downwards (Win : in Window);
   --  AKA: wsyncdown()
   pragma Import (C, Synchronize_Downwards, "wsyncdown");

   --  |
   procedure Set_Synch_Mode (Win  : in Window := Standard_Window;
                             Mode : in Boolean := False);
   --  AKA: syncok()

   --  |=====================================================================
   --  | Man page curs_addstr.3x
   --  |=====================================================================

   --  |
   procedure Add (Win : in Window := Standard_Window;
                  Str : in String;
                  Len : in Integer := -1);
   --  AKA: waddnstr()
   --  AKA: waddstr()

   --  |
   procedure Add (Win    : in Window := Standard_Window;
                  Line   : in Line_Position;
                  Column : in Column_Position;
                  Str    : in String;
                  Len    : in Integer := -1);
   --  AKA: mvwaddnstr()
   --  AKA: mvwaddstr()

   --  |=====================================================================
   --  | Man page curs_addchstr.3x
   --  |=====================================================================

   --  |
   procedure Add (Win : in Window := Standard_Window;
                  Str : in Attributed_String;
                  Len : in Integer := -1);
   --  AKA: waddchnstr()
   --  AKA: waddchstr()

   --  |
   procedure Add (Win    : in Window := Standard_Window;
                  Line   : in Line_Position;
                  Column : in Column_Position;
                  Str    : in Attributed_String;
                  Len    : in Integer := -1);
   --  AKA: mvwaddchnstr()
   --  AKA: mvwaddchstr()

   --  |=====================================================================
   --  | Man page curs_border.3x
   --  |=====================================================================

   --  |
   procedure Border
     (Win                       : in Window := Standard_Window;
      Left_Side_Symbol          : in Attributed_Character := Default_Character;
      Right_Side_Symbol         : in Attributed_Character := Default_Character;
      Top_Side_Symbol           : in Attributed_Character := Default_Character;
      Bottom_Side_Symbol        : in Attributed_Character := Default_Character;
      Upper_Left_Corner_Symbol  : in Attributed_Character := Default_Character;
      Upper_Right_Corner_Symbol : in Attributed_Character := Default_Character;
      Lower_Left_Corner_Symbol  : in Attributed_Character := Default_Character;
      Lower_Right_Corner_Symbol : in Attributed_Character := Default_Character
     );
   --  AKA: wborder()

   --  |
   procedure Box
     (Win               : in Window := Standard_Window;
      Vertical_Symbol   : in Attributed_Character := Default_Character;
      Horizontal_Symbol : in Attributed_Character := Default_Character);
   --  AKA: box()

   --  |
   procedure Horizontal_Line
     (Win         : in Window := Standard_Window;
      Line_Size   : in Natural;
      Line_Symbol : in Attributed_Character := Default_Character);
   --  AKA: whline()

   --  |
   procedure Vertical_Line
     (Win         : in Window := Standard_Window;
      Line_Size   : in Natural;
      Line_Symbol : in Attributed_Character := Default_Character);
   --  AKA: wvline()

   --  |=====================================================================
   --  | Man page curs_getch.3x
   --  |=====================================================================

   --  |
   function Get_Keystroke (Win : Window := Standard_Window)
                           return Real_Key_Code;
   --  AKA: wgetch()
   --  Get a character from the keyboard and echo it - if enabled - to the
   --  window.
   --  If for any reason (i.e. a timeout) we couldn't get a character the
   --  returned keycode is Key_None.

   --  |
   procedure Undo_Keystroke (Key : in Real_Key_Code);
   --  AKA: ungetch()

   --  |
   function Has_Key (Key : Special_Key_Code) return Boolean;
   --  AKA: has_key()
   --  |
   --  | Some helper functions
   --  |
   function Is_Function_Key (Key : Special_Key_Code) return Boolean;
   --  Return True if the Key is a function key (i.e. one of F0 .. F63)

   subtype Function_Key_Number is Integer range 0 .. 63;
   --  (n)curses allows for 64 function keys.

   function Function_Key (Key : Real_Key_Code) return Function_Key_Number;
   --  Return the number of the function key. If the code is not a
   --  function key, a CONSTRAINT_ERROR will be raised.

   function Function_Key_Code (Key : Function_Key_Number) return Real_Key_Code;
   --  Return the key code for a given functionkey number.

   --  |=====================================================================
   --  | Man page curs_attr.3x
   --  |=====================================================================

   --  |
   procedure Switch_Character_Attribute
     (Win  : in Window := Standard_Window;
      Attr : in Character_Attribute_Set := Normal_Video;
      On   : in Boolean := True); --  if False we switch Off.
   --  AKA: wattron()
   --  AKA: wattroff()

   --  |
   procedure Set_Character_Attributes
     (Win   : in Window := Standard_Window;
      Attr  : in Character_Attribute_Set := Normal_Video;
      Color : in Color_Pair := Color_Pair'First);
   --  AKA: wattrset()

   --  |
   function Get_Character_Attribute
     (Win : in Window := Standard_Window) return Character_Attribute_Set;
   --  AKA: wattr_get()

   --  |
   function Get_Character_Attribute
     (Win : in Window := Standard_Window) return Color_Pair;
   --  AKA: wattr_get()

   --  |
   procedure Change_Attributes
     (Win   : in Window := Standard_Window;
      Count : in Integer := -1;
      Attr  : in Character_Attribute_Set := Normal_Video;
      Color : in Color_Pair := Color_Pair'First);
   --  AKA: wchgat()

   --  |
   procedure Change_Attributes
     (Win    : in Window := Standard_Window;
      Line   : in Line_Position := Line_Position'First;
      Column : in Column_Position := Column_Position'First;
      Count  : in Integer := -1;
      Attr   : in Character_Attribute_Set := Normal_Video;
      Color  : in Color_Pair := Color_Pair'First);
   --  AKA: mvwchgat()

   --  |=====================================================================
   --  | Man page curs_beep.3x
   --  |=====================================================================

   --  |
   procedure Beep;
   --  AKA: beep()

   --  |
   procedure Flash_Screen;
   --  AKA: flash()

   --  |=====================================================================
   --  | Man page curs_inopts.3x
   --  |=====================================================================

   --  | Not implemented : typeahead
   --
   --  |
   procedure Set_Cbreak_Mode (SwitchOn : in Boolean := True);
   --  AKA: cbreak()
   --  AKA: nocbreak()

   --  |
   procedure Set_Raw_Mode (SwitchOn : in Boolean := True);
   --  AKA: raw()
   --  AKA: noraw()

   --  |
   procedure Set_Echo_Mode (SwitchOn : in Boolean := True);
   --  AKA: echo()
   --  AKA: noecho()

   --  |
   procedure Set_Meta_Mode (Win      : in Window := Standard_Window;
                            SwitchOn : in Boolean := True);
   --  AKA: meta()

   --  |
   procedure Set_KeyPad_Mode (Win      : in Window := Standard_Window;
                              SwitchOn : in Boolean := True);
   --  AKA: keypad()

   type Half_Delay_Amount is range 1 .. 255;

   --  |
   procedure Half_Delay (Amount : in Half_Delay_Amount);
   --  AKA: halfdelay()

   --  |
   procedure Set_Flush_On_Interrupt_Mode
     (Win  : in Window := Standard_Window;
      Mode : in Boolean := True);
   --  AKA: intrflush()

   --  |
   procedure Set_Queue_Interrupt_Mode
     (Win   : in Window := Standard_Window;
      Flush : in Boolean := True);
   --  AKA: qiflush()
   --  AKA: noqiflush()

   --  |
   procedure Set_NoDelay_Mode
     (Win  : in Window := Standard_Window;
      Mode : in Boolean := False);
   --  AKA: nodelay()

   type Timeout_Mode is (Blocking, Non_Blocking, Delayed);

   --  |
   procedure Set_Timeout_Mode (Win    : in Window := Standard_Window;
                               Mode   : in Timeout_Mode;
                               Amount : in Natural); --  in Miliseconds
   --  AKA: wtimeout()
   --  Instead of overloading the semantic of the sign of amount, we
   --  introduce the Timeout_Mode parameter. This should improve
   --  readability. For Blocking and Non_Blocking, the Amount is not
   --  evaluated.

   --  |
   procedure Set_Escape_Timer_Mode
     (Win       : in Window := Standard_Window;
      Timer_Off : in Boolean := False);
   --  AKA: notimeout()

   --  |=====================================================================
   --  | Man page curs_outopts.3x
   --  |=====================================================================

   --  |
   procedure Set_NL_Mode (SwitchOn : in Boolean := True);
   --  AKA: nl()
   --  AKA: nonl()

   --  |
   procedure Clear_On_Next_Update
     (Win      : in Window := Standard_Window;
      Do_Clear : in Boolean := True);
   --  AKA: clearok()

   --  |
   procedure Use_Insert_Delete_Line
     (Win    : in Window := Standard_Window;
      Do_Idl : in Boolean := True);
   --  AKA: idlok()

   --  |
   procedure Use_Insert_Delete_Character
     (Win    : in Window := Standard_Window;
      Do_Idc : in Boolean := True);
   --  AKA: idcok()

   --  |
   procedure Leave_Cursor_After_Update
     (Win      : in Window := Standard_Window;
      Do_Leave : in Boolean := True);
   --  AKA: leaveok()

   --  |
   procedure Immediate_Update_Mode
     (Win  : in Window := Standard_Window;
      Mode : in Boolean := False);
   --  AKA: immedok()

   --  |
   procedure Allow_Scrolling
     (Win  : in Window := Standard_Window;
      Mode : in Boolean := False);
   --  AKA: scrollok()

   function Scrolling_Allowed (Win : Window := Standard_Window) return Boolean;
   --  There is no such function in the C interface.

   --  |
   procedure Set_Scroll_Region
     (Win         : in Window := Standard_Window;
      Top_Line    : in Line_Position;
      Bottom_Line : in Line_Position);
   --  AKA: wsetscrreg()

   --  |=====================================================================
   --  | Man page curs_refresh.3x
   --  |=====================================================================

   --  |
   procedure Update_Screen;
   --  AKA: doupdate()

   --  |
   procedure Refresh (Win : in Window := Standard_Window);
   --  AKA: wrefresh()

   --  |
   procedure Refresh_Without_Update
     (Win : in Window := Standard_Window);
   --  AKA: wnoutrefresh()

   --  |
   procedure Redraw (Win : in Window := Standard_Window);
   --  AKA: redrawwin()

   --  |
   procedure Redraw (Win        : in Window := Standard_Window;
                     Begin_Line : in Line_Position;
                     Line_Count : in Positive);
   --  AKA: wredrawln()

   --  |=====================================================================
   --  | Man page curs_clear.3x
   --  |=====================================================================

   --  |
   procedure Erase (Win : in Window := Standard_Window);
   --  AKA: werase()

   --  |
   procedure Clear
     (Win : in Window := Standard_Window);
   --  AKA: wclear()

   --  |
   procedure Clear_To_End_Of_Screen
     (Win : in Window := Standard_Window);
   --  AKA: wclrtobot()

   --  |
   procedure Clear_To_End_Of_Line
     (Win : in Window := Standard_Window);
   --  AKA: wclrtoeol()

   --  |=====================================================================
   --  | Man page curs_bkgd.3x
   --  |=====================================================================

   --  |
   procedure Set_Background
     (Win : in Window := Standard_Window;
      Ch  : in Attributed_Character);
   --  AKA: wbkgdset()

   --  |
   procedure Change_Background
     (Win : in Window := Standard_Window;
      Ch  : in Attributed_Character);
   --  AKA: wbkgd()

   --  |
   function Get_Background (Win : Window := Standard_Window)
     return Attributed_Character;
   --  AKA: wbkgdget()

   --  |=====================================================================
   --  | Man page curs_touch.3x
   --  |=====================================================================

   --  |
   procedure Touch (Win : in Window := Standard_Window);
   --  AKA: touchwin()

   --  |
   procedure Untouch (Win : in Window := Standard_Window);
   --  AKA: untouchwin()

   --  |
   procedure Touch (Win   : in Window := Standard_Window;
                    Start : in Line_Position;
                    Count : in Positive);
   --  AKA: touchline()

   --  |
   procedure Change_Lines_Status (Win   : in Window := Standard_Window;
                                  Start : in Line_Position;
                                  Count : in Positive;
                                  State : in Boolean);
   --  AKA: wtouchln()

   --  |
   function Is_Touched (Win  : Window := Standard_Window;
                        Line : Line_Position) return Boolean;
   --  AKA: is_linetouched()

   --  |
   function Is_Touched (Win : Window := Standard_Window) return Boolean;
   --  AKA: is_wintouched()

   --  |=====================================================================
   --  | Man page curs_overlay.3x
   --  |=====================================================================

   --  |
   procedure Copy
     (Source_Window            : in Window;
      Destination_Window       : in Window;
      Source_Top_Row           : in Line_Position;
      Source_Left_Column       : in Column_Position;
      Destination_Top_Row      : in Line_Position;
      Destination_Left_Column  : in Column_Position;
      Destination_Bottom_Row   : in Line_Position;
      Destination_Right_Column : in Column_Position;
      Non_Destructive_Mode     : in Boolean := True);
   --  AKA: copywin()

   --  |
   procedure Overwrite (Source_Window      : in Window;
                        Destination_Window : in Window);
   --  AKA: overwrite()

   --  |
   procedure Overlay (Source_Window      : in Window;
                      Destination_Window : in Window);
   --  AKA: overlay()

   --  |=====================================================================
   --  | Man page curs_deleteln.3x
   --  |=====================================================================

   --  |
   procedure Insert_Delete_Lines
     (Win   : in Window  := Standard_Window;
      Lines : in Integer := 1); --  default is to insert one line above
   --  AKA: winsdelln()

   --  |
   procedure Delete_Line (Win : in Window := Standard_Window);
   --  AKA: wdeleteln()

   --  |
   procedure Insert_Line (Win : in Window := Standard_Window);
   --  AKA: winsertln()

   --  |=====================================================================
   --  | Man page curs_getyx.3x
   --  |=====================================================================

   --  |
   procedure Get_Size
     (Win               : in Window := Standard_Window;
      Number_Of_Lines   : out Line_Count;
      Number_Of_Columns : out Column_Count);
   --  AKA: getmaxyx()

   --  |
   procedure Get_Window_Position
     (Win             : in Window := Standard_Window;
      Top_Left_Line   : out Line_Position;
      Top_Left_Column : out Column_Position);
   --  AKA: getbegyx()

   --  |
   procedure Get_Cursor_Position
     (Win    : in  Window := Standard_Window;
      Line   : out Line_Position;
      Column : out Column_Position);
   --  AKA: getyx()

   --  |
   procedure Get_Origin_Relative_To_Parent
     (Win                : in  Window;
      Top_Left_Line      : out Line_Position;
      Top_Left_Column    : out Column_Position;
      Is_Not_A_Subwindow : out Boolean);
   --  AKA: getparyx()
   --  Instead of placing -1 in the coordinates as return, we use a boolean
   --  to return the info that the window has no parent.

   --  |=====================================================================
   --  | Man page curs_pad.3x
   --  |=====================================================================

   --  |
   function New_Pad (Lines   : Line_Count;
                     Columns : Column_Count) return Window;
   --  AKA: newpad()

   --  |
   function Sub_Pad
     (Pad                   : Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  AKA: subpad()

   --  |
   procedure Refresh
     (Pad                      : in Window;
      Source_Top_Row           : in Line_Position;
      Source_Left_Column       : in Column_Position;
      Destination_Top_Row      : in Line_Position;
      Destination_Left_Column  : in Column_Position;
      Destination_Bottom_Row   : in Line_Position;
      Destination_Right_Column : in Column_Position);
   --  AKA: prefresh()

   --  |
   procedure Refresh_Without_Update
     (Pad                      : in Window;
      Source_Top_Row           : in Line_Position;
      Source_Left_Column       : in Column_Position;
      Destination_Top_Row      : in Line_Position;
      Destination_Left_Column  : in Column_Position;
      Destination_Bottom_Row   : in Line_Position;
      Destination_Right_Column : in Column_Position);
   --  AKA: pnoutrefresh()

   --  |
   procedure Add_Character_To_Pad_And_Echo_It
     (Pad : in Window;
      Ch  : in Attributed_Character);
   --  AKA: pechochar()

   procedure Add_Character_To_Pad_And_Echo_It
     (Pad : in Window;
      Ch  : in Character);

   --  |=====================================================================
   --  | Man page curs_scroll.3x
   --  |=====================================================================

   --  |
   procedure Scroll (Win    : in Window  := Standard_Window;
                     Amount : in Integer := 1);
   --  AKA: wscrl()

   --  |=====================================================================
   --  | Man page curs_delch.3x
   --  |=====================================================================

   --  |
   procedure Delete_Character (Win : in Window := Standard_Window);
   --  AKA: wdelch()

   --  |
   procedure Delete_Character
     (Win    : in Window := Standard_Window;
      Line   : in Line_Position;
      Column : in Column_Position);
   --  AKA: mvwdelch()

   --  |=====================================================================
   --  | Man page curs_inch.3x
   --  |=====================================================================

   --  |
   function Peek (Win : Window := Standard_Window)
     return Attributed_Character;
   --  AKA: winch()

   --  |
   function Peek
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position) return Attributed_Character;
   --  AKA: mvwinch()

   --  |=====================================================================
   --  | Man page curs_winch.3x
   --  |=====================================================================

   --  |
   procedure Insert (Win : in Window := Standard_Window;
                     Ch  : in Attributed_Character);
   --  AKA: winsch()

   --  |
   procedure Insert (Win    : in Window := Standard_Window;
                     Line   : in Line_Position;
                     Column : in Column_Position;
                     Ch     : in Attributed_Character);
   --  AKA: mvwinsch()

   --  |=====================================================================
   --  | Man page curs_winch.3x
   --  |=====================================================================

   --  |
   procedure Insert (Win : in Window := Standard_Window;
                     Str : in String;
                     Len : in Integer := -1);
   --  AKA: winsnstr()
   --  AKA: winsstr()

   --  |
   procedure Insert (Win    : in Window := Standard_Window;
                     Line   : in Line_Position;
                     Column : in Column_Position;
                     Str    : in String;
                     Len    : in Integer := -1);
   --  AKA: mvwinsnstr()
   --  AKA: mvwinsstr()

   --  |=====================================================================
   --  | Man page curs_instr.3x
   --  |=====================================================================

   --  |
   procedure Peek (Win : in  Window := Standard_Window;
                   Str : out String;
                   Len : in  Integer := -1);
   --  AKA: winnstr()
   --  AKA: winstr()

   --  |
   procedure Peek (Win    : in  Window := Standard_Window;
                   Line   : in  Line_Position;
                   Column : in  Column_Position;
                   Str    : out String;
                   Len    : in  Integer := -1);
   --  AKA: mvwinnstr()
   --  AKA: mvwinstr()

   --  |=====================================================================
   --  | Man page curs_inchstr.3x
   --  |=====================================================================

   --  |
   procedure Peek (Win : in  Window := Standard_Window;
                   Str : out Attributed_String;
                   Len : in  Integer := -1);
   --  AKA: winchnstr()
   --  AKA: winchstr()

   --  |
   procedure Peek (Win    : in  Window := Standard_Window;
                   Line   : in  Line_Position;
                   Column : in  Column_Position;
                   Str    : out Attributed_String;
                   Len    : in  Integer := -1);
   --  AKA: mvwinchnstr()
   --  AKA: mvwinchstr()

   --  |=====================================================================
   --  | Man page curs_getstr.3x
   --  |=====================================================================

   --  |
   procedure Get (Win : in  Window := Standard_Window;
                  Str : out String;
                  Len : in  Integer := -1);
   --  AKA: wgetnstr()
   --  AKA: wgetstr()

   procedure Get (Win    : in  Window := Standard_Window;
                  Line   : in  Line_Position;
                  Column : in  Column_Position;
                  Str    : out String;
                  Len    : in  Integer := -1);
   --  AKA: wgetnstr(): not specified in ncurses, should be: mvwgetnstr()
   --       and mvwgetstr() (which exists)

   --  |=====================================================================
   --  | Man page curs_slk.3x
   --  |=====================================================================

   type Soft_Label_Key_Format is (Three_Two_Three,
                                  Four_Four,
                                  PC_Style,              --  ncurses specific
                                  PC_Style_With_Index);  --  "
   type Label_Number is new Positive range 1 .. 12;
   type Label_Justification is (Left, Centered, Right);

   --  |
   procedure Init_Soft_Label_Keys
     (Format : in Soft_Label_Key_Format := Three_Two_Three);
   --  AKA: slk_init()

   --  |
   procedure Set_Soft_Label_Key (Label : in Label_Number;
                                 Text  : in String;
                                 Fmt   : in Label_Justification := Left);
   --  AKA: slk_set()

   --  |
   procedure Refresh_Soft_Label_Keys;
   --  AKA: slk_refresh()

   --  |
   procedure Refresh_Soft_Label_Keys_Without_Update;
   --  AKA: slk_noutrefresh()

   --  |
   procedure Get_Soft_Label_Key (Label : in Label_Number;
                                 Text  : out String);
   --  AKA: slk_label()

   --  |
   procedure Clear_Soft_Label_Keys;
   --  AKA: slk_clear()

   --  |
   procedure Restore_Soft_Label_Keys;
   --  AKA: slk_restore()

   --  |
   procedure Touch_Soft_Label_Keys;
   --  AKA: slk_touch()

   --  |
   procedure Switch_Soft_Label_Key_Attributes
     (Attr : in Character_Attribute_Set;
      On   : in Boolean := True);
   --  AKA: slk_attron()
   --  AKA: slk_attroff()

   --  |
   procedure Set_Soft_Label_Key_Attributes
     (Attr  : in Character_Attribute_Set := Normal_Video;
      Color : in Color_Pair := Color_Pair'First);
   --  AKA: slk_attrset()

   --  |
   function Get_Soft_Label_Key_Attributes return Character_Attribute_Set;
   --  AKA: slk_attr()

   --  |
   function Get_Soft_Label_Key_Attributes return Color_Pair;
   --  AKA: slk_attr()

   --  |=====================================================================
   --  | Man page curs_util.3x
   --  |=====================================================================

   --  | Not implemented : filter, use_env, putwin, getwin
   --
   --  |
   procedure Key_Name (Key  : in  Real_Key_Code;
                       Name : out String);
   --  AKA: keyname()
   --  The external name for a real keystroke.

   --  |
   procedure Un_Control (Ch  : in Attributed_Character;
                         Str : out String);
   --  AKA: unctrl()

   --  |
   procedure Delay_Output (Msecs : in Natural);
   --  AKA: delay_output()

   --  |
   procedure Flush_Input;
   --  AKA: flushinp()

   --  |=====================================================================
   --  | Man page curs_termattrs.3x
   --  |=====================================================================

   --  |
   function Baudrate return Natural;
   --  AKA: baudrate()

   --  |
   function Erase_Character return Character;
   --  AKA: erasechar()

   --  |
   function Kill_Character return Character;
   --  AKA: killchar()

   --  |
   function Has_Insert_Character return Boolean;
   --  AKA: has_ic()

   --  |
   function Has_Insert_Line return Boolean;
   --  AKA: has_il()

   --  |
   function Supported_Attributes return Character_Attribute_Set;
   --  AKA: termattrs()

   --  |
   procedure Long_Name (Name : out String);
   --  AKA: longname()

   --  |
   procedure Terminal_Name (Name : out String);
   --  AKA: termname()

   --  |=====================================================================
   --  | Man page curs_color.3x
   --  |=====================================================================

   --  |
   procedure Start_Color;
   --  AKA: start_clolor()
   pragma Import (C, Start_Color, "start_color");

   --  |
   procedure Init_Pair (Pair : in Redefinable_Color_Pair;
                        Fore : in Color_Number;
                        Back : in Color_Number);
   --  AKA: init_pair()

   --  |
   procedure Pair_Content (Pair : in Color_Pair;
                           Fore : out Color_Number;
                           Back : out Color_Number);
   --  AKA: pair_content()

   --  |
   function Has_Colors return Boolean;
   --  AKA: has_colors()

   --  |
   procedure Init_Color (Color : in Color_Number;
                         Red   : in RGB_Value;
                         Green : in RGB_Value;
                         Blue  : in RGB_Value);
   --  AKA: init_color()

   --  |
   function Can_Change_Color return Boolean;
   --  AKA: can_change_color()

   --  |
   procedure Color_Content (Color : in  Color_Number;
                            Red   : out RGB_Value;
                            Green : out RGB_Value;
                            Blue  : out RGB_Value);
   --  AKA: color_content()

   --  |=====================================================================
   --  | Man page curs_kernel.3x
   --  |=====================================================================

   --  | Not implemented: getsyx, setsyx
   --
   type Curses_Mode is (Curses, Shell);

   --  |
   procedure Save_Curses_Mode (Mode : in Curses_Mode);
   --  AKA: def_prog_mode()
   --  AKA: def_shell_mode()

   --  |
   procedure Reset_Curses_Mode (Mode : in Curses_Mode);
   --  AKA: reset_prog_mode()
   --  AKA: reset_shell_mode()

   --  |
   procedure Save_Terminal_State;
   --  AKA: savetty()

   --  |
   procedure Reset_Terminal_State;
   --  AKA: resetty();

   type Stdscr_Init_Proc is access
      function (Win     : Window;
                Columns : Column_Count) return Integer;
   pragma Convention (C, Stdscr_Init_Proc);
   --  N.B.: the return value is actually ignored, but it seems to be
   --        a good practice to return 0 if you think all went fine
   --        and -1 otherwise.

   --  |
   procedure Rip_Off_Lines (Lines : in Integer;
                            Proc  : in Stdscr_Init_Proc);
   --  AKA: ripoffline()
   --  N.B.: to be more precise, this uses a ncurses specific enhancement of
   --        ripoffline(), in which the Lines argument absolute value is the
   --        number of lines to be ripped of. The official ripoffline() only
   --        uses the sign of Lines to rip of a single line from bottom or top.

   type Cursor_Visibility is (Invisible, Normal, Very_Visible);

   --  |
   procedure Set_Cursor_Visibility (Visibility : in out Cursor_Visibility);
   --  AKA: curs_set()

   --  |
   procedure Nap_Milli_Seconds (Ms : in Natural);
   --  AKA: napms()

   --  |=====================================================================
   --  | Some usefull helpers.
   --  |=====================================================================
   type Transform_Direction is (From_Screen, To_Screen);
   procedure Transform_Coordinates
     (W      : in Window := Standard_Window;
      Line   : in out Line_Position;
      Column : in out Column_Position;
      Dir    : in Transform_Direction := From_Screen);
   --  This procedure transforms screen coordinates into coordinates relative
   --  to the window and vice versa, depending on the Dir parmeter.
   --  Screen coordinates are the position informations on the physical device.
   --  An Curses_Exception will be raised if Line and Column are not in the
   --  Window or if you pass the Null_Window as argument.

private
   type Window is new System.Address;
   Null_Window : constant Window := Window (System.Null_Address);

   Generation_Bit_Order : constant System.Bit_Order := System.Low_Order_First;
   --  This constant may be different on your system.

end Terminal_Interface.Curses;


This is BETA software. The interface is subject to change without notice.

This is BETA software. The interface is subject to change without notice.

This hypertext format was generated by David A. Wheeler's ada2html