Change soft-fail to use the config, rather than env
[rbx.git] / stdlib / getopts.rb
blob8d06919dafecc5140c4b89d6335a6f9a0be3d2bd
2 #               getopts.rb - 
3 #                       $Release Version: $
4 #                       $Revision: 11708 $
5 #                       $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6 #                       by Yasuo OHBA(SHL Japan Inc. Technology Dept.)
8 # --
9 # this is obsolete; use getoptlong
11 # 2000-03-21
12 # modified by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
14 # 2002-03-05
15 # rewritten by Akinori MUSHA <knu@ruby-lang.org>
18 warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: getopts is deprecated after Ruby 1.8.1; use optparse instead" if caller[0] and $VERBOSE
20 $RCS_ID=%q$Header$
22 # getopts is obsolete. Use GetoptLong.
24 def getopts(single_options, *options)
25   boolopts = {}
26   valopts = {}
28   #
29   # set defaults
30   #
31   single_options.scan(/.:?/) do |opt|
32     if opt.size == 1
33       boolopts[opt] = false
34     else
35       valopts[opt[0, 1]] = nil
36     end
37   end if single_options
39   options.each do |arg|
40     opt, val = arg.split(':', 2)
42     if val
43       valopts[opt] = val.empty? ? nil : val
44     else
45       boolopts[opt] = false
46     end
47   end
49   #
50   # scan
51   #
52   c = 0
53   argv = ARGV
55   while arg = argv.shift
56     case arg
57     when /\A--(.*)/
58       if $1.empty?                      # xinit -- -bpp 24
59         break
60       end
62       opt, val = $1.split('=', 2)
64       if opt.size == 1
65         argv.unshift arg
66         return nil
67       elsif valopts.key? opt            # imclean --src +trash
68         valopts[opt] = val || argv.shift or return nil
69       elsif boolopts.key? opt           # ruby --verbose
70         boolopts[opt] = true
71       else
72         argv.unshift arg
73         return nil
74       end
76       c += 1
77     when /\A-(.+)/
78       opts = $1
80       until opts.empty?
81         opt = opts.slice!(0, 1)
83         if valopts.key? opt
84           val = opts
86           if val.empty?                 # ruby -e 'p $:'
87             valopts[opt] = argv.shift or return nil
88           else                          # cc -ohello ...
89             valopts[opt] = val
90           end
92           c += 1
93           break
94         elsif boolopts.key? opt
95           boolopts[opt] = true          # ruby -h
96           c += 1
97         else
98           argv.unshift arg
99           return nil
100         end
101       end
102     else
103       argv.unshift arg
104       break
105     end
106   end
108   #
109   # set
110   #
111   $OPT = {}
113   boolopts.each do |opt, val|
114     $OPT[opt] = val
116     sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')
117     eval "$OPT_#{sopt} = val"
118   end
119   valopts.each do |opt, val|
120     $OPT[opt] = val
122     sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')
123     eval "$OPT_#{sopt} = val"
124   end
126   c