]> git.lizzy.rs Git - bspwm.git/blob - luautils.c
Dump tree
[bspwm.git] / luautils.c
1 #define _BSD_SOURCE\r
2 \r
3 #include <string.h>\r
4 #include "utils.h"\r
5 #include "luautils.h"\r
6 \r
7 int eval_expr(lua_State *L, char *expr)\r
8 {\r
9     char buf[BUFSIZ];\r
10     sprintf(buf, "return %s", expr);\r
11     return luaL_dostring(L, buf);\r
12 }\r
13 \r
14 int has_table(lua_State *L, char *name)\r
15 {\r
16     int result = 0;\r
17     eval_expr(L, name);\r
18     result = lua_istable(L, -1);\r
19     lua_pop(L, 1);\r
20     return result;\r
21 }\r
22 \r
23 char *string_expr(lua_State *L, char *expr, char* fallback)\r
24 {\r
25     char *result;\r
26     if (eval_expr(L, expr) == 0) {\r
27         if (lua_isstring(L, -1))\r
28             result = strdup(lua_tostring(L, -1));\r
29         else if (fallback != NULL)\r
30             result = strdup(fallback);\r
31         else\r
32             result = NULL;\r
33         lua_pop(L, 1);\r
34     }\r
35     return result;\r
36 }\r
37 \r
38 double double_expr(lua_State *L, char *expr, double fallback)\r
39 {\r
40     double result = fallback;\r
41     if (eval_expr(L, expr) == 0) {\r
42         if (lua_isnumber(L, -1))\r
43             result = (double) lua_tonumber(L, -1);\r
44         lua_pop(L, 1);\r
45     }\r
46     return result;\r
47 }\r
48 \r
49 int int_expr(lua_State *L, char *expr, int fallback)\r
50 {\r
51     int result = fallback;\r
52     if (eval_expr(L, expr) == 0) {\r
53         if (lua_isnumber(L, -1))\r
54             result = (int) lua_tonumber(L, -1);\r
55         lua_pop(L, 1);\r
56     }\r
57     return result;\r
58 }\r
59 \r
60 bool bool_expr(lua_State *L, char *expr, bool fallback)\r
61 {\r
62     bool result = fallback;\r
63     if (eval_expr(L, expr) == 0) {\r
64         if (lua_isboolean(L, -1))\r
65             result = (bool) lua_toboolean(L, -1);\r
66         lua_pop(L, 1);\r
67     }\r
68     return result;\r
69 }\r