1. --!movie
  2. --!encoding=utf-8
  3.  
  4. --****************************************************************************
  5. -- Software: BINARY FILE INTERFACE (BinFile Xtra version)
  6. -- Version:  0.5
  7. -- Date:     2015-08-07
  8. -- Author:   Valentin Schmidt
  9. --
  10. -- Requirements/Dependencies:
  11. -- - Xtra "BinFile" (v2.7+)
  12. --
  13. -- Interface for binary file operations (PHP style)
  14. --
  15. -- ************************************************************************
  16.  
  17. ----------------------------------------
  18. -- Opens file with specified mode, returns file pointer (xtra instance) or 0
  19. -- @param {string} tFile
  20. -- @param {string} tMode - r, w, a, r+, w+, a+ (,rw, wr), with "b" appended for binary files
  21. -- @return {instance|false}
  22. ----------------------------------------
  23. on fopen (tFile, tMode)
  24.   fp = xtra("BinFile").new()
  25.  
  26.   if tMode = "rw" or tMode = "wr" then tMode="r+"
  27.   if tMode = "rwb" or tMode = "wrb" then tMode="r+b"
  28.  
  29.   ok = fp.bx_fopen(tFile, tMode)
  30.   if ok then return fp
  31.   else return ok
  32. end
  33.  
  34. ----------------------------------------
  35. -- Closes open file
  36. -- @param {instance} fp
  37. -- @return {bool} success
  38. ----------------------------------------
  39. on fclose (fp)
  40.   ok = fp.bx_fclose()
  41.   fp = 0
  42.   return ok
  43. end
  44.  
  45. ----------------------------------------
  46. -- Reads n bytes from open file, returns bytearray
  47. -- @param {instance} fp
  48. -- @param {integer} n
  49. -- @return {bytearray}
  50. ----------------------------------------
  51. on freadbytes(fp, n)
  52.     return fp.bx_fread(n)
  53. end
  54.  
  55. ----------------------------------------
  56. -- Writes byteArray to open file
  57. -- @param {instance} fp
  58. -- @param {bytearray} ba
  59. -- @return {integer} bytesWritten
  60. ----------------------------------------
  61. on fwritebytes (fp, ba)
  62.   return fp.bx_fwrite(ba)
  63. end
  64.  
  65. ----------------------------------------
  66. -- Reads n bytes from open file, returns string
  67. -- @param {instance} fp
  68. -- @param {integer} n
  69. -- @return {string}
  70. ----------------------------------------
  71. on freadstring(fp, n)
  72.   ba = fp.bx_fread(n)
  73.   return ba.readRawString(ba.length)
  74. end
  75.  
  76. ----------------------------------------
  77. -- Writes string to open file
  78. -- @param {instance} fp
  79. -- @param {string} str
  80. -- @return {integer} bytesWritten
  81. ----------------------------------------
  82. on fwritestring (fp, str)
  83.   return fp.bx_fwrite(str)
  84. end
  85.  
  86. ----------------------------------------
  87. -- Returns position in open file
  88. -- @param {instance} fp
  89. -- @return {integer}
  90. ----------------------------------------
  91. on ftell (fp)
  92.   return fp.bx_ftell()
  93. end
  94.  
  95. ----------------------------------------
  96. -- Sets position in open file
  97. -- whence: either integer or symbol
  98. -- 0 or #SEEK_SET: set position to offset bytes. (default)
  99. -- 1 or #SEEK_CUR: set position to current position plus offset.
  100. -- 2 or #SEEK_END: set position to end of file plus offset.
  101. -- @param {instance} fp
  102. -- @param {integer} pos
  103. -- @param {integer|symbol} whence - optional, default = 0
  104. -- @return {bool} success
  105. ----------------------------------------
  106. on fseek (fp, pos, whence)
  107.   if voidP(whence) then whence = 0
  108.   else if ilk(whence)=#symbol then
  109.     whence = [#SEEK_SET, #SEEK_CUR, #SEEK_END].getPos(whence)
  110.     if whence>0 then whence=whence-1
  111.   end if
  112.   return fp.bx_fseek(pos, whence)
  113. end
  114.  
  115. ----------------------------------------
  116. -- Returns size of open file
  117. -- @param {instance} fp
  118. -- @return {integer}
  119. ----------------------------------------
  120. on fsize (fp)
  121.   return fp.bx_fsize()
  122. end
  123.  
  124. ----------------------------------------
  125. -- global functions, no file pointer passed
  126. ----------------------------------------
  127.  
  128. ----------------------------------------
  129. -- Returns file size
  130. -- @param {string} tFile
  131. -- @return {integer}
  132. ----------------------------------------
  133. on file_size (tFile)
  134.   return bx_file_size(tFile)
  135. end
  136.  
  137. ----------------------------------------
  138. -- Truncates file
  139. -- @param {string} tFile
  140. -- @param {integer} tSize
  141. -- @return {bool} success
  142. ----------------------------------------
  143. on file_truncate (tFile, tSize)
  144.   return bx_file_truncate(tFile, tSize)
  145. end
  146.  
  147. ----------------------------------------
  148. -- Deletes file
  149. -- @param {string} tFile
  150. -- @return {bool} success
  151. ----------------------------------------
  152. on file_delete (tFile)
  153.   return bx_file_delete(tFile)
  154. end
  155.  
  156. ----------------------------------------
  157. -- Check if file exists
  158. -- @param {string} tFile
  159. -- @return {bool} exists
  160. ----------------------------------------
  161. on file_exists (tFile)
  162.   return bx_file_exists(tFile)
  163. end
  164.  
  165. ----------------------------------------
  166. -- Reads whole file, returns UTF-8 string
  167. -- @param {string} tFile
  168. -- @return {string|false}
  169. ----------------------------------------
  170. on file_get_string (tFile)
  171.     ba = bx_file_get_contents (tFile)
  172.     ret = ba.readRawString(ba.length)
  173.   return ret
  174. end
  175.  
  176. ----------------------------------------
  177. -- Saves UTF-8 string as file
  178. -- @param {string} tFile
  179. -- @param {string} tString
  180. -- @param {bool} [tAddBOM]
  181. -- @return {bool} success
  182. ----------------------------------------
  183. on file_put_string (tFile, tString, tAddBOM)
  184.   if tAddBOM then
  185.     fp = fopen(tFile, "wb")
  186.     BOM = bytearray(3)
  187.     BOM[1] = 239
  188.     BOM[2] = 187
  189.     BOM[3] = 191
  190.     fwritebytes(fp, BOM)
  191.     ok = fwritestring(fp, tString)
  192.     fclose(fp)
  193.     return ok<>0
  194.   else
  195.     return bx_file_put_contents (tFile, tString)<>0
  196.   end if
  197. end
  198.  
  199. ----------------------------------------
  200. -- Returns whole file, returns byteArray
  201. -- @param {string} tFile
  202. -- @return {bytearray|false}
  203. ----------------------------------------
  204. on file_get_bytes(tFile)
  205.   return bx_file_get_contents (tFile)
  206. end
  207.  
  208. ----------------------------------------
  209. -- Saves byteArray as file
  210. -- @param {string} tFile
  211. -- @param {byteArray} tByteArray
  212. -- @return {bool} success
  213. ----------------------------------------
  214. on file_put_bytes (tFile, tByteArray)
  215.   return bx_file_put_contents (tFile, tByteArray)
  216. end
  217.  
  218. ----------------------------------------
  219. -- Display open file dialog
  220. -- @param {string} title
  221. -- @param {string} filterMask
  222. -- @param {string} defaultFileName
  223. -- @return {string} filename
  224. ----------------------------------------
  225. on display_open (title, filterMask, defaultFileName)
  226.   fn = bx_display_open (title, filterMask, defaultFileName)
  227.   return string(fn)
  228. end
  229.  
  230. ----------------------------------------
  231. -- Display save file dialog
  232. -- @param {string} title
  233. -- @param {string} filterMask
  234. -- @param {string} defaultFileName
  235. -- @return {string} filename
  236. ----------------------------------------
  237. on display_save (title, filterMask, defaultFileName)
  238.   fn = bx_display_save (title, filterMask, defaultFileName)
  239.   return string(fn)
  240. end
  241.  
[raw code]