home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_04 / Diver / Dump.cpp < prev    next >
C/C++ Source or Header  |  2000-05-11  |  3KB  |  148 lines

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : dump.cpp                                                              //
  10. //  Description: basic dumping class                                                 //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #define NOCRYPT
  15.  
  16. #include <windows.h>
  17. #include <string.h>
  18. #include <memory.h>
  19. #include <assert.h>
  20. #include <io.h>
  21.  
  22. #include "Dump.h"
  23. #include "Format.h"
  24.  
  25.  
  26. void KDump::Newline(void)
  27. {
  28.     Write((char) 0x0D);
  29.     Write((char) 0x0A);
  30.  
  31.     m_field = 0;
  32. }
  33.  
  34.  
  35. void KDump::Flush(void)
  36. {
  37.     if ( m_bufpos )
  38.     {
  39.         _lwrite(m_handle, m_buffer, m_bufpos);
  40.         m_bufpos = 0;
  41.     }
  42. }
  43.  
  44.  
  45. void KDump::Seperator(void)
  46. {
  47.     if ( m_field )
  48.     {
  49.         Write(',');
  50.         Write(' ');
  51.     }
  52.  
  53.     m_field ++;
  54. }
  55.  
  56.  
  57. void KDump::WriteField(const char * pStr)
  58. {
  59.     Seperator();
  60.     Write(pStr, strlen(pStr));
  61. }
  62.  
  63.  
  64. void KDump::WriteField(LPCTSTR pStr, int nSize)
  65. {
  66.     Seperator();
  67.  
  68.     int len = strlen(pStr);
  69.  
  70.     Write(pStr, min(len, nSize));
  71. }
  72.  
  73.  
  74. void KDump::WriteField(unsigned value, ATOM typ)
  75. {
  76.     char buffer[256];
  77.  
  78.     buffer[0] = 0;
  79.     MainDecoder(buffer, sizeof(buffer), typ, value);
  80.  
  81.     WriteField(buffer);
  82. }
  83.  
  84.  
  85. void KDump::Write(const void * pData, int len)
  86. {    
  87.     if ( m_bufpos + len > sizeof(m_buffer) )
  88.         Flush();
  89.  
  90.     if ( len > sizeof(m_buffer) )
  91.     {
  92.         _lwrite(m_handle, (const char *) pData, len);
  93.         return;
  94.     }
  95.     
  96.     memcpy(m_buffer + m_bufpos, pData, len);
  97.     m_bufpos += len;
  98. }   
  99.  
  100.  
  101. void KDump::Write(char ch)
  102. {
  103.     if ( m_bufpos + 1 > sizeof(m_buffer) )
  104.         Flush();
  105.  
  106.     m_buffer[m_bufpos++] = ch;
  107. }
  108.  
  109.  
  110. int KDump::BeginDump(const char *pattern)
  111.     int         i;
  112.     OFSTRUCT m_ofs;
  113.     char     m_filename[MAX_PATH];
  114.     
  115.     // search for next file in the sequence of ...01.dbf -> ...99.dbf
  116.     for (i=0; i<100; i++)
  117.     {  
  118.         wsprintf(m_filename, pattern, i);
  119.         
  120.         m_handle = OpenFile(m_filename, &m_ofs, OF_EXIST);  
  121.         if (m_handle==HFILE_ERROR) break;
  122.     }    
  123.     
  124.     m_handle = OpenFile(m_filename, &m_ofs, OF_CREATE | OF_WRITE);
  125.     
  126.     if (m_handle==HFILE_ERROR) 
  127.         return -1;
  128.  
  129.     m_bufpos = 0;
  130.     m_field  = 0;
  131.  
  132.     return i;
  133. }    
  134.  
  135.  
  136. void KDump::EndDump(void)
  137. {
  138. //    Write((char) 0x1A);
  139.  
  140.     Flush();
  141.     
  142.     _lclose(m_handle);
  143.     
  144.     m_handle = HFILE_ERROR;
  145. }
  146.  
  147.