diff options
Diffstat (limited to 'cd-tool.lua')
-rw-r--r-- | cd-tool.lua | 537 |
1 files changed, 273 insertions, 264 deletions
diff --git a/cd-tool.lua b/cd-tool.lua index 4e0f0d0..7b37d0f 100644 --- a/cd-tool.lua +++ b/cd-tool.lua @@ -1,176 +1,181 @@ - ------------------
--- misc functions --
- ------------------
-
-function display(inp)
- if (type(inp) == "string") then
- inp = Input(inp)
- elseif (type(inp) ~= "table") then
- error("Display needs a string or an Input object")
- end
-
- while(not inp:isclosed()) do
- print(inp:read())
- end
-end
-
-function pchar(n)
- if (not ((n >= 32) and (n <= 127))) then
- n = 0x2e
- end
- return hex(n, "%c")
-end
-
-function hexdump(inp, from, to, width)
- local size, nlines, remaining, data_array, line, byte, outstring
-
- if (type(inp) == "string") then
- inp = Input(inp)
- elseif (type(inp) ~= "table") then
- error("Hexdump needs a string or an Input object")
- end
-
- size = inp:getsize()
-
- if (from == nil) then
- from = 0
- end
-
- if (to == nil) then
- to = size
- end
-
- if (to > size) then
- to = size
- end
-
- size = to - from
-
- if (width == nil) then
- width = 16
- end
-
- nlines = math.floor(size / width)
- remaining = math.mod(size, width)
- inp:seek(from)
- data_array = inp:read(size)
-
- for line = 0, nlines - 1, 1 do
- outstring = hex(line * width + from, "%08x ")
- for byte = 0, width - 1, 1 do
- outstring = outstring .. hex(data_array[line * 16 + byte]) .. " "
- end
- outstring = outstring .. " "
- for byte = 0, width - 1, 1 do
- outstring = outstring .. pchar(data_array[line * 16 + byte])
- end
- print(outstring)
- end
-
- if (remaining == 0) then
- return
- end
-
- outstring = hex(nlines * width + from, "%08x ");
- for byte = 0, remaining - 1, 1 do
- outstring = outstring .. hex(data_array[nlines * 16 + byte]) .. " "
- end
- for byte = remaining + 1, width - 1, 1 do
- outstring = outstring .. " "
- end
- outstring = outstring .. " "
- for byte = 0, remaining - 1, 1 do
- outstring = outstring .. pchar(data_array[nlines * 16 + byte])
- end
-
- print(outstring)
-end
-
-
- --------------------------
--- cdutil object wrappers --
- --------------------------
-
-function cdfile(arg1, arg2, arg3, arg4)
- local cdutil_implied = false
-
- if ((type(arg1) ~= "table") or (arg1.cdfile == nil)) then
- cdutil_implied = true
- end
-
- if ((arg2 == nil) and (arg3 == nil) and (arg4 == nil)) then
- return cdutil:cdfile(arg1)
- elseif ((arg3 == nil) and (arg4 == nil)) then
- if (cdutil_implied) then
- return cdutil:cdfile(arg1, arg2)
- else
- return arg1:cdfile(arg2)
- end
- elseif (arg4 == nil) then
- if (cdutil_implied) then
- return cdutil:cdfile(arg1, arg2, arg3)
- else
- return arg1:cdfile(arg2, arg3)
- end
- else
- return arg1:cdfile(arg2, arg3, arg4)
- end
-end
-
-function setisow(iso_w)
- if (cdutil == nil) then error "cdutil object non existant" end
- return cdutil:setisow(iso_w)
-end
-
-function guessmode(sect)
- if (cdutil == nil) then error "cdutil object non existant" end
- if (sect == nil) then
- return cdutil:guessmode()
- else
- return cdutil:guessmode(sect)
- end
-end
-
-function sectorseek(sect)
- if (cdutil == nil) then error "cdutil object non existant" end
- return cdutil:sectorseek(sect)
-end
-
-function readsector(sect, mode)
- if (cdutil == nil) then error "cdutil object non existant" end
- if (sect == nil) then
- return cdutil:readsector()
- elseif (mode == nil) then
- return cdutil:readsector(sect)
- else
- return cdutil:readsector(sect, mode)
- end
-end
+ ------------------ +-- misc functions -- + ------------------ + +function display(inp) + if (type(inp) == "string") then + inp = Input(inp) + elseif (type(inp) ~= "table") then + error("Display needs a string or an Input object") + end + + while(not inp:isclosed()) do + print(inp:read()) + end +end + +function pchar(n) + if (not ((n >= 32) and (n <= 127))) then + n = 46 + end + return hex(n, "%c") +end + +function hexdump(inp, from, to, width) + local size, nlines, remaining, data_array, line, byte, outstring + + if (type(inp) == "string") then + inp = Input(inp) + elseif (type(inp) ~= "table") then + error("Hexdump needs a string or an Input object") + end + + size = inp:getsize() + + if (from == nil) then + from = 0 + end + + if (to == nil) then + to = size + end + + if (to > size) then + to = size + end + + size = to - from + + if (width == nil) then + width = 16 + end + + nlines = math.floor(size / width) + remaining = math.mod(size, width) + inp:seek(from) + data_array = inp:read(size) + + for line = 0, nlines - 1, 1 do + outstring = hex(line * width + from, "%08x ") + for byte = 0, width - 1, 1 do + outstring = outstring .. hex(data_array[line * 16 + byte]) .. " " + end + outstring = outstring .. " " + for byte = 0, width - 1, 1 do + outstring = outstring .. pchar(data_array[line * 16 + byte]) + end + print(outstring) + end + + if (remaining == 0) then + return + end + + outstring = hex(nlines * width + from, "%08x "); + for byte = 0, remaining - 1, 1 do + outstring = outstring .. hex(data_array[nlines * 16 + byte]) .. " " + end + for byte = remaining + 1, width - 1, 1 do + outstring = outstring .. " " + end + outstring = outstring .. " " + for byte = 0, remaining - 1, 1 do + outstring = outstring .. pchar(data_array[nlines * 16 + byte]) + end + + print(outstring) +end + + + -------------------------- +-- cdutil object wrappers -- + -------------------------- + +function check_cdutil() + if (cdutil == nil) then error "cdutil object non existant" end +end + +function cdfile(arg1, arg2, arg3, arg4) + local cdutil_implied = false + + if ((type(arg1) ~= "table") or (arg1.cdfile == nil)) then + check_cdutil() + cdutil_implied = true + end + + if ((arg2 == nil) and (arg3 == nil) and (arg4 == nil)) then + return cdutil:cdfile(arg1) + elseif ((arg3 == nil) and (arg4 == nil)) then + if (cdutil_implied) then + return cdutil:cdfile(arg1, arg2) + else + return arg1:cdfile(arg2) + end + elseif (arg4 == nil) then + if (cdutil_implied) then + return cdutil:cdfile(arg1, arg2, arg3) + else + return arg1:cdfile(arg2, arg3) + end + else + return arg1:cdfile(arg2, arg3, arg4) + end +end + +function setisow(iso_w) + check_cdutil() + return cdutil:setisow(iso_w) +end + +function guessmode(sect) + check_cdutil() + if (sect == nil) then + return cdutil:guessmode() + else + return cdutil:guessmode(sect) + end +end + +function sectorseek(sect) + check_cdutil() + return cdutil:sectorseek(sect) +end + +function readsector(sect, mode) + check_cdutil() + if (sect == nil) then + return cdutil:readsector() + elseif (mode == nil) then + return cdutil:readsector(sect) + else + return cdutil:readsector(sect, mode) + end +end function readdatas(size, sector, mode) - if (cdutil == nil) then error "cdutil object non existant" end
- if (sect == nil) then
- return cdutil:readdatas(size)
- elseif (mode == nil) then
- return cdutil:readdatas(size, sect)
- else
- return cdutil:readdatas(size, sect, mode)
- end
+ check_cdutil() + if (sect == nil) then + return cdutil:readdatas(size) + elseif (mode == nil) then + return cdutil:readdatas(size, sect) + else + return cdutil:readdatas(size, sect, mode) + end end function readfile(handle, size, sector, mode) - if (cdutil == nil) then error "cdutil object non existant" end
- if (sect == nil) then
- return cdutil:readfile(handle, size)
- elseif (mode == nil) then
- return cdutil:readfile(handle, size, sect)
- else
- return cdutil:readfile(handle, size, sect, mode)
- end
+ check_cdutil() + if (sect == nil) then + return cdutil:readfile(handle, size) + elseif (mode == nil) then + return cdutil:readfile(handle, size, sect) + else + return cdutil:readfile(handle, size, sect, mode) + end end function writesector(array, sector, mode) - if (cdutil == nil) then error "cdutil object non existant" end + check_cdutil() if (sector == nil) then return cdutil:writesector(array, sector) elseif (mode == nil) then @@ -179,7 +184,7 @@ function writesector(array, sector, mode) end function writedatas(array, size, sector, mode) - if (cdutil == nil) then error "cdutil object non existant" end + check_cdutil() if (sector == nil) then return cdutil:writedatas(array, size) elseif (mode == nil) then @@ -190,7 +195,7 @@ function writedatas(array, size, sector, mode) end function writefile(handle, size, sector, mode) - if (cdutil == nil) then error "cdutil object non existant" end + check_cdutil() if (size == nil) then return cdutil:writefile(handle) elseif (sector == nil) then @@ -203,71 +208,75 @@ function writefile(handle, size, sector, mode) end function findpath(path) - if (cdutil == nil) then error "cdutil object non existant" end + check_cdutil() return cdutil:findpath(path) end function findparent(path) - if (cdutil == nil) then error "cdutil object non existant" end + check_cdutil() return cdutil:findparent(path) end function finddirectory(dir, path) - if (cdutil == nil) then error "cdutil object non existant" end + check_cdutil() return cdutil:finddirectory(dir, path) end -
-
- -----------------------
--- iso object wrappers --
- -----------------------
-
-function foreword(lcdutil)
- if (iso == nil) then error "iso object non existant" end
- if ((lcdutil == nil) and (cdutil == nil)) then error "cdutil object non existant" end
- if (lcdutil == nil) then
- return iso:foreword(cdutil)
- else
- return iso:foreword(lcdutil)
- end
-end
-
-function foreword_handle(handle, mode)
- if (iso == nil) then error "iso object non existant" end
- if (mode == nil) then
- return iso:foreword_handle(handle)
- else
- return iso:foreword_handle(handle, mode)
- end
-end
-
-function foreword_array(array, mode)
- if (iso == nil) then error "iso object non existant" end
- if (mode == nil) then
- return iso:foreword_array(array)
- else
- return iso:foreword_array(array, mode)
- end
-end
-
-function getdispsect()
- if (iso == nil) then error "iso object non existant" end
- return iso:getdispsect()
-end
-
-function putfile(handle, mode, sector)
- if (iso == nil) then error "iso object non existant" end
- if (mode == nil) then
- iso:putfile(handle)
- elseif (sector == nil) then
- iso:putfile(handle, mode)
- else
- iso:putfile(handle, mode, sector)
- end
-end
+ + + ----------------------- +-- iso object wrappers -- + ----------------------- + +function check_iso() + if (iso == nil) then error "iso object non existant" end +end + +function foreword(lcdutil) + check_iso() + if ((lcdutil == nil) and (cdutil == nil)) then error "cdutil object non existant" end + if (lcdutil == nil) then + return iso:foreword(cdutil) + else + return iso:foreword(lcdutil) + end +end + +function foreword_handle(handle, mode) + check_iso() + if (mode == nil) then + return iso:foreword_handle(handle) + else + return iso:foreword_handle(handle, mode) + end +end + +function foreword_array(array, mode) + check_iso() + if (mode == nil) then + return iso:foreword_array(array) + else + return iso:foreword_array(array, mode) + end +end + +function getdispsect() + check_iso() + return iso:getdispsect() +end + +function putfile(handle, mode, sector) + check_iso() + if (mode == nil) then + iso:putfile(handle) + elseif (sector == nil) then + iso:putfile(handle, mode) + else + iso:putfile(handle, mode, sector) + end +end function putdatas(array, size, mode, sector) - if (iso == nil) then error "iso object non existant" end
+ check_iso() if (mode == nil) then iso:putdatas(array, size) elseif (sector == nil) then @@ -278,7 +287,7 @@ function putdatas(array, size, mode, sector) end function createsector(array, mode, sector) - if (iso == nil) then error "iso object non existant" end
+ check_iso() if (mode == nil) then iso:createsector(array) elseif (sector == nil) then @@ -289,43 +298,43 @@ function createsector(array, mode, sector) end function setEOF() - if (iso == nil) then error "iso object non existant" end
- iso:setEOF()
-end
-
-function clearEOF()
- if (iso == nil) then error "iso object non existant" end
- iso:clearEOF()
-end
+ check_iso() + iso:setEOF() +end + +function clearEOF() + check_iso() + iso:clearEOF() +end function setbasics(pvd, rootsize, ptsize, nvd, rootsect) - if (iso == nil) then error "iso object non existant" end
- if (rootsize == nil) then
- iso:setbasics(pvd)
- elseif (ptsize == nil) then
- iso:setbasics(pvd, rootsize)
- elseif (nvd == nil) then
- iso:setbasics(pvd, rootsize, ptsize)
- elseif (rootsect) then
- iso:setbasics(pvd, rootsize, ptsize, nvd)
- else
- iso:setbasics(pvd, rootsize, ptsize, nvd, rootsect)
- end
-end
+ check_iso() + if (rootsize == nil) then + iso:setbasics(pvd) + elseif (ptsize == nil) then + iso:setbasics(pvd, rootsize) + elseif (nvd == nil) then + iso:setbasics(pvd, rootsize, ptsize) + elseif (rootsect) then + iso:setbasics(pvd, rootsize, ptsize, nvd) + else + iso:setbasics(pvd, rootsize, ptsize, nvd, rootsect) + end +end function createdir(dirtree, name, size, direntry, mode) - if (iso == nil) then error "iso object non existant" end
- if (size == nil) then
- iso:createdir(dirtree, name)
- elseif (mode == nil) then
- iso:createdir(dirtree, name, size, direntry)
- else
- iso:createdir(dirtree, name, size, direntry, mode)
- end
-end
+ check_iso() + if (size == nil) then + iso:createdir(dirtree, name) + elseif (mode == nil) then + iso:createdir(dirtree, name, size, direntry) + else + iso:createdir(dirtree, name, size, direntry, mode) + end +end function createfile(dirtree, name, size, direntry, mode) - if (iso == nil) then error "iso object non existant" end
+ check_iso() if (mode == nil) then iso:createfile(dirtree, name, size, direntry) else @@ -334,7 +343,7 @@ function createfile(dirtree, name, size, direntry, mode) end function copydir(dirtree, cdutils, direntry, mode) - if (iso == nil) then error "iso object non existant" end
+ check_iso() if (mode == nil) then iso:copydir(dirtree, cdutils, direntry) else @@ -343,14 +352,14 @@ function copydir(dirtree, cdutils, direntry, mode) end function close(cuefile, mode, nsectors) - if (iso == nil) then error "iso object non existant" end
- if (cuefile == nil) then
- iso:close()
- elseif (mode == nil) then
- iso:close(cuefile)
- elseif (nsectors == nil) then
- iso:close(cuefile, mode)
- else
- iso:close(cuefile, mode, nsectors)
- end
-end
+ check_iso() + if (cuefile == nil) then + iso:close() + elseif (mode == nil) then + iso:close(cuefile) + elseif (nsectors == nil) then + iso:close(cuefile, mode) + else + iso:close(cuefile, mode, nsectors) + end +end |