home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CMCD0704.ISO / Software / Freeware / Utilitare / VisualBoyAdvance-1.7.2 / win32 / include / cximage / xiofile.h < prev    next >
C/C++ Source or Header  |  2004-02-29  |  3KB  |  113 lines

  1. #if !defined(__xiofile_h)
  2. #define __xiofile_h
  3.  
  4. #include "xfile.h"
  5.  
  6. class DLL_EXP CxIOFile : public CxFile
  7.     {
  8. public:
  9.     CxIOFile(FILE* fp = NULL)
  10.     {
  11.         m_fp = fp;
  12.         m_bCloseFile = (bool)(fp==0);
  13.     }
  14.  
  15.     ~CxIOFile()
  16.     {
  17.         Close();
  18.     }
  19. //////////////////////////////////////////////////////////
  20.     bool Open(const char *filename, const char *mode)
  21.     {
  22.         if (m_fp) return false;    // Can't re-open without closing first
  23.  
  24.         m_fp = fopen(filename, mode);
  25.         if (!m_fp) return false;
  26.  
  27.         m_bCloseFile = true;
  28.  
  29.         return true;
  30.     }
  31. //////////////////////////////////////////////////////////
  32.     virtual bool Close()
  33.     {
  34.         int iErr = 0;
  35.         if ( (m_fp) && (m_bCloseFile) ){ 
  36.             iErr = fclose(m_fp);
  37.             m_fp = NULL;
  38.         }
  39.         return (bool)(iErr==0);
  40.     }
  41. //////////////////////////////////////////////////////////
  42.     virtual size_t    Read(void *buffer, size_t size, size_t count)
  43.     {
  44.         if (!m_fp) return 0;
  45.         return fread(buffer, size, count, m_fp);
  46.     }
  47. //////////////////////////////////////////////////////////
  48.     virtual size_t    Write(const void *buffer, size_t size, size_t count)
  49.     {
  50.         if (!m_fp) return 0;
  51.         return fwrite(buffer, size, count, m_fp);
  52.     }
  53. //////////////////////////////////////////////////////////
  54.     virtual bool Seek(long offset, int origin)
  55.     {
  56.         if (!m_fp) return false;
  57.         return (bool)(fseek(m_fp, offset, origin) == 0);
  58.     }
  59. //////////////////////////////////////////////////////////
  60.     virtual long Tell()
  61.     {
  62.         if (!m_fp) return 0;
  63.         return ftell(m_fp);
  64.     }
  65. //////////////////////////////////////////////////////////
  66.     virtual long    Size()
  67.     {
  68.         if (!m_fp) return -1;
  69.         long pos,size;
  70.         pos = ftell(m_fp);
  71.         fseek(m_fp, 0, SEEK_END);
  72.         size = ftell(m_fp);
  73.         fseek(m_fp, pos,SEEK_SET);
  74.         return size;
  75.     }
  76. //////////////////////////////////////////////////////////
  77.     virtual bool    Flush()
  78.     {
  79.         if (!m_fp) return false;
  80.         return (bool)(fflush(m_fp) == 0);
  81.     }
  82. //////////////////////////////////////////////////////////
  83.     virtual bool    Eof()
  84.     {
  85.         if (!m_fp) return true;
  86.         return (bool)(feof(m_fp) != 0);
  87.     }
  88. //////////////////////////////////////////////////////////
  89.     virtual long    Error()
  90.     {
  91.         if (!m_fp) return -1;
  92.         return ferror(m_fp);
  93.     }
  94. //////////////////////////////////////////////////////////
  95.     virtual bool PutC(unsigned char c)
  96.     {
  97.         if (!m_fp) return false;
  98.         return (bool)(fputc(c, m_fp) == c);
  99.     }
  100. //////////////////////////////////////////////////////////
  101.     virtual long    GetC()
  102.     {
  103.         if (!m_fp) return EOF;
  104.         return getc(m_fp);
  105.     }
  106. //////////////////////////////////////////////////////////
  107. protected:
  108.     FILE *m_fp;
  109.     bool m_bCloseFile;
  110.     };
  111.  
  112. #endif
  113.