00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036   
00037   template<typename _CharT>
00038      messages<_CharT>::messages(size_t __refs)
00039      : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), 
00040      _M_name_messages(_S_get_c_name())
00041      { }
00042 
00043   template<typename _CharT>
00044      messages<_CharT>::messages(__c_locale __cloc, const char* __s, 
00045                 size_t __refs) 
00046      : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
00047      _M_name_messages(__s)
00048      {
00049        char* __tmp = new char[std::strlen(__s) + 1];
00050        std::strcpy(__tmp, __s);
00051        _M_name_messages = __tmp;
00052      }
00053 
00054   template<typename _CharT>
00055     typename messages<_CharT>::catalog 
00056     messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
00057                const char* __dir) const
00058     { 
00059       bindtextdomain(__s.c_str(), __dir);
00060       return this->do_open(__s, __loc); 
00061     }
00062 
00063   
00064   template<typename _CharT>
00065     messages<_CharT>::~messages()
00066     { 
00067       if (_M_name_messages != _S_get_c_name())
00068     delete [] _M_name_messages;
00069       _S_destroy_c_locale(_M_c_locale_messages); 
00070     }
00071 
00072   template<typename _CharT>
00073     typename messages<_CharT>::catalog 
00074     messages<_CharT>::do_open(const basic_string<char>& __s, 
00075                   const locale&) const
00076     { 
00077       
00078       
00079       textdomain(__s.c_str());
00080       return 0;
00081     }
00082 
00083   template<typename _CharT>
00084     void    
00085     messages<_CharT>::do_close(catalog) const 
00086     { }
00087 
00088    
00089    template<typename _CharT>
00090      messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
00091      : messages<_CharT>(__refs) 
00092      { 
00093        if (this->_M_name_messages != locale::facet::_S_get_c_name())
00094      delete [] this->_M_name_messages;
00095        char* __tmp = new char[std::strlen(__s) + 1];
00096        std::strcpy(__tmp, __s);
00097        this->_M_name_messages = __tmp;
00098 
00099        if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
00100      {
00101        this->_S_destroy_c_locale(this->_M_c_locale_messages);
00102        this->_S_create_c_locale(this->_M_c_locale_messages, __s); 
00103      }
00104      }