class ConfigTable_class

def [](key)

def [](key)
  lookup(key).eval(self)
end

def []=(key, val)

def []=(key, val)
  lookup(key).set val
end

def add(item)

def add(item)
  @items.push item
  @table[item.name] = item
end

def each(&block)

def each(&block)
  @items.each(&block)
end

def initialize(items)

def initialize(items)
  @items = items
  @table = {}
  items.each do |i|
    @table[i.name] = i
  end
  ALIASES.each do |ali, name|
    @table[ali] = @table[name]
  end
end

def key?(name)

def key?(name)
  @table.key?(name)
end

def load

def load
  begin
    t = dup()
    File.foreach(savefile()) do |line|
      k, v = *line.split(/=/, 2)
      t[k] = v.strip
    end
    t
  rescue Errno::ENOENT
    setup_rb_error $!.message + "#{File.basename($0)} config first"
  end
end

def lookup(name)

def lookup(name)
  @table[name] or raise ArgumentError, "no such config item: #{name}"
end

def new

def new
  dup()
end

def remove(name)

def remove(name)
  item = lookup(name)
  @items.delete_if {|i| i.name == name }
  @table.delete_if {|name, i| i.name == name }
  item
end

def save

def save
  @items.each {|i| i.value }
  File.open(savefile(), 'w') {|f|
    @items.each do |i|
      f.printf "%s=%s\n", i.name, i.value if i.value
    end
  }
end

def savefile

def savefile
  '.config'
end