unit SDL_keyboard;

{  Automatically converted by H2PAS.EXE from SDL_keyboard.h
   Utility made by Florian Klaempfl 25th-28th september 96
   Improvements made by Mark A. Malakanov 22nd-25th may 97 
   Further improvements by Michael Van Canneyt, April 1998 
   define handling and error recovery by Pierre Muller, June 1998 }

   { ***Edited by Daniel F Moisset, dmoisset@grulic.org.ar*** }

  interface

    uses SDL_types;
  { C default packing is dword }

{$PACKRECORDS c}

 { Pointers to basic pascal types, inserted by h2pas conversion program.}
  Type
     PBoolArray = ^BoolArray ;
     BoolArray  = Array[0..322] of Boolean;

  {
      SDL - Simple DirectMedia Layer
      Copyright (C) 1997, 1998, 1999, 2000, 2001  Sam Lantinga
  
      This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Library 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
      Library General Public License for more details.
  
      You should have received a copy of the GNU Library General Public
      License along with this library; if not, write to the Free
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  
      Sam Lantinga
      slouken@devolution.com
   }

  { Include file for SDL keyboard event handling  }

  { ***corresponding to SDL_keysym.h***}
  {
      SDL - Simple DirectMedia Layer
      Copyright (C) 1997, 1998, 1999, 2000, 2001  Sam Lantinga
  
      This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Library 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
      Library General Public License for more details.
  
      You should have received a copy of the GNU Library General Public
      License along with this library; if not, write to the Free
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  
      Sam Lantinga
      slouken@devolution.com
   }

  { What we really want is a mapping of every raw key on the keyboard.
     To support international keyboards, we use the range 0xA1 - 0xFF
     as international virtual keycodes.  We'll follow in the footsteps of X11...
  }

  type

     SDLKey =  Longint;
       Const
       {The names of the keys}
       { The keyboard syms have been cleverly chosen to map to ASCII  }
       SDLK_UNKNOWN = 0;
       SDLK_FIRST = 0;
       SDLK_BACKSPACE = 8;
       SDLK_TAB = 9;
       SDLK_CLEAR = 12;
       SDLK_RETURN = 13;
       SDLK_PAUSE = 19;
       SDLK_ESCAPE = 27;
       SDLK_SPACE = 32;
       SDLK_EXCLAIM = 33;
       SDLK_QUOTEDBL = 34;
       SDLK_HASH = 35;
       SDLK_DOLLAR = 36;
       SDLK_AMPERSAND = 38;
       SDLK_QUOTE = 39;
       SDLK_LEFTPAREN = 40;
       SDLK_RIGHTPAREN = 41;
       SDLK_ASTERISK = 42;
       SDLK_PLUS = 43;
       SDLK_COMMA = 44;
       SDLK_MINUS = 45;
       SDLK_PERIOD = 46;
       SDLK_SLASH = 47;
       SDLK_0 = 48;
       SDLK_1 = 49;
       SDLK_2 = 50;
       SDLK_3 = 51;
       SDLK_4 = 52;
       SDLK_5 = 53;
       SDLK_6 = 54;
       SDLK_7 = 55;
       SDLK_8 = 56;
       SDLK_9 = 57;
       SDLK_COLON = 58;
       SDLK_SEMICOLON = 59;
       SDLK_LESS = 60;
       SDLK_EQUALS = 61;
       SDLK_GREATER = 62;
       SDLK_QUESTION = 63;
       SDLK_AT = 64;
       { Skip uppercase letters }
       SDLK_LEFTBRACKET = 91;
       SDLK_BACKSLASH = 92;
       SDLK_RIGHTBRACKET = 93;
       SDLK_CARET = 94;
       SDLK_UNDERSCORE = 95;
       SDLK_BACKQUOTE = 96;
       SDLK_a = 97;
       SDLK_b = 98;
       SDLK_c = 99;
       SDLK_d = 100;
       SDLK_e = 101;
       SDLK_f = 102;
       SDLK_g = 103;
       SDLK_h = 104;
       SDLK_i = 105;
       SDLK_j = 106;
       SDLK_k = 107;
       SDLK_l = 108;
       SDLK_m = 109;
       SDLK_n = 110;
       SDLK_o = 111;
       SDLK_p = 112;
       SDLK_q = 113;
       SDLK_r = 114;
       SDLK_s = 115;
       SDLK_t = 116;
       SDLK_u = 117;
       SDLK_v = 118;
       SDLK_w = 119;
       SDLK_x = 120;
       SDLK_y = 121;
       SDLK_z = 122;
       SDLK_DELETE = 127;
       { End of ASCII mapped keysyms  }
       { International keyboard syms  }
       SDLK_WORLD_0 = 160;      { 0xA0  }
       SDLK_WORLD_1 = 161;
       SDLK_WORLD_2 = 162;
       SDLK_WORLD_3 = 163;
       SDLK_WORLD_4 = 164;
       SDLK_WORLD_5 = 165;
       SDLK_WORLD_6 = 166;
       SDLK_WORLD_7 = 167;
       SDLK_WORLD_8 = 168;
       SDLK_WORLD_9 = 169;
       SDLK_WORLD_10 = 170;
       SDLK_WORLD_11 = 171;
       SDLK_WORLD_12 = 172;
       SDLK_WORLD_13 = 173;
       SDLK_WORLD_14 = 174;
       SDLK_WORLD_15 = 175;
       SDLK_WORLD_16 = 176;
       SDLK_WORLD_17 = 177;
       SDLK_WORLD_18 = 178;
       SDLK_WORLD_19 = 179;
       SDLK_WORLD_20 = 180;
       SDLK_WORLD_21 = 181;
       SDLK_WORLD_22 = 182;
       SDLK_WORLD_23 = 183;
       SDLK_WORLD_24 = 184;
       SDLK_WORLD_25 = 185;
       SDLK_WORLD_26 = 186;
       SDLK_WORLD_27 = 187;
       SDLK_WORLD_28 = 188;
       SDLK_WORLD_29 = 189;
       SDLK_WORLD_30 = 190;
       SDLK_WORLD_31 = 191;
       SDLK_WORLD_32 = 192;
       SDLK_WORLD_33 = 193;
       SDLK_WORLD_34 = 194;
       SDLK_WORLD_35 = 195;
       SDLK_WORLD_36 = 196;
       SDLK_WORLD_37 = 197;
       SDLK_WORLD_38 = 198;
       SDLK_WORLD_39 = 199;
       SDLK_WORLD_40 = 200;
       SDLK_WORLD_41 = 201;
       SDLK_WORLD_42 = 202;
       SDLK_WORLD_43 = 203;
       SDLK_WORLD_44 = 204;
       SDLK_WORLD_45 = 205;
       SDLK_WORLD_46 = 206;
       SDLK_WORLD_47 = 207;
       SDLK_WORLD_48 = 208;
       SDLK_WORLD_49 = 209;
       SDLK_WORLD_50 = 210;
       SDLK_WORLD_51 = 211;
       SDLK_WORLD_52 = 212;
       SDLK_WORLD_53 = 213;
       SDLK_WORLD_54 = 214;
       SDLK_WORLD_55 = 215;
       SDLK_WORLD_56 = 216;
       SDLK_WORLD_57 = 217;
       SDLK_WORLD_58 = 218;
       SDLK_WORLD_59 = 219;
       SDLK_WORLD_60 = 220;
       SDLK_WORLD_61 = 221;
       SDLK_WORLD_62 = 222;
       SDLK_WORLD_63 = 223;
       SDLK_WORLD_64 = 224;
       SDLK_WORLD_65 = 225;
       SDLK_WORLD_66 = 226;
       SDLK_WORLD_67 = 227;
       SDLK_WORLD_68 = 228;
       SDLK_WORLD_69 = 229;
       SDLK_WORLD_70 = 230;
       SDLK_WORLD_71 = 231;
       SDLK_WORLD_72 = 232;
       SDLK_WORLD_73 = 233;
       SDLK_WORLD_74 = 234;
       SDLK_WORLD_75 = 235;
       SDLK_WORLD_76 = 236;
       SDLK_WORLD_77 = 237;
       SDLK_WORLD_78 = 238;
       SDLK_WORLD_79 = 239;
       SDLK_WORLD_80 = 240;
       SDLK_WORLD_81 = 241;
       SDLK_WORLD_82 = 242;
       SDLK_WORLD_83 = 243;
       SDLK_WORLD_84 = 244;
       SDLK_WORLD_85 = 245;
       SDLK_WORLD_86 = 246;
       SDLK_WORLD_87 = 247;
       SDLK_WORLD_88 = 248;
       SDLK_WORLD_89 = 249;
       SDLK_WORLD_90 = 250;
       SDLK_WORLD_91 = 251;
       SDLK_WORLD_92 = 252;
       SDLK_WORLD_93 = 253;
       SDLK_WORLD_94 = 254;
       SDLK_WORLD_95 = 255;     { 0xFF  }
       { Numeric keypad  }
       SDLK_KP0 = 256;
       SDLK_KP1 = 257;
       SDLK_KP2 = 258;
       SDLK_KP3 = 259;
       SDLK_KP4 = 260;
       SDLK_KP5 = 261;
       SDLK_KP6 = 262;
       SDLK_KP7 = 263;
       SDLK_KP8 = 264;
       SDLK_KP9 = 265;
       SDLK_KP_PERIOD = 266;
       SDLK_KP_DIVIDE = 267;
       SDLK_KP_MULTIPLY = 268;
       SDLK_KP_MINUS = 269;
       SDLK_KP_PLUS = 270;
       SDLK_KP_ENTER = 271;
       SDLK_KP_EQUALS = 272;
       { Arrows + Home/End pad  }
       SDLK_UP = 273;
       SDLK_DOWN = 274;
       SDLK_RIGHT = 275;
       SDLK_LEFT = 276;
       SDLK_INSERT = 277;
       SDLK_HOME = 278;
       SDLK_END = 279;
       SDLK_PAGEUP = 280;
       SDLK_PAGEDOWN = 281;
       { Function keys  }
       SDLK_F1 = 282;
       SDLK_F2 = 283;
       SDLK_F3 = 284;
       SDLK_F4 = 285;
       SDLK_F5 = 286;
       SDLK_F6 = 287;
       SDLK_F7 = 288;
       SDLK_F8 = 289;
       SDLK_F9 = 290;
       SDLK_F10 = 291;
       SDLK_F11 = 292;
       SDLK_F12 = 293;
       SDLK_F13 = 294;
       SDLK_F14 = 295;
       SDLK_F15 = 296;
       { Key state modifier keys  }
       SDLK_NUMLOCK = 300;
       SDLK_CAPSLOCK = 301;
       SDLK_SCROLLOCK = 302;
       SDLK_RSHIFT = 303;
       SDLK_LSHIFT = 304;
       SDLK_RCTRL = 305;
       SDLK_LCTRL = 306;
       SDLK_RALT = 307;
       SDLK_LALT = 308;
       SDLK_RMETA = 309;
       SDLK_LMETA = 310;
       SDLK_LSUPER = 311;       { Left "Windows" key  }
       SDLK_RSUPER = 312;       { Right "Windows" key  }
       SDLK_MODE = 313;         { "Alt Gr" key  }
       SDLK_COMPOSE = 314;      { Multi-key compose key  }
       { Miscellaneous function keys  }
       SDLK_HELP = 315;
       SDLK_PRINT = 316;
       SDLK_SYSREQ = 317;
       SDLK_BREAK = 318;
       SDLK_MENU = 319;
       { Power Macintosh power key  }
       SDLK_POWER = 320;
       { Some european keyboards  }
       SDLK_EURO = 321;
       { Add any other keys here  }
       SDLK_LAST = 322;


  type
     SDLMod =  Longint;
       Const
       { Enumeration of valid key mods (possibly OR'd together)  }
       KMOD_NONE = $0000;
       KMOD_LSHIFT = $0001;
       KMOD_RSHIFT = $0002;
       KMOD_LCTRL = $0040;
       KMOD_RCTRL = $0080;
       KMOD_LALT = $0100;
       KMOD_RALT = $0200;
       KMOD_LMETA = $0400;
       KMOD_RMETA = $0800;
       KMOD_NUM = $1000;
       KMOD_CAPS = $2000;
       KMOD_MODE = $4000;
       KMOD_RESERVED = $8000;

     KMOD_CTRL = KMOD_LCTRL or KMOD_RCTRL;
     KMOD_SHIFT = KMOD_LSHIFT or KMOD_RSHIFT;
     KMOD_ALT = KMOD_LALT or KMOD_RALT;
     KMOD_META = KMOD_LMETA or KMOD_RMETA;
  { ***end of SDL_keysym.h***}
  type

  { 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 SDL_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:
  	var
          ch:char;
          
  	if (keysym.unicode and $FF80) = 0  then
  	  ch := keysym.unicode and 0x7F
  	else
  	  An international character...
  	
    }

     SDL_keysym = record
          scancode : Uint8;     { hardware specific scancode  }
          sym : SDLKey;         { SDL virtual keysym  }
          modifier : SDLMod;    { current key modifiers  }
          unicode : Uint16;     { translated character  }
       end;

  const
     { This is the mask which refers to all hotkey bindings }
     SDL_ALL_HOTKEYS = $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 SDL_EnableUNICODE(enable:longint):longint;cdecl;

  {
     Get a snapshot of the current state of the keyboard.
     Returns an array of keystates, indexed by the SDLK_  syms.
     Used:
     	keystate: PBoolArray;
        
        keystate := SDL_GetKeyState(nil);
        if keystate[SDLK_RETURN] then
    	  ... <RETURN> is pressed
    }
  function SDL_GetKeyState(var numkeys:longint):PBoolArray;cdecl;

  {
     Get the current key modifier state
    }
  function SDL_GetModState:SDLMod;cdecl;

  {
     Set the current key modifier state
     This does not change the keyboard state, only the key modifier flags.
    }
  procedure SDL_SetModState(modstate:SDLMod);cdecl;

  {
     Get the name of an SDL virtual keysym
    }
  function SDL_GetKeyName(key:SDLKey):Pchar;cdecl;
  
  function SDL_EnableKeyRepeat(keydelay, keytinterval: longint): longint; cdecl;

  implementation

  function SDL_EnableUNICODE(enable:longint):longint;cdecl;external 'SDL';

  function SDL_GetKeyState(var numkeys:longint):PBoolArray;cdecl;external 'SDL';

  function SDL_GetModState:SDLMod;cdecl;external 'SDL';

  procedure SDL_SetModState(modstate:SDLMod);cdecl;external 'SDL';

  function SDL_GetKeyName(key:SDLKey):Pchar;cdecl;external 'SDL';

  function SDL_EnableKeyRepeat(keydelay, keytinterval: longint): longint; cdecl; external 'SDL';
  
end.
