- Move imagesoft to templates.
- Exclude all templates from the build. They are templates, useful as a source code, not as a binary. - Delete packmgr. svn path=/trunk/; revision=40345
|
@ -42,10 +42,6 @@
|
|||
<xi:include href="notevil/notevil.rbuild" />
|
||||
</directory>
|
||||
|
||||
<directory name="packmgr">
|
||||
<xi:include href="packmgr/directory.rbuild" />
|
||||
</directory>
|
||||
|
||||
<directory name="sysutils">
|
||||
<xi:include href="sysutils/sysutils.rbuild" />
|
||||
</directory>
|
||||
|
|
|
@ -1,211 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// main.cpp
|
||||
//
|
||||
// Implementation of a Commandlne Interface
|
||||
// for the ReactOs Package Manager
|
||||
//
|
||||
// Maarten Bosma, 09.01.2004
|
||||
// maarten.paul@bosma.de
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "main.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
wprintf(L"ReactOs PackageManager %d.%d.%d Commandline Interface \n\n", PACKMGR_VERSION_MAJOR, PACKMGR_VERSION_MINOR, PACKMGR_VERSION_PATCH_LEVEL);
|
||||
Argv = argv; Argc = argc;
|
||||
|
||||
if(argc<2)
|
||||
return Help();
|
||||
|
||||
// install a package
|
||||
if (!strcmp(argv[1], "install"))
|
||||
Install();
|
||||
|
||||
// install a package from source
|
||||
else if (!strcmp(argv[1], "src-inst"))
|
||||
{
|
||||
wprintf(L"Sorry but I can't do that yet. \n");
|
||||
}
|
||||
|
||||
// update a package
|
||||
else if (!strcmp(argv[1], "update"))
|
||||
{
|
||||
wprintf(L"Sorry but I can't do that yet. \n");
|
||||
}
|
||||
|
||||
// update everything
|
||||
else if (!strcmp(argv[1], "dist-upgrade"))
|
||||
{
|
||||
wprintf(L"Sorry but I can't do that yet. \n");
|
||||
}
|
||||
|
||||
// remove a package
|
||||
else if (!strcmp(argv[1], "remove"))
|
||||
{
|
||||
wprintf(L"Sorry but I can't do that yet. \n");
|
||||
}
|
||||
|
||||
// search for a package
|
||||
else if (!strcmp(argv[1], "show"))
|
||||
{
|
||||
Show();
|
||||
}
|
||||
|
||||
// search for a package
|
||||
else if (!strcmp(argv[1], "search"))
|
||||
{
|
||||
wprintf(L"Sorry but I can't do that yet. \n");
|
||||
}
|
||||
|
||||
else
|
||||
Help();
|
||||
|
||||
//
|
||||
wprintf(L"\n");
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Help (void)
|
||||
{
|
||||
wprintf(L"Usage: ros-get [command] \n\n");
|
||||
|
||||
wprintf(L"Possible commands: \n");
|
||||
wprintf(L" install [package name] \t Installs a package \n\n");
|
||||
wprintf(L" show [package name] \t\t Shows you detailed information about a package \n");
|
||||
|
||||
wprintf(L"Currently unimplemented commands: \n");
|
||||
wprintf(L" src-install [package name] \t Installs a package from source code \n");
|
||||
wprintf(L" update [package name] \t Updates a package \n");
|
||||
wprintf(L" dist-update [package name] \t Updates a package \n");
|
||||
wprintf(L" remove [package name] \t Uninstalls a package \n\n");
|
||||
|
||||
wprintf(L" search [search agrument] \t Finds a package \n");
|
||||
wprintf(L" list \t\t\t\t Lists all installed programs \n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Ask (const WCHAR* question)
|
||||
{
|
||||
// ask the user
|
||||
wprintf(L"%s [y/n] ", question);
|
||||
char answer = getchar();
|
||||
|
||||
// clear keybuffer
|
||||
while(getchar()!='\n');
|
||||
wprintf(L"\n");
|
||||
|
||||
// prozess answer
|
||||
if (answer == 'y')
|
||||
return 1;
|
||||
|
||||
else if (answer == 'n')
|
||||
return 0;
|
||||
|
||||
return Ask(question);
|
||||
}
|
||||
|
||||
int SetStatus (int status1, int status2, WCHAR* text)
|
||||
{
|
||||
WCHAR errbuf[2000];
|
||||
if(text)
|
||||
wprintf(L"%s\n", text);
|
||||
|
||||
// If the Status is 1000 things are done
|
||||
if(status1==1000)
|
||||
{
|
||||
wprintf(L"%s\n", PML_TransError(status2, errbuf, sizeof(errbuf)/sizeof(WCHAR)));
|
||||
done = TRUE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Install (void)
|
||||
{
|
||||
pTree tree;
|
||||
int i, error;
|
||||
WCHAR errbuf[2000];
|
||||
|
||||
// load the tree
|
||||
error = PML_LoadTree (&tree, "tree.xml", NULL);
|
||||
if(error)
|
||||
{
|
||||
|
||||
wprintf(PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
// look up the item
|
||||
for (i=2; i<Argc; i++)
|
||||
{
|
||||
int id = PML_FindItem(tree, Argv[i]);
|
||||
|
||||
if(id)
|
||||
{
|
||||
PML_LoadPackage(tree, id, NULL);
|
||||
PML_SetAction(tree, id, 1, NULL, Ask);
|
||||
}
|
||||
|
||||
else
|
||||
printf("Could not find the Package \"%s\"\n", Argv[i]);
|
||||
}
|
||||
|
||||
// do it
|
||||
error = PML_DoIt (tree, SetStatus, Ask);
|
||||
if(error)
|
||||
{
|
||||
|
||||
wprintf(PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR)));
|
||||
PML_CloseTree (tree);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// wait
|
||||
while (!done)
|
||||
Sleep(1000);
|
||||
|
||||
// clean up
|
||||
PML_CloseTree (tree);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Show (void)
|
||||
{
|
||||
pTree tree;
|
||||
int i, error;
|
||||
WCHAR errbuf[2000];
|
||||
|
||||
// load the tree
|
||||
error = PML_LoadTree (&tree, "tree_bare.xml", NULL);
|
||||
if(error)
|
||||
{
|
||||
wprintf(PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
// look up the item
|
||||
for (i=2; i<Argc; i++)
|
||||
{
|
||||
int id = PML_FindItem(tree, Argv[i]);
|
||||
|
||||
if(id)
|
||||
printf(PML_GetDescription(tree, id));
|
||||
|
||||
else
|
||||
printf("Could not find the Package \"%s\"\n", Argv[i]);
|
||||
}
|
||||
|
||||
// clean up
|
||||
PML_CloseTree (tree);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
///////////////////////////////////////////////////
|
||||
//
|
||||
// main.h
|
||||
// main.cpp's lumber room :)
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
#include <package.h>
|
||||
|
||||
int Argc;
|
||||
char **Argv;
|
||||
BOOL done = FALSE;
|
||||
|
||||
int Help (void);
|
||||
int Install (void);
|
||||
int Show (void);
|
||||
|
||||
int SetStatus (int status1, int status2, WCHAR* text);
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
#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 <reactos/version.rc>
|
||||
|
||||
/* EOF */
|
|
@ -1,9 +0,0 @@
|
|||
<module name="rosget" type="win32cui" installbase="system32" installname="rosget.exe">
|
||||
<include base="package">.</include>
|
||||
<define name="UNICODE" />
|
||||
|
||||
<library>kernel32</library>
|
||||
<library>package</library>
|
||||
<file>main.c</file>
|
||||
<file>ros-get.rc</file>
|
||||
</module>
|
|
@ -1,9 +0,0 @@
|
|||
<directory name="cmd-line">
|
||||
<xi:include href="cmd-line/rosget.rbuild" />
|
||||
</directory>
|
||||
<directory name="gui">
|
||||
<xi:include href="gui/packmgr.rbuild" />
|
||||
</directory>
|
||||
<directory name="lib">
|
||||
<xi:include href="lib/package.rbuild" />
|
||||
</directory>
|
|
@ -1,34 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
IDI_MAIN ICON DISCARDABLE "res/packetmanager.ico"
|
||||
IDB_TOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp"
|
||||
|
||||
/* TreeIcons - Categories */
|
||||
1 ICON DISCARDABLE "res/blank.ico"
|
||||
2 ICON DISCARDABLE "res/inet.ico"
|
||||
3 ICON DISCARDABLE "res/office.ico"
|
||||
4 ICON DISCARDABLE "res/graphics.ico"
|
||||
5 ICON DISCARDABLE "res/multimedia.ico"
|
||||
6 ICON DISCARDABLE "res/development.ico"
|
||||
7 ICON DISCARDABLE "res/games.ico"
|
||||
8 ICON DISCARDABLE "res/tools.ico"
|
||||
9 ICON DISCARDABLE "res/others.ico"
|
||||
10 ICON DISCARDABLE "res/installed.ico"
|
||||
|
||||
/* TreeIcons - Actions */
|
||||
11 ICON DISCARDABLE "res/install.ico"
|
||||
12 ICON DISCARDABLE "res/installsource.ico"
|
||||
13 ICON DISCARDABLE "res/update.ico"
|
||||
14 ICON DISCARDABLE "res/uninstall.ico"
|
||||
|
||||
/* HotKeys */
|
||||
|
||||
IDR_HOTKEYS ACCELERATORS DISCARDABLE
|
||||
BEGIN
|
||||
"1", 2, VIRTKEY, CONTROL
|
||||
"2", 3, VIRTKEY, CONTROL
|
||||
"3", 4, VIRTKEY, CONTROL
|
||||
"4", 5, VIRTKEY, CONTROL
|
||||
"0", 1, VIRTKEY, CONTROL
|
||||
END
|
|
@ -1,8 +0,0 @@
|
|||
Welcome to ReactOS's Package Manager !
|
||||
|
||||
WARNING: This is still pre-alfa software you can't do much with it yet.
|
||||
|
||||
This is the online help. You can show it at any time by clicking on the the Questionmark Icon above.
|
||||
|
||||
You can use this package manager like this: click on the
|
||||
You can also use the Buttons [ctrl] + [0] to [4] to set the action.
|
|
@ -1,43 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Nastavení"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Zatím zde nejsou žádné možnosti.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Provádím operace"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Zrušit", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Žádná akce", 1, GRAYED
|
||||
MENUITEM "Instalovat (doporuèeno)", 2, GRAYED
|
||||
MENUITEM "Instalovat ze zdrojových kódù", 3, GRAYED
|
||||
MENUITEM "Aktualizovat", 4, GRAYED
|
||||
MENUITEM "Odinstalovat", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Nastavení", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Provést", 6
|
||||
END
|
||||
END
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Optionen"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Leider gibt es noch keine Optionen.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Performing Operations"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Abort", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Keine Action", 1, GRAYED
|
||||
MENUITEM "Intallieren (empfohlen)", 2, GRAYED
|
||||
MENUITEM "Intallieren vom Quellcode", 3, GRAYED
|
||||
MENUITEM "Aktualisieren", 4, GRAYED
|
||||
MENUITEM "Deinstallieren", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Optionen", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "DoIt", 6
|
||||
END
|
||||
END
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Options"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "There are no options yet.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Performing Operations"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Abort", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "No Action", 1, GRAYED
|
||||
MENUITEM "Install (recommended)", 2, GRAYED
|
||||
MENUITEM "Install from Source", 3, GRAYED
|
||||
MENUITEM "Update", 4, GRAYED
|
||||
MENUITEM "Uninstall", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Options", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "DoIt", 6
|
||||
END
|
||||
END
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Opciones"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Aún no hay opciones disponibles.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Realizando las operaciones"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Cancelar", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Ninguna acción", 1, GRAYED
|
||||
MENUITEM "Instalar (recomendado)", 2, GRAYED
|
||||
MENUITEM "Instalar desde el código fuente", 3, GRAYED
|
||||
MENUITEM "Actualizar", 4, GRAYED
|
||||
MENUITEM "Desinstalar", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Opciones", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "¡Hazlo!", 6
|
||||
END
|
||||
END
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
/*
|
||||
* Translation made by Jerome Signouret, 2006.
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Options"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Il n'y a pas encore d'options.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Operation en cours"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Abort", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Pas d'action", 1, GRAYED
|
||||
MENUITEM "Installer (conseillé)", 2, GRAYED
|
||||
|
||||
MENUITEM "Installer depuis les sources", 3, GRAYED
|
||||
MENUITEM "Mise à jour", 4, GRAYED
|
||||
MENUITEM "Désinstaller", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Options", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Action !", 6
|
||||
END
|
||||
END
|
|
@ -1,43 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Valg"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Det er ikke noen valg ennå.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Utføre valget"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Avbryt", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Ingen valg", 1, GRAYED
|
||||
MENUITEM "Installere (anbefalt)", 2, GRAYED
|
||||
MENUITEM "Installere fra kilde", 3, GRAYED
|
||||
MENUITEM "Oppdater", 4, GRAYED
|
||||
MENUITEM "Avinstaller", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Valg", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Gjør det", 6
|
||||
END
|
||||
END
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
/*
|
||||
* translated by Caemyr - Olaf Siejka (Feb, 2008)
|
||||
* Use ReactOS forum PM or IRC to contact me
|
||||
* http://www.reactos.org
|
||||
* IRC: irc.freenode.net #reactos-pl;
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Opcje"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Brak opcji do ustawienia.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Wykonywanie zadañ"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Przerwij", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Brak zadañ", 1, GRAYED
|
||||
MENUITEM "Instaluj (zalecane)", 2, GRAYED
|
||||
MENUITEM "Instaluj ze Ÿród³a", 3, GRAYED
|
||||
MENUITEM "Uaktualnij", 4, GRAYED
|
||||
MENUITEM "Odinstaluj", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Opcje", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ZróbTo", 6
|
||||
END
|
||||
END
|
|
@ -1,44 +0,0 @@
|
|||
// Russian language resource file (Dmitry Chapyshev, 2007-07-05)
|
||||
|
||||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Ïàðàìåòðû"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Íåò íèêàêèõ íàñòðîåê.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Âûïîëíåíèå îïåðàöèé"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Ñîñòîÿíèå}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Ïðåðâàòü", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Íåò äåéñòâèÿ", 1, GRAYED
|
||||
MENUITEM "Óñòàíîâèòü (ðåêîìåíäóåòñÿ)", 2, GRAYED
|
||||
MENUITEM "Óñòàíîâèòü èç èñõîäíûõ êîäîâ", 3, GRAYED
|
||||
MENUITEM "Îáíîâèòü", 4, GRAYED
|
||||
MENUITEM "Óäàëèòü", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Ïàðàìåòðû", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Âûïîëíèòü", 6
|
||||
END
|
||||
END
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
/* TRANSLATOR: Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
|
||||
* DATE OF TR: 03-02-2008
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Možnosti"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Zatia¾ nie sú žiadne možnosti.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Vykonávam operácie"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Zruši<C5A1>", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Žiadna akcia", 1, GRAYED
|
||||
MENUITEM "Inštalova<76> (odporúèané)", 2, GRAYED
|
||||
MENUITEM "Inštalova<76> zo zdrojových kódov", 3, GRAYED
|
||||
MENUITEM "Aktualizova<76>", 4, GRAYED
|
||||
MENUITEM "Odinštalova<76>", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Možnosti", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Spravi<76>", 6
|
||||
END
|
||||
END
|
|
@ -1,50 +0,0 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Package Manager
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: rosapps/packmgr/gui/uk.rc
|
||||
* PURPOSE: Ukraianian Language File for packmgr
|
||||
* TRANSLATOR: Artem Reznikov
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
|
||||
|
||||
/* Dialogs */
|
||||
IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Ïàðàìåòðè"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Ùå íåìຠí³ÿêèõ ïàðàìåòð³â.", 0, 50, 95, 80, 8
|
||||
END
|
||||
|
||||
IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Âèêîíàííÿ îïåðàö³é"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8
|
||||
|
||||
CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15
|
||||
|
||||
CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15
|
||||
|
||||
PUSHBUTTON "Ïåðåðâàòè", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED
|
||||
END
|
||||
|
||||
IDR_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "PopUp", MENUBARBREAK
|
||||
BEGIN
|
||||
MENUITEM "Íåìຠ䳿", 1, GRAYED
|
||||
MENUITEM "Óñòàíîâèòè (ðåêîìåíäîâàíî)", 2, GRAYED
|
||||
MENUITEM "Óñòàíîâèòè ç âèõ³äíèõ êîä³â", 3, GRAYED
|
||||
MENUITEM "Îíîâèòè", 4, GRAYED
|
||||
MENUITEM "Âèäàëèòè", 5, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Ïàðàìåòðè", 8
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Âèêîíàòè", 6
|
||||
END
|
||||
END
|
||||
|
|
@ -1,451 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// main.cpp
|
||||
//
|
||||
// Implementation of the Package Manager GUI
|
||||
//
|
||||
//
|
||||
// Maarten Bosma, 09.01.2004
|
||||
// maarten.paul@bosma.de
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "main.h"
|
||||
|
||||
// This is the struct where the toolbar is defined
|
||||
const TBBUTTON Buttons [] =
|
||||
{
|
||||
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
|
||||
|
||||
{0, 1, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // No Action
|
||||
{1, 2, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Install
|
||||
{2, 3, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Install from source
|
||||
{3, 4, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Update
|
||||
{4, 5, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Unistall
|
||||
|
||||
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
|
||||
{5, 6, TBSTATE_ENABLED, TBSTYLE_BUTTON}, // DoIt (tm)
|
||||
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
|
||||
|
||||
{6, 7, TBSTATE_ENABLED, TBSTYLE_BUTTON}, // Help
|
||||
{7, 8, TBSTATE_ENABLED, TBSTYLE_BUTTON}, // Options
|
||||
|
||||
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
|
||||
};
|
||||
|
||||
|
||||
// Application's Entry Point
|
||||
int WINAPI WinMain (HINSTANCE hinst, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
|
||||
{
|
||||
HWND hwnd;
|
||||
MSG msg;
|
||||
WNDCLASSEX wc = {0};
|
||||
WCHAR errbuf[2000];
|
||||
|
||||
// Window creation
|
||||
wc.cbSize = sizeof(WNDCLASSEX);
|
||||
wc.lpszClassName = L"pgkmgr";
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wc.lpfnWndProc = (WNDPROC)WndProc;
|
||||
wc.hInstance = hinst;
|
||||
wc.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_MAIN));
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_SCROLLBAR);
|
||||
|
||||
RegisterClassEx(&wc);
|
||||
|
||||
hwnd = CreateWindow(L"pgkmgr",
|
||||
L"ReactOS - Package Manager v0.3",
|
||||
WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
500, 600,
|
||||
NULL, NULL,
|
||||
hinst,
|
||||
NULL);
|
||||
|
||||
|
||||
// Toolbar creation
|
||||
InitCommonControls();
|
||||
|
||||
hTBar = CreateToolbarEx(hwnd, WS_CHILD|WS_VISIBLE|TBSTYLE_FLAT, 0, 8, hinst, IDB_TOOLBAR,
|
||||
Buttons, sizeof(Buttons)/sizeof(TBBUTTON), TBSIZE, TBSIZE, TBSIZE, TBSIZE, sizeof(TBBUTTON));
|
||||
|
||||
// Show the windows
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
UpdateWindow(hwnd);
|
||||
|
||||
// Load the tree
|
||||
int error = PML_LoadTree(&tree, "tree_bare.xml", AddItem);
|
||||
|
||||
if(error)
|
||||
{
|
||||
MessageBox(0,PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR)),0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Read the help
|
||||
Help();
|
||||
|
||||
// Start getting messages
|
||||
while(GetMessage(&msg,NULL,0,0))
|
||||
{
|
||||
if(!TranslateAccelerator(hwnd, hHotKeys, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Close our handle
|
||||
PML_CloseTree (tree);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Add a item to our tree
|
||||
int AddItem (int id, const char* name, int parent, int icon)
|
||||
{
|
||||
TV_INSERTSTRUCT tvins;
|
||||
|
||||
tvins.item.lParam = (UINT)id;
|
||||
tvins.item.mask = TVIF_TEXT|TVIF_PARAM;
|
||||
tvins.item.pszText = (WCHAR*)name; //that is ok
|
||||
tvins.item.cchTextMax = strlen(name);
|
||||
tvins.hInsertAfter = TVI_LAST;
|
||||
|
||||
if(icon)
|
||||
{
|
||||
tvins.item.iImage = icon;
|
||||
tvins.item.iSelectedImage = icon;
|
||||
tvins.item.mask |= TVIF_IMAGE | TVIF_SELECTEDIMAGE;
|
||||
}
|
||||
|
||||
if (parent==0)
|
||||
tvins.hParent = TVI_ROOT;
|
||||
else
|
||||
tvins.hParent = nodes[parent];
|
||||
|
||||
nodes[id] = (HTREEITEM)SendMessage(hTree, TVM_INSERTITEMA, 0, (LPARAM)&tvins);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Load the Help from file and display it
|
||||
void Help (void)
|
||||
{
|
||||
int i;
|
||||
char buffer [2000];
|
||||
FILE* file = fopen ("help.txt", "r");
|
||||
|
||||
if(!file)
|
||||
return;
|
||||
|
||||
for(i=0; i<2000; i++)
|
||||
{
|
||||
buffer[i] = getc(file);
|
||||
if(buffer[i]==EOF) break;
|
||||
}
|
||||
buffer[i] = 0;
|
||||
|
||||
SetText(buffer);
|
||||
}
|
||||
|
||||
// Create our Controls
|
||||
void InitControls (HWND hwnd)
|
||||
{
|
||||
|
||||
HINSTANCE hinst = GetModuleHandle(NULL);
|
||||
WCHAR errbuf[2000];
|
||||
|
||||
// Create the controls
|
||||
hTree = CreateWindowEx(0, WC_TREEVIEW, L"TreeView", WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS,
|
||||
0, 0, 0, 0, hwnd, NULL, hinst, NULL);
|
||||
|
||||
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, L"edit", PML_TransError(IDS_LOAD, errbuf, sizeof(errbuf)/sizeof(WCHAR)), WS_CHILD|WS_VISIBLE|ES_MULTILINE,
|
||||
0, 0, 100, 100, hwnd, NULL, hinst, NULL);
|
||||
|
||||
hPopup = LoadMenu(hinst, MAKEINTRESOURCE(IDR_POPUP));
|
||||
|
||||
// Create Tree Icons
|
||||
HIMAGELIST hIcon = ImageList_Create(16, 16, ILC_MASK|ILC_COLOR32, 1, 1);
|
||||
SendMessage(hTree, TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)(HIMAGELIST)hIcon);
|
||||
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(1)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(11)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(12)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(13)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(14)));
|
||||
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(2)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(3)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(4)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(5)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(6)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(7)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(8)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(9)));
|
||||
ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(10)));
|
||||
|
||||
// Setup Hotkeys
|
||||
hHotKeys = LoadAccelerators (hinst, MAKEINTRESOURCE(IDR_HOTKEYS));
|
||||
}
|
||||
|
||||
// Set the Icons
|
||||
int SetIcon (int id, int icon)
|
||||
{
|
||||
TVITEMEX item;
|
||||
|
||||
item.hItem = nodes[id];
|
||||
item.iImage = icon;
|
||||
item.iSelectedImage = icon;
|
||||
item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
|
||||
|
||||
return (int)TreeView_SetItem(hTree, &item);
|
||||
}
|
||||
|
||||
// Set the Icons
|
||||
int Ask (const WCHAR* message)
|
||||
{
|
||||
int ans = MessageBox (0,message,0,MB_YESNO);
|
||||
|
||||
if(ans == IDYES)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// En- or Disable a Button inside of the toolbar and the Context Menu
|
||||
int SetButton (DWORD id, BOOL state)
|
||||
{
|
||||
// Change the Toorbar Button
|
||||
TBBUTTONINFO ti;
|
||||
|
||||
ti.cbSize = sizeof (ti);
|
||||
ti.dwMask = TBIF_STATE;
|
||||
|
||||
if(state)
|
||||
ti.fsState = TBSTATE_ENABLED;
|
||||
else
|
||||
ti.fsState = TBSTATE_INDETERMINATE;
|
||||
|
||||
SendMessage (hTBar, TB_SETBUTTONINFO, id, (LPARAM)&ti);
|
||||
|
||||
// Change the Context Menu item
|
||||
MENUITEMINFO mi;
|
||||
|
||||
mi.cbSize = sizeof (mi);
|
||||
mi.fMask = MIIM_STATE;
|
||||
|
||||
if(state)
|
||||
mi.fState = MFS_ENABLED;
|
||||
|
||||
else
|
||||
mi.fState = MFS_GRAYED;
|
||||
|
||||
SetMenuItemInfo(hPopup, id, FALSE, &mi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Set the text of the text box
|
||||
int SetText (const char* text)
|
||||
{
|
||||
int i, j;
|
||||
char buffer [2000];
|
||||
|
||||
if(!text)
|
||||
return 1;
|
||||
|
||||
// the windows does not need "\n"
|
||||
// for new lines but "\r\n"
|
||||
for(i=0,j=0; text[i]; i++,j++)
|
||||
{
|
||||
buffer[j] = text[i];
|
||||
if(buffer[j] == '\n')
|
||||
{
|
||||
buffer[j] = '\r';
|
||||
buffer[++j] = '\n';
|
||||
}
|
||||
}
|
||||
buffer[j] = 0;
|
||||
|
||||
SetWindowTextA(hEdit, buffer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Windows Message Callback (this is where most things happen)
|
||||
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
// at the very beginning ...
|
||||
case WM_CREATE:
|
||||
{
|
||||
InitControls(hwnd);
|
||||
}
|
||||
break;
|
||||
|
||||
// calculate the size of the controls
|
||||
case WM_SIZE:
|
||||
{
|
||||
RECT rcl;
|
||||
SendMessage(hTBar, TB_AUTOSIZE, 0L, 0L);
|
||||
GetWindowRect(hTBar, &rcl);
|
||||
|
||||
int win_top = rcl.bottom - rcl.top;
|
||||
int win_hight = HIWORD(lParam) - win_top;
|
||||
|
||||
MoveWindow(hTree, 0, win_top, LOWORD(lParam), splitter_pos*win_hight/100, TRUE);
|
||||
MoveWindow(hEdit, 0, (splitter_pos*win_hight/100)+win_top, LOWORD(lParam), win_hight, TRUE);
|
||||
}
|
||||
break;
|
||||
|
||||
// for the treeview
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
if(((LPNMHDR)lParam)->code == TVN_SELCHANGED)
|
||||
{
|
||||
selected = ((LPNMTREEVIEW)lParam)->itemNew.lParam;
|
||||
PML_LoadPackage (tree, selected, SetButton);
|
||||
SetText(PML_GetDescription (tree, selected));
|
||||
}
|
||||
|
||||
else if ((int)(((LPNMHDR)lParam)->code) == NM_RCLICK) // <= aarrggg LISP
|
||||
{
|
||||
// which item has been click on
|
||||
HTREEITEM item = TreeView_GetDropHilight(hTree);
|
||||
|
||||
if(item != NULL)
|
||||
{
|
||||
// mark the one as selected
|
||||
SendMessage (hTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM)item);
|
||||
(void)TreeView_EnsureVisible (hTree, item);
|
||||
}
|
||||
|
||||
// create the context menu
|
||||
if(selected != 0)
|
||||
{
|
||||
POINT pt;
|
||||
GetCursorPos (&pt);
|
||||
TrackPopupMenu (GetSubMenu(hPopup, 0), 0, (UINT)pt.x, (UINT)pt.y, 0, hwnd, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
// for the toolbar
|
||||
case WM_COMMAND:
|
||||
{
|
||||
// All Actions
|
||||
if(LOWORD(wParam) <= 5 && LOWORD(wParam) >= 1)
|
||||
{
|
||||
if(selected)
|
||||
if(PML_SetAction(tree, selected, LOWORD(wParam)-1, SetIcon, Ask) == ERR_OK)
|
||||
break;
|
||||
|
||||
MessageBeep(MB_ICONHAND);
|
||||
}
|
||||
|
||||
// DoIt
|
||||
else if(LOWORD(wParam)==6)
|
||||
{
|
||||
if(PML_DoIt(tree, SetStatus, Ask) == ERR_OK)
|
||||
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DOIT), hwnd, StatusProc);
|
||||
else
|
||||
MessageBeep(MB_ICONHAND);
|
||||
}
|
||||
|
||||
// Help
|
||||
else if(LOWORD(wParam)==7)
|
||||
Help();
|
||||
|
||||
// Options
|
||||
else if(LOWORD(wParam)==8)
|
||||
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_OPTIONS), hwnd, OptionsProc);
|
||||
}
|
||||
break;
|
||||
|
||||
// prozess hotkeys
|
||||
case WM_HOTKEY:
|
||||
{
|
||||
if(PML_SetAction(tree, selected, wParam, SetIcon, Ask) != ERR_OK)
|
||||
MessageBeep(MB_ICONHAND);
|
||||
}
|
||||
break;
|
||||
|
||||
// ... at the very end
|
||||
case WM_DESTROY:
|
||||
{
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return DefWindowProc (hwnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
// Warning: This function is called from another thread
|
||||
int SetStatus (int status1, int status2, WCHAR* text)
|
||||
{
|
||||
WCHAR errbuf[2000];
|
||||
|
||||
// Set the Rage to 1000
|
||||
SendMessage(GetDlgItem(hStatus, IDC_STATUS1), PBM_SETRANGE32, 0, 1000);
|
||||
SendMessage(GetDlgItem(hStatus, IDC_STATUS2), PBM_SETRANGE32, 0, 1000);
|
||||
|
||||
// The prozessbars and the text filds
|
||||
if(text)
|
||||
SetDlgItemText(hStatus, IDC_TSTATUS, text);
|
||||
|
||||
if(status1!=-1)
|
||||
SendMessage(GetDlgItem(hStatus, IDC_STATUS1), PBM_SETPOS, status1, 0);
|
||||
|
||||
if(status2!=-1)
|
||||
SendMessage(GetDlgItem(hStatus, IDC_STATUS2), PBM_SETPOS, status2, 0);
|
||||
|
||||
// If the Status is 1000 everything is done
|
||||
if(status1==1000)
|
||||
{
|
||||
EndDialog(hStatus, TRUE);
|
||||
MessageBox(0,PML_TransError(status2, errbuf, sizeof(errbuf)/sizeof(WCHAR)),0,0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Callback for the Status Dialog
|
||||
INT_PTR CALLBACK StatusProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
hStatus = hwnd;
|
||||
|
||||
} break;
|
||||
|
||||
case WM_COMMAND: // can only be the about button
|
||||
case WM_CLOSE: // the close-window-[x]
|
||||
{
|
||||
PML_Abort();
|
||||
EndDialog(hwnd, TRUE);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Callback for the Options Dialog
|
||||
INT_PTR CALLBACK OptionsProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_CLOSE:
|
||||
EndDialog(hwnd, TRUE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
///////////////////////////////////////////////////
|
||||
//
|
||||
// main.h
|
||||
// main.cpp's lumber room :)
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
#include <windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <package.h>
|
||||
#include "resource.h"
|
||||
|
||||
/* Some Variables */
|
||||
|
||||
int selected, splitter_pos = 50;
|
||||
|
||||
pTree tree;
|
||||
HMENU hPopup;
|
||||
HACCEL hHotKeys;
|
||||
HWND hTBar, hTree, hEdit, hStatus;
|
||||
HTREEITEM nodes [MAXNODES];
|
||||
|
||||
/* Window Callbacks */
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
INT_PTR CALLBACK StatusProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
INT_PTR CALLBACK OptionsProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
/* Prototypes */
|
||||
|
||||
void Help (void);
|
||||
|
||||
int AddItem (int id, const char* name, int parent, int icon);
|
||||
int SetText (const char* text);
|
||||
int SetStatus (int status1, int status2, WCHAR* text);
|
||||
int Ask (const WCHAR* message);
|
||||
|
||||
/* Toolbar Releated */
|
||||
|
||||
// This is the struct where the toolbar is defined
|
||||
extern const TBBUTTON Buttons [];
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<module name="packmgr" type="win32gui" installbase="system32" installname="packmgr.exe">
|
||||
<include base="package">.</include>
|
||||
<include base="packmgr">.</include>
|
||||
<define name="UNICODE" />
|
||||
|
||||
<library>kernel32</library>
|
||||
<library>user32</library>
|
||||
<library>comctl32</library>
|
||||
<library>package</library>
|
||||
|
||||
<file>main.c</file>
|
||||
<file>packmgr.rc</file>
|
||||
</module>
|
|
@ -1,27 +0,0 @@
|
|||
|
||||
#include <windows.h>
|
||||
#include "resource.h"
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Package Manager\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "packmgr\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "packmgr.exe\0"
|
||||
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* For all langs */
|
||||
#include "generic.rc"
|
||||
|
||||
/* Language specific */
|
||||
|
||||
#include "lang/cs-CZ.rc"
|
||||
#include "lang/de-DE.rc"
|
||||
#include "lang/en-US.rc"
|
||||
#include "lang/es-ES.rc"
|
||||
#include "lang/fr-FR.rc"
|
||||
#include "lang/pl-PL.rc"
|
||||
#include "lang/ru-RU.rc"
|
||||
#include "lang/sk-SK.rc"
|
||||
#include "lang/uk-UA.rc"
|
||||
#include "lang/no-NO.rc"
|
||||
|
||||
/* EOF */
|
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 21 KiB |
|
@ -1,15 +0,0 @@
|
|||
#include "../lib/error.h"
|
||||
|
||||
#define IDI_MAIN 0
|
||||
|
||||
#define TBSIZE 32
|
||||
#define IDB_TOOLBAR 0x102
|
||||
#define IDD_OPTIONS 0x103
|
||||
#define IDD_DOIT 0x104
|
||||
#define IDR_POPUP 0x105
|
||||
|
||||
#define IDC_STATUS1 0x110
|
||||
#define IDC_STATUS2 0x111
|
||||
#define IDC_CANCEL 0x112
|
||||
#define IDC_TSTATUS 0x113
|
||||
#define IDR_HOTKEYS 0x114
|
|
@ -1,169 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// download.cpp
|
||||
//
|
||||
// Stuff related to downloading
|
||||
//
|
||||
//
|
||||
// Maarten Bosma, 09.01.2004
|
||||
// maarten.paul@bosma.de
|
||||
//
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
#include "package.hpp"
|
||||
#include "expat.h"
|
||||
#include "log.h"
|
||||
#include <string>
|
||||
#include <urlmon.h>
|
||||
|
||||
HRESULT WINAPI URLDownloadToFileA(
|
||||
LPUNKNOWN pCaller,
|
||||
LPCSTR szURL,
|
||||
LPCSTR szFileName,
|
||||
DWORD dwReserved,
|
||||
LPBINDSTATUSCALLBACK lpfnCB
|
||||
);
|
||||
|
||||
int FindCount (string What, string Where, int start = 0, int end = -1);
|
||||
|
||||
|
||||
// Download a file
|
||||
char* PML_Download (pTree tree, const char* url, const char* server = "tree", const char* filename = "packmgr.xml")
|
||||
{
|
||||
UINT i;
|
||||
static char downl [MAX_PATH]; // the full url
|
||||
static char path [MAX_PATH]; // the full resulting Path
|
||||
|
||||
// It goes to the temp folder when no other path is entered (or even compleatly no filename)
|
||||
// If server == "tree" it will be downloaded from the server speficied in option.xml
|
||||
// File:// links are possible too
|
||||
|
||||
// get temp dir
|
||||
if(!filename)
|
||||
GetTempPathA (200, path);
|
||||
|
||||
else if(!strstr(filename, "\\"))
|
||||
GetTempPathA (200, path);
|
||||
|
||||
else
|
||||
strcpy(path, "");
|
||||
|
||||
|
||||
// create the local file name
|
||||
if(filename)
|
||||
{
|
||||
strcat(path, filename);
|
||||
DeleteFileA (path);
|
||||
}
|
||||
else
|
||||
GetTempFileNameA (path, "pml", 1, path);
|
||||
|
||||
// get the url
|
||||
if (!server)
|
||||
strcpy(downl, "");
|
||||
|
||||
else if(!strcmp(server, "tree"))
|
||||
{
|
||||
char* ret;
|
||||
for (i=0; i<tree->sources.size(); i++)
|
||||
{
|
||||
ret = PML_Download(tree, url, tree->sources[i], filename);
|
||||
if(ret)
|
||||
return ret;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
else
|
||||
strcpy(downl, server);
|
||||
|
||||
strcat(downl, url);
|
||||
|
||||
// is this a file link ?
|
||||
if (strstr(downl, "file://") || strstr(downl, "File://"))
|
||||
{
|
||||
if(!filename)
|
||||
{
|
||||
return &downl[7];
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
CopyFileA(filename, &downl[7], FALSE);
|
||||
return (char*)filename;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// download the file
|
||||
if(URLDownloadToFileA (NULL, downl, path, 0, NULL) != S_OK)
|
||||
{
|
||||
Log("! ERROR: Unable to download ");
|
||||
LogAdd(downl);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
// Download and prozess a xml file
|
||||
int PML_XmlDownload (pTree tree, const char* url, void* usrdata,
|
||||
XML_StartElementHandler start, XML_EndElementHandler end, XML_CharacterDataHandler text)
|
||||
{
|
||||
int done = 0;
|
||||
char buffer[255];
|
||||
char* filename = 0;
|
||||
|
||||
// logging
|
||||
Log("* prozess the xml file: ");
|
||||
LogAdd(url);
|
||||
|
||||
// download the file
|
||||
if(strstr(url, "file://"))
|
||||
filename = PML_Download(tree, url, NULL, NULL);
|
||||
|
||||
else
|
||||
filename = PML_Download(tree, url);
|
||||
|
||||
|
||||
if(!filename)
|
||||
{
|
||||
Log("! ERROR: Could not download the xml file");
|
||||
return ERR_DOWNL;
|
||||
}
|
||||
|
||||
// open the file
|
||||
FILE* file = fopen(filename, "r");
|
||||
if(!file)
|
||||
{
|
||||
Log("! ERROR: Could not open the xml file ");
|
||||
LogAdd(filename);
|
||||
return ERR_GENERIC;
|
||||
}
|
||||
|
||||
// parse the xml file
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
XML_SetUserData (parser, usrdata);
|
||||
XML_SetElementHandler(parser, start, end);
|
||||
XML_SetCharacterDataHandler(parser, text);
|
||||
|
||||
while (!done)
|
||||
{
|
||||
size_t len = fread (buffer, 1, sizeof(buffer), file);
|
||||
done = len < sizeof(buffer);
|
||||
|
||||
buffer[len] = 0;
|
||||
if(!XML_Parse(parser, buffer, len, done))
|
||||
{
|
||||
Log("! ERROR: Could not parse the xml file");
|
||||
return ERR_GENERIC;
|
||||
}
|
||||
}
|
||||
|
||||
XML_ParserFree(parser);
|
||||
fclose(file);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
// error.h
|
||||
|
||||
#define ERR_OK 0x000
|
||||
#define ERR_GENERIC 0x001
|
||||
#define ERR_DOWNL 0x002
|
||||
#define ERR_NOTODO 0x003 // without text yet
|
||||
#define ERR_PACK 0x004
|
||||
|
||||
#define ERR_DEP1 0x005
|
||||
#define ERR_DEP2 0x006
|
||||
#define ERR_READY 0x007
|
||||
|
||||
// Script
|
||||
#define ERR_SYNATX 0x011
|
||||
#define ERR_CALL 0x012
|
||||
#define ERR_PARAMETER 0x013
|
||||
#define ERR_FILE 0x014
|
||||
|
||||
#define IDS_LOAD 0x254
|
||||
#define NOTFOUND -1
|
|
@ -1,101 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// functions.cpp
|
||||
//
|
||||
// Script Functions
|
||||
//
|
||||
//
|
||||
// Klemens Friedl, 19.03.2005
|
||||
// frik85@hotmail.com
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "package.hpp"
|
||||
#include "script.h"
|
||||
#include "log.h"
|
||||
|
||||
extern const char* tree_server;
|
||||
char* PML_Download (pTree, const char* url, const char* server, const char* filename);
|
||||
|
||||
|
||||
int debuglog (int argc, char* argv[])
|
||||
{
|
||||
Log("! SCRIPT DEBUG: ");
|
||||
LogAdd(argv[1]);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
int download (int argc, char* argv[])
|
||||
{
|
||||
char* result;
|
||||
|
||||
if (argc==3)
|
||||
result = PML_Download(NULL, argv[1], argv[3], argv[2]);
|
||||
|
||||
else if (argc==2)
|
||||
result = PML_Download(NULL, argv[1], NULL, argv[2]);
|
||||
|
||||
else
|
||||
return ERR_GENERIC;
|
||||
|
||||
if(!result)
|
||||
return ERR_GENERIC;
|
||||
|
||||
return ERR_OK;
|
||||
|
||||
}
|
||||
|
||||
int extract (int argc, char* argv[])
|
||||
{
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
int msgbox (int argc, char* argv[])
|
||||
{
|
||||
if (argc==1)
|
||||
MessageBoxA(0,argv[1],0,0);
|
||||
|
||||
else if (argc==2)
|
||||
MessageBoxA(0,argv[1],argv[2],0);
|
||||
|
||||
else
|
||||
return ERR_GENERIC;
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
int shell (int argc, char* argv[])
|
||||
{
|
||||
// Get the temp dir
|
||||
char tmp [MAX_PATH];
|
||||
GetTempPathA (MAX_PATH, tmp);
|
||||
|
||||
SHELLEXECUTEINFOA info = {0};
|
||||
info.cbSize = sizeof(SHELLEXECUTEINFO);
|
||||
info.fMask = SEE_MASK_NOCLOSEPROCESS;
|
||||
info.lpVerb = "open";
|
||||
info.lpFile = argv[1];
|
||||
info.lpDirectory = tmp;
|
||||
info.nShow = SW_SHOW;
|
||||
|
||||
if(argc >= 2)
|
||||
info.lpParameters = "";
|
||||
|
||||
if(!ShellExecuteExA (&info))
|
||||
return ERR_GENERIC;
|
||||
|
||||
WaitForSingleObject (info.hProcess, INFINITE);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
const FUNC_TABLE FuncTable[] =
|
||||
{
|
||||
/* Name */ /* Function */
|
||||
{"download", download},
|
||||
{"extract", extract},
|
||||
{"shell", shell},
|
||||
{"msgbox", msgbox},
|
||||
{"debug", debuglog}
|
||||
};
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Nahrávám ..."
|
||||
ERR_OK "Operace dokončena."
|
||||
ERR_PACK "Všechny balíčky nemohly být nainstalovány.\n\nProsím podívejte se do logu pro detaily."
|
||||
ERR_GENERIC "Nastala chyba. \nProsím podívejte se do logu pro detaily."
|
||||
ERR_DOWNL "Vyžadovaný soubor nemohl být stažen!\nProsím podívejte se do logu pro detaily."
|
||||
ERR_FILE "Nastala chyba během vykonávání skriptu.\nSoubor nelze otevřít."
|
||||
|
||||
ERR_SYNATX "Nastala chyba během vykonávání skriptu.\nChybná syntaxe."
|
||||
ERR_CALL "Nastala chyba během vykonávání skriptu.\nNelze najít funkci."
|
||||
ERR_PARAMETER "Nastala chyba během vykonávání skriptu.\nNesprávný parametr(y)."
|
||||
|
||||
ERR_DEP1 "K nainstalování tohoto balíčku je třeba instalovat také tyto balíčky:\n\n"
|
||||
ERR_DEP2 "\nChcete toto přidat ?"
|
||||
ERR_READY "Zvolili jste si instalaci %d balíčkú. Aby jste je nainstalovali je třeba abyste přečetli a souhlasili s jejich licencemi. \n\nChcete nadále pokračovat ?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,24 +0,0 @@
|
|||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Lade..."
|
||||
ERR_OK "Fertig."
|
||||
ERR_PACK "Es konnten nicht alle Packages installiert werden.\n\nFür mehr Details schauen Sie bitte in ""logfile.html""."
|
||||
ERR_GENERIC "Ein Fehler ist aufgetreten. \nnFür mehr Details schauen Sie bitte in ""logfile.html""."
|
||||
ERR_DOWNL "Eine benötigte Datei konnte nicht runtergeladen werden!\nFür mehr Details schauen Sie bitte in ""logfile.html""."
|
||||
ERR_FILE "Bei der Scriptausfürhung trat ein Fehler auf.\nDatei konnte nicht geöffnet werden."
|
||||
|
||||
ERR_SYNATX "Bei der Scriptausführung trat ein Fehler auf.\nSyntax-Fehler."
|
||||
ERR_CALL "Bei der Scriptausführung trat ein Fehler auf.\nUnbekannte Funktion."
|
||||
ERR_PARAMETER "Bei der Scriptausführung trat ein Fehler auf.\nUngültige(r) Parameter."
|
||||
|
||||
ERR_DEP1 "Um dieses Package zu installieren müssen sie ebenfalls folende(s) Package(s) installieren:\n\n"
|
||||
ERR_DEP2 "\nMöchten sie fortfahren?"
|
||||
ERR_READY "Sie haben %d package(s)ausgewählt. Um sie zu installieren müssen sie sich mit jeder einzellnen Lizenz einverstanden erklären.\n\nMöchten sie forfahren?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Loading ..."
|
||||
ERR_OK "Operation done."
|
||||
ERR_PACK "Not all packages could be installed\n\nPlease have a look at the log file for details."
|
||||
ERR_GENERIC "An error occured. \nFor more information please have a look at the log file."
|
||||
ERR_DOWNL "A needed file could not be downloaded!\nFor more information please have a look at the log file."
|
||||
ERR_FILE "Error while Script Execution.\nFile could not be opened."
|
||||
|
||||
ERR_SYNATX "Error while Script Execution.\nWrong Synatx."
|
||||
ERR_CALL "Error while Script Execution.\nCould not find function."
|
||||
ERR_PARAMETER "Error while Script Execution.\nWrong Parameter(s)."
|
||||
|
||||
ERR_DEP1 "To install this package you have to install the following package(s) as well:\n\n"
|
||||
ERR_DEP2 "\nDo you want this ?"
|
||||
ERR_READY "You choosen to install %d package(s). To install them you have to read and agree with each of thier licences. \n\nDo you want still want to ?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,24 +0,0 @@
|
|||
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Cargando ..."
|
||||
ERR_OK "Operación completada."
|
||||
ERR_PACK "No todos los paquetes pudieron ser instalados\n\nPor favor, mira el archivo de log para más detalles."
|
||||
ERR_GENERIC "Ocurrió un error. \nPor favor, mira el archivo de log para más detalles."
|
||||
ERR_DOWNL "¡Un archivo necesario no pudo ser descargado!\nPor favor, mira el archivo de log para más detalles."
|
||||
ERR_FILE "Error durante la ejecución del Script.\nEl archivo no pudo abrirse."
|
||||
|
||||
ERR_SYNATX "Error durante la ejecución del Script.\nSintaxis errónea."
|
||||
ERR_CALL "Error durante la ejecución del Script.\nNo se pudo encontrar la función."
|
||||
ERR_PARAMETER "Error durante la ejecución del Script.\nParametro(s) erróneo."
|
||||
|
||||
ERR_DEP1 "Para instalar este paquete debes instalar también los siguientes paquetes:\n\n"
|
||||
ERR_DEP2 "\n¿Seguro que quieres ahcer eso?"
|
||||
ERR_READY "Has seleccionado instalar %d paquete(s). Para instalarlos debes leer y estar deacuerdo con cada uno de sus licencias.\n\n ¿Sigues queriendo hacerlo?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* Translation made by Jerome Signouret, 2006.
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Chargement ..."
|
||||
ERR_OK "Fini."
|
||||
ERR_PACK "Tous les paquets ne peuvent etre installés\n\nVeuillez consulter le fichier journal pour les détails."
|
||||
ERR_GENERIC "Une erreur s'est produite. \nVeuillez consulter le fichier journal pour les détails."
|
||||
ERR_DOWNL "Un fichier requis ne peut etre téléchargé !\nVeuillez consulter le fichier journal pour les détails."
|
||||
ERR_FILE "Erreur pendant l'éxécution du script.\nUn fichier n'a pu etre ouvert."
|
||||
|
||||
ERR_SYNATX "Erreur pendant l'éxécution du script.\nErreur de syntaxe."
|
||||
ERR_CALL "Erreur pendant l'éxécution du script.\nUne fonction ne peut etre trouvée."
|
||||
ERR_PARAMETER "Erreur pendant l'éxécution du script.\nParamètre(s) erroné(s)."
|
||||
|
||||
ERR_DEP1 "Pour installer ce paquet, il faut aussi installer les paquets suivants :\n\n"
|
||||
ERR_DEP2 "\nVoulez-vous les installer ?"
|
||||
ERR_READY "Vous avez choisi d'installer %d paquets. Pour les installer, vous devez lire et accepter les licences de chacun.\n\nVoulez-vous toujours continuer ?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Laster ..."
|
||||
ERR_OK "Arbeidsoppgave fullført."
|
||||
ERR_PACK "Ikke alle pakke kunne bli installert\n\nVennligst se på logg filen for å få detaljer."
|
||||
ERR_GENERIC "En feil har oppstått. \nFor mere informasjon vennligst se på logg filen."
|
||||
ERR_DOWNL "En fil som trengs kunne ikke bli lastet ned!\nFor mere informasjon vennligst se på logg filen."
|
||||
ERR_FILE "Feil med skript utførelse.\nFilen kunne ikke åpnes."
|
||||
|
||||
ERR_SYNATX "Feil med skript utførelse.\nFeil Syntaks."
|
||||
ERR_CALL "Feil med skript utførelse.\nKunne ikke finne funksjon."
|
||||
ERR_PARAMETER "Feil med skript utførelse.\nFeil Parameter(e)."
|
||||
|
||||
ERR_DEP1 "For å installere denne pakken trenger du også å installere disse pakken(e) også:\n\n:\n\n"
|
||||
ERR_DEP2 "\nVil du gjøre dette ?"
|
||||
ERR_READY "Du har valg å installere %d pakke(r). For å installere disse må du lese og godta hver av disse lisensene. \n\nØnsker du fortsatt å fortsette ?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,26 +0,0 @@
|
|||
// Russian language resource file (Dmitry Chapyshev, 2007-07-05)
|
||||
|
||||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Загрузка ..."
|
||||
ERR_OK "Операция завершена."
|
||||
ERR_PACK "Не все пакеты были установлены\n\nПожалуйста просмотрите в журнале подробности."
|
||||
ERR_GENERIC "Произошла ошибка. \nПожалуйста просмотрите в журнале подробности."
|
||||
ERR_DOWNL "Невозможно загрузить необходимый файл!\nПожалуйста просмотрите в журнале подробности."
|
||||
ERR_FILE "Ошибка во время выполнения сценария.\nНе удалось открыть файл."
|
||||
|
||||
ERR_SYNATX "Ошибка во время выполнения сценария.\nНеверный синтаксис."
|
||||
ERR_CALL "Ошибка во время выполнения сценария.\nНе удалось найти функцию."
|
||||
ERR_PARAMETER "Ошибка во время выполнения сценария.\nНеверный параметр(ы)."
|
||||
|
||||
ERR_DEP1 "Для установки этого пакета вы так же должны установить пакет(ы):\n\n"
|
||||
ERR_DEP2 "\nВы действительно хостите продолжить ?"
|
||||
ERR_READY "Вы выбрали %d пакет(ы). Для их установки вы должны прочитать и согласиться с их лицензией. \n\nПродолжить ?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,32 +0,0 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Package Manager
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: rosapps/packmgr/lib/uk.rc
|
||||
* PURPOSE: Ukraianian Language File for packmgr
|
||||
* TRANSLATOR: Artem Reznikov
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
|
||||
|
||||
/* String Tables */
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LOAD "Завантаження ..."
|
||||
ERR_OK "Операція завершена."
|
||||
ERR_PACK "Могли бути встановлені не всі пакети\n\nБудь ласка проглянете подробиці в файлі журналу."
|
||||
ERR_GENERIC "Сталася помилка. \nБудь ласка проглянете подробиці в файлі журналу."
|
||||
ERR_DOWNL "Неможливо завантажити необхідний файл!\nБудь ласка проглянете подробиці в файлі журналу."
|
||||
ERR_FILE "Помилка під час виконання сценарію.\nНе вдалося відкрити файл."
|
||||
|
||||
ERR_SYNATX "Помилка під час виконання сценарію.\nНевірний синтаксис."
|
||||
ERR_CALL "Помилка під час виконання сценарію.\nНе вдалося знайти функцію."
|
||||
ERR_PARAMETER "Помилка під час виконання сценарію.\nНевірний параметр(и)."
|
||||
|
||||
ERR_DEP1 "Для установки цього пакету ви також маєте встановити пакет(и):\n\n"
|
||||
ERR_DEP2 "\nВи хочете зробити це ?"
|
||||
ERR_READY "Ви обрали %d пакет(и) для установки. Для їх установки ви маєте прочитати і погодитися з їх ліцензією. \n\nВи все ще хочете зробити це ?"
|
||||
END
|
||||
|
||||
123 RCDATA "options.xml"
|
||||
|
||||
/* EOF */
|
|
@ -1,117 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// log.cpp
|
||||
//
|
||||
// Script Functions
|
||||
//
|
||||
//
|
||||
// Klemens Friedl, 19.03.2005
|
||||
// frik85@hotmail.com
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include "log.h"
|
||||
#include "package.hpp" // for Package Manager version
|
||||
#include <reactos/version.h> // ReactOS version: \reactos\include\reactos\version.h
|
||||
|
||||
bool LogCreated = false;
|
||||
|
||||
void Log (const char *message)
|
||||
{
|
||||
FILE *file;
|
||||
char GTime[80];
|
||||
char version[50];
|
||||
char versionos[50];
|
||||
|
||||
if (!LogCreated)
|
||||
{
|
||||
file = fopen(LOGFILE, "w");
|
||||
LogCreated = true;
|
||||
|
||||
//HTML Header
|
||||
fputs("<html><head><title>Logfile</title></head><body>\n", file);
|
||||
|
||||
// date and time
|
||||
time_t now;
|
||||
now = time(NULL);
|
||||
strftime(GTime,sizeof GTime,"%Y-%m-%d",localtime(&now));
|
||||
|
||||
// package manager version information
|
||||
wsprintfA(version, " Package Manager %d.%d.%d",
|
||||
PACKMGR_VERSION_MAJOR,
|
||||
PACKMGR_VERSION_MINOR,
|
||||
PACKMGR_VERSION_PATCH_LEVEL);
|
||||
|
||||
// operating system version information
|
||||
wsprintfA(versionos, " ReactOS %d.%d.%d",
|
||||
KERNEL_VERSION_MAJOR,
|
||||
KERNEL_VERSION_MINOR,
|
||||
KERNEL_VERSION_PATCH_LEVEL);
|
||||
|
||||
// write the head
|
||||
fputs("<h2>ReactOS Package Manager - Log File</h2>\n", file);
|
||||
//fputs("WARNING: This is still pre-alpha software.<br>\n", file);
|
||||
|
||||
fputs("Date: ", file);
|
||||
fputs(GTime, file);
|
||||
fputs("<br>\n", file);
|
||||
|
||||
fputs("Version: ", file);
|
||||
fputs(version, file);
|
||||
fputs("<br>\n", file);
|
||||
|
||||
fputs("OS: ", file);
|
||||
fputs(versionos, file);
|
||||
fputs("<br>\n", file);
|
||||
}
|
||||
|
||||
else
|
||||
file = fopen(LOGFILE, "a");
|
||||
|
||||
if (file == NULL)
|
||||
{
|
||||
if (LogCreated)
|
||||
LogCreated = false;
|
||||
|
||||
return Log(message);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// Save log entry (+ add time)
|
||||
fputs("<br>\n", file);
|
||||
|
||||
time_t now;
|
||||
now = time(NULL);
|
||||
strftime(GTime,sizeof GTime,"%I:%M:%S %p",localtime(&now));
|
||||
|
||||
fputs("<b>", file);
|
||||
fputs(GTime, file);
|
||||
fputs("</b> ", file);
|
||||
|
||||
fputs(message, file);
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
if (file)
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
void LogAdd (const char *message)
|
||||
{
|
||||
FILE *file;
|
||||
|
||||
file = fopen(LOGFILE, "a");
|
||||
|
||||
// Save log entry
|
||||
fputs(message, file);
|
||||
fclose(file);
|
||||
|
||||
if (file)
|
||||
fclose(file);
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// log.h
|
||||
//
|
||||
// Script Functions
|
||||
//
|
||||
//
|
||||
// Klemens Friedl, 19.03.2005
|
||||
// frik85@hotmail.com
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define LOGFILE "logfile.html"
|
||||
|
||||
extern bool LogCreated;
|
||||
|
||||
void Log (const char *message);
|
||||
void LogAdd (const char *message);
|
|
@ -1,192 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// 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;
|
||||
}
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// options.cpp
|
||||
//
|
||||
// Settting and Loading Options
|
||||
//
|
||||
//
|
||||
// Maarten Bosma, 09.01.2004
|
||||
// maarten.paul@bosma.de
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "package.hpp"
|
||||
#include "log.h"
|
||||
#include "expat.h"
|
||||
|
||||
#include <fstream>
|
||||
|
||||
|
||||
int PML_XmlDownload (pTree tree, const char* url, void* usrdata,
|
||||
XML_StartElementHandler start, XML_EndElementHandler end, XML_CharacterDataHandler text) ;
|
||||
|
||||
|
||||
// expat callback for start of a "node" tag
|
||||
void opt_start (void* usrdata, const char* tag, const char** arg)
|
||||
{
|
||||
TREE* tree = (TREE*)usrdata;
|
||||
|
||||
if (!strcmp(tag, "source"))
|
||||
{
|
||||
tree->sources.push_back((char*)NULL);
|
||||
tree->field = &tree->sources.back();
|
||||
}
|
||||
}
|
||||
|
||||
// expat callback for end of a "node" tag
|
||||
void opt_end (void* usrdata, const char* tag)
|
||||
{
|
||||
TREE* tree = (TREE*)usrdata;
|
||||
|
||||
tree->field = NULL;
|
||||
}
|
||||
|
||||
// expat callback for end of a "node" tag
|
||||
void opt_text (void* usrdata, const char* data, int len)
|
||||
{
|
||||
TREE* tree = (TREE*)usrdata;
|
||||
|
||||
if(!tree->field)
|
||||
return;
|
||||
|
||||
*tree->field = new char[len+1];
|
||||
strncpy(*tree->field, data, len);
|
||||
(*tree->field)[len] = '\0';
|
||||
}
|
||||
|
||||
|
||||
// ! ! ! F I X M E ! ! ! //
|
||||
/*
|
||||
int CreateOptions (TREE* tree)
|
||||
{
|
||||
ofstream file ("options.xml");
|
||||
|
||||
Log("* Creating options.xml from Resources");
|
||||
|
||||
HRSRC hres = FindResource(GetModuleHandle(L"package"), MAKEINTRESOURCE(123), RT_RCDATA);
|
||||
if (!hres)
|
||||
{
|
||||
Log("! ERROR: Could not load it !");
|
||||
return ERR_GENERIC;
|
||||
}
|
||||
|
||||
MessageBox(0,(WCHAR*)LockResource(LoadResource(NULL, hres)), 0, 0); // is empty
|
||||
//file << (WCHAR*)LockResource(LoadResource(NULL, hres));
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
*/
|
||||
|
||||
char* PML_Download (pTree, const char* url, const char* server, const char* filename);
|
||||
|
||||
int CreateOptions (TREE* tree)
|
||||
{
|
||||
Log("* Load options.xml from the Internet (Temporary Hack)");
|
||||
|
||||
CopyFileA( PML_Download(tree, "http://svn.reactos.org/svn/*checkout*/reactos/trunk/rosapps/packmgr/lib/options.xml", NULL, "options.xml"), "options.xml", TRUE);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
int LoadOptions (TREE* tree)
|
||||
{
|
||||
int error;
|
||||
|
||||
error = PML_XmlDownload(tree, "file://options.xml", (void*)tree, opt_start, opt_end, opt_text);
|
||||
if(!error)
|
||||
return ERR_OK;
|
||||
|
||||
CreateOptions(tree);
|
||||
return PML_XmlDownload(tree, "file://options.xml", (void*)tree, opt_start, opt_end, opt_text);
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
<options>
|
||||
<source>http://svn.reactos.org/svn/*checkout*/reactos/trunk/rosapps/packmgr/tree/</source>
|
||||
</options>
|
|
@ -1,288 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// package.cpp
|
||||
//
|
||||
// package related functions
|
||||
//
|
||||
//
|
||||
// Maarten Bosma, 09.01.2004
|
||||
// maarten.paul@bosma.de
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "package.hpp"
|
||||
#include "expat.h"
|
||||
#include "log.h"
|
||||
|
||||
int PML_XmlDownload (pTree, const char* url, void* usrdata, XML_StartElementHandler start,
|
||||
XML_EndElementHandler end, XML_CharacterDataHandler text=0);
|
||||
|
||||
|
||||
// expat callback for start of a package tag
|
||||
void pack_start (void* usrdata, const char* tag, const char** arg)
|
||||
{
|
||||
int i, id;
|
||||
PACKAGE* pack = (PACKAGE*)usrdata;
|
||||
|
||||
// if the tag is a script tag ...
|
||||
if(!strcmp(tag, "scripts"))
|
||||
{
|
||||
// ... read the arguments
|
||||
for (i=0; arg[i]; i+=2)
|
||||
{
|
||||
if(!strcmp(arg[i], "inst"))
|
||||
id = 0;
|
||||
|
||||
else if(!strcmp(arg[i], "update"))
|
||||
id = 1;
|
||||
|
||||
else if(!strcmp(arg[i], "uinst"))
|
||||
id = 2;
|
||||
|
||||
else if(!strcmp(arg[i], "srcinst"))
|
||||
id = 3;
|
||||
|
||||
else
|
||||
continue;
|
||||
|
||||
pack->files[id] = new char [strlen(arg[i+1])+1];
|
||||
strcpy(pack->files[id], arg[i+1]);
|
||||
}
|
||||
}
|
||||
|
||||
// ... save the field
|
||||
else
|
||||
{
|
||||
if(!strcmp(tag, "name"))
|
||||
pack->field = &pack->name;
|
||||
|
||||
else if(!strcmp(tag, "description"))
|
||||
pack->field = &pack->description;
|
||||
|
||||
else if (!strcmp(tag, "depent"))
|
||||
{
|
||||
pack->depencies.push_back((char*)NULL);
|
||||
pack->field = &pack->depencies.back();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// expat callback for end of a package tag
|
||||
void pack_end (void* usrdata, const char* tag)
|
||||
{
|
||||
PACKAGE* pack = (PACKAGE*)usrdata;
|
||||
|
||||
pack->field = NULL;
|
||||
}
|
||||
|
||||
// expat callback for text
|
||||
void pack_text (void* usrdata, const char* data, int len)
|
||||
{
|
||||
PACKAGE* pack = (PACKAGE*)usrdata;
|
||||
|
||||
if(!pack->field)
|
||||
return;
|
||||
|
||||
*pack->field = new char[len+1];
|
||||
strncpy(*pack->field, data, len);
|
||||
(*pack->field)[len] = '\0';
|
||||
}
|
||||
|
||||
// The user clicks on a package
|
||||
extern "C" int PML_LoadPackage (TREE* tree, int id, PML_SetButton SetButton)
|
||||
{
|
||||
PACKAGE* pack = &tree->packages[id];
|
||||
tree->setButton = SetButton;
|
||||
|
||||
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)
|
||||
return 1;
|
||||
|
||||
if(!pack->loaded)
|
||||
{
|
||||
PML_XmlDownload (tree, pack->path, (void*)pack, pack_start, pack_end, pack_text);
|
||||
pack->loaded = TRUE;
|
||||
}
|
||||
|
||||
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)i<tree->packages.size(); i++)
|
||||
{
|
||||
found = true;
|
||||
|
||||
for(j=0; (UINT)j<strlen(what); j++)
|
||||
{
|
||||
if(tolower(what[j]) != tolower(tree->packages[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, PML_Ask Ask)
|
||||
{
|
||||
UINT i;
|
||||
int ret = ERR_OK;
|
||||
|
||||
tree->setIcon = SetIcon;
|
||||
PACKAGE* pack = &tree->packages[id];
|
||||
|
||||
// if we have children, same action for them
|
||||
for (i=0; i<pack->children.size(); i++)
|
||||
ret = ret || PML_SetAction(tree, pack->children[i], action, SetIcon, Ask);
|
||||
|
||||
// is the action possible ?
|
||||
if(!pack->actions[action])
|
||||
return ERR_GENERIC;
|
||||
|
||||
// is it already set
|
||||
if(pack->action == action)
|
||||
return ERR_OK;
|
||||
|
||||
//
|
||||
if(pack->depencies.size() && action)
|
||||
{
|
||||
UINT count = pack->depencies.size();
|
||||
WCHAR buffer[2000], buffer2[200], errbuf[2000];
|
||||
PML_TransError(ERR_DEP1, (WCHAR*)buffer, sizeof(buffer)/sizeof(WCHAR));
|
||||
|
||||
for (i=0; i<pack->depencies.size(); i++)
|
||||
{
|
||||
int item = PML_FindItem(tree, pack->depencies[i]);
|
||||
|
||||
if(!item)
|
||||
return ERR_GENERIC;
|
||||
|
||||
if(action == tree->packages[item].action)// || tree->packages[item].installed
|
||||
{
|
||||
count--;
|
||||
continue;
|
||||
}
|
||||
|
||||
MultiByteToWideChar (CP_ACP, 0, pack->depencies[i], strlen(pack->depencies[i])+1, buffer2, 200);
|
||||
wsprintf(buffer, L"%s - %s\n", buffer, buffer2);//
|
||||
}
|
||||
|
||||
wcscat(buffer, PML_TransError(ERR_DEP2, (WCHAR*)errbuf, sizeof(errbuf)/sizeof(WCHAR)));
|
||||
|
||||
if(count)
|
||||
{
|
||||
if(!Ask(buffer))
|
||||
return ERR_GENERIC;
|
||||
|
||||
for (i=0; i<pack->depencies.size(); i++)
|
||||
{
|
||||
int item = PML_FindItem(tree, pack->depencies[i]);
|
||||
|
||||
tree->packages[item].neededBy.push_back(id);
|
||||
|
||||
PML_SetAction(tree, item, action, SetIcon, Ask);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// load it if it's not loaded yet
|
||||
else if (!pack->loaded && pack->path)
|
||||
{
|
||||
PML_XmlDownload (tree, pack->path, (void*)pack, pack_start, pack_end, pack_text);
|
||||
pack->loaded = TRUE;
|
||||
|
||||
return PML_SetAction(tree, id, action, SetIcon, Ask);
|
||||
}
|
||||
|
||||
// set the icon
|
||||
if(SetIcon && !pack->icon)
|
||||
SetIcon(id, action);
|
||||
|
||||
// set the button(s)
|
||||
if(tree->setButton && action != 2)
|
||||
{
|
||||
tree->setButton(1, action);
|
||||
//tree->setButton(pack->action+1, action);
|
||||
}
|
||||
|
||||
// can't do src install yet
|
||||
if(action == 2)
|
||||
{
|
||||
MessageBox(0, L"Sorry, but source install is not implemented yet.", 0,0);
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
// everything but undoing is done here
|
||||
else if (action != 0)
|
||||
{
|
||||
// since we are setting a action we undo it again
|
||||
if(tree->setButton)
|
||||
tree->setButton(1, 1);
|
||||
//tree->setButton(action+1, 0);
|
||||
|
||||
pack->action = action;
|
||||
|
||||
// root notes (like network) return here
|
||||
if(!pack->path)
|
||||
return ret;
|
||||
|
||||
// save the name of the corresponding script in a vector
|
||||
tree->todo.push_back(pack->files[action-1]);
|
||||
}
|
||||
|
||||
// undoing
|
||||
else
|
||||
{
|
||||
for(i=0; i<pack->neededBy.size(); i++)
|
||||
{
|
||||
if(tree->packages[pack->neededBy[i]].action)
|
||||
{
|
||||
SetIcon(id, pack->action);
|
||||
return ERR_GENERIC;
|
||||
}
|
||||
}
|
||||
|
||||
// root notes (like network) return here
|
||||
if(!pack->path || pack->action==0)
|
||||
return ret;
|
||||
|
||||
// erase from todo list
|
||||
for(i=0; i<tree->todo.size(); i++)
|
||||
if(!strcmp(tree->todo[i], pack->files[pack->action-1])) // look for right entry
|
||||
tree->todo.erase(tree->todo.begin()+i); // delete it
|
||||
|
||||
// set action back
|
||||
pack->action = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
//
|
||||
extern "C" char* PML_GetDescription (TREE* tree, int id)
|
||||
{
|
||||
PML_LoadPackage(tree, id, NULL);
|
||||
|
||||
return tree->packages[id].description;
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
LIBRARY package.dll
|
||||
|
||||
EXPORTS
|
||||
|
||||
PML_Abort
|
||||
PML_TransError
|
||||
PML_LoadTree
|
||||
PML_FindItem
|
||||
PML_LoadPackage
|
||||
PML_GetDescription
|
||||
PML_SetAction
|
||||
PML_DoIt
|
||||
PML_CloseTree
|
||||
|
||||
; EOF
|
|
@ -1,47 +0,0 @@
|
|||
////////////////////////////////////////////////
|
||||
//
|
||||
// package.hpp
|
||||
// Package C++ Header
|
||||
////////////////////////////////////////////////
|
||||
|
||||
#include <windows.h>
|
||||
#include "error.h"
|
||||
|
||||
|
||||
/* Callbacks */
|
||||
|
||||
typedef int (*PML_AddItem) (int id, const char* name, int parent, int icon);
|
||||
typedef int (*PML_SetStatus) (int status1, int status2, WCHAR* text);
|
||||
typedef int (*PML_SetButton) (DWORD dwID, BOOL state);
|
||||
typedef int (*PML_SetIcon) (int id, int icon);
|
||||
typedef int (*PML_SetText) (const char* text);
|
||||
typedef int (*PML_Ask) (const WCHAR* text);
|
||||
|
||||
|
||||
/* Structs */
|
||||
|
||||
typedef void* pTree;
|
||||
|
||||
#define MAXNODES 10000
|
||||
|
||||
|
||||
/* Prototypes */
|
||||
|
||||
void PML_Abort (void);
|
||||
WCHAR* PML_TransError (int code, WCHAR* string, INT maxchar);
|
||||
|
||||
int PML_LoadTree (pTree*, char* url, PML_AddItem);
|
||||
int PML_FindItem (pTree tree, const char* what);
|
||||
int PML_LoadPackage (pTree, int id, PML_SetButton);
|
||||
char* PML_GetDescription (pTree tree, int id);
|
||||
int PML_SetAction (pTree, int package, int action, PML_SetIcon, PML_Ask);
|
||||
int PML_DoIt (pTree, PML_SetStatus, PML_Ask);
|
||||
|
||||
void PML_CloseTree (pTree);
|
||||
|
||||
|
||||
/* Version */
|
||||
|
||||
#define PACKMGR_VERSION_MAJOR 0
|
||||
#define PACKMGR_VERSION_MINOR 3
|
||||
#define PACKMGR_VERSION_PATCH_LEVEL 1
|
|
@ -1,92 +0,0 @@
|
|||
////////////////////////////////////////////////
|
||||
//
|
||||
// package.hpp
|
||||
// Package C++ Header
|
||||
////////////////////////////////////////////////
|
||||
|
||||
#include <windows.h>
|
||||
#include <vector>
|
||||
#include "error.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* Callbacks */
|
||||
|
||||
typedef int (*PML_AddItem) (int id, const char* name, int parent, int icon);
|
||||
typedef int (*PML_SetStatus) (int status1, int status2, WCHAR* text);
|
||||
typedef int (*PML_SetButton) (DWORD dwID, BOOL state);
|
||||
typedef int (*PML_SetIcon) (int id, int icon);
|
||||
typedef int (*PML_SetText) (const char* text);
|
||||
typedef int (*PML_Ask) (const WCHAR* text);
|
||||
|
||||
|
||||
/* Structs */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char* path;
|
||||
char* name;
|
||||
char* description;
|
||||
char** field;
|
||||
|
||||
BOOL icon;
|
||||
BOOL loaded;
|
||||
vector<int> neededBy;
|
||||
vector<int> children;
|
||||
vector<char*> depencies;
|
||||
|
||||
int action;
|
||||
char* files [4];
|
||||
|
||||
union //which actions are possible
|
||||
{
|
||||
struct { BOOL none, inst, src_inst, update, uninstall; };
|
||||
BOOL actions [4];
|
||||
};
|
||||
|
||||
} PACKAGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char** field;
|
||||
|
||||
vector<char*> todo;
|
||||
vector<char*> sources;
|
||||
vector<char*> descriptionPath;
|
||||
vector<PACKAGE> packages;
|
||||
|
||||
PML_AddItem addItem;
|
||||
PML_SetButton setButton;
|
||||
PML_SetStatus setStatus;
|
||||
PML_SetIcon setIcon;
|
||||
PML_SetText setText;
|
||||
|
||||
} TREE, *pTree;
|
||||
|
||||
#define MAXNODES 10000
|
||||
|
||||
|
||||
/* Prototypes */
|
||||
|
||||
extern "C"
|
||||
{
|
||||
void PML_Abort (void);
|
||||
WCHAR* PML_TransError (int code, WCHAR* string, INT maxchar);
|
||||
|
||||
int PML_LoadTree (pTree*, char* url, PML_AddItem);
|
||||
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, PML_Ask);
|
||||
int PML_DoIt (pTree, PML_SetStatus, PML_Ask);
|
||||
|
||||
void PML_CloseTree (pTree);
|
||||
}
|
||||
|
||||
|
||||
/* Version */
|
||||
|
||||
#define PACKMGR_VERSION_MAJOR 0
|
||||
#define PACKMGR_VERSION_MINOR 3
|
||||
#define PACKMGR_VERSION_PATCH_LEVEL 1
|
|
@ -1,23 +0,0 @@
|
|||
<module name="package" type="win32dll" installbase="system32" installname="package.dll" allowwarnings="true" stdlib="host" crt="msvcrt">
|
||||
<importlibrary definition="package.def" />
|
||||
<include base="package">.</include>
|
||||
|
||||
<define name="UNICODE" />
|
||||
|
||||
<library>kernel32</library>
|
||||
<library>gdi32</library>
|
||||
<library>user32</library>
|
||||
<library>expat</library>
|
||||
<library>urlmon</library>
|
||||
<library>shell32</library>
|
||||
|
||||
<file>download.cpp</file>
|
||||
<file>functions.cpp</file>
|
||||
<file>log.cpp</file>
|
||||
<file>main.cpp</file>
|
||||
<file>options.cpp</file>
|
||||
<file>package.cpp</file>
|
||||
<file>script.cpp</file>
|
||||
<file>tree.cpp</file>
|
||||
<file>package.rc</file>
|
||||
</module>
|
|
@ -1,22 +0,0 @@
|
|||
|
||||
#include <windows.h>
|
||||
#include "error.h"
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Package Manager\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "package\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "package.dll\0"
|
||||
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* Language specific */
|
||||
|
||||
#include "lang/cs-CZ.rc"
|
||||
#include "lang/de-DE.rc"
|
||||
#include "lang/en-US.rc"
|
||||
#include "lang/es-ES.rc"
|
||||
#include "lang/fr-FR.rc"
|
||||
#include "lang/ru-RU.rc"
|
||||
#include "lang/uk-UA.rc"
|
||||
#include "lang/no-NO.rc"
|
||||
|
||||
/* EOF */
|
|
@ -1,278 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// script.cpp
|
||||
//
|
||||
// Implementaion of a basic basic :) interpreter
|
||||
//
|
||||
//
|
||||
// Maarten Bosma, 09.01.2004
|
||||
// maarten.paul@bosma.de
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "package.hpp"
|
||||
#include "script.h"
|
||||
#include "log.h"
|
||||
#include <fstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
// just a few Helpers
|
||||
void Replace (string* Where, string Old, string New, int start = 0, int end = -1, int instring = 1);
|
||||
int FindCount (string What, string Where, int start = 0, int end = -1);
|
||||
int Find (string Where, string What, int start = 0, int end = -1, int instring = 1);
|
||||
|
||||
|
||||
// Loads script from file, checks if it's synaxially correct
|
||||
// and converts it into a easy to interprete one.
|
||||
int RPS_Load (SCRIPT** script, const char* path)
|
||||
{
|
||||
string source;
|
||||
|
||||
/* We have to do it that way (doublepointer) because MinGw
|
||||
calls "delete" at the end of function otherwise. */
|
||||
(*script) = new SCRIPT;
|
||||
|
||||
// Load file to string
|
||||
ifstream file(path, ios_base::in);
|
||||
if (!file.is_open())
|
||||
return ERR_FILE;
|
||||
|
||||
getline(file, source, '\0');
|
||||
|
||||
// make sure last char is a new line
|
||||
source += "\n";
|
||||
|
||||
// Are all subs and strings closed ?
|
||||
// FIXME: Just a quick hack sould be both checked line by line
|
||||
if(FindCount(source, "\"")%2) // if count is uneven not all strings are closed
|
||||
return ERR_SYNATX;
|
||||
|
||||
if(FindCount(source, "Sub ") != FindCount(source, "End Sub\n"))
|
||||
return ERR_SYNATX;
|
||||
|
||||
// Delete comments
|
||||
while (true)
|
||||
{
|
||||
int start = Find(source, "'");
|
||||
if(start == NOTFOUND)
|
||||
break;
|
||||
int end = Find(source, "\n", start);
|
||||
source.erase(start, end-start); // needs size not line
|
||||
}
|
||||
|
||||
// Converte the file into some thing easier to interprete
|
||||
Replace(&source, "(", " ");
|
||||
Replace(&source, ")", " ");
|
||||
Replace(&source, ";", " ");
|
||||
Replace(&source, ",", " ");
|
||||
Replace(&source, "\"", " \" ");
|
||||
Replace(&source, "\t", " ");
|
||||
|
||||
Replace(&source, " ", " ");
|
||||
Replace(&source, "\n ", "\n");
|
||||
Replace(&source, " \n", "\n");
|
||||
Replace(&source, "\n\n", "\n");
|
||||
|
||||
if(source[0]=='\n')
|
||||
source.erase(0,1);
|
||||
|
||||
// copy string into struct (line by line)
|
||||
UINT i, line=0;
|
||||
for (i=0; i < source.size(); i++)
|
||||
{
|
||||
// Make everything non capital letters
|
||||
if (source[i] >= 65 && source[i] <= 90) // ASCII-Code (A-Z 65-90)
|
||||
{
|
||||
source[i] += 32; // ASCII-Code (a-z 97-122)
|
||||
}
|
||||
|
||||
else if (source[i] == '\"')
|
||||
{
|
||||
while(source[++i]!='\"');
|
||||
}
|
||||
|
||||
else if (source[i] == '\n')
|
||||
{
|
||||
(*script)->code.push_back(source.substr(line, i-line));
|
||||
line = i+1;
|
||||
}
|
||||
}
|
||||
|
||||
// create a sub table (with name, beginnig and end of function)
|
||||
for (i=0; i < (*script)->code.size(); i++) // code.size() is the cout of lines
|
||||
{
|
||||
SUB sub;
|
||||
|
||||
if((*script)->code[i].substr(0,4) != "sub ")
|
||||
return ERR_SYNATX; // script has to start with sub
|
||||
|
||||
sub.name = (*script)->code[i].substr(4,((*script)->code[i].size()-4));
|
||||
sub.start = i+1;
|
||||
|
||||
while ((*script)->code[i] != "end sub")
|
||||
{
|
||||
i++;
|
||||
//if script does not end with "end sub" we got a problem
|
||||
if (i>(*script)->code.size())
|
||||
return ERR_SYNATX;
|
||||
}
|
||||
|
||||
sub.end = i;
|
||||
(*script)->subs.push_back(sub);
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
|
||||
// Executes a subroutine of the script
|
||||
int RPS_Execute (SCRIPT* script, const char* function)
|
||||
{
|
||||
char *argv[100];
|
||||
char *buffer;
|
||||
int a, b, c, nr = NOTFOUND, argc = 0;
|
||||
|
||||
// find the right fuction
|
||||
for(a=0; (UINT)a<script->subs.size(); a++)
|
||||
if(script->subs[a].name == function)
|
||||
nr = a;
|
||||
|
||||
// if there isn't a fuction with this name we can't do anything
|
||||
if(nr == NOTFOUND)
|
||||
return ERR_OK;
|
||||
|
||||
// call the function
|
||||
for (a=script->subs[nr].start; a<script->subs[nr].end; a++)
|
||||
{
|
||||
// create a temporarry buffer
|
||||
buffer = new char[script->code[a].size()];
|
||||
strcpy(buffer, script->code[a].c_str());
|
||||
|
||||
// make the fist argument the function's name
|
||||
argv[0] = &buffer[0];
|
||||
|
||||
int buffer_size = (int)strlen(buffer);
|
||||
for (b=0; b<buffer_size+1; b++)
|
||||
{
|
||||
// ignore chars in strings
|
||||
if(buffer[b]=='\"')
|
||||
{
|
||||
argv[argc] = &buffer[b+1];
|
||||
|
||||
while(buffer[++b]!='\"');
|
||||
|
||||
buffer[b] = '\0';
|
||||
}
|
||||
|
||||
// create a new argument
|
||||
else if(buffer[b]==' ')
|
||||
{
|
||||
argc++;
|
||||
argv[argc] = &buffer[b+1];
|
||||
buffer[b] = '\0';
|
||||
|
||||
// we don't want buffer overflows
|
||||
if(argc == 99)
|
||||
return ERR_GENERIC;
|
||||
|
||||
}
|
||||
|
||||
// call the function
|
||||
else if(buffer[b]=='\0')
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
// log the name
|
||||
Log("* excute command: ");
|
||||
for(c=0; c<argc+1; c++)
|
||||
{
|
||||
LogAdd(argv[c]);
|
||||
LogAdd(" ");
|
||||
}
|
||||
|
||||
for(c=0; c<FUNC_COUNT; c++)
|
||||
if(!strcmp(argv[0], FuncTable[c].name))
|
||||
error = FuncTable[c].function(argc, &argv[0]);
|
||||
|
||||
if(error)
|
||||
return error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// start again with next line
|
||||
delete[] buffer;
|
||||
argc = 0;
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
// get a Constant or a variavle
|
||||
int RPS_getVar (const char* name)
|
||||
{
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
// Clears up Memory
|
||||
void RPS_Clear (SCRIPT* script)
|
||||
{
|
||||
if(script)
|
||||
delete script;
|
||||
}
|
||||
|
||||
/* Helper Functions */
|
||||
|
||||
// How often do we find a string inside another one
|
||||
int FindCount (string where, string what, int start, int end)
|
||||
{
|
||||
int counter = 0, pos;
|
||||
|
||||
while(true)
|
||||
{
|
||||
pos = (int)where.find (what, start);
|
||||
//could could not be found or is outside of search area
|
||||
if (pos == (int)string::npos || (end!=-1 && pos>end))
|
||||
break;
|
||||
start = pos+1;
|
||||
counter++;
|
||||
}
|
||||
|
||||
return counter;
|
||||
}
|
||||
|
||||
// Find (with only or not in Strings option)
|
||||
int Find (string where, string what, int start, int end, int instring)
|
||||
{
|
||||
int pos = (int)where.find (what, start);
|
||||
|
||||
//could could not be found or is outside of search area
|
||||
if (pos == (int)string::npos || (end!=-1 && pos>end))
|
||||
return -1;
|
||||
|
||||
// if the count of this quotes is eaven we are in string
|
||||
int isInString = FindCount(where, "\"", start, pos)%2;
|
||||
|
||||
// if so we go on searching
|
||||
if(isInString == instring)
|
||||
return Find (where, what, pos+1, end, instring);
|
||||
|
||||
return pos;
|
||||
|
||||
}
|
||||
|
||||
// Replace (using Find)
|
||||
void Replace (string* String, string Old, string New, int start, int end, int instring)
|
||||
{
|
||||
int pos = start;
|
||||
|
||||
while(true)
|
||||
{
|
||||
pos = Find(String->c_str(), Old, pos, end, instring);
|
||||
if (pos == -1)
|
||||
break;
|
||||
|
||||
String->replace (pos, Old.length(), New);
|
||||
}
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
////////////////////////////////////////////////
|
||||
//
|
||||
// package.hpp
|
||||
// Header for the script stuff
|
||||
////////////////////////////////////////////////
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* Structs */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
string name;
|
||||
int start, end;
|
||||
|
||||
} SUB;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vector<string> code;
|
||||
vector<SUB> subs;
|
||||
|
||||
} SCRIPT;
|
||||
|
||||
|
||||
/* Prototypes */
|
||||
|
||||
int RPS_Load (SCRIPT** script, const char* path);
|
||||
int RPS_Execute (SCRIPT* script, const char* function);
|
||||
int RPS_getVar (const char* name);
|
||||
void RPS_Clear (SCRIPT* script);
|
||||
|
||||
|
||||
/* Callbacks */
|
||||
|
||||
typedef int (*FUNC_PROC)(int, char**); // function callback
|
||||
|
||||
|
||||
/* Function table */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char* name;
|
||||
FUNC_PROC function;
|
||||
} FUNC_TABLE;
|
||||
|
||||
// very function is listed in there
|
||||
extern const FUNC_TABLE FuncTable[];
|
||||
|
||||
// count of functions
|
||||
#define FUNC_COUNT 3
|
||||
|
||||
|
||||
/* For the helper-funtions */
|
||||
|
||||
#define STR_NO 0x1;
|
||||
#define STR_ONLY 0x0;
|
||||
#define STR_YES 0x2;
|
||||
|
||||
// ^^ I would write down here that they
|
||||
// mean but I don't know anymore myself :O
|
|
@ -1,126 +0,0 @@
|
|||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// 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();
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
Sub Main
|
||||
' ToDo: Choose from different mirrors
|
||||
download "http://ovh.dl.sourceforge.net/sourceforge/sevenzip/7z432.exe", "7z432.exe"
|
||||
End Sub
|
||||
|
||||
Sub After
|
||||
shell 7z432.exe
|
||||
' ToDo: Delete 7z432.exe
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>7Zip</name>
|
||||
<version>4.32</version>
|
||||
<description>Utility to create and open zip, tar, rar and other archive files.</description>
|
||||
<scripts inst="7zip.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
Sub Main
|
||||
download "http://www.abiword.org/downloads/abiword/2.4.1/Windows/abiword-setup-2.4.1.exe", "abisetup.exe"
|
||||
End Sub
|
||||
|
||||
Sub After
|
||||
shell abisetup.exe
|
||||
' ToDo: Delete abisetup.exe
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>AbiWord</name>
|
||||
<version>2.4.1</version>
|
||||
<description>Word processor.</description>
|
||||
<scripts inst="abiword.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
Sub Main
|
||||
' ToDo: Choose from different mirrors
|
||||
download ("http://download.mozilla.org/?lang=de&product=firefox-1.5&os=win", "firefoxinstaller.exe")
|
||||
End Sub
|
||||
|
||||
Sub After
|
||||
shell "firefoxinstaller.exe"
|
||||
' ToDo: Delete firefoxinstaller.exe
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>Firefox</name>
|
||||
<version>1.5</version>
|
||||
<description>The famous OpenSource webbroswer.</description>
|
||||
<scripts inst="firefox.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
Sub Main
|
||||
' ToDo: Choose from different mirrors
|
||||
download ("http://www.aeicomputertech.com/_downloads/iview398.exe", "iview398.exe")
|
||||
End Sub
|
||||
|
||||
Sub After
|
||||
shell iview398.exe
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>IrfanView</name>
|
||||
<version>3.98</version>
|
||||
<description>Viewer for all kinds of graphics.</description>
|
||||
<scripts inst="irfanview.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
' ToDo: Find the best from all the installers and frontends
|
||||
' or add zip support for http://www1.mplayerhq.hu/MPlayer/releases/win32/old/MPlayer-mingw32-1.0pre7.zip
|
|
@ -1,13 +0,0 @@
|
|||
<!--
|
||||
ToDo:
|
||||
Chhose the right one from all the installer and GUI fronend packages
|
||||
or add zip support for the official distro
|
||||
-->
|
||||
|
||||
<package>
|
||||
<name>mPlayer</name>
|
||||
<version>1.0 pre7</version>
|
||||
<description>Commandline Media Player which works under ReactOs.</description>
|
||||
<scripts inst="mplayer.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1 +0,0 @@
|
|||
' ToDo: Implment Zip unpacking
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>OpenOffice 1</name>
|
||||
<version>1.1.5</version>
|
||||
<description>OpenSource replacement for Microsoft Office.</description>
|
||||
<scripts inst="openoffice.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
Sub Main
|
||||
' ToDo: Download putty.exe in own dir
|
||||
download ("http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe", "C:\Program Files\putty.exe")
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>Putty</name>
|
||||
<version>beta 0.58</version>
|
||||
<description>SSH and Telnet client.</description>
|
||||
<scripts inst="putty.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
Sub Main
|
||||
download ("http://blight.reactos.at/reactos-be/ReactOS%20Build%20Environment%200.1-3.4.2.exe", "rosbe01.exe")
|
||||
End Sub
|
||||
|
||||
Sub After
|
||||
shell rosbe01.exe
|
||||
' ToDo: Delete rosbe01.exe
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>Build Envirement</name>
|
||||
<version>0.1</version>
|
||||
<description>Allows you to build the ReactOS Source. For more instructions see our wiki.</description>
|
||||
<scripts inst="rosbe.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
Sub Main
|
||||
' ToDo: Choose from different mirrors
|
||||
download "http://svn.reactos.org/packages/samba-tng.exe", "samba-tng.exe"
|
||||
End Sub
|
||||
|
||||
Sub After
|
||||
shell samba-tng.exe
|
||||
' ToDo: Delete samba-tng.exe
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>Samba-TNG</name>
|
||||
<version>snapshot</version>
|
||||
<description>Command line clients to access files and print over SMB protocol</description>
|
||||
<scripts inst="samba-tng.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
' ToDo: Implement Unzipping
|
||||
' http://www.ritlabs.com/download/tinyweb/tinyweb.zip
|
|
@ -1,11 +0,0 @@
|
|||
<!--
|
||||
ToDo:
|
||||
Implement Unzipping
|
||||
-->
|
||||
<package>
|
||||
<name>Ritlab Tiny Webserver</name>
|
||||
<version>1.93</version>
|
||||
<description>This is a simple webserver running under ReactOs.</description>
|
||||
<scripts inst="tiny.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
<tree>
|
||||
<node name="Internet and Network" icon="5">
|
||||
<node name="Firefox" file="firefox.xml"/>
|
||||
<node name="Putty" file="putty.xml"/>
|
||||
<!--<node name="Tiny Webserver" file="tiny.xml"/>--> <!-- Needs Zip support -->
|
||||
</node>
|
||||
<node name="Office" icon="6">
|
||||
<node name="AbiWord" file="abiword.xml"/>
|
||||
<!--<node name="OpenOffice 1" file="openoffice.xml"/>--> <!-- Needs Zip support -->
|
||||
</node>
|
||||
<node name="Graphics" icon="7">
|
||||
<node name="IrfanView" file="irfanview.xml"/>
|
||||
<node name="TuxPaint" file="tuxpaint.xml"/>
|
||||
</node>
|
||||
<node name="Multimedia" icon="8">
|
||||
<!--<node name="mPlayer" file="mplayer.xml"/>--> <!-- ToDo: Choose a good one from all the installers and frondends -->
|
||||
<node>
|
||||
<node name="Development" icon="9">
|
||||
<node name="Build Envirment" file="rosbe.xml"/>
|
||||
</node>
|
||||
<node name="Games and Fun" icon="10"/>
|
||||
<node name="Tools" icon="11">
|
||||
<node name="7Zip" file="7zip.xml"/>
|
||||
</node>
|
||||
<node name="Others" icon="12"/>
|
||||
<node name="Installed Programms" icon="13"/>
|
||||
</tree>
|
|
@ -1,13 +0,0 @@
|
|||
<tree>
|
||||
<node name="7Zip" file="7zip.xml"/>
|
||||
<node name="AbiWord" file="abiword.xml"/>
|
||||
<node name="Build Envirment" file="rosbe.xml"/>
|
||||
<node name="Firefox" file="firefox.xml"/>
|
||||
<node name="IrfanView" file="irfanview.xml"/>
|
||||
<!--<node name="mPlayer" file="mplayer.xml"/>--> <!-- ToDo: Choose a good one from all the installers and frondends -->
|
||||
<!--<node name="OpenOffice 1" file="openoffice.xml"/>--> <!-- Needs Zip support -->
|
||||
<node name="Putty" file="putty.xml"/>
|
||||
<node name="Samba-TNG" file="samba-tng.xml"/>
|
||||
<node name="TuxPaint" file="tuxpaint.xml"/>
|
||||
<!--<node name="Tiny Webserver" file="tiny.xml"/>--> <!-- Needs Zip support -->
|
||||
</tree>
|
|
@ -1,70 +0,0 @@
|
|||
<tree>
|
||||
<node name="Warning: Not up to date"/>
|
||||
<node name="Internet and Network" icon="5">
|
||||
<node name="Browser" icon="5">
|
||||
<node name="MozillaControl" file="mozcontrol.xml"/>
|
||||
</node>
|
||||
<node name="Email" icon="5"/>
|
||||
<node name="Instant Messaging and IRC" icon="5">
|
||||
<node name="VoIP" icon="5"/>
|
||||
</node>
|
||||
<node name="Filesharing" icon="5"/>
|
||||
<node name="Remotecontrol" icon="5"/>
|
||||
<node name="Server" icon="5">
|
||||
<node name="File-Server" icon="5"/>
|
||||
<node name="HTTP" icon="5"/>
|
||||
<node name="IRC" icon="5"/>
|
||||
<node name="FTP" icon="5"/>
|
||||
</node>
|
||||
<node name="Network monitoring" icon="5"/>
|
||||
<node name="Security" icon="5"/>
|
||||
<node name="Streaming" icon="5"/>
|
||||
<node name="Other" icon="5"/>
|
||||
</node>
|
||||
<node name="Office" icon="6">
|
||||
<node name="Writing" icon="6">
|
||||
<node name="PDF" icon="6"/>
|
||||
<node name="AbiWord" file="abiword.xml"/>
|
||||
</node>
|
||||
<node name="Dictionaries" icon="6"/>
|
||||
</node>
|
||||
<node name="Graphics" icon="7">
|
||||
<node name="Vector" icon="7"/>
|
||||
<node name="Pixel" icon="7"/>
|
||||
<node name="3D" icon="7"/>
|
||||
</node>
|
||||
<node name="Multimedia" icon="8">
|
||||
<node name="Codecs" icon="8"/>
|
||||
<node name="Editors" icon="8"/>
|
||||
<node name="Players" icon="8"/>
|
||||
</node>
|
||||
<node name="Development" icon="9">
|
||||
<node name="IDE" icon="9"/>
|
||||
<node name="Compiler" icon="9"/>
|
||||
<node name="Version Control" icon="9"/>
|
||||
<node name="Web" icon="9"/>
|
||||
<node name="Other" icon="9"/>
|
||||
</node>
|
||||
<node name="Games and Fun" icon="10"/>
|
||||
<node name="Tools" icon="11">
|
||||
<node name="Compression" icon="11"/>
|
||||
<node name="Backup" icon="11"/>
|
||||
<node name="Burning" icon="11">
|
||||
<node name="CD" icon="11"/>
|
||||
<node name="DVD" icon="11"/>
|
||||
</node>
|
||||
</node>
|
||||
<node name="Others" icon="12">
|
||||
<node name="Desktop Environments and Shellreplacements" icon="12"/>
|
||||
<node name="Desktop" icon="12"/>
|
||||
<node name="Antivirus" icon="12"/>
|
||||
<node name="Emulators" icon="12">
|
||||
<node name="Computers" icon="12"/>
|
||||
<node name="Systems" icon="12"/>
|
||||
<node name="Games" icon="12"/>
|
||||
</node>
|
||||
<node name="Drivers" icon="12"/>
|
||||
</node>
|
||||
<node name="Installed Programms" icon="13"/>
|
||||
</tree>
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
Sub Main
|
||||
' ToDo: Pick a mirror
|
||||
download ("http://switch.dl.sourceforge.net/sourceforge/tuxpaint/tuxpaint-0.9.15-2-win32-installer.exe", "tuxpaint-inst.exe")
|
||||
End Sub
|
||||
|
||||
Sub After
|
||||
shell tuxpaint-inst.exe
|
||||
' ToDo: delete tuxpaint-inst.exe
|
||||
End Sub
|
|
@ -1,7 +0,0 @@
|
|||
<package>
|
||||
<name>TuxPaint</name>
|
||||
<version>0.9.15-2</version>
|
||||
<description>An open source bitmap graphics editor geared towards young children.</description>
|
||||
<scripts inst="tuxpaint.inst.rps"/>
|
||||
</package>
|
||||
|
|
@ -20,8 +20,4 @@
|
|||
<directory name="lib">
|
||||
<xi:include href="lib/directory.rbuild" />
|
||||
</directory>
|
||||
|
||||
<directory name="templates">
|
||||
<xi:include href="templates/directory.rbuild" />
|
||||
</directory>
|
||||
</group>
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<group xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<directory name="dialog">
|
||||
<xi:include href="dialog/dialog.rbuild" />
|
||||
</directory>
|
||||
|
||||
<!--
|
||||
<directory name="mdi">
|
||||
<xi:include href="mdi/mdi.rbuild" />
|
||||
</directory>
|
||||
-->
|
||||
</group>
|