⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lua_kbd.c

📁 lua脚本语言调用allegro游戏程序库的接口-跨平台
💻 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 + -