summaryrefslogtreecommitdiff
path: root/lib/getopts.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/getopts.rb')
-rw-r--r--lib/getopts.rb117
1 files changed, 117 insertions, 0 deletions
diff --git a/lib/getopts.rb b/lib/getopts.rb
new file mode 100644
index 0000000000..37fd3dc69d
--- /dev/null
+++ b/lib/getopts.rb
@@ -0,0 +1,117 @@
+#
+# getopts.rb - get options
+# $Release Version: $
+# $Revision: 1.2 $
+# $Date: 1994/02/15 05:17:15 $
+# by Yasuo OHBA(STAFS Development Room)
+#
+# --
+# オプションの解析をし, $OPT_?? に値をセットします.
+# 指定のないオプションが指定された時は nil を返します.
+# 正常終了した場合は, セットされたオプションの数を返します.
+#
+# getopts(single_opts, *opts)
+#
+# ex. sample [options] filename
+# options ...
+# -f -x --version --geometry 100x200 -d unix:0.0
+# ↓
+# getopts("fx", "version", "geometry:", "d:")
+#
+# 第一引数:
+# -f や -x (= -fx) の様な一文字のオプションの指定をします.
+# ここで引数がないときは nil の指定が必要です.
+# 第二引数以降:
+# ロングネームのオプションや, 引数の伴うオプションの指定をします.
+# --version や, --geometry 300x400 や, -d host:0.0 等です.
+# 引数を伴う指定は ":" を必ず付けてください.
+#
+# オプションの指定があった場合, 変数 $OPT_?? に non-nil もしくは, そのオ
+# プションの引数がセットされます.
+# -f -> $OPT_f = TRUE
+# --geometry 300x400 -> $OPT_geometry = 300x400
+#
+# - もしくは -- は, それ以降, 全てオプションの解析をしません.
+#
+
+$RCS_ID="$Header: /var/ohba/RCS/getopts.rb,v 1.2 1994/02/15 05:17:15 ohba Exp ohba $"
+
+def getopts(single_opts, *opts)
+ if (opts)
+ single_colon = ""
+ long_opts = []
+ sc = 0
+ for option in opts
+ if (option.length <= 2)
+ single_colon[sc, 0] = option[0, 1]
+ sc += 1
+ else
+ long_opts.push(option)
+ end
+ end
+ end
+
+ opts = {}
+ count = 0
+ while ($ARGV.length != 0)
+ compare = nil
+ case $ARGV[0]
+ when /^--?$/
+ $ARGV.shift
+ break
+ when /^--.*/
+ compare = $ARGV[0][2, ($ARGV[0].length - 2)]
+ if (long_opts != "")
+ for option in long_opts
+ if (option[(option.length - 1), 1] == ":" &&
+ option[0, (option.length - 1)] == compare)
+ if ($ARGV.length <= 1)
+ return nil
+ end
+ eval("$OPT_" + compare + " = " + '$ARGV[1]')
+ opts[compare] = TRUE
+ $ARGV.shift
+ count += 1
+ break
+ elsif (option == compare)
+ eval("$OPT_" + compare + " = TRUE")
+ opts[compare] = TRUE
+ count += 1
+ break
+ end
+ end
+ end
+ when /^-.*/
+ for index in 1..($ARGV[0].length - 1)
+ compare = $ARGV[0][index, 1]
+ if (single_opts && compare =~ "[" + single_opts + "]")
+ eval("$OPT_" + compare + " = TRUE")
+ opts[compare] = TRUE
+ count += 1
+ elsif (single_colon != "" && compare =~ "[" + single_colon + "]")
+ if ($ARGV[0][index..-1].length > 1)
+ eval("$OPT_" + compare + " = " + '$ARGV[0][(index + 1)..-1]')
+ opts[compare] = TRUE
+ count += 1
+ elsif ($ARGV.length <= 1)
+ return nil
+ else
+ eval("$OPT_" + compare + " = " + '$ARGV[1]')
+ opts[compare] = TRUE
+ $ARGV.shift
+ count = count + 1
+ end
+ break
+ end
+ end
+ else
+ break
+ end
+
+ $ARGV.shift
+ if (!opts.includes(compare))
+ return nil
+ end
+ end
+ return count
+end