luadb.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. -- 读取命令行参数
  2. local srcpath = "disk"
  3. if arg[1] then
  4. srcpath = arg[1]
  5. end
  6. local function lsdir(path, files, shortname)
  7. local exe = io.popen("dir /b " .. (shortname and " " or " /s ") .. path)
  8. if exe then
  9. for line in exe:lines() do
  10. table.insert(files, line)
  11. end
  12. exe:close()
  13. end
  14. end
  15. local function oscall(cmd, quite, cwd)
  16. if cwd and Base_CWD then
  17. lfs.chdir(cwd)
  18. end
  19. if tool_debug then
  20. log.info("cmd", cmd)
  21. end
  22. local exe = io.popen(cmd)
  23. if exe then
  24. for line in exe:lines() do
  25. if not quite then
  26. log.info("cmd", line)
  27. end
  28. end
  29. exe:close()
  30. end
  31. if cwd and Base_CWD then
  32. lfs.chdir(Base_CWD)
  33. end
  34. end
  35. function TLD(buff, T, D)
  36. buff:pack("bb", T, D:len())
  37. buff:write(D)
  38. end
  39. local files = {}
  40. lsdir(srcpath, files, true)
  41. -- oscall("mkdir tmp")
  42. local buff = zbuff.create(256*1024)
  43. local magic = string.char(0x5A, 0xA5, 0X5A, 0xA5)
  44. -- -- 先写入magic
  45. --buff:pack("bbbbbb", 0x01, 0x04, 0XA5, 0x5A, 0xA5, 0x5A)
  46. TLD(buff, 0x01, magic)
  47. -- 然后是版本号
  48. --buff:write(string.char(0x02, 0x02, 0x00, 0x02))
  49. TLD(buff, 0x02, string.char(0x00, 0x02))
  50. -- head长度
  51. buff:write(string.char(0x03, 0x04))
  52. buff:pack("I", 0x18)
  53. -- 文件数量
  54. buff:write(string.char(0x04, 0x02))
  55. buff:pack("H", #files)
  56. -- CRC值
  57. buff:write(string.char(0xFE, 0x02))
  58. buff:pack("H", 0xFFFF)
  59. for _, value in ipairs(files) do
  60. TLD(buff, 0x01, magic)
  61. local tname = value
  62. local data = nil
  63. if value:sub(-4) == ".lua" then
  64. tname = value .. "c"
  65. local func, err = loadfile(srcpath .. "\\" .. value)
  66. if err then
  67. log.error("luac", "bad lua format", err)
  68. os.exit(1)
  69. end
  70. -- if value == "main.lua" then
  71. -- data = string.dump(func)
  72. -- io.writeFile(tname, string.dump(func))
  73. -- else
  74. -- io.writeFile("tmp\\" .. tname, luf.dump(func, false, 0x80E0000 + buff:seek(0, zbuff.SEEK_CUR) + 3*2 + tname:len() + 4 + 2))
  75. -- log.info("what pos", buff:seek(0, zbuff.SEEK_CUR))
  76. -- log.info(">> pos", string.format("%08X", 0x080E0000 + buff:seek(0, zbuff.SEEK_CUR) + 3*2 + tname:len() + 4 + 2 + 64))
  77. -- data = luf.dump(func, false, 0x80E0000 + buff:seek(0, zbuff.SEEK_CUR) + 3*2 + tname:len() + 4 + 2)
  78. data = luf.dump(func, false, 0x080E0033)
  79. log.info("iowrite", tname, #data)
  80. io.writeFile(tname, data)
  81. -- end
  82. else
  83. data = io.readFile(srcpath .. "\\" .. value)
  84. end
  85. -- log.info("luadb1", tname, #data, buff:seek(0, zbuff.SEEK_CUR))
  86. TLD(buff, 0x02, tname)
  87. TLD(buff, 0x03, pack.pack("I", #data))
  88. TLD(buff, 0xFE, string.char(0xFF, 0xFF))
  89. log.info("luadb2", tname, #data, buff:seek(0, zbuff.SEEK_CUR), string.format("%02X", buff:seek(0, zbuff.SEEK_CUR)))
  90. -- log.info(">> pos", string.format("%08X", 0x80E0000 + buff:seek(0, zbuff.SEEK_CUR)))
  91. buff:write(data)
  92. log.info("luadb3", tname, #data, buff:seek(0, zbuff.SEEK_CUR))
  93. end
  94. local data = buff:toStr(0, buff:seek(0, zbuff.SEEK_CUR))
  95. log.info("target", #data)
  96. io.writeFile("disk.bin", data)
  97. --print(json.encode(arg))
  98. os.exit(0)