- changed name of package library to package.dll
[reactos.git] / rosapps / packmgr / lib / main.cpp
index f18d292..5d18cf6 100644 (file)
-////////////////////////////////////////////////////////\r
-//\r
-// main.cpp\r
-// \r
-// Doit stuff and\r
-// everything that fits nowhere else.\r
-//\r
-//\r
-// Maarten Bosma, 09.01.2004\r
-// maarten.paul@bosma.de\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-\r
-#include <windows.h>\r
-#include "package.hpp"\r
-#include "log.h"\r
-#include "script.h"\r
-\r
-HANDLE hThread = NULL;\r
-BOOL thread_abort = FALSE;\r
-\r
-char* PML_Download (pTree, const char* url, const char* server = "tree",  const char* filename = NULL);\r
-\r
-\r
-// Abort other thread\r
-extern "C" void PML_Abort (void)\r
-{\r
-       thread_abort = TRUE;\r
-\r
-       if(hThread)\r
-               WaitForSingleObject(hThread, INFINITE);\r
-}\r
-\r
-// Callback function of the "doit"-thread\r
-DWORD WINAPI DoitThread (void* lpParam) \r
-{ \r
-       UINT i;\r
-       int ret = ERR_OK;\r
-       TREE* tree = (TREE*)lpParam;\r
-       vector<SCRIPT*> scripts;\r
-                       \r
-       /* Load the scripts */\r
-\r
-       tree->setStatus(0, 0, L"Downloading Install instructions ...");\r
-       \r
-       for(i=0; i<tree->todo.size(); i++)\r
-       {\r
-               SCRIPT* script;\r
-\r
-               char* path = PML_Download(tree, tree->todo[i]);\r
-\r
-               if(RPS_Load(&script, path) == ERR_OK)\r
-                       scripts.push_back(script);\r
-               else\r
-                       ret = ERR_PACK;\r
-       }\r
-\r
-       /* Preinstall */\r
-\r
-       Log("*  enter preinstall");\r
-\r
-       tree->setStatus(250, 0, L"Preinstall");\r
-       \r
-       for(i=0; i<scripts.size(); i++)\r
-       {\r
-               if(RPS_Execute(scripts[i], "preinstall") != ERR_OK)\r
-                       ret = ERR_PACK;\r
-       }\r
-\r
-       /* Install */\r
-\r
-       Log("*  enter install");\r
-\r
-       tree->setStatus(500, 0, L"Install");\r
-\r
-       for(i=0; i<scripts.size(); i++)\r
-       {\r
-               if(RPS_Execute(scripts[i], "main") != ERR_OK)\r
-                       ret = ERR_PACK;\r
-       }\r
-\r
-       /* Postinstall */\r
-\r
-       Log("*  enter postinstall");\r
-\r
-       tree->setStatus(750, 0, L"Postinstall");\r
-\r
-       for(i=0; i<scripts.size(); i++)\r
-       {\r
-               if(RPS_Execute(scripts[i], "after") != ERR_OK)\r
-                       ret = ERR_PACK;\r
-       }\r
-\r
-       /* Finish */\r
-\r
-       for(i=0; i<tree->todo.size(); i++)\r
-               RPS_Clear(scripts[i]);\r
-\r
-       // clear the todo list\r
-       tree->todo.clear();\r
-\r
-       // set all actions to none\r
-       for(i=0; i<tree->packages.size(); i++)\r
-               PML_SetAction (tree, i, 0, tree->setIcon, NULL);\r
-\r
-       tree->setStatus(1000, ret, NULL);\r
-\r
-    return 1; \r
-} \r
-\r
-// Do the actions the user wants us to do\r
-extern "C" int PML_DoIt (TREE* tree, PML_SetStatus SetStatus, PML_Ask Ask)\r
-{ \r
-    DWORD dummy; \r
-       tree->setStatus = SetStatus;\r
-\r
-       if(!tree->todo.size())\r
-               return ERR_NOTODO;\r
-\r
-       //ask\r
-       WCHAR buffer [2000];\r
-       wsprintf(buffer, PML_TransError(ERR_READY), tree->todo.size());\r
-\r
-       if(!Ask(buffer))\r
-               return ERR_GENERIC;\r
-       \r
-\r
-       hThread = CreateThread(NULL, 0, DoitThread, tree, 0, &dummy);\r
-\r
-       if(!hThread)\r
-               return ERR_GENERIC;\r
-       \r
-       LogAdd("\n");\r
-       \r
-       return ERR_OK;\r
-}\r
-\r
-// Translates Errorcode into human language\r
-extern "C" WCHAR* PML_TransError (int code)\r
-{\r
-       // I know we, got a memory leak here\r
-       static WCHAR string [256];\r
-\r
-    if(!LoadString(GetModuleHandle(L"package"), code, string, 256))\r
-               return PML_TransError(ERR_GENERIC);\r
-\r
-       return string;\r
-}\r
-\r
-// Free alloced memory\r
-extern "C" void PML_CloseTree (TREE* tree)\r
-{\r
-       UINT i;\r
-\r
-       LogAdd ("\n");\r
-       Log("*  free alloced memory");\r
-       Log("*  package manager will exit now. Bye!");\r
-\r
-       for(i=0; i<tree->packages.size(); i++)\r
-       {\r
-               if(tree->packages[i].path)\r
-                       delete tree->packages[i].path;\r
-\r
-               if(tree->packages[i].name)\r
-                       delete tree->packages[i].name;\r
-\r
-               if(tree->packages[i].description)\r
-                       delete tree->packages[i].description;\r
-\r
-               tree->packages.clear();\r
-\r
-               if(tree->packages[i].files[0])\r
-                       delete tree->packages[i].files[0];\r
-\r
-               if(tree->packages[i].files[1])\r
-                       delete tree->packages[i].files[1];\r
-\r
-               if(tree->packages[i].files[2])\r
-                       delete tree->packages[i].files[2];\r
-\r
-               if(tree->packages[i].files[3])\r
-                       delete tree->packages[i].files[3];\r
-       }\r
-\r
-       tree->descriptionPath.clear();\r
-       tree->todo.clear();\r
-       tree->packages.clear();\r
-\r
-       if(tree)\r
-               delete tree;\r
-}\r
-\r
+////////////////////////////////////////////////////////
+//
+// main.cpp
+// 
+// Doit stuff and
+// everything that fits nowhere else.
+//
+//
+// Maarten Bosma, 09.01.2004
+// maarten.paul@bosma.de
+//
+////////////////////////////////////////////////////////////////////
+
+#include <windows.h>
+#include "package.hpp"
+#include "log.h"
+#include "script.h"
+
+HANDLE hThread = NULL;
+BOOL thread_abort = FALSE;
+
+char* PML_Download (pTree, const char* url, const char* server = "tree",  const char* filename = NULL);
+
+
+// Abort other thread
+extern "C" void PML_Abort (void)
+{
+       thread_abort = TRUE;
+
+       if(hThread)
+               WaitForSingleObject(hThread, INFINITE);
+}
+
+// Callback function of the "doit"-thread
+DWORD WINAPI DoitThread (void* lpParam) 
+{ 
+       UINT i;
+       int ret = ERR_OK;
+       TREE* tree = (TREE*)lpParam;
+       vector<SCRIPT*> scripts;
+                       
+       /* Load the scripts */
+
+       tree->setStatus(0, 0, L"Downloading Install instructions ...");
+       
+       for(i=0; i<tree->todo.size(); i++)
+       {
+               SCRIPT* script;
+
+               char* path = PML_Download(tree, tree->todo[i]);
+
+               if(RPS_Load(&script, path) == ERR_OK)
+                       scripts.push_back(script);
+               else
+                       ret = ERR_PACK;
+       }
+
+       /* Preinstall */
+
+       Log("*  enter preinstall");
+
+       tree->setStatus(250, 0, L"Preinstall");
+       
+       for(i=0; i<scripts.size(); i++)
+       {
+               if(RPS_Execute(scripts[i], "preinstall") != ERR_OK)
+                       ret = ERR_PACK;
+       }
+
+       /* Install */
+
+       Log("*  enter install");
+
+       tree->setStatus(500, 0, L"Install");
+
+       for(i=0; i<scripts.size(); i++)
+       {
+               if(RPS_Execute(scripts[i], "main") != ERR_OK)
+                       ret = ERR_PACK;
+       }
+
+       /* Postinstall */
+
+       Log("*  enter postinstall");
+
+       tree->setStatus(750, 0, L"Postinstall");
+
+       for(i=0; i<scripts.size(); i++)
+       {
+               if(RPS_Execute(scripts[i], "after") != ERR_OK)
+                       ret = ERR_PACK;
+       }
+
+       /* Finish */
+
+       for(i=0; i<tree->todo.size(); i++)
+               RPS_Clear(scripts[i]);
+
+       // clear the todo list
+       tree->todo.clear();
+
+       // set all actions to none
+       for(i=0; i<tree->packages.size(); i++)
+               PML_SetAction (tree, i, 0, tree->setIcon, NULL);
+
+       tree->setStatus(1000, ret, NULL);
+
+    return 1; 
+} 
+
+// Do the actions the user wants us to do
+extern "C" int PML_DoIt (TREE* tree, PML_SetStatus SetStatus, PML_Ask Ask)
+{ 
+    DWORD dummy; 
+       tree->setStatus = SetStatus;
+
+       if(!tree->todo.size())
+               return ERR_NOTODO;
+
+       //ask
+       WCHAR buffer [2000];
+       WCHAR errbuf [2000];
+
+       wsprintf(buffer, PML_TransError(ERR_READY, (WCHAR*)errbuf, sizeof(errbuf)/sizeof(WCHAR)), tree->todo.size());
+
+       if(!Ask(buffer))
+               return ERR_GENERIC;
+       
+
+       hThread = CreateThread(NULL, 0, DoitThread, tree, 0, &dummy);
+
+       if(!hThread)
+               return ERR_GENERIC;
+       
+       LogAdd("\n");
+       
+       return ERR_OK;
+}
+
+// Translates Errorcode into human language
+extern "C" WCHAR* PML_TransError (int code, WCHAR *string, INT maxchar)
+{
+
+       if(!LoadString(GetModuleHandle(L"package"), code, string, maxchar))
+               return PML_TransError(ERR_GENERIC, string, maxchar);
+
+       return string;
+}
+
+// Free alloced memory
+extern "C" void PML_CloseTree (TREE* tree)
+{
+       UINT i;
+
+       LogAdd ("\n");
+       Log("*  free alloced memory");
+       Log("*  package manager will exit now. Bye!");
+
+       for(i=0; i<tree->packages.size(); i++)
+       {
+               if(tree->packages[i].path)
+                       delete tree->packages[i].path;
+
+               if(tree->packages[i].name)
+                       delete tree->packages[i].name;
+
+               if(tree->packages[i].description)
+                       delete tree->packages[i].description;
+
+               tree->packages.clear();
+
+               if(tree->packages[i].files[0])
+                       delete tree->packages[i].files[0];
+
+               if(tree->packages[i].files[1])
+                       delete tree->packages[i].files[1];
+
+               if(tree->packages[i].files[2])
+                       delete tree->packages[i].files[2];
+
+               if(tree->packages[i].files[3])
+                       delete tree->packages[i].files[3];
+       }
+
+       tree->descriptionPath.clear();
+       tree->todo.clear();
+       tree->packages.clear();
+
+       if(tree)
+               delete tree;
+}
+