Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local ser = ((require or dofile) "ser")
- function split(self, separator, max)
- local out = {}
- if self:len() > 0 then
- max = max or -1
- local field, start = 1, 1
- local first, last = self:find(separator, start, true)
- while first and max ~= 0 do
- out[field] = self:sub(start, first - 1)
- field = field + 1
- start = last + 1
- first , last = self:find(separator, start, true)
- max = max - 1
- end
- out[field] = self:sub(start)
- end
- return out
- end
- local function fwrite(n, c)
- local f = fs.open(n, "wb")
- f.write(c)
- f.close()
- end
- local function fread(n)
- local f = fs.open(n, "rb")
- local out = f.readAll()
- f.close()
- return out
- end
- local fsopen = fs.open
- local registry_path = ".registry"
- local registry = {}
- function registry.set(key, value)
- local path = split(key, ".")
- local ok, orig_data
- if fs.exists(registry_path) then
- ok, orig_data = pcall(ser.deserialize, fread(registry_path))
- if not ok then orig_data = {} end
- else
- orig_data = {}
- end
- local last_bit = table.remove(path)
- local data = orig_data
- for _, seg in ipairs(path) do
- local new_bit = data[seg]
- if type(new_bit) ~= "table" then data[seg] = {} end
- data = data[seg]
- end
- data[last_bit] = value
- fwrite(registry_path, ser.serialize(orig_data))
- end
- function registry.get(key)
- if not fs.exists(registry_path) then return nil end
- local path = split(key, ".")
- local ok, data = pcall(ser.deserialize, fread(registry_path))
- if not ok then data = {} end
- for _, seg in ipairs(path) do
- data = data[seg]
- if not data then return nil end
- end
- return data
- end
- return registry
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement