read (Radius::Dict)

    # File radius/dictionary.rb, line 63
        def read(fp)
          fp.each_line {
    	|line|
    	next if line =~ /^\#/	# discard comments
    	next if (sl = line.split(/\s+/)) == []
    	case sl[0].upcase
    	when "ATTRIBUTE"
    	  @attr[sl[1]] = [sl[2].to_i, sl[3]] if (@attr[sl[1]] == nil)
    	  @rattr[sl[2].to_i] = [sl[1], sl[3]] if (@rattr[sl[2].to_i] == nil)
    	when "VALUE"
    	  if (@attr[sl[1]] == nil)
    	    $stderr.print("Warning: value given for unknown attribute #{sl[1]}");
    	  else
    	    if (@val[@attr[sl[1]][0]] == nil)
    	      @val[@attr[sl[1]][0]] = {}
    	    end
    	    if (@rval[@attr[sl[1]][0]] == nil)
    	      @rval[@attr[sl[1]][0]] = []
    	    end
    	    if (@val[@attr[sl[1]][0]][sl[2]] == nil)
    	      @val[@attr[sl[1]][0]][sl[2]] = sl[3].to_i
    	    end
    	    if (@rval[@attr[sl[1]][0]][sl[3].to_i] == nil)
    	      @rval[@attr[sl[1]][0]][sl[3].to_i] = sl[2]
    	    end
    	  end
    	when "VENDORATTR"
    	  sl[3] = Kernel::Integer(sl[3]) # this gets hex and octal
    				# values correctly
    	  @vsattr[sl[1].to_i] = {} if (@vsattr[sl[1].to_i] == nil)
    	  @rvsattr[sl[1].to_i] = {} if (@rvsattr[sl[1].to_i] == nil)

    	  if (@vsattr[sl[1].to_i][sl[2]] == nil)
    	    @vsattr[sl[1].to_i][sl[2]] = sl[3..4]
    	  end

    	  if (@rvsattr[sl[1].to_i][sl[3]] == nil)
    	    @rvsattr[sl[1].to_i][sl[3]] = [sl[2], sl[4]]
    	  end
    	when "VENDORVALUE"
    	  sl[4] = Kernel::Integer(sl[4])
    	  if (@vsattr[sl[1].to_i][sl[2]] == nil)
    	    $stderr.print "Warning: vendor value for unknown vendor attribute #{sl[1]} found - ignored\n"
    	  else
    	    sl[1] = sl[1].to_i
    	    @vsaval[sl[1]] = {} if @vsaval[sl[1].to_i] == nil
    	    @rvsaval[sl[1]] = {} if @rvsaval[sl[1].to_i] == nil
    	    if @vsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]] == nil
    	      @vsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]] = {}
    	    end

    	    if @rvsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]] == nil
    	      @rvsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]] = []
    	    end

    	    if @vsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]][sl[3]] == nil
    	      @vsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]][sl[3]] = sl[4]
    	    end

    	    if @rvsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]][sl[4]] == nil
    	      @rvsaval[sl[1]][@vsattr[sl[1]][sl[2]][0]][sl[4]] = sl[3]
    	    end
    	  end
    	else
    	  $stderr.print "Warning: Weird dictionary line: #{line}\n"
    	end
          }
        end