sqstdfile.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /* see copyright notice in squirrel.h */
  2. #ifndef _SQSTDFILE_H_
  3. #define _SQSTDFILE_H_
  4. //File
  5. struct SQFile : public SQStream {
  6. SQFile() { _handle = 0; _owns = false;}
  7. SQFile(SQFILE file, bool owns) { _handle = file; _owns = owns;}
  8. virtual ~SQFile() { Close(); }
  9. virtual bool Open(const SQChar *filename ,const SQChar *mode) {
  10. Close();
  11. if( (_handle = sqstd_fopen(filename,mode)) ) {
  12. _owns = true;
  13. return true;
  14. }
  15. return false;
  16. }
  17. virtual void Close() {
  18. if(_handle && _owns) {
  19. sqstd_fclose(_handle);
  20. _handle = 0;
  21. _owns = false;
  22. }
  23. }
  24. SQInteger Read(void *buffer,SQInteger size) {
  25. return sqstd_fread(buffer,1,size,_handle);
  26. }
  27. SQInteger Gets(char *buffer,SQInteger size) {
  28. SQChar *res = sqstd_fgets(buffer,size,_handle);
  29. return res ? scstrlen(res) : 0;
  30. }
  31. SQInteger Write(const void *buffer,SQInteger size) {
  32. return sqstd_fwrite((const SQUserPointer)buffer,1,size,_handle);
  33. }
  34. SQInteger Flush() {
  35. return sqstd_fflush(_handle);
  36. }
  37. SQInteger Tell() {
  38. SQInteger pos = sqstd_ftell(_handle);
  39. return pos == SQ_INT_MAX ? 0 : (pos > 0 ? pos : 0);
  40. }
  41. SQInteger Len() {
  42. SQInteger prevpos=Tell();
  43. Seek(0,SQ_SEEK_END);
  44. SQInteger size=Tell();
  45. Seek(prevpos,SQ_SEEK_SET);
  46. return size;
  47. }
  48. SQInteger Seek(SQInteger offset, SQInteger origin) {
  49. return sqstd_fseek(_handle,offset,origin);
  50. }
  51. bool IsValid() { return _handle?true:false; }
  52. bool EOS() { return Tell()==Len()?true:false;}
  53. SQFILE GetHandle() {return _handle;}
  54. void DummyPinVtable();
  55. protected:
  56. SQFILE _handle;
  57. bool _owns;
  58. };
  59. #endif