# File lib/optconfig.rb, line 210
  def parse!(argv=[])
    orig_argv_size = argv.size
    ret = []
    @specified.clear
    @option_seq.each do |opt|
      opt.value = opt.ovalue = opt.default
      begin
        opt.value = check_option opt.name.first, opt.default if opt.default.is_a? String
      rescue OptConfig::Error
        # 無視
      end
    end
    parse_file @file if @file
    @specified.clear

    until argv.empty?
      arg = argv.shift
      case arg
      when "--"
        ret.concat argv
        break
      when /\A--[a-zA-Z0-9_]/
        parse_long_opt arg.sub(/\A--/, ""), argv
      when /\A-[a-zA-Z0-9]/
        parse_short_opt arg.sub(/\A-/, ""), argv
      else
        ret.push arg
        if @stop_at_non_option_argument
          ret.concat argv
          break
        end
      end
    end

    if @obsolete_behavior
      n = orig_argv_size - ret.size
      argv.replace ret
      return n
    end
    argv.replace ret
    return argv
  end