aboutsummaryrefslogtreecommitdiffstats
path: root/lib/getopts.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/getopts.rb')
-rw-r--r--lib/getopts.rb142
1 files changed, 142 insertions, 0 deletions
diff --git a/lib/getopts.rb b/lib/getopts.rb
new file mode 100644
index 0000000000..6929f7e4fd
--- /dev/null
+++ b/lib/getopts.rb
@@ -0,0 +1,142 @@
+#!/usr/local/bin/ruby
+#
+# getopts.rb -
+# $Release Version: $
+# $Revision$
+# $Date$
+# by Yasuo OHBA(SHL Japan Inc. Technology Dept.)
+#
+# --
+#
+#
+#
+
+$RCS_ID="$Header$"
+
+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