diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/daemoncontrol.lua | 0 | ||||
-rw-r--r-- | lib/getopts.lua | 59 |
2 files changed, 59 insertions, 0 deletions
diff --git a/lib/daemoncontrol.lua b/lib/daemoncontrol.lua new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/lib/daemoncontrol.lua diff --git a/lib/getopts.lua b/lib/getopts.lua new file mode 100644 index 0000000..45aca7b --- /dev/null +++ b/lib/getopts.lua @@ -0,0 +1,59 @@ +module (..., package.seeall) + +function getoptsfromfile (file, search, filter) + local opts = nil + local conf_file = fs.read_file_as_array ( file ) + for i=1,table.maxn(conf_file) do + local l = conf_file[i] + if not string.find ( l, "^[;#].*" ) then + local a = string.match ( l, "^%s*(%S*)=" ) + if (a) then + if not (search) or (search == a) then + local b = string.match ( l, '^%s*%S*%=%"?(.-)%s*%"?%s*$' ) + local optstable = getopts.opts_to_table(b,filter) + if (optstable) or not (filter) then + if not (opts) then + opts = {} + end + if (optstable) then + opts[a] = optstable + else + opts[a] = b + end + end + end + end + end + end + return opts +end + +function opts_to_table ( optstring, filter ) + local optsparams = nil + local optstr = string.match(optstring, "^\"?(.*)%\"?") -- Filter away leading/trailing " + if optstr then + local option = "" + local optvalue = "" + for j = 1, string.len(optstr) do + if (string.sub(optstr, j, j) == "-") then + option=string.sub(optstr, j, j+1) + if not (filter) or (filter == option) then + for k = j+1, string.len(optstr) do + if not (optsparams) then + optsparams = {} + end + if (string.sub(optstr, k, k) == "-") then + optsparams[option] = string.match(string.sub(optstr, j+2, k-1),"^%s*(.*)%s?") + break + end + if (k == string.len(optstr)) then + optsparams[option] = string.match(string.sub(optstr, j+2, k),"^%s*(.*)%s?") + break + end + end + end + end + end + end + return optsparams +end |