From c6237266d76ae9740c58d904e52d60a37d45c60f Mon Sep 17 00:00:00 2001 From: Maarten Bosma Date: Fri, 8 Apr 2005 19:09:20 +0000 Subject: [PATCH] PackageManager Created the commandline Interface Deleated subcategries svn path=/trunk/; revision=14553 --- rosapps/packmgr/cmd-line/main.cpp | 185 +++++++++++++++++++++++++ rosapps/packmgr/cmd-line/main.h | 19 +++ rosapps/packmgr/cmd-line/makefile | 24 ++++ rosapps/packmgr/cmd-line/ros-get.rc | 8 ++ rosapps/packmgr/gui/main.cpp | 8 +- rosapps/packmgr/lib/package.cpp | 63 +++++++-- rosapps/packmgr/lib/package.def | 2 + rosapps/packmgr/lib/package.hpp | 4 +- rosapps/packmgr/lib/tree.cpp | 22 ++- rosapps/packmgr/tree/tree.xml | 72 ++-------- rosapps/packmgr/tree/tree_withsubs.xml | 69 +++++++++ 11 files changed, 390 insertions(+), 86 deletions(-) create mode 100644 rosapps/packmgr/cmd-line/main.cpp create mode 100644 rosapps/packmgr/cmd-line/main.h create mode 100644 rosapps/packmgr/cmd-line/makefile create mode 100644 rosapps/packmgr/cmd-line/ros-get.rc create mode 100644 rosapps/packmgr/tree/tree_withsubs.xml diff --git a/rosapps/packmgr/cmd-line/main.cpp b/rosapps/packmgr/cmd-line/main.cpp new file mode 100644 index 00000000000..e37a4edf4f7 --- /dev/null +++ b/rosapps/packmgr/cmd-line/main.cpp @@ -0,0 +1,185 @@ +//////////////////////////////////////////////////////// +// +// main.cpp +// +// Implementation of a Commandlne Interface +// for the ReactOs Package Manager +// +// Maarten Bosma, 09.01.2004 +// maarten.paul@bosma.de +// +//////////////////////////////////////////////////////////////////// + +#include "main.h" + + +int main (int argc, char **argv) +{ + cout << "ReactOs PackageManager " << PACKMGR_VERSION_MAJOR << "." << PACKMGR_VERSION_MINOR << "." << PACKMGR_VERSION_PATCH_LEVEL << " Commandline Interface \n\n"; + + int i; + + if(argc<2) + return Help(); + + for (i=1; i + + +vector cmdline; +bool done = false; + +int Help (void); +int Install (void); +int Show (void); + +int SetStatus (int status1, int status2, WCHAR* text); diff --git a/rosapps/packmgr/cmd-line/makefile b/rosapps/packmgr/cmd-line/makefile new file mode 100644 index 00000000000..5ea81ea4819 --- /dev/null +++ b/rosapps/packmgr/cmd-line/makefile @@ -0,0 +1,24 @@ + +TARGET_NAME = ros-get +TARGET_TYPE = program +TARGET_APPTYPE = console +PATH_TO_TOP = ../../../reactos + +TARGET_SDKLIBS = package.a + +TARGET_GCCLIBS = stdc++ uuid + +TARGET_OBJECTS = main.o + +TARGET_CFLAGS = \ + -D__USE_W32API -DWIN32 -D_ROS_ \ + -D_WIN32_IE=0x0501 -D_WIN32_WINNT=0x0501 \ + -DUNICODE -Wall -I../lib + +TARGET_CPPFLAGS = $(TARGET_CFLAGS) + +TARGET_RCFLAGS = -D__USE_W32API -DNDEBUG -DWIN32 -D_ROS_ -D__WINDRES__ -DUNICODE + +include $(PATH_TO_TOP)/rules.mak +include $(TOOLS_PATH)/helper.mk +include $(TOOLS_PATH)/depend.mk diff --git a/rosapps/packmgr/cmd-line/ros-get.rc b/rosapps/packmgr/cmd-line/ros-get.rc new file mode 100644 index 00000000000..45f9cfb6f52 --- /dev/null +++ b/rosapps/packmgr/cmd-line/ros-get.rc @@ -0,0 +1,8 @@ + +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Package Manager - Cmdline Interface\0" +#define REACTOS_STR_INTERNAL_NAME "ros-get\0" +#define REACTOS_STR_ORIGINAL_FILENAME "ros-get.exe\0" + +#include + +/* EOF */ diff --git a/rosapps/packmgr/gui/main.cpp b/rosapps/packmgr/gui/main.cpp index 893cb7a026a..0fd151a4c06 100644 --- a/rosapps/packmgr/gui/main.cpp +++ b/rosapps/packmgr/gui/main.cpp @@ -204,12 +204,15 @@ int SetButton (DWORD id, BOOL state) SetMenuItemInfo(hPopup, id, FALSE, &mi); - return 1; + return 0; } // Set the text of the text box int SetText (const char* text) { + if(!text) + return 1; + int i = 0; string source = text; @@ -257,7 +260,8 @@ LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) if(((LPNMHDR)lParam)->code == TVN_SELCHANGED) { selected = ((LPNMTREEVIEW)lParam)->itemNew.lParam; - PML_LoadPackage (tree, selected, SetButton, SetText); + PML_LoadPackage (tree, selected, SetButton); + SetText(PML_GetDescription (tree, selected)); } else if ((int)(((LPNMHDR)lParam)->code) == NM_RCLICK) // <= ahhh LISP diff --git a/rosapps/packmgr/lib/package.cpp b/rosapps/packmgr/lib/package.cpp index 469cb4d95af..9608168ec04 100644 --- a/rosapps/packmgr/lib/package.cpp +++ b/rosapps/packmgr/lib/package.cpp @@ -84,16 +84,19 @@ void pack_text (void* usrdata, const char* data, int len) // The user clicks on a package -extern "C" int PML_LoadPackage (TREE* tree, int id, PML_SetButton SetButton, PML_SetText SetText) +extern "C" int PML_LoadPackage (TREE* tree, int id, PML_SetButton SetButton) { PACKAGE* pack = &tree->packages[id]; tree->setButton = SetButton; - SetButton(1, pack->action); - SetButton(2, pack->inst); // && pack->action != 0 - SetButton(3, pack->src_inst); - SetButton(4, pack->update); - SetButton(5, pack->uninstall); + if(SetButton) + { + SetButton(1, pack->action); + SetButton(2, pack->inst); // && pack->action != 0 + SetButton(3, pack->src_inst); + SetButton(4, pack->update); + SetButton(5, pack->uninstall); + } // root notes (like network) return here if(!pack->path) @@ -105,12 +108,35 @@ extern "C" int PML_LoadPackage (TREE* tree, int id, PML_SetButton SetButton, PML pack->loaded = TRUE; } - if(pack->description) - SetText(pack->description); - return ERR_OK; } +extern "C" int PML_FindItem (TREE* tree, const char* what) +{ + int i, j; + bool found; + + // if we have children, same action for them + for (i=1; (UINT)ipackages.size(); i++) + { + found = true; + + for(j=0; (UINT)jpackages[i].name[j])) + { + found = false; + break; + } + } + + if(found) + return i; + } + + return 0; +} + // The user chooses a actions like Install extern "C" int PML_SetAction (TREE* tree, int id, int action, PML_SetIcon SetIcon) { @@ -134,7 +160,8 @@ extern "C" int PML_SetAction (TREE* tree, int id, int action, PML_SetIcon SetIco // set the icon if(!pack->icon) - SetIcon(id, action); + if(SetIcon) + SetIcon(id, action); // can't do src install yet if(action == 2) @@ -147,7 +174,8 @@ extern "C" int PML_SetAction (TREE* tree, int id, int action, PML_SetIcon SetIco else if (action != 0) { // since we are setting a action we undo it again - tree->setButton(1, 1); + if(tree->setButton) + tree->setButton(1, 1); //tree->setButton(action+1, 0); pack->action = action; @@ -168,9 +196,10 @@ extern "C" int PML_SetAction (TREE* tree, int id, int action, PML_SetIcon SetIco // undoing else - {+ + { // set other things back - tree->setButton(1, 0); + if(tree->setButton) + tree->setButton(1, 0); //tree->setButton(pack->action+1, 1); pack->action = 0; @@ -189,3 +218,11 @@ extern "C" int PML_SetAction (TREE* tree, int id, int action, PML_SetIcon SetIco return ret; } +// +extern "C" char* PML_GetDescription (TREE* tree, int id) +{ + PML_LoadPackage(tree, id, NULL); + + return tree->packages[id].description; +} + diff --git a/rosapps/packmgr/lib/package.def b/rosapps/packmgr/lib/package.def index 9154be9287e..9ec30fe456c 100644 --- a/rosapps/packmgr/lib/package.def +++ b/rosapps/packmgr/lib/package.def @@ -5,7 +5,9 @@ EXPORTS PML_Abort PML_TransError PML_LoadTree + PML_FindItem PML_LoadPackage + PML_GetDescription PML_SetAction PML_DoIt PML_CloseTree diff --git a/rosapps/packmgr/lib/package.hpp b/rosapps/packmgr/lib/package.hpp index ce6ee469579..0b900658cff 100644 --- a/rosapps/packmgr/lib/package.hpp +++ b/rosapps/packmgr/lib/package.hpp @@ -71,7 +71,9 @@ extern "C" WCHAR* PML_TransError (int code); int PML_LoadTree (pTree*, char* url, PML_AddItem); - int PML_LoadPackage (pTree, int id, PML_SetButton, PML_SetText); + int PML_FindItem (TREE* tree, const char* what); + int PML_LoadPackage (pTree, int id, PML_SetButton); + char* PML_GetDescription (TREE* tree, int id); int PML_SetAction (pTree, int package, int action, PML_SetIcon); int PML_DoIt (pTree, PML_SetStatus); diff --git a/rosapps/packmgr/lib/tree.cpp b/rosapps/packmgr/lib/tree.cpp index 030e6333ef3..6cae038e0b3 100644 --- a/rosapps/packmgr/lib/tree.cpp +++ b/rosapps/packmgr/lib/tree.cpp @@ -40,9 +40,8 @@ extern "C" int PML_LoadTree (TREE** tree, char* url, PML_AddItem AddItem) // expat callback for start of a "node" tag void tree_start (void* usrdata, const char* tag, const char** arg) { - int i, icon; + int i, icon = 0; static int id = 1; - const char* name = "\0"; TREE* tree = (TREE*)usrdata; @@ -58,12 +57,16 @@ void tree_start (void* usrdata, const char* tag, const char** arg) 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")) - name = arg[i+1]; + { + tree->packages[id].name = new char [strlen(arg[i+1])+1]; + strcpy(tree->packages[id].name, arg[i+1]); + } if(!strcmp(arg[i], "icon")) { @@ -73,7 +76,7 @@ void tree_start (void* usrdata, const char* tag, const char** arg) if(!strcmp(arg[i], "file")) { - tree->packages[id].path = new char [strlen(arg[i+1])]; + tree->packages[id].path = new char [strlen(arg[i+1])+1]; strcpy(tree->packages[id].path, arg[i+1]); if(strcmp(tag, "bin")) @@ -84,14 +87,19 @@ void tree_start (void* usrdata, const char* tag, const char** arg) } } - if(name[0]=='\0') return; + if(tree->packages[id].name[0] == '\0') return; // add it if(!parents.size()) - tree->addItem(id, name, 0, icon); + { + if(tree->addItem) + tree->addItem(id, tree->packages[id].name, 0, icon); + } + + // do some manipulation at the parent else { - tree->addItem(id, name, parents.back(), icon); + 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); diff --git a/rosapps/packmgr/tree/tree.xml b/rosapps/packmgr/tree/tree.xml index 0ebd1859521..7cf8f3d3e7d 100644 --- a/rosapps/packmgr/tree/tree.xml +++ b/rosapps/packmgr/tree/tree.xml @@ -1,69 +1,15 @@ - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/rosapps/packmgr/tree/tree_withsubs.xml b/rosapps/packmgr/tree/tree_withsubs.xml new file mode 100644 index 00000000000..0ebd1859521 --- /dev/null +++ b/rosapps/packmgr/tree/tree_withsubs.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +