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