Forgotten library (issue 399)
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1647 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
a38b7336e6
commit
9d3defc477
132
share/grafx2/scripts/libs/memory.lua
Normal file
132
share/grafx2/scripts/libs/memory.lua
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
-- Persistence library:
|
||||||
|
-- Memorize data for current function
|
||||||
|
-- memory.save(tab) and tab=memory.load()
|
||||||
|
--
|
||||||
|
-- The data will be stored in file called
|
||||||
|
-- ZZZ<calling_function_name>.dat
|
||||||
|
-- in the lua directory
|
||||||
|
--
|
||||||
|
-- Example 1:
|
||||||
|
--
|
||||||
|
-- -- Load initial values or set defaults
|
||||||
|
-- arg = memory.load({picX=320,picY=200,scale=0})
|
||||||
|
-- -- Run an inputbox
|
||||||
|
-- OK,arg.picX,arg.picY,arg.scale = inputbox("Image Size")",
|
||||||
|
-- "Width", arg.picX, 1,2048,0,
|
||||||
|
-- "Height", arg.picY, 1,2048,0,
|
||||||
|
-- "Scale", arg.scale, 0,1,0);
|
||||||
|
-- if OK == true then
|
||||||
|
-- -- Save the selected values
|
||||||
|
-- memory.save(arg)
|
||||||
|
-- end
|
||||||
|
|
||||||
|
-- Example 2:
|
||||||
|
--
|
||||||
|
-- -- Load initial values or set defaults
|
||||||
|
-- arg = memory.load({x=320,y=200,scale=0})
|
||||||
|
-- picX=arg.x
|
||||||
|
-- picY=arg.y
|
||||||
|
-- scale=arg.scale
|
||||||
|
-- -- Run an inputbox
|
||||||
|
-- OK,picX,picY,scale = inputbox("Image Size")",
|
||||||
|
-- "Width", picX, 1,2048,0,
|
||||||
|
-- "Height", picY, 1,2048,0,
|
||||||
|
-- "Scale", scale, 0,1,0);
|
||||||
|
-- if OK == true then
|
||||||
|
-- -- Save the selected values
|
||||||
|
-- memory.save({x=picX,y=picY,scale=scale})
|
||||||
|
-- end
|
||||||
|
|
||||||
|
|
||||||
|
memory =
|
||||||
|
{
|
||||||
|
serialize = function(o)
|
||||||
|
if type(o) == "number" then
|
||||||
|
return tostring(o)
|
||||||
|
elseif type(o) == "string" then
|
||||||
|
return string.format("%q", o)
|
||||||
|
--elseif type(o) == "table" then
|
||||||
|
-- io.write("{\n")
|
||||||
|
-- for k,v in pairs(o) do
|
||||||
|
-- io.write(" ", k, " = ")
|
||||||
|
-- memory.serialize(v)
|
||||||
|
-- io.write(",\n")
|
||||||
|
-- end
|
||||||
|
-- io.write("}\n")
|
||||||
|
else
|
||||||
|
error("cannot serialize a " .. type(o))
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
-- Return a string identifying the calling function.
|
||||||
|
-- Pass 1 for parent, 2 for grandparent etc.
|
||||||
|
callername = function(level)
|
||||||
|
local w
|
||||||
|
local last_slash
|
||||||
|
local info = debug.getinfo(level+1,"Sn")
|
||||||
|
local caller=tostring(info.name)
|
||||||
|
-- Function name if possible
|
||||||
|
if (caller~="nil") then
|
||||||
|
return caller
|
||||||
|
end
|
||||||
|
-- Otherwise, get file name, without extension
|
||||||
|
|
||||||
|
-- Get part after directory name
|
||||||
|
last_slash=0
|
||||||
|
while true do
|
||||||
|
local pos = string.find(info.short_src, "/", last_slash+1)
|
||||||
|
if (pos==nil) then break end
|
||||||
|
last_slash=pos
|
||||||
|
end
|
||||||
|
caller=string.sub(info.short_src, last_slash+1)
|
||||||
|
|
||||||
|
-- Remove file extension
|
||||||
|
if (string.sub(caller,-4, -1)==".lua") then
|
||||||
|
caller=string.sub(caller, 1, -5)
|
||||||
|
end
|
||||||
|
return caller
|
||||||
|
end;
|
||||||
|
|
||||||
|
-- Memorize some parameters.
|
||||||
|
save = function(o)
|
||||||
|
local caller=memory.callername(2)
|
||||||
|
--for k, v in pairs(o) do
|
||||||
|
-- messagebox(tostring(k))
|
||||||
|
-- messagebox(tostring(v))
|
||||||
|
--end
|
||||||
|
local f, e = io.open("ZZZ"..caller..".dat", "w");
|
||||||
|
if (f ~= nil) then
|
||||||
|
f:write("Entry {\n")
|
||||||
|
for k, v in pairs(o) do
|
||||||
|
if (type(v)=="number") then
|
||||||
|
f:write(" "..k.."="..memory["serialize"](v)..",\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
f:write("}\n")
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
-- Recover some saved parameters.
|
||||||
|
load = function(o)
|
||||||
|
local caller=memory.callername(2)
|
||||||
|
local i
|
||||||
|
|
||||||
|
function Entry (b)
|
||||||
|
-- Adds (or replaces) values in arg with those from b
|
||||||
|
for k, v in pairs(b) do
|
||||||
|
o[k]=v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local f = (loadfile("ZZZ"..caller..".dat"))
|
||||||
|
if (f ~= nil) then
|
||||||
|
f()
|
||||||
|
end
|
||||||
|
|
||||||
|
return o
|
||||||
|
end;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return memory
|
||||||
Loading…
x
Reference in New Issue
Block a user