49 lines
1010 B
Lua
Executable File
49 lines
1010 B
Lua
Executable File
-- shared formats - seeking, endianness
|
|
-- these should all return nil so that they do not mutate the data list
|
|
-- Copyright © 2008 Ben "ToxicFrog" Kelly; see COPYING
|
|
|
|
local common = {}
|
|
|
|
-- determine if the host system is big-endian or not, by dumping an empty
|
|
-- function and looking at the endianness flag
|
|
-- this is kind of hackish
|
|
local function bigendian()
|
|
return string.byte(string.dump(function() end)) == string.char(0x00)
|
|
end
|
|
common.is_bigendian = bigendian()
|
|
|
|
-- seek controls
|
|
function common.seekto(fd, w)
|
|
fd:seek("set", w)
|
|
end
|
|
|
|
function common.seekforward(fd, w)
|
|
fd:seek("cur", w)
|
|
end
|
|
|
|
function common.seekback(fd, w)
|
|
fd:seek("cur", -w)
|
|
end
|
|
|
|
function common.a(fd,w)
|
|
local a = fd:seek()
|
|
if a % w ~= 0 then
|
|
fd:seek("cur", w - (a % w))
|
|
end
|
|
end
|
|
|
|
-- endianness controls
|
|
function common.littleendian(fd, w)
|
|
common.is_bigendian = false
|
|
end
|
|
|
|
function common.bigendian(fd, w)
|
|
common.is_bigendian = true
|
|
end
|
|
|
|
function common.hostendian(fd, w)
|
|
common.is_bigendian = bigendian()
|
|
end
|
|
|
|
return common
|