home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / dctm.lzh / DCTM / source.lzh / source / systemdata.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2003-03-08  |  1.9 KB  |  90 lines

  1. /*************************************************************************
  2.     systemdata.cpp
  3.  
  4.     03/03/07    Xiaohong    CreateFile é╠ê°Éöé≡ OPEN_ALWAYS é⌐éτ CREATE_ALWAYS é╔ò╧ìX
  5.     03/02/08    Xiaohong
  6. *************************************************************************/
  7. #include "systemdata.h"
  8. /**********************************************************
  9.     SYSTEMDATA é╠âüâôâoè╓Éöé╠ÉΘî╛
  10. **********************************************************/
  11. SYSTEMDATA::SYSTEMDATA()
  12. {
  13.     m_pOutFile = NULL;
  14.     initbits();
  15. }
  16. SYSTEMDATA::~SYSTEMDATA()
  17. {
  18.     CloseOutFile();
  19. }
  20. bool SYSTEMDATA::OpenOutFile(const char* fname)
  21. {
  22.     CloseOutFile();
  23.     if((m_pOutFile = CreateFile(fname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL))==INVALID_HANDLE_VALUE)
  24.     {
  25.         return false;
  26.     }
  27.     
  28.     return true;
  29. }
  30. void SYSTEMDATA::CloseOutFile(void)
  31. {
  32.     if(m_pOutFile!=NULL)
  33.     {
  34.         CloseHandle(m_pOutFile);
  35.         m_pOutFile = NULL;
  36.     }
  37. }
  38. void SYSTEMDATA::initbits(void)
  39. {
  40.     m_nOutCnt = 8;
  41.     m_nByteCnt = 0;
  42.     m_nFreeSpace = sizeof(m_aBuffer);
  43.     m_pBufPtr = m_aBuffer;
  44. }
  45. void SYSTEMDATA::flushbits(void)
  46. {
  47.     if(m_pOutFile==NULL)return;
  48.  
  49.     DWORD dwAccBytes,dwWrited=0;
  50.     do
  51.     {
  52.         WriteFile(m_pOutFile, m_aBuffer, sizeof(m_aBuffer) - m_nFreeSpace - dwWrited, &dwAccBytes, NULL);
  53.         dwWrited+=dwAccBytes;
  54.     }while(dwWrited<sizeof(m_aBuffer) - m_nFreeSpace);
  55.  
  56.     m_pBufPtr = m_aBuffer;
  57.     m_nFreeSpace = sizeof(m_aBuffer);
  58. }
  59. void SYSTEMDATA::putbits(const int val,const int n)
  60. {
  61.     int i;
  62.     unsigned int mask;
  63.  
  64.     mask = 1 << (n-1); // selects first (leftmost) bit
  65.  
  66.     for (i=0; i<n; i++)
  67.     {
  68.         m_uOutBfr <<= 1;
  69.  
  70.         if (val & mask)
  71.         m_uOutBfr|= 1;
  72.  
  73.         mask >>= 1; // select next bit
  74.         m_nOutCnt--;
  75.  
  76.         if (m_nOutCnt==0) // 8 bit buffer full
  77.         {
  78.             *m_pBufPtr++ = m_uOutBfr;
  79.             if(--m_nFreeSpace <= 0)
  80.                 flushbits();
  81.             m_nOutCnt = 8;
  82.             m_nByteCnt++;
  83.         }
  84.     }
  85. }
  86. void SYSTEMDATA::alignbits(void)
  87. {
  88.     if (m_nOutCnt!=8)
  89.         putbits(0,m_nOutCnt);
  90. }