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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#
# getopts.rb -
# $Release Version: $
# $Revision: 1.2 $
# $Date: 1999/08/13 05:45:16 $
# by Yasuo OHBA(SHL Japan Inc. Technology Dept.)
#
# --
#
#
#
$RCS_ID=%q$Header: /home/cvs/ruby/lib/getopts.rb,v 1.2 1999/08/13 05:45:16 matz Exp $
def isSingle(lopt)
if lopt.index(":")
if lopt.split(":")[0].length == 1
return true
end
end
return nil
end
def getOptionName(lopt)
return lopt.split(":")[0]
end
def getDefaultOption(lopt)
od = lopt.split(":")[1]
if od
return od
end
return nil
end
def setOption(name, value)
eval("$OPT_" + name + " = " + 'value')
end
def setDefaultOption(lopt)
d = getDefaultOption(lopt)
if d
setOption(getOptionName(lopt), d)
end
end
def setNewArgv(newargv)
ARGV.clear
for na in newargv
ARGV << na
end
end
def getopts(single_opts, *options)
if options
single_colon = ""
long_opts = []
sc = 0
for o in options
setDefaultOption(o)
if isSingle(o)
single_colon[sc, 0] = getOptionName(o)
sc += 1
else
long_opts.push(o)
end
end
end
opts = {}
count = 0
newargv = []
while ARGV.length != 0
compare = nil
case ARGV[0]
when /^--?$/
ARGV.shift
newargv += ARGV
break
when /^--.*/
compare = ARGV[0][2, (ARGV[0].length - 2)]
if long_opts != ""
for lo in long_opts
if lo.index(":") && getOptionName(lo) == compare
if ARGV.length <= 1
return nil
end
setOption(compare, ARGV[1])
opts[compare] = true
ARGV.shift
count += 1
break
elsif lo == compare
setOption(compare, true)
opts[compare] = true
count += 1
break
end
end
end
if compare.length <= 1
return nil
end
when /^-.*/
for idx in 1..(ARGV[0].length - 1)
compare = ARGV[0][idx, 1]
if single_opts && compare =~ "[" + single_opts + "]"
setOption(compare, true)
opts[compare] = true
count += 1
elsif single_colon != "" && compare =~ "[" + single_colon + "]"
if ARGV[0][idx..-1].length > 1
setOption(compare, ARGV[0][(idx + 1)..-1])
opts[compare] = true
count += 1
elsif ARGV.length <= 1
return nil
else
setOption(compare, ARGV[1])
opts[compare] = true
ARGV.shift
count += 1
end
break
end
end
else
compare = ARGV[0]
opts[compare] = true
newargv << ARGV[0]
end
ARGV.shift
if !opts.has_key?(compare)
return nil
end
end
setNewArgv(newargv)
return count
end
|