local f = io.popen("luacomp "..arg[1], "r") local prog = f:read("*a") f:close() local function struct(tbl) local pat = tbl.endian or "=" local args = {} for i=1, #tbl do local a, b = pairs(tbl[i]) local k, v = a(b) args[i] = k pat = pat .. v end return setmetatable({}, {__call=function(_, arg) --checkArg(1, arg, "string", "table") if (type(arg) == "string") then local sval = {string.unpack(pat, arg)} local rtn = {} for i=1, #args do rtn[args[i]] = sval[i] end return rtn, sval[#sval] elseif (type(arg) == "table") then local sval = {} for i=1, #args do sval[i] = arg[args[i]] end return string.pack(pat, unpack(sval)) end end, __len=function() return string.packsize(pat) end}) end local velx_spec = struct { endian = "<", {magic="c5"}, {fver="B"}, {compression="B"}, {lver="B"}, {os="B"}, {arctype="c4"}, {psize="I3"}, {lsize="I3"}, {ssize="I3"}, {rsize="I4"} } f = io.open(arg[2], "wb") f:write(velx_spec({ magic="\27VelX", fver=1, compression=0, lver=0x53, os=127, arctype="", psize=#prog, lsize=0, ssize=0, rsize=0, })) f:write(prog) f:close()