• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "cmenu.h"
2 
3 #include "lua.h"
4 #include "lauxlib.h"
5 #include "lualib.h"
6 
l_init(lua_State * L)7 static int l_init (lua_State *L)
8 {
9   init_menusystem (luaL_optstring (L, 1, NULL));
10   return 0;
11 }
12 
l_set_window_size(lua_State * L)13 static int l_set_window_size (lua_State *L)
14 {
15   set_window_size (luaL_checkint (L, 1), luaL_checkint (L, 2),
16                    luaL_checkint (L, 3), luaL_checkint (L, 4));
17   return 0;
18 }
19 
l_add_menu(lua_State * L)20 static int l_add_menu (lua_State *L)
21 {
22   lua_pushinteger (L, add_menu (luaL_checkstring (L, 1),
23                                 luaL_optint (L, 2, -1)));
24   return 1;
25 }
26 
l_add_named_menu(lua_State * L)27 static int l_add_named_menu (lua_State *L)
28 {
29   lua_pushinteger (L, add_named_menu (luaL_checkstring (L, 1),
30                                       luaL_checkstring (L, 2),
31                                       luaL_optint (L, 3, -1)));
32   return 1;
33 }
34 
l_add_item(lua_State * L)35 static int l_add_item (lua_State *L)
36 {
37   add_item (luaL_checkstring (L, 1), luaL_checkstring (L, 2), luaL_checkint (L, 3),
38             luaL_optstring (L, 4, NULL), luaL_optint (L, 5, 0));
39   return 0; /* FIXME return menuitem for advanced functions */
40 }
41 
l_add_sep(lua_State * L)42 static int l_add_sep (lua_State *L)
43 {
44   add_sep ();
45   return 0; /* FIXME return menuitem for advanced functions */
46 }
47 
l_find_menu_num(lua_State * L)48 static int l_find_menu_num (lua_State *L)
49 {
50   lua_pushinteger (L, find_menu_num (luaL_checkstring (L, 1)));
51   return 1;
52 }
53 
l_showmenus(lua_State * L)54 static int l_showmenus (lua_State *L)
55 {
56   t_menuitem *reply = showmenus (luaL_checkint (L, 1));
57   if (!reply) return 0;
58   lua_pushinteger (L, reply->action);
59   lua_pushstring (L, reply->data);
60   return 2;
61 }
62 
63 static const luaL_Reg menulib[] = {
64   {"init", l_init},
65   {"set_window_size", l_set_window_size},
66   {"add_menu", l_add_menu},
67   {"add_named_menu", l_add_named_menu},
68   {"add_item", l_add_item},
69   {"add_sep", l_add_sep},
70   {"find_menu_num", l_find_menu_num},
71   {"showmenus", l_showmenus},
72   {NULL, NULL}
73 };
74 
luaopen_cmenu(lua_State * L)75 LUALIB_API int luaopen_cmenu (lua_State *L) {
76   luaL_newlib(L, menulib);
77   lua_newtable (L);
78 #define export_opt(x) lua_pushinteger (L, OPT_##x); lua_setfield (L, -2, #x);
79   export_opt (INACTIVE);
80   export_opt (SUBMENU);
81   export_opt (RUN);
82   export_opt (EXITMENU);
83   export_opt (CHECKBOX);
84   export_opt (RADIOMENU);
85   export_opt (SEP);
86   export_opt (INVISIBLE);
87   export_opt (RADIOITEM);
88   lua_setfield (L, -2, "action");
89   return 1;
90 }
91