summaryrefslogtreecommitdiff
path: root/ychat-0.7.7.0/src/conf
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2013-04-06 13:14:41 +0200
committerPaul Buetow <paul@buetow.org>2013-04-06 13:14:41 +0200
commit9cd3ccffd5372dfde3af478e3f832f18db4be3f1 (patch)
tree631c295a4a4a16b57502b847626763a279bf6df7 /ychat-0.7.7.0/src/conf
parent13aaf70af703748fe096e0664c305cd202637ad2 (diff)
tagging tags
Diffstat (limited to 'ychat-0.7.7.0/src/conf')
-rw-r--r--ychat-0.7.7.0/src/conf/CVS/Entries3
-rw-r--r--ychat-0.7.7.0/src/conf/CVS/Repository1
-rw-r--r--ychat-0.7.7.0/src/conf/CVS/Root1
-rwxr-xr-xychat-0.7.7.0/src/conf/conf.cpp167
-rwxr-xr-xychat-0.7.7.0/src/conf/conf.h28
5 files changed, 200 insertions, 0 deletions
diff --git a/ychat-0.7.7.0/src/conf/CVS/Entries b/ychat-0.7.7.0/src/conf/CVS/Entries
new file mode 100644
index 0000000..f88663f
--- /dev/null
+++ b/ychat-0.7.7.0/src/conf/CVS/Entries
@@ -0,0 +1,3 @@
+/conf.cpp/1.13/Mon Feb 21 01:55:49 2005//
+/conf.h/1.10/Mon Feb 21 01:55:49 2005//
+D
diff --git a/ychat-0.7.7.0/src/conf/CVS/Repository b/ychat-0.7.7.0/src/conf/CVS/Repository
new file mode 100644
index 0000000..28454e5
--- /dev/null
+++ b/ychat-0.7.7.0/src/conf/CVS/Repository
@@ -0,0 +1 @@
+ychat/src/conf
diff --git a/ychat-0.7.7.0/src/conf/CVS/Root b/ychat-0.7.7.0/src/conf/CVS/Root
new file mode 100644
index 0000000..745de68
--- /dev/null
+++ b/ychat-0.7.7.0/src/conf/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot
diff --git a/ychat-0.7.7.0/src/conf/conf.cpp b/ychat-0.7.7.0/src/conf/conf.cpp
new file mode 100755
index 0000000..f053d85
--- /dev/null
+++ b/ychat-0.7.7.0/src/conf/conf.cpp
@@ -0,0 +1,167 @@
+#ifndef CONF_CPP
+#define CONF_CPP
+
+#include <fstream>
+#include "conf.h"
+
+using namespace std;
+
+conf::conf( string s_conf, map<string,string>* p_start_params ) : name::name( s_conf )
+{
+ string s_check[] = {
+ get_name(),
+ string(getenv("HOME"))+string("/.ychat/") + get_name(),
+ string("./etc/") + get_name(),
+ string("/etc/") + get_name(),
+ string(PREFIX+string("etc/")+get_name()) };
+
+ string s_config;
+
+ for ( int i = 0; i < 4; ++i )
+ {
+ cout << "Checking for " << s_check[i];
+ ifstream if_check( s_check[i].c_str() );
+ if( if_check )
+ {
+ s_config = s_check[i];
+ if_check.close();
+ cout << "... ok!" << endl;
+ break;
+ }
+ cout << "... not ok!" << endl;
+ }
+
+ if ( s_config.empty() )
+ {
+ cout << CFILEFA << endl;
+ exit(1);
+ }
+ else
+ {
+ cout << CFILEOK << "..." << endl;
+ }
+
+ p_xml = new TiXmlDocument(s_config.c_str());
+ TiXmlBase::SetCondenseWhiteSpace( false );
+
+ if ( !p_xml->LoadFile() )
+ {
+ cout << XMLER1 << endl;
+ exit(1);
+ }
+
+ vector<string> vec_string;
+ parse_xml(p_xml, &vec_string);
+
+ shashmap<string>::add_elem_insecure(tool::ychat_version(), "ychat.version");
+
+ // Overrides ychat.conf values with command line options (ychat -o key1 value1 -o key2 value2 ...)
+ map<string,string>::iterator iter;
+ for ( iter = p_start_params->begin(); iter != p_start_params->end(); iter++ )
+ {
+ shashmap<string>::del_elem_insecure(iter->first);
+ shashmap<string>::add_elem_insecure(iter->second, iter->first);
+ }
+
+ delete p_xml;
+}
+
+void
+conf::parse_xml(TiXmlNode* p_node, vector<string>* p_vec)
+{
+ if ( p_node->NoChildren() )
+ return;
+
+ for ( TiXmlNode* p_child = p_node->FirstChild(); p_child; p_child = p_child->NextSibling() )
+ {
+ //cout << p_vec->size() << ": (Value:" << p_child->Value() << ") (Type:" << p_child->Type() << ")" << endl;
+
+ if ( strcmp(p_child->Value(),"category") == 0 )
+ {
+ p_vec->push_back(p_child->ToElement()->Attribute("name"));
+ parse_xml(p_child, p_vec);
+ p_vec->pop_back();
+ }
+ else if ( strcmp(p_child->Value(),"option") == 0 )
+ {
+ string s_option_name = "";
+
+ for ( vector<string>::iterator iter = p_vec->
+ begin();
+ iter != p_vec->end();
+ ++iter )
+ s_option_name.append(*iter + ".");
+
+ TiXmlElement* p_element = p_child->ToElement();
+ exit_if_xml_error();
+
+ s_option_name.append(p_element->Attribute("name"));
+
+#ifdef VERBOSE
+ cout << XMLREAD << s_option_name;
+#endif
+
+ TiXmlNode *p_node_value = p_element->FirstChild("value");
+ TiXmlNode *p_node_descr = p_element->FirstChild("descr");
+
+ TiXmlText* p_text_value = NULL;
+ TiXmlText* p_text_descr = NULL;
+
+ if ( p_node_value && p_node_value->FirstChild()
+ )
+ p_text_value = p_node_value->FirstChild()->ToText();
+
+ if ( p_node_descr && p_node_descr->FirstChild()
+ )
+ p_text_descr = p_node_descr->FirstChild()->ToText();
+
+ if ( !p_text_value )
+ continue;
+
+#ifdef VERBOSE
+ cout << " := " << p_text_value->Value() << endl;
+#endif
+
+ shashmap<string>::add_elem_insecure(p_text_value->Value(), s_option_name);
+
+ if ( !p_text_descr )
+ continue;
+
+ s_option_name.append(".descr");
+#ifdef VERBOSE
+ cout << XMLREAD << s_option_name << endl;
+#endif
+ shashmap<string>::add_elem_insecure(p_text_descr->Value(), s_option_name);
+ }
+ }
+
+ exit_if_xml_error()
+ ;
+}
+
+conf::~conf()
+{
+ delete p_xml;
+}
+
+void
+conf::exit_if_xml_error() const
+{
+ if ( p_xml->Error() )
+ {
+ cout << XMLERR << p_xml->ErrorDesc() << endl;
+ exit(1);
+ }
+}
+
+//<<*
+string
+conf::colored_error_msg(string s_key)
+{
+ return "<font color=\"#"
+ + shashmap<string>::get_elem("chat.html.errorcolor")
+ + "\">" + shashmap<string>::get_elem(s_key) + "</font><br>\n";
+}
+//*>>
+
+#endif
diff --git a/ychat-0.7.7.0/src/conf/conf.h b/ychat-0.7.7.0/src/conf/conf.h
new file mode 100755
index 0000000..20aa91c
--- /dev/null
+++ b/ychat-0.7.7.0/src/conf/conf.h
@@ -0,0 +1,28 @@
+#ifndef CONF_H
+#define CONF_H
+
+class conf; // Predefine for nmap.tmpl
+
+#include <map>
+#include "../incl.h"
+#include "../maps/shashmap.h"
+#include "../name.h"
+#include "../contrib/xml/tinyxml.h"
+
+using namespace std;
+
+class conf : public shashmap<string>, name
+{
+private:
+ TiXmlDocument* p_xml;
+ void exit_if_xml_error() const;
+ void parse_xml( TiXmlNode* p_node, vector<string>* p_vec);
+
+public:
+ conf(string s_conf, map<string,string>* p_start_params);
+ ~conf();
+
+ string colored_error_msg( string s_key ); //<<
+};
+
+#endif