move tcpsvcs from the /apps directory to the /services directory
[reactos.git] / rosapps / packmgr / lib / tree.cpp
index 867a74b..cca821c 100644 (file)
-////////////////////////////////////////////////////////\r
-//\r
-// tree.cpp\r
-// \r
-// Loading of the package tree\r
-//\r
-//\r
-// Maarten Bosma, 09.01.2004\r
-// maarten.paul@bosma.de\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-\r
-#include "package.hpp"\r
-#include "expat.h"\r
-\r
-vector <int> parents;\r
-\r
-int LoadOptions (TREE* tree);\r
-\r
-void tree_end (void* tree, const char* tag);\r
-void tree_start (void* usrdata, const char* tag, const char** arg);\r
-\r
-int PML_XmlDownload (pTree tree, const char* file, void* usrdata, XML_StartElementHandler start, \r
-                                                                                       XML_EndElementHandler end, XML_CharacterDataHandler text=0);\r
-\r
-\r
-// Load the tree\r
-extern "C" int PML_LoadTree (TREE** tree, char* url, PML_AddItem AddItem)\r
-{\r
-       // get the memory\r
-       (*tree) = new TREE;\r
-\r
-       // set every to zero\r
-       memset((*tree), 0, sizeof((*tree)));\r
-       \r
-       // set addItem callback\r
-       (*tree)->addItem = AddItem;\r
-\r
-       LoadOptions(*tree);\r
-\r
-       return PML_XmlDownload (*tree, url, (void*)(*tree), tree_start, tree_end);\r
-}\r
-\r
-// expat callback for start of a "node" tag\r
-void tree_start (void* usrdata, const char* tag, const char** arg)\r
-{\r
-       int i, icon = 0;\r
-       static int id = 1;\r
-\r
-       TREE* tree = (TREE*)usrdata;\r
-\r
-       // ignore if tag is the root tag ("tree")\r
-       if(!strcmp(tag, "tree"))\r
-               return;\r
-\r
-       // set the package memory\r
-       tree->packages.resize(id+1);\r
-       memset(&tree->packages[id], 0, sizeof(tree->packages[id]));\r
-\r
-       tree->packages[id].loaded = FALSE;\r
-       tree->packages[id].icon = FALSE;\r
-       tree->packages[id].none = TRUE;\r
-       tree->packages[id].path = NULL;\r
-       tree->packages[id].name = "\0";\r
-\r
-       // read the arguments\r
-       for (i=0; arg[i]; i+=2) \r
-       {\r
-               if(!strcmp(arg[i], "name"))\r
-               {\r
-                       tree->packages[id].name = new char [strlen(arg[i+1])+1];\r
-                       strcpy(tree->packages[id].name, arg[i+1]);\r
-               }\r
-\r
-               if(!strcmp(arg[i], "icon"))\r
-               {\r
-                       icon = atoi(arg[i+1]);\r
-                       tree->packages[id].icon = TRUE;\r
-               }\r
-\r
-               if(!strcmp(arg[i], "file"))\r
-               {\r
-                       tree->packages[id].path = new char [strlen(arg[i+1])+1];\r
-                       strcpy(tree->packages[id].path, arg[i+1]);\r
-\r
-                       if(strcmp(tag, "bin"))\r
-                               tree->packages[id].inst = TRUE;\r
-\r
-                       if(strcmp(tag, "src"))\r
-                               tree->packages[id].src_inst = TRUE;\r
-               }\r
-       }\r
-\r
-       if(tree->packages[id].name[0] == '\0') return;\r
-\r
-       // add it\r
-       if(!parents.size())\r
-       {\r
-               if(tree->addItem)\r
-                       tree->addItem(id, tree->packages[id].name, 0, icon);\r
-       }\r
-\r
-       // do some manipulation at the parent\r
-       else\r
-       {\r
-          if(tree->addItem)\r
-              tree->addItem(id, tree->packages[id].name, parents.back(), icon);\r
-\r
-          // list as child in the parent node\r
-          tree->packages[parents.back()].children.push_back(id);\r
-\r
-          // this is for the buttons\r
-          tree->packages[parents.back()].inst = tree->packages[parents.back()].inst || tree->packages[id].inst;\r
-          tree->packages[parents.back()].src_inst = tree->packages[parents.back()].src_inst || tree->packages[id].src_inst;\r
-       }\r
-\r
-       parents.push_back(id++);\r
-}\r
-\r
-// expat callback for end of a "node" tag\r
-void tree_end (void* tree, const char* tag)\r
-{\r
-       // delete last item\r
-       parents.pop_back();\r
-}\r
-\r
+////////////////////////////////////////////////////////
+//
+// tree.cpp
+// 
+// Loading of the package tree
+//
+//
+// Maarten Bosma, 09.01.2004
+// maarten.paul@bosma.de
+//
+////////////////////////////////////////////////////////////////////
+
+#include "package.hpp"
+#include "expat.h"
+
+vector <int> parents;
+
+int LoadOptions (TREE* tree);
+
+void tree_end (void* tree, const char* tag);
+void tree_start (void* usrdata, const char* tag, const char** arg);
+
+int PML_XmlDownload (pTree tree, const char* file, void* usrdata, XML_StartElementHandler start, 
+                                                                                       XML_EndElementHandler end, XML_CharacterDataHandler text=0);
+
+
+// Load the tree
+extern "C" int PML_LoadTree (TREE** tree, char* url, PML_AddItem AddItem)
+{
+       // get the memory
+       (*tree) = new TREE;
+
+       // set every to zero
+       memset((*tree), 0, sizeof((*tree)));
+       
+       // set addItem callback
+       (*tree)->addItem = AddItem;
+
+       LoadOptions(*tree);
+
+       return PML_XmlDownload (*tree, url, (void*)(*tree), tree_start, tree_end);
+}
+
+// expat callback for start of a "node" tag
+void tree_start (void* usrdata, const char* tag, const char** arg)
+{
+       int i, icon = 0;
+       static int id = 1;
+
+       TREE* tree = (TREE*)usrdata;
+
+       // ignore if tag is the root tag ("tree")
+       if(!strcmp(tag, "tree"))
+               return;
+
+       // set the package memory
+       tree->packages.resize(id+1);
+       memset(&tree->packages[id], 0, sizeof(tree->packages[id]));
+
+       tree->packages[id].loaded = FALSE;
+       tree->packages[id].icon = FALSE;
+       tree->packages[id].none = TRUE;
+       tree->packages[id].path = NULL;
+       tree->packages[id].name = "\0";
+
+       // read the arguments
+       for (i=0; arg[i]; i+=2) 
+       {
+               if(!strcmp(arg[i], "name"))
+               {
+                       tree->packages[id].name = new char [strlen(arg[i+1])+1];
+                       strcpy(tree->packages[id].name, arg[i+1]);
+               }
+
+               if(!strcmp(arg[i], "icon"))
+               {
+                       icon = atoi(arg[i+1]);
+                       tree->packages[id].icon = TRUE;
+               }
+
+               if(!strcmp(arg[i], "file"))
+               {
+                       tree->packages[id].path = new char [strlen(arg[i+1])+1];
+                       strcpy(tree->packages[id].path, arg[i+1]);
+
+                       if(strcmp(tag, "bin"))
+                               tree->packages[id].inst = TRUE;
+
+                       if(strcmp(tag, "src"))
+                               tree->packages[id].src_inst = TRUE;
+               }
+       }
+
+       if(tree->packages[id].name[0] == '\0') return;
+
+       // add it
+       if(!parents.size())
+       {
+               if(tree->addItem)
+                       tree->addItem(id, tree->packages[id].name, 0, icon);
+       }
+
+       // do some manipulation at the parent
+       else
+       {
+          if(tree->addItem)
+              tree->addItem(id, tree->packages[id].name, parents.back(), icon);
+
+          // list as child in the parent node
+          tree->packages[parents.back()].children.push_back(id);
+
+          // this is for the buttons
+          tree->packages[parents.back()].inst = tree->packages[parents.back()].inst || tree->packages[id].inst;
+          tree->packages[parents.back()].src_inst = tree->packages[parents.back()].src_inst || tree->packages[id].src_inst;
+       }
+
+       parents.push_back(id++);
+}
+
+// expat callback for end of a "node" tag
+void tree_end (void* tree, const char* tag)
+{
+       // delete last item
+       parents.pop_back();
+}
+