-- ----------------------------------------------------------------- -- -- AdaSDL -- -- Binding to Simple Direct Media Layer -- -- Copyright (C) 2001 A.M.F.Vargas -- -- Antonio M. F. Vargas -- -- Ponta Delgada - Azores - Portugal -- -- http://www.adapower.net/~avargas -- -- E-mail: avargas@adapower.net -- -- ----------------------------------------------------------------- -- -- -- -- This library is free software; you can redistribute it and/or -- -- modify it under the terms of the GNU General Public -- -- License as published by the Free Software Foundation; either -- -- version 2 of the License, or (at your option) any later version. -- -- -- -- This library is distributed in the hope that it will be useful, -- -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- -- General Public License for more details. -- -- -- -- You should have received a copy of the GNU General Public -- -- License along with this library; if not, write to the -- -- Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- -- Boston, MA 02111-1307, USA. -- -- -- -- As a special exception, if other files instantiate generics from -- -- this unit, or you link this unit with other files to produce an -- -- executable, this unit does not by itself cause the resulting -- -- executable to be covered by the GNU General Public License. This -- -- exception does not however invalidate any other reasons why the -- -- executable file might be covered by the GNU Public License. -- -- ----------------------------------------------------------------- -- -- **************************************************************** -- -- This is an Ada binding to SDL ( Simple DirectMedia Layer from -- -- Sam Lantinga - www.libsld.org ) -- -- **************************************************************** -- -- In order to help the Ada programmer, the comments in this file -- -- are, in great extent, a direct copy of the original text in the -- -- SDL header files. -- -- **************************************************************** -- with SDL.Types; use SDL.Types; with SDL.Keysym; -- use SDL.Keysym; with Interfaces.C.Strings; package SDL.Keyboard is package Ks renames SDL.Keysym; package C renames Interfaces.C; -- Keysym structure -- - The scancode is hardware dependent, and should not be used by general -- applications. If no hardware scancode is available, it will be 0. -- -- - The 'unicode' translated character is only available when character -- translation is enabled by the EnableUNICODE API. If non-zero, -- this is a UNICODE character corresponding to the keypress. If the -- high 9 bits of the character are 0, then this maps to the equivalent -- ASCII character: -- ch : Character; -- if (keysym.unicode and 0xFF80) = 0 then -- ch := keysym.unicode and 0x7F; -- else -- An international character.. -- end if; -- type keysym is record scancode : Uint8; sym : Ks.Key; the_mod : Ks.SDLMod; unicode : Uint16; end record; for keysym'Size use 8*16; -- A practical adjust pragma Convention (C, keysym); type keysym_ptr is access all keysym; pragma Convention (C, keysym_ptr); type keysym_Const_ptr is access constant keysym; pragma Convention (C, keysym_Const_ptr); -- This is the mask which refers to all hotkey bindings SDL_ALL_HOTKEYS : constant Ks.SDLMod := 16#FFFFFFFF#; -- --------------------- -- -- Function prototypes -- -- --------------------- -- -- Enable/Disable UNICODE translation of keyboard input. -- This translation has some overhead, so translation defaults off. -- If 'enable' is 1, translation is enabled. -- If 'enable' is 0, translation is disabled. -- If 'enable' is -1, the translation state is not changed. -- It returns the previous state of keyboard translation. function EnableUNICODE (enable : C.int) return C.int; procedure EnableUNICODE (enable : C.int); pragma Import (C, EnableUNICODE, "SDL_EnableUNICODE"); -- Enable/Disable keyboard repeat. Keyboard repeat defaults to off. -- 'delay' is the initial delay in ms between the time when a key is -- pressed, and keyboard repeat begins. -- 'interval' is the time in ms between keyboard repeat events. DEFAULT_REPEAT_DELAY : constant := 500; DEFAULT_REPEAT_INTERVAL : constant := 30; -- If 'delay' is set to 0, keyboard repeat is disabled. function EnableKeyRepeat ( the_delay : C.int; interval : C.int) return C.int; procedure EnableKeyRepeat ( the_delay : C.int; interval : C.int); pragma Import (C, EnableKeyRepeat, "SDL_EnableKeyRepeat"); -- Get a snapshot of the current state of the keyboard. -- Returns an array of keystates, indexed by the K_* syms. -- Used: -- keystates = GetKeyState(NULL); -- if keystates(K_RETURN) ... is pressed. type KeyStates_Array is array (Ks.Key range Ks.K_FIRST .. Ks.K_LAST) of Uint8; pragma Convention (C, KeyStates_Array); function GetKeyState (numkeys : int_ptr) return Uint8_ptr; pragma Import (C, GetKeyState, "SDL_GetKeyState"); -- This function is not part of the original SDL API function Is_Key_Pressed (ref_Keys : Uint8_ptr; The_Key : Ks.Key) return Boolean; pragma Inline (Is_Key_Pressed); -- Get the current key modifier state function GetModState return Ks.SDLMod; pragma Import (C, GetModState, "SDL_GetModState"); -- Set the current key modifier state -- This does not change the keyboard state, only the key modifier flags. procedure SetModState (modstate : Ks.SDLMod); pragma Import (C, SetModState, "SDL_SetModState"); -- Get the name of an SDL virtual keysym function GetKeyName (the_key : Ks.Key) return C.Strings.chars_ptr; pragma Import (C, GetKeyName, "SDL_GetKeyName"); end SDL.Keyboard;