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