--****************************************************************************
-- Software: BINARY FILE INTERFACE (BinaryIO Xtra version)
-- Version: 0.1
-- Date: 2005-12-26
-- Author: Valentin Schmidt
--
-- Requirements/Dependencies:
-- - Xtra "BinaryIO" (http://www.updatestage.com/xtras/binaryio.html)
--
-- Interface for binary file operations (PHP style)
--
-- ************************************************************************
----------------------------------------
-- opens file with specified mode, returns file pointer (xtra instance)
-- tMode: r, rb, w, wb, a, ab, rw, rwb, wr, wrb
-- tType and tCreator optional, only used in mac version when new file is created
----------------------------------------
on fopen (tFile, tMode, tType, tCreator)
fp = xtra("binaryio").new()
case (tMode) of
"r","rb": ok=fp.openFile(1, tFile)
"w","wb","rw","wr","rwb","wrb": ok=fp.openFile(2, tFile, tCreator, tType)
"a","ab":
ok=fp.openFile(2, tFile)
if (ok="OK") then fp.setFilePosition(fp.getFileSize())
end case
if ok="OK" then
fp.relax64kLimit()
else
fp=0
end if
return fp
end
----------------------------------------
-- closes open file
----------------------------------------
on fclose (fp)
fp.closeFile()
fp = 0
end
----------------------------------------
-- reads n bytes from open file, returns binary string
----------------------------------------
on fread(fp, n)
if voidP(n) then n = fp.getFileSize() - fp.getFilePosition()
ret = fp.readBytes(n)
if symbolP(ret) then return 0
else return ret
end
----------------------------------------
-- writes binary string to open file
----------------------------------------
on fwrite (fp, str)
fp.writeBytes(str)
end
----------------------------------------
-- returns position in open file
----------------------------------------
on ftell (fp)
return fp.getFilePosition()
end
----------------------------------------
-- sets position in open file
-- whence: either integer or symbol
-- 0 or #SEEK_SET: set position to offset bytes. (default)
-- 1 or #SEEK_CUR: set position to current position plus offset.
-- 2 or #SEEK_END: set position to end of file plus offset.
----------------------------------------
on fseek (fp, pos, whence)
if voidP(whence) then whence = 0
else if ilk(whence)=#symbol then
whence = [#SEEK_SET, #SEEK_CUR, #SEEK_END].getPos(whence)
if whence>0 then whence=whence-1
end if
case (whence) of
0: ok=fp.setFilePosition(pos)
1: ok=fp.setFilePosition(fp.getFilePosition() + pos)
2: ok=fp.setFilePosition(fp.getFileSize() + pos)
end case
return (ok="OK")
end
----------------------------------------
-- returns size of open file
----------------------------------------
on fsize (fp)
return fp.getFileSize()
end
----------------------------------------
-- global functions, no file pointer passed
----------------------------------------
----------------------------------------
-- returns file size
----------------------------------------
on file_size (tFile)
fp=fopen (tFile, "r")
if fp<>0 then
tSize = fp.getFileSize()
fclose(fp)
return tSize
else
return 0
end if
end
----------------------------------------
-- truncates file
----------------------------------------
on file_truncate (tFile, tSize)
fp=fopen (tFile, "w")
if fp<>0 then
ok = fp.setFileSize(tSize)
fclose(fp)
return (ok="OK")
else
return 0
end if
end
----------------------------------------
-- deletes file
----------------------------------------
on file_delete (tFile)
return bnioDeleteFile(tFile)
end
----------------------------------------
--
----------------------------------------
on file_exists (tFile)
fp=fopen (tFile, "r")
if fp<>0 then
fclose(fp)
return 1
else
return 0
end if
end
----------------------------------------
-- reads whole file, returns binary string
----------------------------------------
on file_get_contents (tFile)
fp = xtra("binaryio").new()
fp.openFile(1, tFile)
fp.relax64kLimit()
data = fp.readBytes(fp.getFileSize())
fp.closeFile()
fp = 0
return data
end
----------------------------------------
-- saves (binary) string as file (tType and tCreator optional, only used in mac version)
----------------------------------------
on file_put_contents (tFile, tString, tType, tCreator)
bnioDeleteFile (tFile)
fp = xtra("binaryio").new()
fp.openFile(2, tFile, tCreator, tType)
fp.relax64kLimit()
fp.writeBytes(tString)
fp.closeFile()
fp = 0
end