1. --****************************************************************************
  2. -- Software: BINARY FILE INTERFACE (BinaryIO Xtra version)
  3. -- Version:  0.1
  4. -- Date:     2005-12-26
  5. -- Author:   Valentin Schmidt
  6. --
  7. -- Requirements/Dependencies:
  8. -- - Xtra "BinaryIO" (http://www.updatestage.com/xtras/binaryio.html)
  9. --
  10. -- Interface for binary file operations (PHP style)
  11. --
  12. -- ************************************************************************
  13.  
  14. ----------------------------------------
  15. -- opens file with specified mode, returns file pointer (xtra instance)
  16. -- tMode: r, rb, w, wb, a, ab, rw, rwb, wr, wrb
  17. -- tType and tCreator optional, only used in mac version when new file is created
  18. ----------------------------------------
  19. on fopen (tFile, tMode, tType, tCreator)
  20.   fp = xtra("binaryio").new()
  21.  
  22.   case (tMode) of
  23.     "r","rb": ok=fp.openFile(1, tFile)
  24.     "w","wb","rw","wr","rwb","wrb": ok=fp.openFile(2, tFile, tCreator, tType)
  25.     "a","ab":
  26.       ok=fp.openFile(2, tFile)
  27.       if (ok="OK") then fp.setFilePosition(fp.getFileSize())
  28.   end case
  29.  
  30.   if ok="OK" then
  31.     fp.relax64kLimit()
  32.   else
  33.     fp=0
  34.   end if
  35.   return fp
  36. end
  37.  
  38. ----------------------------------------
  39. -- closes open file
  40. ----------------------------------------
  41. on fclose (fp)
  42.   fp.closeFile()
  43.   fp = 0
  44. end
  45.  
  46. ----------------------------------------
  47. -- reads n bytes from open file, returns binary string
  48. ----------------------------------------
  49. on fread(fp, n)
  50.   if voidP(n) then n = fp.getFileSize() - fp.getFilePosition()
  51.   ret = fp.readBytes(n)
  52.   if symbolP(ret) then return 0
  53.   else return ret
  54. end
  55.  
  56. ----------------------------------------
  57. -- writes binary string to open file
  58. ----------------------------------------
  59. on fwrite (fp, str)
  60.   fp.writeBytes(str)
  61. end
  62.  
  63. ----------------------------------------
  64. -- returns position in open file
  65. ----------------------------------------
  66. on ftell (fp)
  67.   return fp.getFilePosition()
  68. end
  69.  
  70. ----------------------------------------
  71. -- sets position in open file
  72. -- whence: either integer or symbol
  73. -- 0 or #SEEK_SET: set position to offset bytes. (default)
  74. -- 1 or #SEEK_CUR: set position to current position plus offset.
  75. -- 2 or #SEEK_END: set position to end of file plus offset.
  76. ----------------------------------------
  77. on fseek (fp, pos, whence)
  78.     if voidP(whence) then whence = 0
  79.   else if ilk(whence)=#symbol then
  80.     whence = [#SEEK_SET, #SEEK_CUR, #SEEK_END].getPos(whence)
  81.     if whence>0 then whence=whence-1
  82.   end if
  83.  
  84.   case (whence) of
  85.     0: ok=fp.setFilePosition(pos)  
  86.     1: ok=fp.setFilePosition(fp.getFilePosition() + pos)
  87.     2: ok=fp.setFilePosition(fp.getFileSize() + pos)
  88.   end case
  89.  
  90.   return (ok="OK")
  91. end
  92.  
  93. ----------------------------------------
  94. -- returns size of open file
  95. ----------------------------------------
  96. on fsize (fp)
  97.   return fp.getFileSize()
  98. end
  99.  
  100. ----------------------------------------
  101. -- global functions, no file pointer passed
  102. ----------------------------------------
  103.  
  104. ----------------------------------------
  105. -- returns file size
  106. ----------------------------------------
  107. on file_size (tFile)
  108.   fp=fopen (tFile, "r")
  109.   if fp<>0 then
  110.     tSize = fp.getFileSize()
  111.     fclose(fp)
  112.     return tSize
  113.   else
  114.     return 0
  115.   end if
  116. end
  117.  
  118. ----------------------------------------
  119. -- truncates file
  120. ----------------------------------------
  121. on file_truncate (tFile, tSize)
  122.     fp=fopen (tFile, "w")
  123.     if fp<>0 then
  124.         ok = fp.setFileSize(tSize)
  125.     fclose(fp)
  126.     return (ok="OK")
  127.   else
  128.     return 0
  129.   end if
  130. end
  131.  
  132. ----------------------------------------
  133. -- deletes file
  134. ----------------------------------------
  135. on file_delete (tFile)
  136.     return bnioDeleteFile(tFile)
  137. end
  138.  
  139. ----------------------------------------
  140. --
  141. ----------------------------------------
  142. on file_exists (tFile)
  143.   fp=fopen (tFile, "r")
  144.   if fp<>0 then
  145.     fclose(fp)
  146.     return 1
  147.   else
  148.     return 0
  149.   end if
  150. end
  151.  
  152. ----------------------------------------
  153. -- reads whole file, returns binary string
  154. ----------------------------------------
  155. on file_get_contents (tFile)
  156.   fp = xtra("binaryio").new()
  157.   fp.openFile(1, tFile)
  158.   fp.relax64kLimit()
  159.   data = fp.readBytes(fp.getFileSize())
  160.   fp.closeFile()
  161.   fp = 0
  162.   return data
  163. end
  164.  
  165. ----------------------------------------
  166. -- saves (binary) string as file (tType and tCreator optional, only used in mac version)
  167. ----------------------------------------
  168. on file_put_contents (tFile, tString, tType, tCreator)
  169.   bnioDeleteFile (tFile)
  170.   fp = xtra("binaryio").new()
  171.   fp.openFile(2, tFile, tCreator, tType)
  172.   fp.relax64kLimit()
  173.   fp.writeBytes(tString)
  174.   fp.closeFile()
  175.   fp = 0
  176. end
  177.  
  178.  
[raw code]