| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- -- 读取命令行参数
- local srcpath = "disk"
- if arg[1] then
- srcpath = arg[1]
- end
- local function lsdir(path, files, shortname)
- local exe = io.popen("dir /b " .. (shortname and " " or " /s ") .. path)
- if exe then
- for line in exe:lines() do
- table.insert(files, line)
- end
- exe:close()
- end
- end
- local function oscall(cmd, quite, cwd)
- if cwd and Base_CWD then
- lfs.chdir(cwd)
- end
- if tool_debug then
- log.info("cmd", cmd)
- end
- local exe = io.popen(cmd)
- if exe then
- for line in exe:lines() do
- if not quite then
- log.info("cmd", line)
- end
- end
- exe:close()
- end
- if cwd and Base_CWD then
- lfs.chdir(Base_CWD)
- end
- end
- function TLD(buff, T, D)
- buff:pack("bb", T, D:len())
- buff:write(D)
- end
- local files = {}
- lsdir(srcpath, files, true)
- -- oscall("mkdir tmp")
- local buff = zbuff.create(256*1024)
- local magic = string.char(0x5A, 0xA5, 0X5A, 0xA5)
- -- -- 先写入magic
- --buff:pack("bbbbbb", 0x01, 0x04, 0XA5, 0x5A, 0xA5, 0x5A)
- TLD(buff, 0x01, magic)
- -- 然后是版本号
- --buff:write(string.char(0x02, 0x02, 0x00, 0x02))
- TLD(buff, 0x02, string.char(0x00, 0x02))
- -- head长度
- buff:write(string.char(0x03, 0x04))
- buff:pack("I", 0x18)
- -- 文件数量
- buff:write(string.char(0x04, 0x02))
- buff:pack("H", #files)
- -- CRC值
- buff:write(string.char(0xFE, 0x02))
- buff:pack("H", 0xFFFF)
- for _, value in ipairs(files) do
- TLD(buff, 0x01, magic)
- local tname = value
- local data = nil
- if value:sub(-4) == ".lua" then
- tname = value .. "c"
- local func, err = loadfile(srcpath .. "\\" .. value)
- if err then
- log.error("luac", "bad lua format", err)
- os.exit(1)
- end
- -- if value == "main.lua" then
- -- data = string.dump(func)
- -- io.writeFile(tname, string.dump(func))
- -- else
- -- io.writeFile("tmp\\" .. tname, luf.dump(func, false, 0x80E0000 + buff:seek(0, zbuff.SEEK_CUR) + 3*2 + tname:len() + 4 + 2))
- -- log.info("what pos", buff:seek(0, zbuff.SEEK_CUR))
- -- log.info(">> pos", string.format("%08X", 0x080E0000 + buff:seek(0, zbuff.SEEK_CUR) + 3*2 + tname:len() + 4 + 2 + 64))
- -- data = luf.dump(func, false, 0x80E0000 + buff:seek(0, zbuff.SEEK_CUR) + 3*2 + tname:len() + 4 + 2)
- data = luf.dump(func, false, 0x080E0033)
- log.info("iowrite", tname, #data)
- io.writeFile(tname, data)
- -- end
- else
- data = io.readFile(srcpath .. "\\" .. value)
- end
- -- log.info("luadb1", tname, #data, buff:seek(0, zbuff.SEEK_CUR))
- TLD(buff, 0x02, tname)
- TLD(buff, 0x03, pack.pack("I", #data))
- TLD(buff, 0xFE, string.char(0xFF, 0xFF))
- log.info("luadb2", tname, #data, buff:seek(0, zbuff.SEEK_CUR), string.format("%02X", buff:seek(0, zbuff.SEEK_CUR)))
- -- log.info(">> pos", string.format("%08X", 0x80E0000 + buff:seek(0, zbuff.SEEK_CUR)))
- buff:write(data)
- log.info("luadb3", tname, #data, buff:seek(0, zbuff.SEEK_CUR))
- end
- local data = buff:toStr(0, buff:seek(0, zbuff.SEEK_CUR))
- log.info("target", #data)
- io.writeFile("disk.bin", data)
- --print(json.encode(arg))
- os.exit(0)
|