-- S P E C --
-- --
------------------------------------------------------------------------------
--- Copyright (c) 1998 Free Software Foundation, Inc. --
+-- Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. --
-- --
-- Permission is hereby granted, free of charge, to any person obtaining a --
-- copy of this software and associated documentation files (the --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
+-- Author: Juergen Pfeifer, 1996
-- Version Control:
--- $Revision: 1.26 $
+-- $Revision: 1.41 $
+-- $Date: 2007/05/05 20:33:52 $
-- Binding Version 01.00
------------------------------------------------------------------------------
include(`Base_Defs')
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;
+ type Key_Code is new Integer;
-- That is anything including real characters, special keys and logical
-- request codes.
- subtype Real_Key_Code is Key_Code range 0 .. M4_KEY_MAX;
+ -- FIXME: The "-1" should be Curses_Err
+ subtype Real_Key_Code is Key_Code range -1 .. M4_KEY_MAX;
-- 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.
------------------------------------------------------------------------------
- type Color_Number is range 0 .. Integer (Interfaces.C.short'Last);
+ type Color_Number is range -1 .. 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
-- the other for the background
include(`Character_Attribute_Set_Rep')
- -- (n)curses uses all but the lowes 16 Bits for Attributes.
+ -- (n)curses uses all but the lowest 16 Bits for Attributes.
Normal_Video : constant Character_Attribute_Set := (others => False);
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.
- --
include(`ACS_Map')dnl
-- MANPAGE(`curs_initscr.3x')
-- AKA
pragma Inline (Standard_Window);
+ -- ANCHOR(`curscr',`Current_Window')
+ function Current_Window return Window;
+ -- AKA
+ pragma Inline (Current_Window);
+
-- ANCHOR(`initscr()',`Init_Screen')
procedure Init_Screen;
procedure Init_Windows renames Init_Screen;
-- AKA
pragma Inline (Init_Screen);
- pragma Inline (Init_Windows);
+ -- pragma Inline (Init_Windows);
-- ANCHOR(`endwin()',`End_Windows')
procedure End_Windows;
-- AKA
procedure End_Screen renames End_Windows;
pragma Inline (End_Windows);
- pragma Inline (End_Screen);
+ -- pragma Inline (End_Screen);
-- ANCHOR(`isendwin()',`Is_End_Window')
function Is_End_Window return Boolean;
Line : in Line_Position;
Column : in Column_Position);
-- AKA
+ -- ALIAS(`move()')
pragma Inline (Move_Cursor);
-- MANPAGE(`curs_addch.3x')
procedure Add (Win : in Window := Standard_Window;
Ch : in Attributed_Character);
-- AKA
+ -- ALIAS(`addch()')
procedure Add (Win : in Window := Standard_Window;
Ch : in Character);
Column : in Column_Position;
Ch : in Attributed_Character);
-- AKA
+ -- ALIAS(`mvaddch()')
procedure Add
(Win : in Window := Standard_Window;
(Win : in Window := Standard_Window;
Ch : in Attributed_Character);
-- AKA
+ -- ALIAS(`echochar()')
procedure Add_With_Immediate_Echo
(Win : in Window := Standard_Window;
Ch : in Character);
- -- Add a character and do an immediate resfresh of the screen.
+ -- Add a character and do an immediate refresh of the screen.
pragma Inline (Add_With_Immediate_Echo);
-- MANPAGE(`curs_window.3x')
+ -- Not Implemented: wcursyncup
-- ANCHOR(`newwin()',`Create')
function Create
Number_Of_Columns : Column_Count;
First_Line_Position : Line_Position;
First_Column_Position : Column_Position) return Window;
+ -- Not Implemented: Default Number_Of_Lines, Number_Of_Columns
+ -- the C version lets them be 0, see the man page.
-- AKA
pragma Inline (Create);
First_Line_Position : Line_Position;
First_Column_Position : Column_Position) return Window
renames Create;
- pragma Inline (New_Window);
+ -- pragma Inline (New_Window);
-- ANCHOR(`delwin()',`Delete')
procedure Delete (Win : in out Window);
Len : in Integer := -1);
-- AKA
-- ALIAS(`waddstr()')
+ -- ALIAS(`addnstr()')
+ -- ALIAS(`addstr()')
-- ANCHOR(`mvwaddnstr()',`Add')
procedure Add (Win : in Window := Standard_Window;
Len : in Integer := -1);
-- AKA
-- ALIAS(`mvwaddstr()')
+ -- ALIAS(`mvaddnstr()')
+ -- ALIAS(`mvaddstr()')
-- MANPAGE(`curs_addchstr.3x')
Len : in Integer := -1);
-- AKA
-- ALIAS(`waddchstr()')
+ -- ALIAS(`addchnstr()')
+ -- ALIAS(`addchstr()')
-- ANCHOR(`mvwaddchnstr()',`Add')
procedure Add (Win : in Window := Standard_Window;
Len : in Integer := -1);
-- AKA
-- ALIAS(`mvwaddchstr()')
+ -- ALIAS(`mvaddchnstr()')
+ -- ALIAS(`mvaddchstr()')
pragma Inline (Add);
-- MANPAGE(`curs_border.3x')
+ -- | Not implemented: mvhline, mvwhline, mvvline, mvwvline
+ -- | use Move_Cursor then Horizontal_Line or Vertical_Line
-- ANCHOR(`wborder()',`Border')
procedure Border
Lower_Right_Corner_Symbol : in Attributed_Character := Default_Character
);
-- AKA
+ -- ALIAS(`border()')
pragma Inline (Border);
-- ANCHOR(`box()',`Box')
Line_Size : in Natural;
Line_Symbol : in Attributed_Character := Default_Character);
-- AKA
+ -- ALIAS(`hline()')
pragma Inline (Horizontal_Line);
-- ANCHOR(`wvline()',`Vertical_Line')
Line_Size : in Natural;
Line_Symbol : in Attributed_Character := Default_Character);
-- AKA
+ -- ALIAS(`vline()')
pragma Inline (Vertical_Line);
-- MANPAGE(`curs_getch.3x')
+ -- Not implemented: mvgetch, mvwgetch
-- ANCHOR(`wgetch()',`Get_Keystroke')
function Get_Keystroke (Win : Window := Standard_Window)
return Real_Key_Code;
-- AKA
+ -- ALIAS(`getch()')
-- 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
pragma Inline (Function_Key);
function Function_Key_Code (Key : Function_Key_Number) return Real_Key_Code;
- -- Return the key code for a given functionkey number.
+ -- Return the key code for a given function-key number.
pragma Inline (Function_Key_Code);
-- MANPAGE(`curs_attr.3x')
+ -- | Not implemented attr_off, wattr_off,
+ -- | attr_on, wattr_on, attr_set, wattr_set
+
+ -- PAIR_NUMBER
+ -- PAIR_NUMBER(c) is the same as c.Color
+
+ -- ANCHOR(`standout()',`Standout')
+ procedure Standout (Win : Window := Standard_Window;
+ On : Boolean := True);
+ -- ALIAS(`wstandout()')
+ -- ALIAS(`wstandend()')
-- ANCHOR(`wattron()',`Switch_Character_Attribute')
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.
+ -- Switches those Attributes set to true in the list.
-- AKA
-- ALIAS(`wattroff()')
+ -- ALIAS(`attron()')
+ -- ALIAS(`attroff()')
-- ANCHOR(`wattrset()',`Set_Character_Attributes')
procedure Set_Character_Attributes
Attr : in Character_Attribute_Set := Normal_Video;
Color : in Color_Pair := Color_Pair'First);
-- AKA
+ -- ALIAS(`attrset()')
pragma Inline (Set_Character_Attributes);
-- ANCHOR(`wattr_get()',`Get_Character_Attributes')
function Get_Character_Attribute
(Win : in Window := Standard_Window) return Character_Attribute_Set;
-- AKA
+ -- ALIAS(`attr_get()')
-- ANCHOR(`wattr_get()',`Get_Character_Attribute')
function Get_Character_Attribute
procedure Set_Color (Win : in Window := Standard_Window;
Pair : in Color_Pair);
-- AKA
+ -- ALIAS(`color_set()')
pragma Inline (Set_Color);
-- ANCHOR(`wchgat()',`Change_Attributes')
Attr : in Character_Attribute_Set := Normal_Video;
Color : in Color_Pair := Color_Pair'First);
-- AKA
+ -- ALIAS(`chgat()')
-- ANCHOR(`mvwchgat()',`Change_Attributes')
procedure Change_Attributes
Attr : in Character_Attribute_Set := Normal_Video;
Color : in Color_Pair := Color_Pair'First);
-- AKA
+ -- ALIAS(`mvchgat()')
pragma Inline (Change_Attributes);
-- MANPAGE(`curs_beep.3x')
-- AKA
pragma Inline (Set_KeyPad_Mode);
+ function Get_KeyPad_Mode (Win : in Window := Standard_Window)
+ return Boolean;
+ -- This has no pendant in C. There you've to look into the WINDOWS
+ -- structure to get the value. Bad practice, not repeated in Ada.
+
type Half_Delay_Amount is range 1 .. 255;
-- ANCHOR(`halfdelay()',`Half_Delay')
-- ANCHOR(`wtimeout()',`Set_Timeout_Mode')
procedure Set_Timeout_Mode (Win : in Window := Standard_Window;
Mode : in Timeout_Mode;
- Amount : in Natural); -- in Miliseconds
+ Amount : in Natural); -- in Milliseconds
-- AKA
+ -- ALIAS(`timeout()')
-- 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
Top_Line : in Line_Position;
Bottom_Line : in Line_Position);
-- AKA
+ -- ALIAS(`setscrreg()')
pragma Inline (Set_Scroll_Region);
-- MANPAGE(`curs_refresh.3x')
-- AKA
-- There is an overloaded Refresh for Pads.
-- The Inline pragma appears there
+ -- ALIAS(`refresh()')
-- ANCHOR(`wnoutrefresh()',`Refresh_Without_Update')
procedure Refresh_Without_Update
-- ANCHOR(`werase()',`Erase')
procedure Erase (Win : in Window := Standard_Window);
-- AKA
+ -- ALIAS(`erase()')
pragma Inline (Erase);
-- ANCHOR(`wclear()',`Clear')
procedure Clear
(Win : in Window := Standard_Window);
-- AKA
+ -- ALIAS(`clear()')
pragma Inline (Clear);
-- ANCHOR(`wclrtobot()',`Clear_To_End_Of_Screen')
procedure Clear_To_End_Of_Screen
(Win : in Window := Standard_Window);
-- AKA
+ -- ALIAS(`clrtobot()')
pragma Inline (Clear_To_End_Of_Screen);
-- ANCHOR(`wclrtoeol()',`Clear_To_End_Of_Line')
procedure Clear_To_End_Of_Line
(Win : in Window := Standard_Window);
-- AKA
+ -- ALIAS(`clrtoeol()')
pragma Inline (Clear_To_End_Of_Line);
-- MANPAGE(`curs_bkgd.3x')
-- ANCHOR(`wbkgdset()',`Set_Background')
+ -- TODO: we could have Set_Background(Window; Character_Attribute_Set)
+ -- because in C it is common to see bkgdset(A_BOLD) or
+ -- bkgdset(COLOR_PAIR(n))
procedure Set_Background
(Win : in Window := Standard_Window;
Ch : in Attributed_Character);
-- AKA
+ -- ALIAS(`bkgdset()')
pragma Inline (Set_Background);
-- ANCHOR(`wbkgd()',`Change_Background')
(Win : in Window := Standard_Window;
Ch : in Attributed_Character);
-- AKA
+ -- ALIAS(`bkgd()')
pragma Inline (Change_Background);
-- ANCHOR(`wbkgdget()',`Get_Background')
+ -- ? wbkgdget is not listed in curs_bkgd, getbkgd is thpough.
function Get_Background (Win : Window := Standard_Window)
return Attributed_Character;
-- AKA
+ -- ALIAS(`bkgdget()')
pragma Inline (Get_Background);
-- MANPAGE(`curs_touch.3x')
(Win : in Window := Standard_Window;
Lines : in Integer := 1); -- default is to insert one line above
-- AKA
+ -- ALIAS(`insdelln()')
pragma Inline (Insert_Delete_Lines);
-- ANCHOR(`wdeleteln()',`Delete_Line')
procedure Delete_Line (Win : in Window := Standard_Window);
-- AKA
+ -- ALIAS(`deleteln()')
pragma Inline (Delete_Line);
-- ANCHOR(`winsertln()',`Insert_Line')
procedure Insert_Line (Win : in Window := Standard_Window);
-- AKA
+ -- ALIAS(`insertln()')
pragma Inline (Insert_Line);
-- MANPAGE(`curs_getyx.3x')
procedure Scroll (Win : in Window := Standard_Window;
Amount : in Integer := 1);
-- AKA
+ -- ALIAS(`scroll()')
+ -- ALIAS(`scrl()')
pragma Inline (Scroll);
-- MANPAGE(`curs_delch.3x')
-- ANCHOR(`wdelch()',`Delete_Character')
procedure Delete_Character (Win : in Window := Standard_Window);
-- AKA
+ -- ALIAS(`delch()')
-- ANCHOR(`mvwdelch()',`Delete_Character')
procedure Delete_Character
Line : in Line_Position;
Column : in Column_Position);
-- AKA
+ -- ALIAS(`mvdelch()')
pragma Inline (Delete_Character);
-- MANPAGE(`curs_inch.3x')
-- ANCHOR(`winch()',`Peek')
function Peek (Win : Window := Standard_Window)
return Attributed_Character;
+ -- ALIAS(`inch()')
-- AKA
-- ANCHOR(`mvwinch()',`Peek')
Line : Line_Position;
Column : Column_Position) return Attributed_Character;
-- AKA
+ -- ALIAS(`mvinch()')
-- More Peek's follow, pragma Inline appears later.
- -- MANPAGE(`curs_winch.3x')
+ -- MANPAGE(`curs_insch.3x')
-- ANCHOR(`winsch()',`Insert')
procedure Insert (Win : in Window := Standard_Window;
Ch : in Attributed_Character);
-- AKA
+ -- ALIAS(`insch()')
-- ANCHOR(`mvwinsch()',`Insert')
procedure Insert (Win : in Window := Standard_Window;
Column : in Column_Position;
Ch : in Attributed_Character);
-- AKA
+ -- ALIAS(`mvinsch()')
- -- MANPAGE(`curs_winch.3x')
+ -- MANPAGE(`curs_insstr.3x')
-- ANCHOR(`winsnstr()',`Insert')
procedure Insert (Win : in Window := Standard_Window;
Len : in Integer := -1);
-- AKA
-- ALIAS(`winsstr()')
+ -- ALIAS(`insnstr()')
+ -- ALIAS(`insstr()')
-- ANCHOR(`mvwinsnstr()',`Insert')
procedure Insert (Win : in Window := Standard_Window;
Len : in Integer := -1);
-- AKA
-- ALIAS(`mvwinsstr()')
+ -- ALIAS(`mvinsnstr()')
+ -- ALIAS(`mvinsstr()')
pragma Inline (Insert);
-- MANPAGE(`curs_instr.3x')
Len : in Integer := -1);
-- AKA
-- ALIAS(`winstr()')
+ -- ALIAS(`innstr()')
+ -- ALIAS(`instr()')
-- ANCHOR(`mvwinnstr()',`Peek')
procedure Peek (Win : in Window := Standard_Window;
Len : in Integer := -1);
-- AKA
-- ALIAS(`mvwinstr()')
+ -- ALIAS(`mvinnstr()')
+ -- ALIAS(`mvinstr()')
-- MANPAGE(`curs_inchstr.3x')
Len : in Integer := -1);
-- AKA
-- ALIAS(`winchstr()')
+ -- ALIAS(`inchnstr()')
+ -- ALIAS(`inchstr()')
-- ANCHOR(`mvwinchnstr()',`Peek')
procedure Peek (Win : in Window := Standard_Window;
Len : in Integer := -1);
-- AKA
-- ALIAS(`mvwinchstr()')
+ -- ALIAS(`mvinchnstr()')
+ -- ALIAS(`mvinchstr()')
-- We don't inline the Peek procedures
-- MANPAGE(`curs_getstr.3x')
Len : in Integer := -1);
-- AKA
-- ALIAS(`wgetstr()')
+ -- ALIAS(`getnstr()')
+ -- ALIAS(`getstr()')
+ -- actually getstr is not supported because that results in buffer
+ -- overflows.
+ -- ANCHOR(`mvwgetnstr()',`Get')
procedure Get (Win : in Window := Standard_Window;
Line : in Line_Position;
Column : in Column_Position;
Str : out String;
Len : in Integer := -1);
-- AKA
- -- not specified in ncurses, should be: mvwgetnstr()
- -- and mvwgetstr() (which exists)
+ -- ALIAS(`mvwgetstr()')
+ -- ALIAS(`mvgetnstr()')
+ -- ALIAS(`mvgetstr()')
-- Get is not inlined
-- MANPAGE(`curs_slk.3x')
+ -- Not Implemented: slk_attr_on, slk_attr_off, slk_attr_set
+
type Soft_Label_Key_Format is (Three_Two_Three,
Four_Four,
PC_Style, -- ncurses specific
-- AKA
pragma Inline (Set_Soft_Label_Key_Color);
+ -- MANPAGE(`keybound.3x')
+ -- Not Implemented: keybound
+
-- MANPAGE(`keyok.3x')
-- ANCHOR(`keyok()',`Enable_Key')
-- MANPAGE(`curs_util.3x')
- -- | Not implemented : filter, use_env, putwin, getwin
+ -- | Not implemented : filter, use_env
+ -- | putwin, getwin are in the child package PutWin
--
+
-- ANCHOR(`keyname()',`Key_Name')
procedure Key_Name (Key : in Real_Key_Code;
Name : out String);
-- MANPAGE(`curs_color.3x')
- -- ANCHOR(`start_clolor()',`Start_Color')
+ -- COLOR_PAIR
+ -- COLOR_PAIR(n) in C is the same as
+ -- Attributed_Character(Ch => Nul, Color => n, Attr => Normal_Video)
+ -- In C you often see something like c = c | COLOR_PAIR(n);
+ -- This is equivalent to c.Color := n;
+
+ -- ANCHOR(`start_color()',`Start_Color')
procedure Start_Color;
-- AKA
pragma Import (C, Start_Color, "start_color");
pragma Inline (Color_Content);
-- MANPAGE(`curs_kernel.3x')
-
-- | Not implemented: getsyx, setsyx
--
type Curses_Mode is (Curses, Shell);
pragma Inline (Nap_Milli_Seconds);
-- |=====================================================================
- -- | Some usefull helpers.
+ -- | Some useful helpers.
-- |=====================================================================
type Transform_Direction is (From_Screen, To_Screen);
procedure Transform_Coordinates
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.
+ -- to the window and vice versa, depending on the Dir parameter.
-- 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.
-- We don't inline this procedure
+ -- MANPAGE(`default_colors.3x')
+
+ -- ANCHOR(`use_default_colors()',`Use_Default_Colors')
+ procedure Use_Default_Colors;
+ -- AKA
+ pragma Inline (Use_Default_Colors);
+
+ -- ANCHOR(`assume_default_colors()',`Assume_Default_Colors')
+ procedure Assume_Default_Colors (Fore : Color_Number := Default_Color;
+ Back : Color_Number := Default_Color);
+ -- AKA
+ pragma Inline (Assume_Default_Colors);
+
+ -- MANPAGE(`curs_extend.3x')
+
+ -- ANCHOR(`curses_version()',`Curses_Version')
+ function Curses_Version return String;
+ -- AKA
+
+ -- ANCHOR(`use_extended_names()',`Use_Extended_Names')
+ -- The returnvalue is the previous setting of the flag
+ function Use_Extended_Names (Enable : Boolean) return Boolean;
+ -- AKA
+
+ -- MANPAGE(`curs_trace.3x')
+
+ -- ANCHOR(`_nc_freeall()',`Curses_Free_All')
+ procedure Curses_Free_All;
+ -- AKA
+
+ -- MANPAGE(`curs_scr_dump.3x')
+
+ -- ANCHOR(`scr_dump()',`Screen_Dump_To_File')
+ procedure Screen_Dump_To_File (Filename : in String);
+ -- AKA
+
+ -- ANCHOR(`scr_restore()',`Screen_Restore_From_File')
+ procedure Screen_Restore_From_File (Filename : in String);
+ -- AKA
+
+ -- ANCHOR(`scr_init()',`Screen_Init_From_File')
+ procedure Screen_Init_From_File (Filename : in String);
+ -- AKA
+
+ -- ANCHOR(`scr_set()',`Screen_Set_File')
+ procedure Screen_Set_File (Filename : in String);
+ -- AKA
+
+ -- MANPAGE(`curs_print.3x')
+ -- Not implemented: mcprint
+
+ -- MANPAGE(`curs_printw.3x')
+ -- Not implemented: printw, wprintw, mvprintw, mvwprintw, vwprintw,
+ -- vw_printw
+ -- Please use the Ada style Text_IO child packages for formatted
+ -- printing. It doesn't make a lot of sense to map the printf style
+ -- C functions to Ada.
+
+ -- MANPAGE(`curs_scanw.3x')
+ -- Not implemented: scanw, wscanw, mvscanw, mvwscanw, vwscanw, vw_scanw
+
+ -- MANPAGE(`resizeterm.3x')
+ -- Not Implemented: resizeterm
+
+ -- MANPAGE(`wresize.3x')
+
+ -- ANCHOR(`wresize()',`Resize')
+ procedure Resize (Win : Window := Standard_Window;
+ Number_Of_Lines : Line_Count;
+ Number_Of_Columns : Column_Count);
+ -- AKA
+
private
type Window is new System.Storage_Elements.Integer_Address;
Null_Window : constant Window := 0;