-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.lua
60 lines (52 loc) · 1.77 KB
/
cli.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
--==============================================================================
-- Command line interface related functions <tonyp@acm.org>
--==============================================================================
local m = {}
--------------------------------------------------------------------------------
-- Get the Nth option from the command line. Optional value may follow = or :
-- (Non-valued options default to true)
--------------------------------------------------------------------------------
function m.get_option(n)
local k,v
for _,arg in ipairs(arg) do
if arg:sub(1,1) == '-' then
n = n - 1
if n == 0 then
k,v = arg:match '^%-%-?(%S-)[=:](.*)'
if k == nil then
k = arg:match '^%-%-?(%S+)'
v = true
end
return k,v
end
end
end
end
--------------------------------------------------------------------------------
-- Get all options as a key/value table.
--------------------------------------------------------------------------------
function m.get_all_options()
local ans = {}
local k,v
local i = 0
repeat
i = i + 1
k,v = m.get_option(i)
if k ~= nil then ans[k] = v end
until k == nil
return ans
end
--------------------------------------------------------------------------------
-- Get the Nth non-option argument from the command line
--------------------------------------------------------------------------------
function m.get_argument(n)
for _,arg in ipairs(arg) do
if arg:sub(1,1) ~= '-' then
n = n - 1
if n == 0 then return arg end
end
end
end
--==============================================================================
return m
--==============================================================================