-////////////////////////////////////////////////////////\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
-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 (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
- return PML_XmlDownload (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
+////////////////////////////////////////////////////////
+//
+// 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();
+}
+