home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / include / atom.cpp < prev    next >
C/C++ Source or Header  |  2000-05-11  |  2KB  |  65 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   : atom.cpp                                                             //
  10. //  Description: KAtomTable 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 <assert.h>
  19.  
  20. #include "Decoder.h"
  21. #include "atom.h"
  22.  
  23.  
  24. KAtomTable::KAtomTable(void)
  25. {
  26.     m_bufpos = 2; // empty name is of offset 0
  27.  
  28.     m_buffer[0] = 0;
  29.     m_buffer[1] = 0;
  30.  
  31.     m_names   = 1;
  32.     m_name[0] = m_buffer;
  33. }
  34.  
  35.  
  36. ATOM KAtomTable::AddAtom(const char *name)
  37. {
  38.     // check for null or empty name, return 0 as index
  39.     if ( (name==NULL) || (name[0]==0) )
  40.         return (ATOM) 0;
  41.  
  42.     int len = strlen(name);
  43.  
  44.     // search for it
  45.     for (int i=1; i<m_names; i++)
  46.         if ( stricmp(name, m_name[i])==0 )
  47.             return (ATOM) i;
  48.  
  49.     if ( m_bufpos+len >= MAX_BUFFER )
  50.     {
  51.         assert(false);
  52.         return (ATOM) 0;
  53.     }
  54.            
  55.     m_name[m_names] = m_buffer + m_bufpos;
  56.     
  57.     strcpy(m_buffer + m_bufpos, name);
  58.     m_bufpos += len;
  59.     m_buffer[m_bufpos++] = 0;
  60.  
  61.     return (ATOM) (m_names++);
  62. }
  63.  
  64.  
  65.