|
@@ -0,0 +1,93 @@
|
|
|
+-- Usage:
|
|
|
+-- lua auto.lua <name1> <name2> .. <nameN>
|
|
|
+--
|
|
|
+-- Example:
|
|
|
+-- lua auto.lua boot graphics
|
|
|
+
|
|
|
+max_width = 15
|
|
|
+
|
|
|
+function auto(name)
|
|
|
+
|
|
|
+ local src = name .. ".lua"
|
|
|
+ local dst = name .. ".lua.h"
|
|
|
+ local cpp_name = name .. "_lua"
|
|
|
+
|
|
|
+ -- Read source Lua file
|
|
|
+ local src_file = io.open(src, "rb")
|
|
|
+ local src_data = src_file:read("*a")
|
|
|
+ local src_len = #src_data
|
|
|
+ src_file:close()
|
|
|
+
|
|
|
+ local lines = {}
|
|
|
+ local line = {}
|
|
|
+ table.insert(lines, line)
|
|
|
+
|
|
|
+ for i=1,src_len do
|
|
|
+ table.insert(line, string.byte(src_data, i))
|
|
|
+ if math.mod(i, max_width) == 0 then
|
|
|
+ line = {}
|
|
|
+ table.insert(lines, line)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local src_output = "const char "..cpp_name.."[] = \n{\n"
|
|
|
+
|
|
|
+ for i,line in ipairs(lines) do
|
|
|
+ local concat = {}
|
|
|
+ for j,b in ipairs(line) do
|
|
|
+ table.insert(concat, string.format("0x%02X,", b))
|
|
|
+ end
|
|
|
+ src_output = src_output .. "\t" .. table.concat(concat, "").."\n"
|
|
|
+ end
|
|
|
+
|
|
|
+ src_output = src_output .. "};"
|
|
|
+
|
|
|
+ local include = true
|
|
|
+
|
|
|
+ -- Read dst
|
|
|
+ local dst_lines = {}
|
|
|
+ for line in io.lines(dst) do
|
|
|
+
|
|
|
+ if line == "// ["..src.."]" then
|
|
|
+ include = false
|
|
|
+ table.insert(dst_lines, line)
|
|
|
+ table.insert(dst_lines, src_output)
|
|
|
+ end
|
|
|
+
|
|
|
+ if line == "// [/"..src.."]" then
|
|
|
+ include = true
|
|
|
+ end
|
|
|
+
|
|
|
+ if include then
|
|
|
+ table.insert(dst_lines, line)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local tmp_data = table.concat(dst_lines, "\n")
|
|
|
+
|
|
|
+ -- Overwrite the old file only if they are different.
|
|
|
+ local dst_file = io.open(dst, "rb")
|
|
|
+ dst_data = dst_file:read("*a")
|
|
|
+ dst_file:close()
|
|
|
+
|
|
|
+ if tmp_data == dst_data then
|
|
|
+ print(name .. ": no change")
|
|
|
+ else
|
|
|
+
|
|
|
+ local dst_file = io.open(dst, "wb")
|
|
|
+ dst_file:write(tmp_data)
|
|
|
+ dst_file:close()
|
|
|
+
|
|
|
+ print(name .. ": updated")
|
|
|
+ end
|
|
|
+
|
|
|
+end
|
|
|
+
|
|
|
+if #arg == 0 then
|
|
|
+ print("Usage: lua auto.lua <name1> <name2> .. <name3>")
|
|
|
+else
|
|
|
+ for i, v in ipairs(arg) do
|
|
|
+ auto(v)
|
|
|
+ end
|
|
|
+end
|
|
|
+
|