📄 lua_kbd.c
字号:
/****************************************************************************
** **
** LuAllegro library - Lua port of Allegro **
** Copyright (C) 2005 Peter Jamroz **
** e-mail: peterjam at poczta dot onet dot pl **
** **
** Permission to use, copy, modify, publish this software **
** is hereby granted to any person obtaining a copy of this software, **
** FREE OF CHARGE, **
** under the following conditions: **
** **
** 1: The above copyright notice and this permission notice shall be **
** included in all copies or substantial portions of the Software. **
** **
** 2: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, **
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF **
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.**
** IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY **
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, **
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE **
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **
** **
****************************************************************************/
#include <allegro.h>
#include "lua_kbd.h"
//------------------------------------------------------------------------------------------
//--- Keyboard functions -------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//bool keypressed();
static int l_keypressed(lua_State* L)
{
lua_pushboolean(L,keypressed());
return 1;
}
//------------------------------------------------------------------------------------------
//key,scancode = readkey();
static int l_readkey(lua_State* L)
{
int value= readkey();
lua_pushnumber( L, (value&0xFF) );
lua_pushnumber( L, (value>>8) );
return 2;
}
//------------------------------------------------------------------------------------------
//val,scancode = ureadkey(); //unicode version of a readkey
static int l_ureadkey(lua_State* L)
{
int val,scancode;
val = ureadkey(&scancode);
lua_pushnumber(L,val);
lua_pushnumber(L,scancode);
return 2;
}
//------------------------------------------------------------------------------------------
//bool keyboard_needs_poll();
static int l_keyboard_needs_poll(lua_State* L)
{
lua_pushboolean(L,keyboard_needs_poll());
return 1;
}
//------------------------------------------------------------------------------------------
//bool poll_keyboard();
static int l_poll_keyboard(lua_State* L)
{
lua_pushboolean(L,!(poll_keyboard()));
return 1;
}
//------------------------------------------------------------------------------------------
//bool install_keyboard();
static int l_install_keyboard(lua_State* L)
{
lua_pushboolean(L,!(install_keyboard()));
return 1;
}
//------------------------------------------------------------------------------------------
//void remove_keyboard();
static int l_remove_keyboard(lua_State* L)
{
remove_keyboard();
return 0;
}
//------------------------------------------------------------------------------------------
//void clear_keybuf();
static int l_clear_keybuf(lua_State* L)
{
clear_keybuf();
return 0;
}
//------------------------------------------------------------------------------------------
//void simulate_keypress(int key);
static int l_simulate_keypress(lua_State* L)
{
simulate_keypress( (int) lua_tonumber(L,1));
return 0;
}
//------------------------------------------------------------------------------------------
//void simulate_ukeypress(int key, int scancode);
static int l_simulate_ukeypress(lua_State* L)
{
int key= (int) lua_tonumber(L,1);
int scancode= (int) lua_tonumber(L,2);
simulate_ukeypress(key,scancode);
return 0;
}
// - void set_keyboard_rate(int delay, int repeat);
// - void set_leds(caps,num,scroll);
//------------------------------------------------------------------------------------------
//extern volatile char key[KEY_MAX];
static int l_keystate(lua_State* L)
{
lua_pushboolean(L, (int) key[(int)lua_tonumber(L,1)]);
return 1;
}
//------------------------------------------------------------------------------------------
//extern int three_finger_flag
static int l_three_finger_flag(lua_State* L)
{
if (!lua_isnone(L,1))
three_finger_flag=lua_tonumber(L,1);
lua_pushboolean(L,three_finger_flag);
return 1;
}
//------------------------------------------------------------------------------------------
//int scancode_to_ascii(int scancode);
static int l_scancode_to_ascii(lua_State* L)
{
int ascii,scancode=lua_tonumber(L,1);
ascii=scancode_to_ascii(scancode);
lua_pushnumber(L,ascii);
return 1;
}
//------------------------------------------------------------------------------------------
//const char *scancode_to_name(int scancode);
static int l_scancode_to_name(lua_State* L)
{
char* name;
int scancode=lua_tonumber(L,1);
name= (char*) scancode_to_name(scancode);
//name="Function not available in current version of Allegro library.";
lua_pushstring(L,name);
return 1;
}
//------------------------------------------------------------------------------------------
struct
{
char* key;
int value;
} key_const[]={
{"KEY_A" ,KEY_A },
{"KEY_B" ,KEY_B },
{"KEY_C" ,KEY_C },
{"KEY_D" ,KEY_D },
{"KEY_E" ,KEY_E },
{"KEY_F" ,KEY_F },
{"KEY_G" ,KEY_G },
{"KEY_H" ,KEY_H },
{"KEY_I" ,KEY_I },
{"KEY_J" ,KEY_J },
{"KEY_K" ,KEY_K },
{"KEY_L" ,KEY_L },
{"KEY_M" ,KEY_M },
{"KEY_N" ,KEY_N },
{"KEY_O" ,KEY_O },
{"KEY_P" ,KEY_P },
{"KEY_Q" ,KEY_Q },
{"KEY_R" ,KEY_R },
{"KEY_S" ,KEY_S },
{"KEY_T" ,KEY_T },
{"KEY_U" ,KEY_U },
{"KEY_V" ,KEY_V },
{"KEY_W" ,KEY_W },
{"KEY_X" ,KEY_X },
{"KEY_Y" ,KEY_Y },
{"KEY_Z" ,KEY_Z },
{"KEY_0" ,KEY_0 },
{"KEY_1" ,KEY_1 },
{"KEY_2" ,KEY_2 },
{"KEY_3" ,KEY_3 },
{"KEY_4" ,KEY_4 },
{"KEY_5" ,KEY_5 },
{"KEY_6" ,KEY_6 },
{"KEY_7" ,KEY_7 },
{"KEY_8" ,KEY_8 },
{"KEY_9" ,KEY_9 },
{"KEY_0_PAD" ,KEY_0_PAD },
{"KEY_1_PAD" ,KEY_1_PAD },
{"KEY_2_PAD" ,KEY_2_PAD },
{"KEY_3_PAD" ,KEY_3_PAD },
{"KEY_4_PAD" ,KEY_4_PAD },
{"KEY_5_PAD" ,KEY_5_PAD },
{"KEY_6_PAD" ,KEY_6_PAD },
{"KEY_7_PAD" ,KEY_7_PAD },
{"KEY_8_PAD" ,KEY_8_PAD },
{"KEY_9_PAD" ,KEY_9_PAD },
{"KEY_F1" ,KEY_F1 },
{"KEY_F2" ,KEY_F2 },
{"KEY_F3" ,KEY_F3 },
{"KEY_F4" ,KEY_F4 },
{"KEY_F5" ,KEY_F5 },
{"KEY_F6" ,KEY_F6 },
{"KEY_F7" ,KEY_F7 },
{"KEY_F8" ,KEY_F8 },
{"KEY_F9" ,KEY_F9 },
{"KEY_F10" ,KEY_F10 },
{"KEY_F11" ,KEY_F11 },
{"KEY_F12" ,KEY_F12 },
{"KEY_ESC" ,KEY_ESC },
{"KEY_TILDE" ,KEY_TILDE },
{"KEY_MINUS" ,KEY_MINUS },
{"KEY_EQUALS" ,KEY_EQUALS },
{"KEY_BACKSPACE" ,KEY_BACKSPACE },
{"KEY_TAB" ,KEY_TAB },
{"KEY_OPENBRACE" ,KEY_OPENBRACE },
{"KEY_CLOSEBRACE" ,KEY_CLOSEBRACE},
{"KEY_ENTER" ,KEY_ENTER },
{"KEY_COLON" ,KEY_COLON },
{"KEY_QUOTE" ,KEY_QUOTE },
{"KEY_BACKSLASH" ,KEY_BACKSLASH },
{"KEY_BACKSLASH2" ,KEY_BACKSLASH2},
{"KEY_COMMA" ,KEY_COMMA },
{"KEY_STOP" ,KEY_STOP },
{"KEY_SLASH" ,KEY_SLASH },
{"KEY_SPACE" ,KEY_SPACE },
{"KEY_INSERT" ,KEY_INSERT },
{"KEY_DEL" ,KEY_DEL },
{"KEY_HOME" ,KEY_HOME },
{"KEY_END" ,KEY_END },
{"KEY_PGUP" ,KEY_PGUP },
{"KEY_PGDN" ,KEY_PGDN },
{"KEY_LEFT" ,KEY_LEFT },
{"KEY_RIGHT" ,KEY_RIGHT },
{"KEY_UP" ,KEY_UP },
{"KEY_DOWN" ,KEY_DOWN },
{"KEY_SLASH_PAD" ,KEY_SLASH_PAD },
{"KEY_ASTERISK" ,KEY_ASTERISK },
{"KEY_MINUS_PAD" ,KEY_MINUS_PAD },
{"KEY_PLUS_PAD" ,KEY_PLUS_PAD },
{"KEY_DEL_PAD" ,KEY_DEL_PAD },
{"KEY_ENTER_PAD" ,KEY_ENTER_PAD },
{"KEY_PRTSCR" ,KEY_PRTSCR },
{"KEY_PAUSE" ,KEY_PAUSE },
{"KEY_ABNT_C1" ,KEY_ABNT_C1 },
{"KEY_YEN" ,KEY_YEN },
{"KEY_KANA" ,KEY_KANA },
{"KEY_CONVERT" ,KEY_CONVERT },
{"KEY_NOCONVERT" ,KEY_NOCONVERT },
{"KEY_AT" ,KEY_AT },
{"KEY_CIRCUMFLEX" ,KEY_CIRCUMFLEX},
{"KEY_COLON2" ,KEY_COLON2 },
{"KEY_KANJI" ,KEY_KANJI },
{"KEY_EQUALS_PAD" ,KEY_EQUALS_PAD},
{"KEY_BACKQUOTE" ,KEY_BACKQUOTE },
{"KEY_SEMICOLON" ,KEY_SEMICOLON },
{"KEY_COMMAND" ,KEY_COMMAND },
{"KEY_UNKNOWN1" ,KEY_UNKNOWN1 },
{"KEY_UNKNOWN2" ,KEY_UNKNOWN2 },
{"KEY_UNKNOWN3" ,KEY_UNKNOWN3 },
{"KEY_UNKNOWN4" ,KEY_UNKNOWN4 },
{"KEY_UNKNOWN5" ,KEY_UNKNOWN5 },
{"KEY_UNKNOWN6" ,KEY_UNKNOWN6 },
{"KEY_UNKNOWN7" ,KEY_UNKNOWN7 },
{"KEY_UNKNOWN8" ,KEY_UNKNOWN8 },
{"KEY_MODIFIERS" ,KEY_MODIFIERS },
{"KEY_LSHIFT" ,KEY_LSHIFT },
{"KEY_RSHIFT" ,KEY_RSHIFT },
{"KEY_LCONTROL" ,KEY_LCONTROL },
{"KEY_RCONTROL" ,KEY_RCONTROL },
{"KEY_ALT" ,KEY_ALT },
{"KEY_ALTGR" ,KEY_ALTGR },
{"KEY_LWIN" ,KEY_LWIN },
{"KEY_RWIN" ,KEY_RWIN },
{"KEY_MENU" ,KEY_MENU },
{"KEY_SCRLOCK" ,KEY_SCRLOCK },
{"KEY_NUMLOCK" ,KEY_NUMLOCK },
{"KEY_CAPSLOCK" ,KEY_CAPSLOCK },
{ NULL ,0 }};
//------------------------------------------------------------------------------------------
static const struct luaL_reg allegro_kbd_lib [] = {
{"keypressed", l_keypressed},
{"readkey", l_readkey},
{"ureadkey", l_ureadkey},
{"simulate_keypress", l_simulate_keypress},
{"simulate_ukeypress", l_simulate_ukeypress},
{"clear_keybuf", l_clear_keybuf},
{"scancode_to_ascii", l_scancode_to_ascii},
{"scancode_to_name", l_scancode_to_name},
{"keystate", l_keystate},
{"three_finger_flag", l_three_finger_flag},
{"keyboard_needs_poll", l_keyboard_needs_poll},
{"needs_poll", l_keyboard_needs_poll},
{"poll_keyboard", l_poll_keyboard},
{"poll", l_poll_keyboard},
{"install_keyboard", l_install_keyboard},
{"remove_keyboard", l_remove_keyboard},
{"install", l_install_keyboard},
{"remove", l_remove_keyboard},
{NULL, NULL} /* sentinel */
};
//------------------------------------------------------------------------------------------
int luaopen_allegro_kbd (lua_State *L)
{
int i=0;
luaL_openlib(L, "kbd", allegro_kbd_lib, 0);
//zarejestruj sta砮 klawiszy klawiatury
lua_getglobal(L, "kbd");
while(key_const[i].key!=NULL)
{setfield(L,key_const[i].key,key_const[i].value);i++;}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -