home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- systemdata.cpp
-
- 03/03/07 Xiaohong CreateFile é╠ê°Éöé≡ OPEN_ALWAYS é⌐éτ CREATE_ALWAYS é╔ò╧ìX
- 03/02/08 Xiaohong
- *************************************************************************/
- #include "systemdata.h"
- /**********************************************************
- SYSTEMDATA é╠âüâôâoè╓Éöé╠ÉΘî╛
- **********************************************************/
- SYSTEMDATA::SYSTEMDATA()
- {
- m_pOutFile = NULL;
- initbits();
- }
- SYSTEMDATA::~SYSTEMDATA()
- {
- CloseOutFile();
- }
- bool SYSTEMDATA::OpenOutFile(const char* fname)
- {
- CloseOutFile();
- if((m_pOutFile = CreateFile(fname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL))==INVALID_HANDLE_VALUE)
- {
- return false;
- }
-
- return true;
- }
- void SYSTEMDATA::CloseOutFile(void)
- {
- if(m_pOutFile!=NULL)
- {
- CloseHandle(m_pOutFile);
- m_pOutFile = NULL;
- }
- }
- void SYSTEMDATA::initbits(void)
- {
- m_nOutCnt = 8;
- m_nByteCnt = 0;
- m_nFreeSpace = sizeof(m_aBuffer);
- m_pBufPtr = m_aBuffer;
- }
- void SYSTEMDATA::flushbits(void)
- {
- if(m_pOutFile==NULL)return;
-
- DWORD dwAccBytes,dwWrited=0;
- do
- {
- WriteFile(m_pOutFile, m_aBuffer, sizeof(m_aBuffer) - m_nFreeSpace - dwWrited, &dwAccBytes, NULL);
- dwWrited+=dwAccBytes;
- }while(dwWrited<sizeof(m_aBuffer) - m_nFreeSpace);
-
- m_pBufPtr = m_aBuffer;
- m_nFreeSpace = sizeof(m_aBuffer);
- }
- void SYSTEMDATA::putbits(const int val,const int n)
- {
- int i;
- unsigned int mask;
-
- mask = 1 << (n-1); // selects first (leftmost) bit
-
- for (i=0; i<n; i++)
- {
- m_uOutBfr <<= 1;
-
- if (val & mask)
- m_uOutBfr|= 1;
-
- mask >>= 1; // select next bit
- m_nOutCnt--;
-
- if (m_nOutCnt==0) // 8 bit buffer full
- {
- *m_pBufPtr++ = m_uOutBfr;
- if(--m_nFreeSpace <= 0)
- flushbits();
- m_nOutCnt = 8;
- m_nByteCnt++;
- }
- }
- }
- void SYSTEMDATA::alignbits(void)
- {
- if (m_nOutCnt!=8)
- putbits(0,m_nOutCnt);
- }