pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] rev 2217 - trunk/src


From: Ingo Ruhnke
Subject: [Pingus-CVS] rev 2217 - trunk/src
Date: Tue, 06 Apr 2004 05:08:44 +0200

Author: grumbel
Date: 2004-04-06 05:08:44 +0200 (Tue, 06 Apr 2004)
New Revision: 2217

Modified:
   trunk/src/xml_eval.cxx
   trunk/src/xml_eval.hxx
Log:
- some cleanup

Modified: trunk/src/xml_eval.cxx
===================================================================
--- trunk/src/xml_eval.cxx      2004-04-06 01:47:11 UTC (rev 2216)
+++ trunk/src/xml_eval.cxx      2004-04-06 03:08:44 UTC (rev 2217)
@@ -27,6 +27,27 @@
 std::map<std::string, int> variables;
 std::map<std::string, CL_DomNode> functions;
 
+int lookup(const std::string& name)
+{
+  int value = 0;
+  
+  if (from_string(name, value))
+    {
+      return value;
+    }
+  else
+    {
+      std::map<std::string, int>::iterator i = variables.find(name);
+
+      if (i != variables.end())
+        {
+          return i->second;
+        }
+      std::cout << "Error: No variable named: '" << name << "'" << std::endl;
+      return 0;
+    }
+}
+
 void eval_block(CL_DomNode child)
 {
   while(!child.is_null())
@@ -46,14 +67,10 @@
     {
       if (cur.get_node_name() == "for")
         {         
-          std::string var   = el.get_attribute("name");
-          int start = 0;
-          int end   = 0;
+          std::string var = el.get_attribute("name");
 
-          from_string(el.get_attribute("start"), start);
-          from_string(el.get_attribute("end"), end);
-
-          for(int i = start; i <= end; ++i)
+          for(int i = lookup(el.get_attribute("start")); 
+              i <= lookup(el.get_attribute("end")); ++i)
             {
               variables[var] = i;
               eval_block(cur.get_first_child());
@@ -65,7 +82,7 @@
         }
       else if (cur.get_node_name() == "printvar")
         {
-          std::cout << variables[el.get_attribute("var")] << std::flush;       
   
+          std::cout << lookup(el.get_attribute("var")) << std::flush;          
         }
       else if (cur.get_node_name() == "print")
         {
@@ -79,49 +96,40 @@
         {
           eval_block(cur.get_first_child());
         }
-      else if (cur.get_node_name() == "defvar")
+      else if (cur.get_node_name() == "set")
         {
-          int value = 0;
-          from_string(el.get_attribute("value"), value);
-          variables[el.get_attribute("name")] = value;
+          variables[el.get_attribute("name")] = 
lookup(el.get_attribute("var"));
         }
-      else if (cur.get_node_name() == "defun")
+      else if (cur.get_node_name() == "function")
         {
           functions[el.get_attribute("name")] = el.get_first_child();
         }
-      else if (cur.get_node_name() == "defvarvar")
-        {
-          variables[el.get_attribute("name")] = 
variables[el.get_attribute("var")];
-        }
       else if (cur.get_node_name() == "modulo")
         {
-          int value = 0;
-          from_string(el.get_attribute("value"), value);
-          variables[el.get_attribute("var")] = 
variables[el.get_attribute("var")] % value;
+          variables[el.get_attribute("name")] 
+            = lookup(el.get_attribute("name")) % 
lookup(el.get_attribute("var"));
         }
       else if (cur.get_node_name() == "add")
         {
-          int value = 0;
-          from_string(el.get_attribute("value"), value);
-          variables[el.get_attribute("var")] = 
variables[el.get_attribute("var")] + value;
+          variables[el.get_attribute("name")] 
+            = lookup(el.get_attribute("name")) + 
lookup(el.get_attribute("var"));
         }
       else if (cur.get_node_name() == "if-non-zero")
         {
-          int var = variables[el.get_attribute("var")];
+          int var = lookup(el.get_attribute("var"));
           if (var != 0)
             eval_block(cur.get_first_child());
         }
       else if (cur.get_node_name() == "if-zero")
         {
-          int var = variables[el.get_attribute("var")];
+          int var = lookup(el.get_attribute("var"));
           if (var == 0)
             eval_block(cur.get_first_child());
         }
       else if (cur.get_node_name() == "mult")
         {
-          int value = 0;
-          from_string(el.get_attribute("value"), value);
-          variables[el.get_attribute("var")] = 
variables[el.get_attribute("var")] * value;
+          variables[el.get_attribute("name")]
+            = lookup(el.get_attribute("name")) * 
lookup(el.get_attribute("val"));
         }
       else if (cur.get_node_name() == "funcall")
         {
@@ -145,8 +153,13 @@
   try {
   CL_SetupCore::init();
 
-  CL_DomDocument dom(new CL_InputSource_File("test.xml"), true);
+  std::string filename = "test.xml";
 
+  if (argc > 1)
+    filename = argv[1];
+
+  CL_DomDocument dom(new CL_InputSource_File(filename), true);
+
   CL_DomNode cur = dom.get_document_element();
   
   XMLEval::eval(cur);

Modified: trunk/src/xml_eval.hxx
===================================================================
--- trunk/src/xml_eval.hxx      2004-04-06 01:47:11 UTC (rev 2216)
+++ trunk/src/xml_eval.hxx      2004-04-06 03:08:44 UTC (rev 2217)
@@ -24,6 +24,7 @@
 
 void eval(const CL_DomNode& cur);
 void eval_block(CL_DomNode cur);
+int  lookup(const std::string& name);
 
 } // namespace XMLEval
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]