Move the downloader tool into trunk
authorGed Murphy <gedmurphy@reactos.org>
Sat, 11 Apr 2009 16:51:57 +0000 (16:51 +0000)
committerGed Murphy <gedmurphy@reactos.org>
Sat, 11 Apr 2009 16:51:57 +0000 (16:51 +0000)
svn path=/trunk/; revision=40461

48 files changed:
reactos/base/applications/applications.rbuild
reactos/base/applications/downloader/download.c [new file with mode: 0644]
reactos/base/applications/downloader/downloader.rbuild [new file with mode: 0644]
reactos/base/applications/downloader/downloader.rc [new file with mode: 0644]
reactos/base/applications/downloader/downloader.xml [new file with mode: 0644]
reactos/base/applications/downloader/lang/bg-BG.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/de-DE.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/el-GR.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/en-US.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/es-ES.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/fr-FR.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/id-ID.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/it-IT.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/lt-LT.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/no-NO.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/pl-PL.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/ru-RU.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/sk-SK.rc [new file with mode: 0644]
reactos/base/applications/downloader/lang/uk-UA.rc [new file with mode: 0644]
reactos/base/applications/downloader/main.c [new file with mode: 0644]
reactos/base/applications/downloader/patches/d2fix.c [new file with mode: 0644]
reactos/base/applications/downloader/resources.h [new file with mode: 0644]
reactos/base/applications/downloader/resources/0.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/1.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/10.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/11.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/12.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/13.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/2.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/3.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/4.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/5.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/6.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/7.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/8.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/9.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/download.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/help.ico [new file with mode: 0644]
reactos/base/applications/downloader/resources/logo.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/main.ico [new file with mode: 0644]
reactos/base/applications/downloader/resources/preferences.ico [new file with mode: 0644]
reactos/base/applications/downloader/resources/underline.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/uninstall.bmp [new file with mode: 0644]
reactos/base/applications/downloader/resources/update.ico [new file with mode: 0644]
reactos/base/applications/downloader/rsrc.rc [new file with mode: 0644]
reactos/base/applications/downloader/structures.h [new file with mode: 0644]
reactos/base/applications/downloader/xml.c [new file with mode: 0644]
reactos/boot/bootdata/packages/reactos.dff

index 30ae12b..18b0a75 100644 (file)
@@ -16,6 +16,9 @@
        <directory name="control">
                <xi:include href="control/control.rbuild" />
        </directory>
+       <directory name="downloader">
+               <xi:include href="downloader/downloader.rbuild" />
+       </directory>    
        <directory name="dxdiag">
                <xi:include href="dxdiag/dxdiag.rbuild" />
        </directory>
diff --git a/reactos/base/applications/downloader/download.c b/reactos/base/applications/downloader/download.c
new file mode 100644 (file)
index 0000000..1dc77c6
--- /dev/null
@@ -0,0 +1,402 @@
+/* PROJECT:     ReactOS Downloader (was GetFirefox)
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        base/applications/downloader/download.c
+ * PURPOSE:     Displaying a download dialog
+ * COPYRIGHT:   Copyright 2001 John R. Sheets (for CodeWeavers)
+ *              Copyright 2004 Mike McCormack (for CodeWeavers)
+ *              Copyright 2005 Ge van Geldorp (gvg@reactos.org)
+ *              Copyright 2007 Dmitry Chapyshev (lentind@yandex.ru)
+ */
+/*
+ * Based on Wine dlls/shdocvw/shdocvw_main.c
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define COBJMACROS
+#define WIN32_NO_STATUS
+#include <windows.h>
+#include <commctrl.h>
+#include <shlobj.h>
+#include <shlwapi.h>
+#include <urlmon.h>
+
+#include "resources.h"
+#include "structures.h"
+
+#define NDEBUG
+#include <debug.h>
+
+extern struct Application* SelectedApplication;
+extern WCHAR Strings [STRING_COUNT][MAX_STRING_LENGHT];
+
+typedef struct _IBindStatusCallbackImpl
+{
+    const IBindStatusCallbackVtbl *vtbl;
+    LONG ref;
+    HWND hDialog;
+    BOOL *pbCancelled;
+} IBindStatusCallbackImpl;
+
+static HRESULT WINAPI
+dlQueryInterface(IBindStatusCallback* This, REFIID riid, void** ppvObject)
+{
+    if (NULL == ppvObject)
+    {
+        return E_POINTER;
+    }
+
+    if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IBindStatusCallback))
+    {
+        IBindStatusCallback_AddRef( This );
+        *ppvObject = This;
+        return S_OK;
+    }
+
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI
+dlAddRef(IBindStatusCallback* iface)
+{
+    IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
+
+    return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI
+dlRelease(IBindStatusCallback* iface)
+{
+    IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
+    DWORD ref = InterlockedDecrement(&This->ref);
+
+    if( !ref )
+    {
+        DestroyWindow( This->hDialog );
+        HeapFree(GetProcessHeap(), 0, This);
+    }
+
+    return ref;
+}
+
+static HRESULT WINAPI
+dlOnStartBinding(IBindStatusCallback* iface, DWORD dwReserved, IBinding* pib)
+{
+    DPRINT1("OnStartBinding not implemented\n");
+
+    return S_OK;
+}
+
+static HRESULT WINAPI
+dlGetPriority(IBindStatusCallback* iface, LONG* pnPriority)
+{
+    DPRINT1("GetPriority not implemented\n");
+
+    return S_OK;
+}
+
+static HRESULT WINAPI
+dlOnLowResource( IBindStatusCallback* iface, DWORD reserved)
+{
+    DPRINT1("OnLowResource not implemented\n");
+
+    return S_OK;
+}
+
+static HRESULT WINAPI
+dlOnProgress(IBindStatusCallback* iface, ULONG ulProgress,
+            ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
+{
+    IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
+    HWND Item;
+    LONG r;
+    WCHAR OldText[100];
+
+    Item = GetDlgItem(This->hDialog, IDC_PROGRESS);
+    if (NULL != Item && 0 != ulProgressMax)
+    {
+        SendMessageW(Item, PBM_SETPOS, ((ULONGLONG)ulProgress * 100) / ulProgressMax, 0);
+    }
+
+    Item = GetDlgItem(This->hDialog, IDC_STATUS);
+    if (NULL != Item && NULL != szStatusText)
+    {
+        SendMessageW(Item, WM_GETTEXT, sizeof(OldText) / sizeof(OldText[0]),
+                    (LPARAM) OldText);
+        if (sizeof(OldText) / sizeof(OldText[0]) - 1 <= wcslen(OldText) || 0 != wcscmp(OldText, szStatusText))
+        {
+            SendMessageW(Item, WM_SETTEXT, 0, (LPARAM) szStatusText);
+        }
+    }
+
+    SetLastError(0);
+    r = GetWindowLongPtrW(This->hDialog, GWLP_USERDATA);
+    if (0 != r || 0 != GetLastError())
+    {
+        *This->pbCancelled = TRUE;
+        DPRINT("Cancelled\n");
+        return E_ABORT;
+    }
+
+    return S_OK;
+}
+
+static HRESULT WINAPI
+dlOnStopBinding(IBindStatusCallback* iface, HRESULT hresult, LPCWSTR szError)
+{
+    DPRINT1("OnStopBinding not implemented\n");
+
+    return S_OK;
+}
+
+static HRESULT WINAPI
+dlGetBindInfo(IBindStatusCallback* iface, DWORD* grfBINDF, BINDINFO* pbindinfo)
+{
+    DPRINT1("GetBindInfo not implemented\n");
+
+    return S_OK;
+}
+
+static HRESULT WINAPI
+dlOnDataAvailable(IBindStatusCallback* iface, DWORD grfBSCF,
+                DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
+{
+    DPRINT1("OnDataAvailable implemented\n");
+
+    return S_OK;
+}
+
+static HRESULT WINAPI
+dlOnObjectAvailable(IBindStatusCallback* iface, REFIID riid, IUnknown* punk)
+{
+    DPRINT1("OnObjectAvailable implemented\n");
+
+    return S_OK;
+}
+
+static const IBindStatusCallbackVtbl dlVtbl =
+{
+    dlQueryInterface,
+    dlAddRef,
+    dlRelease,
+    dlOnStartBinding,
+    dlGetPriority,
+    dlOnLowResource,
+    dlOnProgress,
+    dlOnStopBinding,
+    dlGetBindInfo,
+    dlOnDataAvailable,
+    dlOnObjectAvailable
+};
+
+static IBindStatusCallback*
+CreateDl(HWND Dlg, BOOL *pbCancelled)
+{
+    IBindStatusCallbackImpl *This;
+
+    This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IBindStatusCallbackImpl));
+    if (!This)
+      return NULL;
+
+    This->vtbl = &dlVtbl;
+    This->ref = 1;
+    This->hDialog = Dlg;
+    This->pbCancelled = pbCancelled;
+
+    return (IBindStatusCallback*) This;
+}
+
+static DWORD WINAPI
+ThreadFunc(LPVOID Context)
+{
+    //static const WCHAR szUrl[] = DownloadUrl;
+    IBindStatusCallback *dl;
+    WCHAR path[MAX_PATH];
+    LPWSTR p;
+    STARTUPINFOW si;
+    PROCESS_INFORMATION pi;
+    HWND Dlg = (HWND) Context;
+    DWORD r;
+    BOOL bCancelled = FALSE;
+    BOOL bTempfile = FALSE;
+    HKEY hKey;
+    DWORD dwSize = MAX_PATH;
+
+    /* built the path for the download */
+    p = wcsrchr(SelectedApplication->Location, L'/');
+    if (NULL == p)
+    {
+        goto end;
+    }
+
+    /* Create default download path */
+    if (GetWindowsDirectory(path, sizeof(path) / sizeof(WCHAR)))
+    {
+        WCHAR DPath[256];
+        int i;
+        for (i = 0; i < 4; i++)
+        {
+            if (i == 3)
+            {
+                DPath[i] = '\0';
+                break;
+            }
+            DPath[i] = path[i];
+        }
+        LoadString(GetModuleHandle(NULL), IDS_DOWNLOAD_FOLDER, path, sizeof(path) / sizeof(WCHAR));
+        wcscat((LPWSTR)DPath, path);
+        wcscpy(path, DPath);
+    }
+
+    if (RegOpenKey(HKEY_LOCAL_MACHINE,
+                   TEXT("Software\\ReactOS\\Downloader"),
+                   &hKey) == ERROR_SUCCESS)
+    {
+        if ((RegQueryValueEx(hKey,
+                             L"DownloadFolder",
+                             NULL,
+                             NULL,
+                             (LPBYTE)&path,
+                             &dwSize) != ERROR_SUCCESS) && (path[0] == 0))
+        {
+            goto end;
+        }
+    }
+
+    if (GetFileAttributes(path) == 0xFFFFFFFF)
+        if (!CreateDirectory((LPCTSTR)path,NULL))
+        {
+            goto end;
+        }
+    wcscat(path, L"\\");
+    wcscat(path, p + 1);
+
+    /* download it */
+    bTempfile = TRUE;
+    dl = CreateDl(Context, &bCancelled);
+    r = URLDownloadToFileW(NULL, SelectedApplication->Location, path, 0, dl);
+    if (NULL != dl)
+    {
+        IBindStatusCallback_Release(dl);
+    }
+    if (S_OK != r)
+    {
+        MessageBoxW(0,Strings[IDS_DOWNLOAD_ERROR],0,0);
+        goto end;
+    }
+    else if (bCancelled)
+    {
+        goto end;
+    }
+    ShowWindow(Dlg, SW_HIDE);
+
+    /* run it */
+    memset(&si, 0, sizeof(si));
+    si.cb = sizeof(si);
+    r = CreateProcessW(path, NULL, NULL, NULL, 0, 0, NULL, NULL, &si, &pi);
+    if (0 == r)
+    {
+        goto end;
+    }
+    CloseHandle(pi.hThread);
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    end:
+        if (bTempfile)
+        {
+            if (bCancelled)
+                DeleteFileW(path);
+            else
+            {
+                DWORD dwSize = sizeof(DWORD);
+                DWORD dwValue, dwType = REG_DWORD;
+                if (RegQueryValueEx(hKey,
+                                    L"DeleteInstaller",
+                                    NULL,
+                                    &dwType,
+                                    (LPBYTE)&dwValue,
+                                    &dwSize) == ERROR_SUCCESS)
+                    if (dwValue == 0x1)
+                        DeleteFileW(path);
+                RegCloseKey(hKey);
+            }
+        }
+    EndDialog(Dlg, 0);
+    return 0;
+}
+
+INT_PTR CALLBACK
+DownloadProc(HWND Dlg, UINT Msg, WPARAM wParam, LPARAM lParam)
+{
+    HANDLE Thread;
+    DWORD ThreadId;
+    HWND Item;
+
+    switch (Msg)
+    {
+        case WM_INITDIALOG:/*
+      Icon = LoadIconW((HINSTANCE) GetWindowLongPtr(Dlg, GWLP_HINSTANCE),
+                       MAKEINTRESOURCEW(IDI_ICON_MAIN));
+      if (NULL != Icon)
+        {
+          SendMessageW(Dlg, WM_SETICON, ICON_BIG, (LPARAM) Icon);
+          SendMessageW(Dlg, WM_SETICON, ICON_SMALL, (LPARAM) Icon);
+        }*/
+            SetWindowLongPtrW(Dlg, GWLP_USERDATA, 0);
+            Item = GetDlgItem(Dlg, IDC_PROGRESS);
+            if (NULL != Item)
+            {
+                SendMessageW(Item, PBM_SETRANGE, 0, MAKELPARAM(0,100));
+                SendMessageW(Item, PBM_SETPOS, 0, 0);
+            }/*
+      Item = GetDlgItem(Dlg, IDC_REMOVE);
+      if (NULL != Item)
+        {
+          if (GetShortcutName(ShortcutName) &&
+              INVALID_FILE_ATTRIBUTES != GetFileAttributesW(ShortcutName))
+            {
+              SendMessageW(Item, BM_SETCHECK, BST_CHECKED, 0);
+            }
+          else
+            {
+              SendMessageW(Item, BM_SETCHECK, BST_UNCHECKED, 0);
+              ShowWindow(Item, SW_HIDE);
+            }
+        }*/
+            Thread = CreateThread(NULL, 0, ThreadFunc, Dlg, 0, &ThreadId);
+            if (NULL == Thread)
+            {
+                return FALSE;
+            }
+            CloseHandle(Thread);
+            return TRUE;
+
+        case WM_COMMAND:
+            if (wParam == IDCANCEL)
+            {
+                SetWindowLongPtrW(Dlg, GWLP_USERDATA, 1);
+                PostMessage(Dlg, WM_CLOSE, 0, 0);
+            }
+            return FALSE;
+
+        case WM_CLOSE:
+            EndDialog(Dlg, 0);
+            return TRUE;
+
+        default:
+            return FALSE;
+    }
+}
diff --git a/reactos/base/applications/downloader/downloader.rbuild b/reactos/base/applications/downloader/downloader.rbuild
new file mode 100644 (file)
index 0000000..6aca8fc
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<group xmlns:xi="http://www.w3.org/2001/XInclude">
+       <installfile installbase="system32">downloader.xml</installfile>
+       <module name="downloader" type="win32gui" installbase="system32" installname="downloader.exe" unicode="yes">
+               <include base="downloader">.</include>
+               <include base="expat">.</include>
+
+               <library>kernel32</library>
+               <library>advapi32</library>
+               <library>ntdll</library>
+               <library>user32</library>
+               <library>gdi32</library>
+               <library>shell32</library>
+               <library>comctl32</library>
+               <library>msimg32</library>
+               <library>shlwapi</library>
+               <library>urlmon</library>
+               <library>uuid</library>
+               <library>expat</library>
+
+               <file>main.c</file>
+               <file>xml.c</file>
+               <file>download.c</file>
+               <file>downloader.rc</file>
+       </module>
+</group>
diff --git a/reactos/base/applications/downloader/downloader.rc b/reactos/base/applications/downloader/downloader.rc
new file mode 100644 (file)
index 0000000..e4cdb19
--- /dev/null
@@ -0,0 +1,10 @@
+#include <windows.h>
+#include "resources.h"
+
+#define REACTOS_STR_FILE_DESCRIPTION     "Download !\0"
+#define REACTOS_STR_INTERNAL_NAME        "downloader\0"
+#define REACTOS_STR_ORIGINAL_FILENAME    "downloader.exe\0"
+
+#include <reactos/version.rc>
+
+#include "rsrc.rc"
diff --git a/reactos/base/applications/downloader/downloader.xml b/reactos/base/applications/downloader/downloader.xml
new file mode 100644 (file)
index 0000000..fb29bd3
--- /dev/null
@@ -0,0 +1,297 @@
+<tree Version="1"> <!-- Application version this tree is made for -->
+       <category name="Internet &amp; Network" icon="1">
+               <application name="Firefox 1.5">
+                       <regname>Mozilla Firefox (1.5)</regname>
+                       <licence>MPL/GPL/LGPL</licence>
+                       <version>1.5.0.12</version>
+                       <description>The most popular and one of the best free Web Browsers out there.</description>
+                       <location>http://svn.reactos.org/packages/Firefox%20Setup%201.5.0.12.exe</location>
+               </application>
+               <application name="Firefox 2.0">
+                       <regname>Mozilla Firefox (2.0.0.20)</regname>
+                       <licence>MPL/GPL/LGPL</licence>
+                       <version>2.0.0.20</version>
+                       <description>The most popular and one of the best free Web Browsers out there.</description>
+                       <location>http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.20/win32/en-US/Firefox%20Setup%202.0.0.20.exe</location>
+               </application>
+               <application name="Opera">
+                       <regname>Opera</regname>
+                       <licence>Freeware</licence>
+                       <version>9.63</version>
+                       <description>The popular Opera Browser with many advanced features and including a Mail and BitTorrent client.</description>
+                       <location>http://ftp.opera.com/pub/opera/win/963/en/Opera_963_classic_Setup.exe</location>
+               </application>
+               <application name="Thunderbird 2.0">
+                       <regname>Mozilla Thunderbird (2.0.0.19)</regname>
+                       <licence>MPL/GPL/LGPL</licence>
+                       <version>2.0.0.19</version>
+                       <description>The most popular and one of the best free Mail Clients out there.</description>
+                       <location>http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.19/win32/en-US/Thunderbird%20Setup%202.0.0.19.exe</location>
+               </application>
+               <application name="SeaMonkey">
+                       <regname>SeaMonkey (1.1.14)</regname>
+                       <version>1.1.14</version>
+                       <description>Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.</description>
+                       <location>http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/1.1.14/seamonkey-1.1.14.en-US.win32.installer.exe</location>
+               </application>
+               <application name="Mozilla ActiveX Control">
+                       <regname>Mozilla ActiveX Control v1.7.12 (ReactOS special)</regname>
+                       <version>1.7.12</version>
+                       <description>Essential Component to get ReactOS Explorer's and other applications' Internet Browsing feature running.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/reactos/MozillaControl1712-ReactOS.exe</location>
+               </application>
+               <application name="Off By One Browser">
+                       <regname>The Off By One Web Browser</regname>
+                       <description>The Off By One Browser is a very small and fast web browser with full HTML 3.2 support.</description>
+                       <location>http://offbyone.com/offbyone/images/OffByOneSetup.exe</location>
+               </application>
+               <application name="mIRC">
+                       <regname>mIRC</regname>
+                       <licence>Shareware</licence>
+                       <version>6.35</version>
+                       <description>The most popular client for the Internet Relay Chat (IRC)</description>
+                       <location>http://mirc.bigchief.dk/mirc635.exe</location>
+               </application>
+               <application name="Samba TNG">
+                       <description>This tool allows you to access your Windows shared folders/printers with ReactOS.</description>
+                       <location>http://svn.reactos.org/packages/samba-tng.exe</location>
+               </application>
+               <application name="Miranda IM">
+                       <regname>Miranda IM</regname>
+                       <version>0.7.4</version>
+                       <description>Open source multiprotocol instant messaging application - May not work completely.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/miranda/miranda-im-v0.7.4-unicode.exe</location>
+               </application>
+               <application name="Putty">
+                       <regname>PuTTY version 0.60</regname>
+                       <licence>MIT</licence>
+                       <version>0.60</version>
+                       <description>A free SSH, Telnet, rlogin, and raw TCP client.</description>
+                       <location>http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.60-installer.exe</location>
+               </application>
+       </category>
+       <category name="Office" icon="2">
+               <application name="Abiword">
+                       <regname>"AbiWord 2.6.4 (remove only)"</regname>
+                       <version>2.6.4</version>
+                       <description>Word processor.</description>
+                       <location>http://www.abiword.org/downloads/abiword/2.6.4/Windows/abiword-setup-2.6.4.exe</location>
+               </application>
+               <application name="OpenOffice 2.4">
+                       <regname>OpenOffice.org 2.4.2</regname>
+                       <version>2.4.2</version>
+                       <description>THE Open Source Office Suite.</description>
+                       <location>http://ftp.plusline.de/OpenOffice/stable/2.4.2/OOo_2.4.2_Win32Intel_install_wJRE_en-US.exe</location>
+               </application>
+               <application name="OpenOffice 3.0">
+                       <regname>OpenOffice.org 3.0.1</regname>
+                       <version>3.0.1</version>
+                       <description>THE Open Source Office Suite.</description>
+                       <location>http://ftp.tu-chemnitz.de/pub/openoffice/stable/3.0.1/OOo_3.0.1_Win32Intel_install_en-US.exe</location>
+               </application>
+       </category>
+       <category name="Graphics" icon="3">
+               <application name="IrfanView">
+                       <regname>IrfanView (remove only)</regname>
+                       <version>4.23</version>
+                       <description>Viewer for all kinds of graphics/audio files/video files.</description>
+                       <location>http://irfanview.tuwien.ac.at/iview423_setup.exe</location>
+               </application>
+               <application name="IrfanView Plugins">
+                       <version>4.22</version>
+                       <description>Additional Plugins for supporting more file types.</description>
+                       <location>http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_422_setup.exe</location>
+               </application>
+               <application name="TuxPaint">
+                       <regname>Tux Paint 0.9.19</regname>
+                       <version>0.9.19</version>
+                       <description>An Open Source bitmap graphics editor geared towards young children.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/tuxpaint/tuxpaint-0.9.19-win32-installer.exe</location>
+               </application>
+               <application name="zeckensack's glide wrapper">
+                       <regname>GlidewrapZbag</regname>
+                       <version>0.84c</version>
+                       <description>glidewrapper needed to run Diablo 2 on ReactOS.</description>
+                       <location>http://www.zeckensack.de/glide/archive/GlideWrapper084c.exe</location>
+               </application>
+       </category>
+       <category name="Libraries" icon="4">
+               <application name="Microsoft XML 3">
+                       <regname>msxml3</regname>
+                       <version>3.0</version>
+                       <description>MSXML3 is needed for some MSI Installers.</description>
+                       <location>http://download.microsoft.com/download/8/8/8/888f34b7-4f54-4f06-8dac-fa29b19f33dd/msxml3.msi</location>
+               </application>
+               <application name="OLE Viewer and Microsoft Foundation Classes version 4">
+                       <regname>mfc40</regname>
+                       <version>4.0</version>
+                       <description>MFC 4 is needed by some applications</description>
+                       <location>http://download.microsoft.com/download/ole/ole2v/3.5/w351/en-us/ole2v.exe</location>
+               </application>
+
+               <application name="Visual Basic 5 Runtime">
+                       <regname>vb5run</regname>
+                       <version>5.0</version>
+                       <description>Visual Basic 5 Runtime</description>
+                       <location>http://download.microsoft.com/download/vb50pro/utility/1/win98/en-us/msvbvm50.exe</location>
+               </application>
+
+               <application name="Visual Basic 6 Runtime">
+                       <regname>vb6run</regname>
+                       <version>6.0</version>
+                       <description>Visual Basic 6 Runtime</description>
+                       <location>http://download.microsoft.com/download/vb60pro/install/6/win98me/en-us/vbrun60.exe</location>
+               </application>
+
+               <application name="Visual Studio 6 Runtime">
+                       <regname>vc6run</regname>
+                       <version>6.0</version>
+                       <description>Visual Studio 6 Runtime</description>
+                       <location>http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe</location>
+               </application>
+
+               <application name="Visual Studio 2005 Runtime">
+                       <regname>vc2005run</regname>
+                       <version>7.0</version>
+                       <description>Visual Studio 2005 Runtime</description>
+                       <location>http://download.microsoft.com/download/d/3/4/d342efa6-3266-4157-a2ec-5174867be706/vcredist_x86.exe</location>
+               </application>
+
+               <application name="Visual Studio 2005 Runtime SP1">
+                       <regname>vc2005sp1run</regname>
+                       <version>7.1</version>
+                       <description>Visual Studio 2005 Runtime SP1</description>
+                       <location>http://download.microsoft.com/download/e/1/c/e1c773de-73ba-494a-a5ba-f24906ecf088/vcredist_x86.exe</location>
+               </application>
+
+               <application name="Visual Studio 2008 Runtime">
+                       <regname>vc2008run</regname>
+                       <version>8.0</version>
+                       <description>Visual Studio 2008 Runtime</description>
+                       <location>http://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140/vcredist_x86.exe</location>
+               </application>
+       </category>
+       <category name="Multimedia" icon="4">
+       </category>
+       <category name="Development" icon="5">
+               <application name="ReactOS Build Environment">
+                       <regname>ReactOS Build Environment 1.2</regname>
+                       <version>1.2</version>
+                       <description>Allows you to build the ReactOS Source. For more instructions see ReactOS wiki.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/reactos/RosBE-1.2.exe</location>
+               </application>
+               <application name="MinGW">
+                       <regname>MinGW 5.1.3</regname>
+                       <version>5.1.3</version>
+                       <description>A Port of the GNU toolchain with GCC, GDB, GNU make, etc.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.3.exe</location>
+               </application>
+               <application name="FreeBASIC">
+                       <regname>FreeBASIC 0.18.4b</regname>
+                       <version>0.18.4b</version>
+                       <description>Open Source BASIC Compiler. The BASIC syntax is compatible to QBASIC.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/fbc/FreeBASIC-v0.18.4b-win32.exe</location>
+               </application>
+       </category>
+       <category name="Games &amp; Fun" icon="6">
+               <application name="ScummVM">
+                       <regname>ScummVM 0.11.1</regname>
+                       <version>0.11.1</version>
+                       <description>SamNMax, Day of Tentacle, etc on ReactOS</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/scummvm/scummvm-0.11.1-win32.exe</location>
+               </application>
+               <application name="Diablo 2 Shareware">
+                       <regname>Diablo II Shareware</regname>
+                       <version>1.4</version>
+                       <description>Diablo 2 Shareware. zeckensack's glide wrapper is req. to run it.</description>
+                       <location>http://ftp.freenet.de./pub/filepilot/windows/spiele/diabloiidemo.exe</location>
+                       <depends>GlidewrapZbag</depends>
+                       <postinstallaction>http://svn.reactos.org/downloads/d2fix.exe</postinstallaction>
+               </application>
+               <application name="Tile World">
+                       <description>Nice Clone of Chip's Challenge originally made for the Atari Lynx. Includes free CCLP2 Graphics Pack, so you dont need the copyrighted Original.</description>
+                       <location>http://www.muppetlabs.com/~breadbox/pub/software/tworld/tworld-1.3.0-win32-CCLP2.exe</location>
+               </application>
+               <application name="OpenTTD">
+                       <regname>OpenTTD 0.6.0</regname>
+                       <version>0.6.0</version>
+                       <description>Open Source clone of the "Transport Tycoon Deluxe" game engine. You need a copy of Transport Tycoon.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/openttd/openttd-0.6.0-win32.exe</location>
+               </application>
+               <application name="LBreakout2">
+                       <regname>LBreakout2 2.4.1</regname>
+                       <version>2.4.1</version>
+                       <description>Breakout Clone using SDL libs.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/lgames/lbreakout2-2.4.1-win32.exe</location>
+               </application>
+               <application name="LGeneral">
+                       <regname>LGeneral 1.1</regname>
+                       <version>1.1</version>
+                       <description>Panzer General Clone using SDL libs.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/lgames/lgeneral-1.1-win32.exe</location>
+               </application>
+               <application name="LMarbles">
+                       <regname>LMarbles 1.0.6</regname>
+                       <version>1.0.6</version>
+                       <description>Atomix Clone using SDL libs.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/lgames/lmarbles-1.0.6-win32.exe</location>
+               </application>
+               <application name="WinBoard">
+                       <regname>WinBoard 4.2.7b</regname>
+                       <version>4.2.7b</version>
+                       <licence>GPL 3</licence>
+                       <description>WinBoard is a graphical chessboard for the Windows/ReactOS that can serve as a user interface for GNU Chess, Crafty, and other chess engines, for the Internet Chess Servers, and for electronic mail correspondence chess.</description>
+                       <location>http://ftp.gnu.org/gnu/winboard/winboard-4_2_7b.exe</location>
+               </application>
+       </category>
+       <category name="Science" icon="11">
+       </category>
+       <category name="Edutainment" icon="12">
+       </category>
+       <category name="Engineering" icon="13">
+       </category>
+       <category name="Tools" icon="7">
+               <application name="7-Zip">
+                       <regname>7-Zip 4.57</regname>
+                       <version>4.57</version>
+                       <description>Utility to create and open 7zip, zip, tar, rar and other archive files.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/sevenzip/7z457.exe</location>
+               </application>
+               <application name="uTorrent">
+                       <regname>&#181;Torrent</regname>
+                       <version>1.8</version>
+                       <description>Small and fast BitTorrent Client</description>
+                       <location>http://download.utorrent.com/1.8.2/utorrent-1.8.2.upx.exe</location>
+               </application>
+               <application name="Audio Grabber">
+                       <regname>Audiograbber 1.83 SE</regname>
+                       <version>1.83 SE</version>
+                       <description>A very good CD Ripper/Audio File Converter.</description>
+                       <location>http://www.audiograbber.de/files/4898276276/agsetup183se.exe</location>
+               </application>
+       </category>
+       <category name="Drivers" icon="8">
+               <application name="AC97 Driver for VirtualBox">
+                       <version>5.10.00.3610</version>
+                       <description>Unzip in the "ReactOS" folder then restart ReactOS twice.</description>
+                       <location>http://svn.reactos.org/packages/ac97_vbox.exe</location>
+               </application>
+       </category>
+       <category name="Others" icon="8">
+               <application name="Simple Direct Media Layer (SDL) Runtime">
+                       <version>1.2.13</version>
+                       <description>Needed for many Open Source Games to run. You need 7-Zip or a similar Utility to extract it.</description>
+                       <location>http://www.libsdl.org/release/SDL-1.2.13-win32.zip</location>
+               </application>
+               <application name="Simple Direct Media Layer (SDL) Mixer">
+                       <version>1.2.8</version>
+                       <description>Needed for some Open Source Games to run. You need 7-Zip or a similar Utility to extract it.</description>
+                       <location>http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.8-win32.zip</location>
+               </application>
+               <application name="DOSBox">
+                       <version>0.72</version>
+                       <description>DOSBox is a DOS emulator.</description>
+                       <location>http://ovh.dl.sourceforge.net/sourceforge/dosbox/DOSBox0.72-win32-installer.exe</location>
+               </application>
+       </category>
+</tree>
diff --git a/reactos/base/applications/downloader/lang/bg-BG.rc b/reactos/base/applications/downloader/lang/bg-BG.rc
new file mode 100644 (file)
index 0000000..ee1a139
--- /dev/null
@@ -0,0 +1,60 @@
+LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
+
+IDD_DOWNLOAD DIALOG LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76
+STYLE DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Ñâàëÿíå..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+  CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
+  LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
+  PUSHBUTTON "Îòêàç", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
+END
+
+IDD_PROF DIALOGEX 6, 6, 267, 110
+STYLE DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Ïðåäïî÷èòàíèÿ"
+FONT 8, "MS Shell Dlg"
+BEGIN
+  LTEXT "Ïàïêà çà ñâàëÿíå:", -1, 6, 10, 144, 8          
+  EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP
+  PUSHBUTTON "&Èçáîð...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14
+  AUTOCHECKBOX "&Èçòðèâàíå íà èíñòàëàöèîííèòå ôàéëîâå ñëåä ñëàãàíåòî", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP
+  LTEXT "Ñúðâúð ñ îáíîâÿâàíèÿ:", -1, 6, 55, 140, 8
+  EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP
+  DEFPUSHBUTTON "&Äîáðå", IDOK, 147, 90, 54, 15
+  PUSHBUTTON "&Îòêàç", IDCANCEL, 207, 90, 54, 15
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_WINDOW_TITLE             "Ñâàëè! - Ñâàëÿ÷úò íà ÐåàêòÎÑ"
+  IDS_WELCOME_TITLE            "Ñâàëÿ÷úò íà ÐåàêòÎÑ âè ïðèâåòñòâà"
+  IDS_WELCOME                  "Èçáåðåòå ðàçäåë îòëÿâî. Òîâà å èçäàíèå 1.1."
+  IDS_NO_APP_TITLE             "Íå å èçáðàíî ïðèëîæåíèå"
+  IDS_NO_APP                   "Èçáåðåòå ïðèëîæåíèå, ïðåäè äà íàòèñíåòî êëàâèøà \84Ñâàëÿíå\94. Àêî èìàòå íóæäà îò ïîìîù, íàòèñíåòå âúïðîñèòåëíàòà â ãîðíèÿ äåñåí úãúë."
+  IDS_UPDATE_TITLE             "Îáíîâÿâàíå"
+  IDS_UPDATE                   "Òàçè âúçìîæíîñò âñå îùå íå å ãîòîâà."
+  IDS_HELP_TITLE               "Ïîìîù"
+  IDS_HELP                     "Èçáåðåòå ðàçäåë îòëÿâî, ñëåä òîâà èçáåðåòå ïðèëîæåíèå è íàòèñíåòå \84Ñâàëÿíå\94. Çà äà îñúâðåìåíèòå ñâåäåíèÿòà çà ïðèëîæåíèåòî, íàòèñíåòå êîï÷åòî äî \84Íàïðåä\94."
+  IDS_NO_APPS                  "Çà ñúæàëåíèå â òîçè ðàçäåë âñå îùå íÿìà ïðèëîæåíèÿ. Ìîæåòå äà ïîìîãíåòå è äà äîáàâèòå îùå ïðèëîæåíèÿ."
+  IDS_CHOOSE_APP               "Èçáåðåòå ïðèëîæåíèå."
+  IDS_CHOOSE_SUB               "Èçáåðåòå ïîäðàçäåë."
+  IDS_CHOOSE_CATEGORY          "Èçáåðåòå ðàçäåë."
+  IDS_CHOOSE_BOTH              "Èçáåðåòå ïîäðàçäåë èëè ïðèëîæåíèå."
+  IDS_XMLERROR_1               "Xml ôàéëúò íå å îòêðèò !"
+  IDS_XMLERROR_2               "Ðàçáîðúò íà XML ôàéëà å íåóñïåøåí!"
+  IDS_DOWNLOAD_ERROR           "Ñâàëÿíåòî íà ôàéëà íåâúçìîæíî.\nÏðîâåðåòå âðúçêàòà ñè ñ èíòåðíåò."
+  IDS_VERSION                  "Èçäàíèå: "
+  IDS_LICENCE                  "Ðàçðåøèòåëíî: "
+  IDS_MAINTAINER               "Ïîääúðæàù: "
+  IDS_APPS_TITLE               "Ïðèëîæåíèÿ"
+  IDS_CATS_TITLE               "Ðàçäåëè"
+  IDS_CHOOSE_FOLDER            "Èçáåðåòå ïàïêàòà..."
+  IDS_NOTCREATE_REGKEY         "Íåóñïåøíî ñúçäàâàíå íà êëþ÷ â ðåãèñòúðà."
+  IDS_DOWNLOAD_FOLDER          "Ñâàëÿ÷"
+  IDS_UNABLECREATE_FOLDER      "Íåóñïåøíî ñúçäàâàíå íà ïàïêà ñ òîâà èìå!"
+  IDS_UPDATE_URL               "http://svn.reactos.org"
+  TTT_HELPBUTTON, "Ïîìîù çà ñâàëÿ÷à"
+  TTT_UPDATEBUTTON, "Âñå îùå íå å ãîòîâî"
+  TTT_PROFBUTTON, "Ïîçâîëÿâà íàñòðîéêà íà ñâàëÿ÷à"
+END
diff --git a/reactos/base/applications/downloader/lang/de-DE.rc b/reactos/base/applications/downloader/lang/de-DE.rc
new file mode 100644 (file)
index 0000000..27184de
--- /dev/null
@@ -0,0 +1,61 @@
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Download..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER\r
+    PUSHBUTTON "Abbrechen", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Einstellungen"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Download Ordner:", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "W&ähle...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "&Installationsdateien nach dem Setup löschen", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Update Server:", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "&Abbrechen", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE         "Download ! - ReactOS Downloader"\r
+    IDS_WELCOME_TITLE        "Willkommen im ReactOS Downloader"\r
+    IDS_WELCOME              "Bitte wählen Sie links eine Kategorie. Dies ist Version 1.1."\r
+    IDS_NO_APP_TITLE         "Keine Anwendung ausgewählt"\r
+    IDS_NO_APP               "Bitte wählen Sie eine Anwendung, bevor Sie die Download-Schaltfläche betätigen. Wenn Sie Hilfe benötigen, drücken Sie die Hilfe-Schaltfläche in der oberen rechten Ecke."\r
+    IDS_UPDATE_TITLE         "Update"\r
+    IDS_UPDATE               "Diese Funktion wurde noch nicht implementiert."\r
+    IDS_HELP_TITLE           "Hilfe"\r
+    IDS_HELP                 "Wählen Sie links eine Kategorie, wählen Sie eine Anwendung und drücken Sie die Download-Schaltfläche. Um die Anwendungsinformationen zu aktualisieren, drücken Sie die Schaltfläche neben der Hilfe-Schaltfläche."\r
+    IDS_NO_APPS              "In dieser Kategorie sind bisher noch keine Anwendungen. Sie können helfen, indem Sie Anwendungen hinzufügen."\r
+    IDS_CHOOSE_APP           "Bitte wählen Sie eine Anwendung."\r
+    IDS_CHOOSE_SUB           "Bitte wählen Sie eine Unterkategorie."\r
+    IDS_CHOOSE_CATEGORY      "Bitte wählen Sie eine Kategorie."\r
+    IDS_CHOOSE_BOTH          "Bitte wählen Sie eine Unterkategorie oder eine Anwendung."\r
+    IDS_XMLERROR_1           "XML Datei nicht gefunden!"\r
+    IDS_XMLERROR_2           "XML Datei kann nicht verarbeitet werden!"\r
+    IDS_DOWNLOAD_ERROR       "Die Datei konnte nicht heruntergeladen werden.\nBitte prüfen sie, ob eine Verbindung zum Internet besteht."\r
+    IDS_VERSION              "Version: "\r
+    IDS_LICENCE              "Lizenz: "\r
+    IDS_MAINTAINER           "Maintainer: "\r
+    IDS_APPS_TITLE           "Anwendungen"\r
+    IDS_CATS_TITLE           "Kategorien"\r
+    IDS_CHOOSE_FOLDER        "Bitte wählen Sie den Ordner..."\r
+    IDS_NOTCREATE_REGKEY     "Registryschlüssel könnte nicht erstellt werden."\r
+    IDS_DOWNLOAD_FOLDER      "Downloader"\r
+    IDS_UNABLECREATE_FOLDER  "Es konnte kein Ordner mit diesem Namen erstellt werden!"\r
+    IDS_UPDATE_URL           "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP          "%s wird benötigt um %s ausführen zu können. Soll %s jetzt installiert werden?"\r
+    TTT_HELPBUTTON           "Hilfe über den Downloader"\r
+    TTT_UPDATEBUTTON         "Noch nicht vorhanden"\r
+    TTT_PROFBUTTON           "Konfiguriert den Downloader"\r
+END\r
diff --git a/reactos/base/applications/downloader/lang/el-GR.rc b/reactos/base/applications/downloader/lang/el-GR.rc
new file mode 100644 (file)
index 0000000..ad04467
--- /dev/null
@@ -0,0 +1,61 @@
+LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
+
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Download..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
+    PUSHBUTTON "¢êõñï", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
+END
+
+IDD_PROF DIALOGEX 6, 6, 267, 110
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "ÐñïôéìÞóåéò"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "ÖÜêåëïò ËÞøåùí:", -1, 6, 10, 140, 8
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP
+    PUSHBUTTON "Å&ðéëïãÞ...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14
+    AUTOCHECKBOX "&ÄéáãñáöÞ áñ÷åßùí åãêáôÜóôáóçò ìåôÜ ôçí åãêáôÜóôáóç", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP
+    LTEXT "ÄéáêïìéóôÞò åíçìåñþóåùí:", -1, 6, 55, 140, 8
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15
+    PUSHBUTTON "&¢êõñï", IDCANCEL, 207, 90, 54, 15
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_WINDOW_TITLE         "Download ! - ReactOS Downloader"
+    IDS_WELCOME_TITLE        "Êáëþò Þëèáôå óôïí ReactOS Downloader"
+    IDS_WELCOME              "Ðáñáêáëþ åðéëÝîôå êáôçãïñßá óôá áñéóôåñÜ. ÁõôÞ åßíáé ç Ýêäïóç 1.1."
+    IDS_NO_APP_TITLE         "Äåí åðéëÝ÷èçêå åöáñìïãÞ"
+    IDS_NO_APP               "Please select a Application before you click the download button, if you need assistance please click on the question mark button on the top right corner."
+    IDS_UPDATE_TITLE         "ÅíçìÝñùóç"
+    IDS_UPDATE               "Sorry this feature is not implemented yet."
+    IDS_HELP_TITLE           "ÂïÞèåéá"
+    IDS_HELP                 "ÅðéëÝîôå êáôçãïñßá óôá áñéóôåñÜ, ìåôÜ åðéëÝîôå ìéá åöáñìïãÞ êáé ðáôÞóôå ôï êïõìðß download. To update the application information click the button next to the help button."
+    IDS_NO_APPS              "Sorry, there no applications in this category yet. You can help and add more applications."
+    IDS_CHOOSE_APP           "Ðáñáêáëþ åðéëÝîôå ìéá åöáñìïãÞ."
+    IDS_CHOOSE_SUB           "Ðáñáêáëþ åðéëÝîôå ìéá õðïêáôçãïñßá."
+    IDS_CHOOSE_CATEGORY      "Ðáñáêáëþ åðéëÝîôå ìéá êáôçãïñßá."
+    IDS_CHOOSE_BOTH          "Ðáñáêáëþ åðéëÝîôå ìéá õðïêáôçãïñßá Þ ìéá åöáñìïãÞ."
+    IDS_XMLERROR_1           "Äå âñÝèçêå ôï áñ÷åßï xml !"
+    IDS_XMLERROR_2           "Could not parse the xml file !"
+    IDS_DOWNLOAD_ERROR       "Äåí Þôáí äõíáôü ôï êáôÝâáóìá ôïõ áñ÷åßïõ.\nÐáñáêáëïýìå åëÝîôå ôçí internet óýíäåóÞ óáò."
+    IDS_VERSION              "¸êäïóç: "
+    IDS_LICENCE              "¢äåéá: "
+    IDS_MAINTAINER           "Maintainer: "
+    IDS_APPS_TITLE           "ÅöáñìïãÝò"
+    IDS_CATS_TITLE           "Êáôçãïñßåò"
+    IDS_CHOOSE_FOLDER        "Ðáñáêáëþ, åðéëÝîôå ôïí êáôÜëïãï..."
+    IDS_NOTCREATE_REGKEY     "Could not create the registry key."
+    IDS_DOWNLOAD_FOLDER      "Downloader"
+    IDS_UNABLECREATE_FOLDER  "Unable to create a folder with this name!"
+    IDS_UPDATE_URL           "http://svn.reactos.org"
+    IDS_INSTALL_DEP          "%s åßíáé áðáéôïýìåíï ãéá ôçí åêôÝëåóç ôïõ %s. Íá åãêáôáóôáèåß ôï %s ôþñá;"
+    TTT_HELPBUTTON           "Âñåßôå âïÞèåéá ãéá ôïí downloader"
+    TTT_UPDATEBUTTON         "¼÷é áêüìá äéáèÝóéìï"
+    TTT_PROFBUTTON           "Let you configure the downloader"
+END
diff --git a/reactos/base/applications/downloader/lang/en-US.rc b/reactos/base/applications/downloader/lang/en-US.rc
new file mode 100644 (file)
index 0000000..9c6031c
--- /dev/null
@@ -0,0 +1,61 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Download..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER\r
+    PUSHBUTTON "Cancel", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Preferences"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Download folder:", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "C&hoose...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "&Delete installation files after setup", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Update server:", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "&Cancel", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE         "Download ! - ReactOS Downloader"\r
+    IDS_WELCOME_TITLE        "Welcome to the ReactOS Downloader"\r
+    IDS_WELCOME              "Please choose a category on the left. This is version 1.1."\r
+    IDS_NO_APP_TITLE         "No application selected"\r
+    IDS_NO_APP               "Please select a Application before you click the download button, if you need assistance please click on the question mark button on the top right corner."\r
+    IDS_UPDATE_TITLE         "Update"\r
+    IDS_UPDATE               "Sorry this feature is not implemented yet."\r
+    IDS_HELP_TITLE           "Help"\r
+    IDS_HELP                 "Choose a category on the left, then choose a application and click the download button. To update the application information click the button next to the help button."\r
+    IDS_NO_APPS              "Sorry, there no applications in this category yet. You can help and add more applications."\r
+    IDS_CHOOSE_APP           "Please choose an application."\r
+    IDS_CHOOSE_SUB           "Please choose a subcategory."\r
+    IDS_CHOOSE_CATEGORY      "Please choose a category."\r
+    IDS_CHOOSE_BOTH          "Please choose a subcategory or an application."\r
+    IDS_XMLERROR_1           "Could not find the xml file !"\r
+    IDS_XMLERROR_2           "Could not parse the xml file !"\r
+    IDS_DOWNLOAD_ERROR       "Unable to download the file.\nPlease check your internet connection."\r
+    IDS_VERSION              "Version: "\r
+    IDS_LICENCE              "Licence: "\r
+    IDS_MAINTAINER           "Maintainer: "\r
+    IDS_APPS_TITLE           "Applications"\r
+    IDS_CATS_TITLE           "Categories"\r
+    IDS_CHOOSE_FOLDER        "Please, choose the folder..."\r
+    IDS_NOTCREATE_REGKEY     "Could not create the registry key."\r
+    IDS_DOWNLOAD_FOLDER      "Downloader"\r
+    IDS_UNABLECREATE_FOLDER  "Unable to create a folder with this name!"\r
+    IDS_UPDATE_URL           "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP          "%s is required to run %s. Should %s be installed now?"\r
+    TTT_HELPBUTTON           "Get help about the downloader"\r
+    TTT_UPDATEBUTTON         "Not yet available"\r
+    TTT_PROFBUTTON           "Let you configure the downloader"\r
+END\r
diff --git a/reactos/base/applications/downloader/lang/es-ES.rc b/reactos/base/applications/downloader/lang/es-ES.rc
new file mode 100644 (file)
index 0000000..ed4d08a
--- /dev/null
@@ -0,0 +1,66 @@
+/*\r
+ *Spanish Language resource file\r
+ * Actualizado Javier Remacha 2007-12-01,2007-12-31\r
+ */\r
+\r
+LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Descargar..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER\r
+    PUSHBUTTON "Cancelar", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Preferencias"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Carpeta de descarga:", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "&Seleccionar...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "&Borrar archivos de instalación tras la instalación", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Actualizar servidor:", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&Aceptar", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "&Cancelar", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE         "¡Descargar! - Descargador de ReactOS"\r
+    IDS_WELCOME_TITLE        "Bienvenido al descargador de ReactOS"\r
+    IDS_WELCOME              "Por favor selecciona una categoría de la izquierda. Esta es la versión 1.1."\r
+    IDS_NO_APP_TITLE         "Ninguna aplicación seleccionada"\r
+    IDS_NO_APP               "Por favor seleccione una Aplicación antes de pulsar el botón de Descarga, si necesita asistencia por favor pulsa el botón con la interrogación en la esquina superior derecha."\r
+    IDS_UPDATE_TITLE         "Actualizar"\r
+    IDS_UPDATE               "Perdón esta característica no a sido implementada todavía."\r
+    IDS_HELP_TITLE           "Ayuda"\r
+    IDS_HELP                 "Selecciona una categoría de la izquierda, entonces selecciona una aplicación y pulsa el botón de descargar. Para actualizar la información de la aplicación pulsa el botón junto al botón de ayuda."\r
+    IDS_NO_APPS              "Perdón, aun no hay ninguna aplicación en esta categoría. Puedes ayudar y añadir más aplicaciones."\r
+    IDS_CHOOSE_APP           "Por favor selecciona una aplicación."\r
+    IDS_CHOOSE_SUB           "Por favor selecciona una subcategoría."\r
+    IDS_CHOOSE_CATEGORY      "Por favor selecciona una categoría."\r
+    IDS_CHOOSE_BOTH          "Por favor selecciona una subcategoria o una aplicación."\r
+    IDS_XMLERROR_1           "¡No se a encontrado el archivo xml!"\r
+    IDS_XMLERROR_2           "¡No se ha podido analizar el archivo xml!"\r
+    IDS_DOWNLOAD_ERROR       "Imposible descargar el archivo.\nPor favor verifica tu conexión a internet."\r
+    IDS_VERSION              "Versión: "\r
+    IDS_LICENCE              "Licencia: "\r
+    IDS_MAINTAINER           "Mantenido por: "\r
+    IDS_APPS_TITLE           "Aplicaciones"\r
+    IDS_CATS_TITLE           "Categorias"\r
+    IDS_CHOOSE_FOLDER        "Por favor, seleccione la carpeta..."\r
+    IDS_NOTCREATE_REGKEY     "No se puede crear la llave del registro."\r
+    IDS_DOWNLOAD_FOLDER      "Downloader"\r
+    IDS_UNABLECREATE_FOLDER  "¡Imposible crear una carpeta con este nombre!"\r
+    IDS_UPDATE_URL           "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP          "%s en necesario para ejecutar %s. ¿Desea instalar %s ahora?"\r
+    TTT_HELPBUTTON           "Obtenga ayuda acerca de Downloader"\r
+    TTT_UPDATEBUTTON         "No disponible todavía"\r
+    TTT_PROFBUTTON           "Le permite configurar Downloader"\r
+END\r
diff --git a/reactos/base/applications/downloader/lang/fr-FR.rc b/reactos/base/applications/downloader/lang/fr-FR.rc
new file mode 100644 (file)
index 0000000..eb3ae76
--- /dev/null
@@ -0,0 +1,61 @@
+LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Téléchargement..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER\r
+    PUSHBUTTON "Annuler", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Préférences"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Répertoire de téléchargement :", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "C&hoisir...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "Supprimer les fichiers après l'installation", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Serveur de mise-à-jour :", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "Annuler", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE         "Télécharger ! - Téléchargeur de ReactOS"\r
+    IDS_WELCOME_TITLE        "Bienvenue dans le Téléchargeur de ReactOS"\r
+    IDS_WELCOME              "Veuillez choisir une catégorie sur la gauche. C'est la version 1.1."\r
+    IDS_NO_APP_TITLE         "Aucune application selectionnée"\r
+    IDS_NO_APP               "Veuillez sélectionner une application avant de cliquer sur le bouton Télécharger, si vous avez besoin d'aide, veuillez cliquer sur le point d'interrogation dans le coin supérieur droit."\r
+    IDS_UPDATE_TITLE         "Mise à jour"\r
+    IDS_UPDATE               "Désolé, cette fonctionnalité n'est pas encore implémentée."\r
+    IDS_HELP_TITLE           "Aide"\r
+    IDS_HELP                 "Choisissez une catégorie sur la gauche, puis choisissez une application et cliquez sur le bouton Télécharger. Pour mettre à jour les informations sur l'application, cliquez sur le bouton à côté du bouton d'aide."\r
+    IDS_NO_APPS              "Désolé, il n'y a pas encore d'application dans cette catégorie. Vous pouvez contribuer et ajouter plus d'applications."\r
+    IDS_CHOOSE_APP           "Veuillez choisir une application."\r
+    IDS_CHOOSE_SUB           "Veuillez choisir une sous-catégorie."\r
+    IDS_CHOOSE_CATEGORY      "Veuillez choisir une catégorie."\r
+    IDS_CHOOSE_BOTH          "Veuillez choisir une sous-catégorie ou une application."\r
+    IDS_XMLERROR_1           "Impossible de trouver le fichier xml !"\r
+    IDS_XMLERROR_2           "Impossible d'analyser le fichier xml !"\r
+    IDS_DOWNLOAD_ERROR       "Impossible de télécharger le fichier.\nVeuillez vérifier votre connexion Internet."\r
+    IDS_VERSION              "Version: "\r
+    IDS_LICENCE              "Licence: "\r
+    IDS_MAINTAINER           "Maintainer: "\r
+    IDS_APPS_TITLE           "Applications"\r
+    IDS_CATS_TITLE           "Catégories"\r
+    IDS_CHOOSE_FOLDER        "Veuillez choisir le répertoire..."\r
+    IDS_NOTCREATE_REGKEY     "Échec lors de la création de la clé registre."\r
+    IDS_DOWNLOAD_FOLDER      "Downloader"\r
+    IDS_UNABLECREATE_FOLDER  "Échec lors du répertoire avec ce nom !"\r
+    IDS_UPDATE_URL           "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP          "%s est nécessaire pour lancer %s. Voulez-vous installer %s maintenant ?"\r
+    TTT_HELPBUTTON           "Obtenez de l'aide à propros du téléchargeur"\r
+    TTT_UPDATEBUTTON         "Pas encore disponible"\r
+    TTT_PROFBUTTON           "Vous permet de configurer le téléchargeur"\r
+END\r
diff --git a/reactos/base/applications/downloader/lang/id-ID.rc b/reactos/base/applications/downloader/lang/id-ID.rc
new file mode 100644 (file)
index 0000000..1b88e2c
--- /dev/null
@@ -0,0 +1,61 @@
+LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Download..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER\r
+    PUSHBUTTON "Batal", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Proferences"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Download folder:", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "C&hoose...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "&Delete installation files after setup", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Update server:", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "&Cancel", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE         "Download ! - ReactOS Downloader"\r
+    IDS_WELCOME_TITLE        "Selamat datang di ReactOS Downloader"\r
+    IDS_WELCOME              "Silahkan pilih kategori di sebelah kiri. Ini versi 1.1."\r
+    IDS_NO_APP_TITLE         "Tidak ada aplikasi yang dipilih"\r
+    IDS_NO_APP               "Silahkan pilih Aplikasi sebelum anda mengklik tombol download, jika anda membutuhkan asistensi silahkan klik pada tombol di sudut kanan atas."\r
+    IDS_UPDATE_TITLE         "Mutakhirkan"\r
+    IDS_UPDATE               "Maaf fitur ini belum diimplementasikan."\r
+    IDS_HELP_TITLE           "Bantuan"\r
+    IDS_HELP                 "Pilih kategori di sisi kiri, lalu pilih aplikasi dan klik tombol download. Untuk memutakhirkan informasi aplikasi klik tombol disebelah tombol bantuan."\r
+    IDS_NO_APPS              "Maaf, belum ada aplikasi dalam kategori ini. Anda dapat membantu dan menambahkan aplikasi lebih banyak."\r
+    IDS_CHOOSE_APP           "Silahkan pilih aplikasi."\r
+    IDS_CHOOSE_SUB           "Silahkan pilih subkategori."\r
+    IDS_CHOOSE_CATEGORY      "Silahkan pilih kategori."\r
+    IDS_CHOOSE_BOTH          "Silahkan pilih subkategori atau aplikasi."\r
+    IDS_XMLERROR_1           "Tidak dapat menemukan file xml !"\r
+    IDS_XMLERROR_2           "Tidak dapat mengurai file xml !"\r
+    IDS_DOWNLOAD_ERROR       "Tidak bisa mendownload file.\nSilahkan periksa koneksi internet anda."\r
+    IDS_VERSION              "Versi: "\r
+    IDS_LICENCE              "Lisensi: "\r
+    IDS_MAINTAINER           "Pemelihara: "\r
+    IDS_APPS_TITLE           "Applications"\r
+    IDS_CATS_TITLE           "Categories"\r
+    IDS_CHOOSE_FOLDER        "Please, choose the folder..."\r
+    IDS_NOTCREATE_REGKEY     "Could not create the registry key."\r
+    IDS_DOWNLOAD_FOLDER      "Downloader"\r
+    IDS_UNABLECREATE_FOLDER  "Unable to create a folder with this name!"\r
+    IDS_UPDATE_URL           "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP          "%s is required to run %s. Should %s be installed now?"\r
+    TTT_HELPBUTTON           "Get help about the downloader"\r
+    TTT_UPDATEBUTTON         "Not yet available"\r
+    TTT_PROFBUTTON           "Let you configure the downloader"\r
+END\r
diff --git a/reactos/base/applications/downloader/lang/it-IT.rc b/reactos/base/applications/downloader/lang/it-IT.rc
new file mode 100644 (file)
index 0000000..925dc6b
--- /dev/null
@@ -0,0 +1,61 @@
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Scarica..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER\r
+    PUSHBUTTON "Annulla", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Preferenze"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Cartella dove scaricare:", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "&Scegliere...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "&Cancellare i file di installazione dopo il setup", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Server per gli aggiornamenti:", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "&Annulla", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE         "Scarica ! - ReactOS Downloader"\r
+    IDS_WELCOME_TITLE        "Benvenuto al ReactOS Downloader"\r
+    IDS_WELCOME              "Scegli una categoria a sinistra. Questa è la versione 1.1."\r
+    IDS_NO_APP_TITLE         "Nessuna applicazione selezionata"\r
+    IDS_NO_APP               "Scegli una Applicazione prima di premere il bottone Scarica, se serve assistenza clicca sul punto di domanda nell'angolo in alto a destra."\r
+    IDS_UPDATE_TITLE         "Aggiorna"\r
+    IDS_UPDATE               "Funzione non ancora implementata."\r
+    IDS_HELP_TITLE           "Aiuto"\r
+    IDS_HELP                 "Scegli una categoria a sinistra, poi scegli una applicazione e clicca il bottone download. Per aggiornare le informazioni sulla applicazione clicca il bottone accanto a quello di aiuto."\r
+    IDS_NO_APPS              "Non ci sono ancora applicazioni in questa categoria. Puoi aiutare aggiungendone altre."\r
+    IDS_CHOOSE_APP           "Scegli una applicazione."\r
+    IDS_CHOOSE_SUB           "Scegli una sottocategoria."\r
+    IDS_CHOOSE_CATEGORY      "Scegli una categoria."\r
+    IDS_CHOOSE_BOTH          "Scegli una sottocategoria o una applicazione."\r
+    IDS_XMLERROR_1           "File xml non trovato !"\r
+    IDS_XMLERROR_2           "Impossibile trattare il contenuto del file xml !"\r
+    IDS_DOWNLOAD_ERROR       "Scaricamento del file impossibile.\nVerificare la connessione a Internet."\r
+    IDS_VERSION              "Versione: "\r
+    IDS_LICENCE              "Licenza: "\r
+    IDS_MAINTAINER           "Manutentore: "\r
+    IDS_APPS_TITLE           "Applicazioni"\r
+    IDS_CATS_TITLE           "Categorie"\r
+    IDS_CHOOSE_FOLDER        "Scegliere una cartella..."\r
+    IDS_NOTCREATE_REGKEY     "Impossibile creare la chiave del registry."\r
+    IDS_DOWNLOAD_FOLDER      "Scarica"\r
+    IDS_UNABLECREATE_FOLDER  "Impossibile creare una cartella con questo nome!"\r
+    IDS_UPDATE_URL           "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP          "%s è necessario per la esecuzione di %s. Si vuole procedere alla installazione di %s?"\r
+    TTT_HELPBUTTON           "Informazioni su ReactOS Downloader"\r
+    TTT_UPDATEBUTTON         "Non disponibile"\r
+    TTT_PROFBUTTON           "Permette la configurazione del downloader"\r
+END\r
diff --git a/reactos/base/applications/downloader/lang/lt-LT.rc b/reactos/base/applications/downloader/lang/lt-LT.rc
new file mode 100644 (file)
index 0000000..cf5be5f
--- /dev/null
@@ -0,0 +1,63 @@
+/* Translation by Vytis "CMan" Girdþijauskas (cman@cman.us) */
+
+LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
+
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Siunèiama..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
+    PUSHBUTTON "Atðaukti", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
+END
+
+IDD_PROF DIALOGEX 6, 6, 267, 110
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Nuostatos"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "Siuntø katalogas:", -1, 6, 10, 140, 8
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP
+    PUSHBUTTON "&Pasirinkti...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14
+    AUTOCHECKBOX "&Naikinti diegimo bylas baigus diegimà", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP
+    LTEXT "Atnaujinimø serveris:", -1, 6, 55, 140, 8
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15
+    PUSHBUTTON "&Atðaukti", IDCANCEL, 207, 90, 54, 15
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_WINDOW_TITLE         "Download ! - ReactOS atsiuntimø tvarkytuvë"
+    IDS_WELCOME_TITLE        "Jus sveikina ReactOS atsiuntimø tvarkytuvë"
+    IDS_WELCOME              "Praðome pasirinkti kategorijà kairëje. \nÈia yra versija 1.1."
+    IDS_NO_APP_TITLE         "Nepasirinkta programa"
+    IDS_NO_APP               "Praðome pasirinkti programà prieð paspaudþiant siuntimo mygtukà, jei jums reikalinga pagalba, praðome spausti ant klaustuko virðutiniame deðiniajame kampe."
+    IDS_UPDATE_TITLE         "Atnaujinti"
+    IDS_UPDATE               "Atsipraðome, bet ði funkcija dar nesukurta."
+    IDS_HELP_TITLE           "Pagalba"
+    IDS_HELP                 "Pasirinkite kategorijà kairëje, tuomet pasirinkite programà ir spauskite siuntimo mygtukà. Norëdami atnaujinti programos informacijà, spaukite mygtukà, kuris yra ðalia nuostatø mygtuko."
+    IDS_NO_APPS              "Atsipraðome, bet ðioje kategorijoje programø dar nëra. Jûs galite padëti pridëdami daugiau programø."
+    IDS_CHOOSE_APP           "Praðome pasirinkti programà."
+    IDS_CHOOSE_SUB           "Praðome pasirinkti pokategorá."
+    IDS_CHOOSE_CATEGORY      "Praðome pasirinkti kategorijà."
+    IDS_CHOOSE_BOTH          "Praðome pasirinkti pokategorá arba programà."
+    IDS_XMLERROR_1           "Nepavyko rasti xml bylos!"
+    IDS_XMLERROR_2           "Nepavyko nuskaityti xml bylos!"
+    IDS_DOWNLOAD_ERROR       "Nepavyko parsiøsti bylos.\nPraðome patikrinti interneto ryðá."
+    IDS_VERSION              "Versija: "
+    IDS_LICENCE              "Licencija: "
+    IDS_MAINTAINER           "Palaikymas: "
+    IDS_APPS_TITLE           "Programos"
+    IDS_CATS_TITLE           "Kategorijos"
+    IDS_CHOOSE_FOLDER        "Praðome pasirinkti katalogà..."
+    IDS_NOTCREATE_REGKEY     "Nepavyko sukurti registro rakto."
+    IDS_DOWNLOAD_FOLDER      "Downloader"
+    IDS_UNABLECREATE_FOLDER  "Nepavyko sukurti katalogo su ðiuo vardu!"
+    IDS_UPDATE_URL           "http://svn.reactos.org"
+    IDS_INSTALL_DEP          "%s reikalingas paleisti %s. Diegti %s dabar?"
+    TTT_HELPBUTTON           "Pateikia informacijà apie naudojimàsi programa"
+    TTT_UPDATEBUTTON         "Dar nëra"
+    TTT_PROFBUTTON           "Leidþia konfiguruoti programà"
+END
diff --git a/reactos/base/applications/downloader/lang/no-NO.rc b/reactos/base/applications/downloader/lang/no-NO.rc
new file mode 100644 (file)
index 0000000..0a03c9b
--- /dev/null
@@ -0,0 +1,61 @@
+LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
+
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Nedlasting..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CONTROL "Prosess1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
+    PUSHBUTTON "Avbryt", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
+END
+
+IDD_PROF DIALOGEX 6, 6, 267, 110
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Innstillinger"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "Nedlastingsmappe:", -1, 6, 10, 140, 8
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP
+    PUSHBUTTON "V&elg...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14
+    AUTOCHECKBOX "&Slett installasjonsfiler etter innstallering", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP
+    LTEXT "Oppdater server:", -1, 6, 55, 140, 8
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15
+    PUSHBUTTON "&Avbryt", IDCANCEL, 207, 90, 54, 15
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_WINDOW_TITLE         "Nedlasting ! - ReactOS Nedlasting"
+    IDS_WELCOME_TITLE        "Velkommen til ReactOS Nedlasting"
+    IDS_WELCOME              "Vennligst velg en kategori til høyre. Dette er versjon 1.1."
+    IDS_NO_APP_TITLE         "Ingen applikasjoner er valgt"
+    IDS_NO_APP               "Vennligst velg en applikasjon før du klikker på nedlasting knappen, hvis du trenger hjelp vennligst klikk på spørsmålsmerke knappen på toppen i høyre hjørne."
+    IDS_UPDATE_TITLE         "Oppdater"
+    IDS_UPDATE               "Beklager denne funksjonen er ikke implementert ennå."
+    IDS_HELP_TITLE           "Hjelp"
+    IDS_HELP                 "Velg en kategori til venstre, også velg en applikasjon og klikk på nedlastings knappen. For å oppdatere applikasjon informasjonen klikk på knappen neste etter hjelp knappen."
+    IDS_NO_APPS              "Beklager, det er ingen applikasjoner i denne kategorien ennå. Du kan hjelpe og legge til flere applikasjoner."
+    IDS_CHOOSE_APP           "Vennligst velg en applikasjon."
+    IDS_CHOOSE_SUB           "Vennligst velg en underkategori."
+    IDS_CHOOSE_CATEGORY      "Vennligst velg en kategori."
+    IDS_CHOOSE_BOTH          "Vennligst velg en underkategori eller en applikasjon."
+    IDS_XMLERROR_1           "Kan ikke finne xml filen !"
+    IDS_XMLERROR_2           "Kan ikke analysere xml filen !"
+    IDS_DOWNLOAD_ERROR       "Ikke mulig å laste ned filen.\nVennligst sjekk din internett forbindelse."
+    IDS_VERSION              "Versjon: "
+    IDS_LICENCE              "Lisens: "
+    IDS_MAINTAINER           "Produsent: "
+    IDS_APPS_TITLE           "Applikasjoner"
+    IDS_CATS_TITLE           "Kategori"
+    IDS_CHOOSE_FOLDER        "Vennligst, velg mappen..."
+    IDS_NOTCREATE_REGKEY     "Kan ikke opprette registernøkkel."
+    IDS_DOWNLOAD_FOLDER      "Nedlasting"
+    IDS_UNABLECREATE_FOLDER  "Ikke mulig å opprette mappe med dette navnet!"
+    IDS_UPDATE_URL           "http://svn.reactos.org"
+    IDS_INSTALL_DEP          "%s trengs å bli kjørt %s. Skal %s bli innstallert nå?"
+    TTT_HELPBUTTON           "Få hjelp om nedlastingen"
+    TTT_UPDATEBUTTON         "Ikke ennå tilgjengelig"
+    TTT_PROFBUTTON           "La deg konfigurere nedlastingen"
+END
diff --git a/reactos/base/applications/downloader/lang/pl-PL.rc b/reactos/base/applications/downloader/lang/pl-PL.rc
new file mode 100644 (file)
index 0000000..adcc2d4
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ *      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
+
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "\8cci¹gaj..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
+    PUSHBUTTON "Anuluj", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
+END
+
+IDD_PROF DIALOGEX 6, 6, 267, 110
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Ustawienia"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "Katalog do \9cci¹gania:", -1, 6, 10, 140, 8
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP
+    PUSHBUTTON "&Wybierz...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14
+    AUTOCHECKBOX "&Skasuj \9cci¹gniête pliki po zainstalowaniu programu", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP
+    LTEXT "Uaktualnij:", -1, 6, 55, 140, 8
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15
+    PUSHBUTTON "&Anuluj", IDCANCEL, 207, 90, 54, 15
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_WINDOW_TITLE         "\8cci¹gnij ! - Mened¿er pobierania dla ReactOS"
+    IDS_WELCOME_TITLE        "Witamy w \8cci¹gnij dla ReactOS"
+    IDS_WELCOME              "Proszê wybraæ kategoriê po lewej. Wersja programu: 1.1."
+    IDS_NO_APP_TITLE         "Nie wybrano programu"
+    IDS_NO_APP               "Proszê wybraæ program, przed klikniêciem w przycisk \8cci¹gnij. W razie problemów kliknij w znak zapytania, w prawym górnym rogu okna."
+    IDS_UPDATE_TITLE         "Uaktualnij"
+    IDS_UPDATE               "Przepraszamy, ta opcja nie jest jeszcze dostêpna."
+    IDS_HELP_TITLE           "Pomoc"
+    IDS_HELP                 "Wybierz kategoriê po lewej, nastêpnie wybierz program i kliknij w przycisk \8cci¹gnij. Aby uaktualniæ listê programów, naci\9cnij przycisk obok przycisku Pomocy."
+    IDS_NO_APPS              "Przepraszamy, nie ma programów w tej kategorii. Mo¿esz pomóc nam w wyborze nowych programów."
+    IDS_CHOOSE_APP           "Proszê wybraæ program."
+    IDS_CHOOSE_SUB           "Proszê wybraæ podkategoriê."
+    IDS_CHOOSE_CATEGORY      "Proszê wybraæ kategoriê."
+    IDS_CHOOSE_BOTH          "Proszê wybraæ podkategoriê albo program."
+    IDS_XMLERROR_1           "Plik XML nie zosta³ znaleziony !"
+    IDS_XMLERROR_2           "Nie uda³o siê przetworzyæ pliku XML !"
+    IDS_DOWNLOAD_ERROR       "Sci¹ganie pliku nieudane.\nProszê sprawdziæ po³¹czenie z internetem."
+    IDS_VERSION              "Wersja: "
+    IDS_LICENCE              "Licenccja: "
+    IDS_MAINTAINER           "Opiekun: "
+    IDS_APPS_TITLE           "Programy"
+    IDS_CATS_TITLE           "Kategorie"
+    IDS_CHOOSE_FOLDER        "Proszê wybraæ katalog..."
+    IDS_NOTCREATE_REGKEY     "Nie uda³o siê utworzyæ kluczy rejestru."
+    IDS_DOWNLOAD_FOLDER      "Pobrane"
+    IDS_UNABLECREATE_FOLDER  "Nie uda³o siê stworzyæ katalogu o tej nazwie!"
+    IDS_UPDATE_URL           "http://svn.reactos.org"
+    IDS_INSTALL_DEP          "%s jest wymagany do uruchomienia %s. Czy chcesz zainstalowaæ %s w tej chwili?"
+    TTT_HELPBUTTON           "Pomoc Mened¿era pobierania"
+    TTT_UPDATEBUTTON         "Niedostêpne"
+    TTT_PROFBUTTON           "Ustawienia Mened¿era pobierania"
+END
diff --git a/reactos/base/applications/downloader/lang/ru-RU.rc b/reactos/base/applications/downloader/lang/ru-RU.rc
new file mode 100644 (file)
index 0000000..3865925
--- /dev/null
@@ -0,0 +1,63 @@
+//Russian language file. (Dmitry Chapyshev, 2007.06.21)\r
+\r
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Çàãðóçêà..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 17, SS_CENTER\r
+    PUSHBUTTON "Îòìåíà", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Íàñòðîéêè"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Ïàïêà äëÿ çàêà÷êè:", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "&Âûáðàòü...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "&Óäàëÿòü óñòàíîâî÷íûå ôàéëû ïîñëå óñòàíîâêè", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Ñåðâåð îáíîâëåíèé:", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "Î&òìåíà", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE         "Ñêà÷àòü! - Ìåíåäæåð çàêà÷åê ReactOS"\r
+    IDS_WELCOME_TITLE        "Äîáðî ïîæàëîâàòü â Ìåíåäæåð çàêà÷åê ReactOS"\r
+    IDS_WELCOME              "Ïîæàëóéñòà âûáåðèòå êàòåãîðèþ ñïðàâà. Âåðñèÿ 1.1"\r
+    IDS_NO_APP_TITLE         "Ïðèëîæåíèå íå âûáðàíî"\r
+    IDS_NO_APP               "Ïîæàëóéñòà, âûáåðèòå ïðèëîæåíèå ïðåæäå, ÷åì íàæàòü êíîïêó çàãðóçêè. Åñëè âàì íóæíà ñïðàâêà, òî íàæìèòå êíîïêó ñî çíàêîì âîïðîñà â âåðõíåì ïðàâîì óãëó."\r
+    IDS_UPDATE_TITLE         "Îáíîâèòü"\r
+    IDS_UPDATE               "Èçâèíèòå, äàííàÿ âîçìîæíîñòü íà äàííûì ìîìåíò íåäîñòóïíà."\r
+    IDS_HELP_TITLE           "Ñïðàâêà"\r
+    IDS_HELP                 "Âûáåðèòå êàòåãîðèþ ñëåâà, çàòåì âûáåðèòå ïðèëîæåíèå è íàæìèòå êíîïêó çàãðóçêè. Äëÿ ïîëó÷åíèÿ èíôîðìàöèè îá îáíîâëåíèÿõ íàæìèòå êíîïêó ðÿäîì ñ êíîïêîé ñïðàâêè."\r
+    IDS_NO_APPS              "Èçâåíèòå, íà äàííûé ìîìåíò â ýòîé êàòåãîðèè ïðèëîæåíèé íåò, íî âû ìîæåòå ïîìî÷ü äîáàâèòü èõ."\r
+    IDS_CHOOSE_APP           "Ïîæàëóéñòà âûáåðèòå ïðèëîæåíèå."\r
+    IDS_CHOOSE_SUB           "Ïîæàëóéñòà âûáåðèòå ïîäêàòåãîðèþ."\r
+    IDS_CHOOSE_CATEGORY      "Ïîæàëóéñòà âûáåðèòå êàòåãîðèþ."\r
+    IDS_CHOOSE_BOTH          "Ïîæàëóéñòà âûáåðèòå ïîäêàòåãîðèþ èëè ïðèëîæåíèå."\r
+    IDS_XMLERROR_1           "Íå óäàëîñü íàéòè xml-ôàéë!"\r
+    IDS_XMLERROR_2           "Íå óäàëîñü îáðàáîòàòü xml-ôàéë!"\r
+    IDS_DOWNLOAD_ERROR       "Íå óäàåòñÿ çàãðóçèòü ôàéë.\nÏîæàëóéñòà ïðîâåðüòå âàøå ïîäêëþ÷åíèå ê èíòåðíåò."\r
+    IDS_VERSION              "Âåðñèÿ: "\r
+    IDS_LICENCE              "Ëèöåíçèÿ: "\r
+    IDS_MAINTAINER           "Ïðîèçâîäèòåëü: "\r
+    IDS_APPS_TITLE           "Ïðèëîæåíèÿ"\r
+    IDS_CATS_TITLE           "Êàòåãîðèè"\r
+    IDS_CHOOSE_FOLDER        "Ïîæàëóéñòâà âûáåðèòå ïàïêó..."\r
+    IDS_NOTCREATE_REGKEY     "Íå óäàëîñü ñîçäàòü êëþ÷ â ðååñòðå."\r
+    IDS_DOWNLOAD_FOLDER      "Downloader"\r
+    IDS_UNABLECREATE_FOLDER  "Íå óäàëîñü ñîçäàòü ïàïêó ñ òàêèì èìåíåì!"\r
+    IDS_UPDATE_URL           "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP          "%s òðåáóåòñÿ äëÿ çàïóñêà %s. Óñòàíîâèòü %s?"\r
+    TTT_HELPBUTTON           "Ïîêàçàòü ñïðàâêó ïðîãðàììû"\r
+    TTT_UPDATEBUTTON         "Ñåé÷àñ íåäîñòóïíî"\r
+    TTT_PROFBUTTON           "Âûïîëíèòü íàñòðîéêó ïðîãðàììû"\r
+END\r
diff --git a/reactos/base/applications/downloader/lang/sk-SK.rc b/reactos/base/applications/downloader/lang/sk-SK.rc
new file mode 100644 (file)
index 0000000..9258d70
--- /dev/null
@@ -0,0 +1,67 @@
+/* TRANSLATOR:  Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
+ * DATE OF TR:  21-01-2008
+ * LastChange:  31-10-2008 
+ */
+
+
+LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
+
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "S\9dahujem ..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
+    PUSHBUTTON "Zru\9ai\9d", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
+END
+
+IDD_PROF DIALOGEX 6, 6, 267, 110
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
+CAPTION "Nastavenia" //Preferencies
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "Prieèinok s\9dahovania:", -1, 6, 10, 140, 8
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP
+    PUSHBUTTON "&Vybra\9d ...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14
+    AUTOCHECKBOX "&Odstráni\9d in\9atalaèné súbory po nain\9atalovaní", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP
+    LTEXT "Aktualizova\9d server:", -1, 6, 55, 140, 8
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15
+    PUSHBUTTON "&Zru\9ai\9d", IDCANCEL, 207, 90, 54, 15
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_WINDOW_TITLE         "\8dahaj! - Downloader systému ReactOS"
+    IDS_WELCOME_TITLE        "Vitajte v programe Downloader systému ReactOS"
+    IDS_WELCOME              "Vyberte, prosím, kategóriu na ¾avej strane. Toto je verzia 1.1."
+    IDS_NO_APP_TITLE         "Nie je vybraný \9eiadny program"
+    IDS_NO_APP               "Vyberte, prosím, program predtým ne\9e kliknete na tlaèidlo stiahnu\9d. Ak potrebujete pomoc, kliknite, prosím, na tlaèidlo otáznika v pravom hornom rohu."
+    IDS_UPDATE_TITLE         "Aktualizova\9d"
+    IDS_UPDATE               "Prepáète, ale táto funkcia zatia¾ nie je implementovaná."
+    IDS_HELP_TITLE           "Pomocník"
+    IDS_HELP                 "Vyberte kategóriu na ¾avej strane, potom vyberte program a kliknite na tlaèidlo stiahnu\9d. Pre aktualizáciu informácii o programe kliknite na tlaèidlo ved¾a tlaèidla pomoc."
+    IDS_NO_APPS              "Prepáète, ale zatia¾ sa v tejto kategórii nenachádzajú \9eiadne programy. Mô\9eete pomôc\9d a prida\9d viac programov."
+    IDS_CHOOSE_APP           "Vyberte program, prosím."
+    IDS_CHOOSE_SUB           "Vyberte podkategóriu, prosím."
+    IDS_CHOOSE_CATEGORY      "Vyberte kategóriu, prosím."
+    IDS_CHOOSE_BOTH          "Vyberte podkategóriu alebo program, prosím."
+    IDS_XMLERROR_1           "Nepodarilo sa nájs\9d súbor xml!"
+    IDS_XMLERROR_2           "Nepodarilo sa správne analyzova\9d súbor xml!"
+    IDS_DOWNLOAD_ERROR       "Nepodarilo sa stiahnu\9d súbor.\nSkontrolujte, prosím, pripojenie do siete internet."
+    IDS_VERSION              "Verzia: "
+    IDS_LICENCE              "Licencia: "
+    IDS_MAINTAINER           "Údr\9ebár: " //Maintainer
+    IDS_APPS_TITLE           "Programy"
+    IDS_CATS_TITLE           "Kategórie"
+    IDS_CHOOSE_FOLDER        "Vyberte, prosím, prieèinok ..."
+    IDS_NOTCREATE_REGKEY     "Nepodarilo sa vytvori\9d k¾úè registra."
+    IDS_DOWNLOAD_FOLDER      "Downloader"
+    IDS_UNABLECREATE_FOLDER  "Nie je mo\9ené vytvori\9d prieèinok s týmto názvom!"
+    IDS_UPDATE_URL           "http://svn.reactos.org"
+    IDS_INSTALL_DEP          "%s je potrebný pre spustenie %s. Má sa %s nain\9atalova\9d teraz?"
+    TTT_HELPBUTTON           "Získa\9d nápoveï k programu downloader"
+    TTT_UPDATEBUTTON         "Zatia¾ nie je k dispozícií"
+    TTT_PROFBUTTON           "Dovolí Vám konfigurova\9d program downloader"
+END
diff --git a/reactos/base/applications/downloader/lang/uk-UA.rc b/reactos/base/applications/downloader/lang/uk-UA.rc
new file mode 100644 (file)
index 0000000..b43a863
--- /dev/null
@@ -0,0 +1,69 @@
+/*\r
+ * PROJECT:     ReactOS Downloader\r
+ * LICENSE:     GPL - See COPYING in the top level directory\r
+ * FILE:        rosapps/downloader/lang/uk-UA.rc\r
+ * PURPOSE:     Ukraianian Language File for Downloader\r
+ * TRANSLATOR:  Artem Reznikov\r
+ */\r
+\r
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT\r
+\r
+IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE  0, 0, 220, 76\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Çàâàíòàæåííÿ..."\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12\r
+    LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER\r
+    PUSHBUTTON "Ñêàñóâàòè", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PROF DIALOGEX 6, 6, 267, 110\r
+STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE\r
+CAPTION "Íàñòðîéêè"\r
+FONT 8, "MS Shell Dlg"\r
+BEGIN\r
+    LTEXT "Ïàïêà äëÿ çàâàíòàæåííÿ:", -1, 6, 10, 140, 8\r
+    EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP\r
+    PUSHBUTTON "&Âèáðàòè...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14\r
+    AUTOCHECKBOX "&Âèäàëÿòè íàñòàíîâí³ ôàéëè ï³ñëÿ óñòàíîâêè", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP\r
+    LTEXT "Ñåðâåð îíîâëåíü:", -1, 6, 55, 140, 8\r
+    EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP\r
+    DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15\r
+    PUSHBUTTON "&Ñêàñóâàòè", IDCANCEL, 207, 90, 54, 15\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+    IDS_WINDOW_TITLE          "Çàâàíòàæèòè ! - Çàâàíòàæóâà÷ ReactOS"\r
+    IDS_WELCOME_TITLE         "Ëàñêàâî ïðîñèìî ó Çàâàíòàæóâà÷ ReactOS"\r
+    IDS_WELCOME               "Áóäü ëàñêà âèáåð³òü êàòåãîð³þ çë³âà. Öå âåðñ³ÿ 1.1."\r
+    IDS_NO_APP_TITLE          "Äîäàòîê íå âèáðàíèé"\r
+    IDS_NO_APP                "Áóäü ëàñêà, âèáåð³òü äîäàòîê ïåðø í³æ íàòèñíóòè êíîïêó çàâàíòàæåííÿ. ßêùî Âàì ïîòð³áíà äîïîìîãà, íàòèñí³òü êíîïêó ç³ çíàêîì ïèòàííÿ ó âåðõíüîìó ïðàâîìó êóòêó."\r
+    IDS_UPDATE_TITLE          "Îíîâèòè"\r
+    IDS_UPDATE                "Âèáà÷òå, äàíà ìîæëèâ³ñòü ùå íåäîñòóïíà."\r
+    IDS_HELP_TITLE            "Äîâ³äêà"\r
+    IDS_HELP                  "Âèáåð³òü êàòåãîð³þ çë³âà, ïîò³ì âèáåð³òü äîäàòîê ³ íàòèñí³òü êíîïêó çàâàíòàæåííÿ. Äëÿ îòðèìàííÿ ³íôîðìàö³¿ ïðî îíîâëåííÿ íàòèñí³òü êíîïêó ïîðÿä ç êíîïêîþ äîâ³äêè."\r
+    IDS_NO_APPS               "Âèáà÷òå, â ö³é êàòåãî𳿠ùå íåìຠäîäàòê³â. Âè ìîæåòå äîïîìîãòè ³ äîäàòè á³ëüøå äîäàòê³â."\r
+    IDS_CHOOSE_APP            "Áóäü ëàñêà âèáåð³òü äîäàòîê."\r
+    IDS_CHOOSE_SUB            "Áóäü ëàñêà âèáåð³òü ï³äêàòåãîð³þ."\r
+    IDS_CHOOSE_CATEGORY       "Áóäü ëàñêà âèáåð³òü êàòåãîð³þ."\r
+    IDS_CHOOSE_BOTH           "Áóäü ëàñêà âèáåð³òü ï³äêàòåãîð³þ àáî äîäàòîê."\r
+    IDS_XMLERROR_1            "Íå âäàëîñÿ çíàéòè ôàéë XML !"\r
+    IDS_XMLERROR_2            "Íå âäàëîñÿ îáðîáèòè ôàéë XML !"\r
+    IDS_DOWNLOAD_ERROR        "Íåìîæëèâî çàâàíòàæèòè ôàéë.\nÁóäü ëàñêà ïåðåâ³ðòå âàøå ³íòåðíåò-ç'ºäíàííÿ."\r
+    IDS_VERSION               "Âåðñ³ÿ: "\r
+    IDS_LICENCE               "˳öåíç³ÿ: "\r
+    IDS_MAINTAINER            "Âèðîáíèê: "\r
+    IDS_APPS_TITLE            "Äîäàòêè"\r
+    IDS_CATS_TITLE            "Êàòåãîð³¿"\r
+    IDS_CHOOSE_FOLDER         "Áóäü ëàñêà âèáåð³òü ïàïêó..."\r
+    IDS_NOTCREATE_REGKEY      "Íå âäàëîñÿ ñòâîðèòè êëþ÷ ó ðåºñòð³."\r
+    IDS_DOWNLOAD_FOLDER       "Downloader"\r
+    IDS_UNABLECREATE_FOLDER   "Íå âäàëîñÿ ñòâîðèòè ïàïêó ç òàêèì ³ì'ÿì!"\r
+    IDS_UPDATE_URL            "http://svn.reactos.org"\r
+    IDS_INSTALL_DEP           "%s ïîòð³áíèé ùîá çàïóñòèòè %s. Âñòàíîâèòè %s çàðàç?"\r
+    TTT_HELPBUTTON            "Îòðèìàéòè äîïîìîãó ïðî çàâàíòàæóâà÷"\r
+    TTT_UPDATEBUTTON          "Ïîêè ùî íå äîñòóïíî"\r
+    TTT_PROFBUTTON            "Íàëàøòóâàòè çàâàíòàæóâà÷"\r
+END\r
diff --git a/reactos/base/applications/downloader/main.c b/reactos/base/applications/downloader/main.c
new file mode 100644 (file)
index 0000000..5e14ecb
--- /dev/null
@@ -0,0 +1,922 @@
+/* PROJECT:         ReactOS Downloader
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * FILE:            base/applications/downloader/xml.c
+ * PURPOSE:         Main program
+ * PROGRAMMERS:     Maarten Bosma, Lester Kortenhoeven, Dmitry Chapyshev
+ */
+
+#include <windows.h>
+#include <commctrl.h>
+#include <richedit.h>
+#include <tchar.h>
+#include <stdio.h>
+#include <shlwapi.h>
+#include <shlobj.h>
+#include "resources.h"
+#include "structures.h"
+
+HWND hwnd, hCategories, hApps, hDownloadButton, hUninstallButton, hUpdateButton, hHelpButton, hProfButton;
+HBITMAP hLogo, hUnderline;
+WCHAR* DescriptionHeadline = L"";
+WCHAR* DescriptionText = L"";
+WCHAR ApplicationText[700];
+
+struct Category Root;
+struct Application* SelectedApplication;
+
+INT_PTR CALLBACK DownloadProc (HWND, UINT, WPARAM, LPARAM);
+BOOL ProcessXML (const char* filename, struct Category* Root);
+VOID FreeTree (struct Category* Node);
+WCHAR Strings [STRING_COUNT][MAX_STRING_LENGHT];
+
+
+BOOL
+getUninstaller(WCHAR* RegName, WCHAR* Uninstaller) {
+    HKEY hKey1;
+    HKEY hKey2;
+    DWORD Type = 0;
+    DWORD Size = MAX_PATH;
+    WCHAR Value[MAX_PATH];
+    WCHAR KeyName[MAX_PATH];
+    LONG i = 0;
+
+    if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",0,KEY_READ,&hKey1) == ERROR_SUCCESS) {
+        while (RegEnumKeyExW(hKey1,i,KeyName,&Size,NULL,NULL,NULL,NULL) == ERROR_SUCCESS) {
+            ++i;
+            RegOpenKeyExW(hKey1,KeyName,0,KEY_READ,&hKey2);
+            Size = MAX_PATH;
+            if (RegQueryValueExW(hKey2,L"DisplayName",0,&Type,(LPBYTE)Value,&Size) == ERROR_SUCCESS) {
+                Size = MAX_PATH;
+                if (StrCmpW(Value,RegName) == 0) {
+                    if (RegQueryValueExW(hKey2,L"UninstallString",0,&Type,(LPBYTE)Uninstaller,&Size) == ERROR_SUCCESS) {
+                        RegCloseKey(hKey2);
+                        RegCloseKey(hKey1);
+                        return TRUE;
+                    } else {
+                        RegCloseKey(hKey2);
+                        RegCloseKey(hKey1);
+                        return FALSE;
+                    }
+                }
+            }
+            RegCloseKey(hKey2);
+            Size = MAX_PATH;
+        }
+        RegCloseKey(hKey1);
+    }
+    return FALSE;
+}
+
+void
+ShowMessage (WCHAR* title, WCHAR* message)
+{
+    DescriptionHeadline = title;
+    DescriptionText = message;
+    InvalidateRect(hwnd,NULL,TRUE);
+    UpdateWindow(hwnd);
+}
+
+void
+AddItems(HWND hwnd, struct Category* Category, struct Category* Parent)
+{
+    TV_INSERTSTRUCTW Insert;
+
+    Insert.item.lParam = (LPARAM)Category;
+    Insert.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;;
+    Insert.item.pszText = Category->Name;
+    Insert.item.cchTextMax = lstrlenW(Category->Name);
+    Insert.item.iImage = Category->Icon;
+    Insert.item.iSelectedImage = Category->Icon;
+    Insert.hInsertAfter = TVI_LAST;
+    Insert.hParent = Category->Parent ? Category->Parent->TreeviewItem : TVI_ROOT;
+
+    Category->TreeviewItem = (HTREEITEM)SendMessage(hwnd, TVM_INSERTITEM, 0, (LPARAM)&Insert);
+
+    if(Category->Next)
+        AddItems (hwnd,Category->Next,Parent);
+
+    if(Category->Children)
+        AddItems (hwnd,Category->Children,Category);
+}
+
+void
+CategoryChoosen(HWND hwnd, struct Category* Category)
+{
+    struct Application* CurrentApplication;
+    TV_INSERTSTRUCTW Insert;
+    WCHAR Uninstaller[200];
+    SelectedApplication = NULL;
+
+    if(Category->Children && !Category->Apps)
+        ShowMessage(Category->Name, Strings[IDS_CHOOSE_SUB]);
+    else if(!Category->Children && Category->Apps)
+        ShowMessage(Category->Name, Strings[IDS_CHOOSE_APP]);
+    else if(Category->Children && Category->Apps)
+        ShowMessage(Category->Name, Strings[IDS_CHOOSE_BOTH]);
+    else
+        ShowMessage(Category->Name, Strings[IDS_NO_APPS]);
+
+    (void)TreeView_DeleteItem(hwnd, TVI_ROOT);
+    (void)TreeView_DeleteItem(hwnd, TVI_ROOT); // Delete twice to bypass bug in windows
+
+    Insert.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE;
+    Insert.hInsertAfter = TVI_LAST;
+    Insert.hParent = TVI_ROOT;
+
+    CurrentApplication = Category->Apps;
+    while(CurrentApplication)
+    {
+        Insert.item.lParam = (LPARAM)CurrentApplication;
+        Insert.item.pszText = CurrentApplication->Name;
+        Insert.item.cchTextMax = lstrlenW(CurrentApplication->Name);
+        Insert.item.iImage = 10;
+        if(StrCmpW(CurrentApplication->RegName,L"")) {
+            if(getUninstaller(CurrentApplication->RegName, Uninstaller))
+                Insert.item.iImage = 9;
+        }
+        SendMessage(hwnd, TVM_INSERTITEM, 0, (LPARAM)&Insert);
+        CurrentApplication = CurrentApplication->Next;
+    }
+}
+
+BOOL CreateToolTip(HWND hwndTool, HWND hDlg, WCHAR* pText)
+{
+    HWND hwndTip;
+    TOOLINFO toolInfo;
+
+    if (!hwndTool || !hDlg || !pText)
+        return FALSE;
+
+    hwndTip = CreateWindowExW(0, TOOLTIPS_CLASS, NULL,
+                                   WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON,
+                                   CW_USEDEFAULT, CW_USEDEFAULT,
+                                   CW_USEDEFAULT, CW_USEDEFAULT,
+                                   hDlg, NULL, 
+                                   GetModuleHandle(NULL), NULL);
+    if (!hwndTip)
+        return FALSE;
+
+    ZeroMemory(&toolInfo, sizeof(TOOLINFO));
+    toolInfo.cbSize = sizeof(toolInfo);
+    toolInfo.hwnd = hDlg;
+    toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
+    toolInfo.uId = (UINT_PTR)hwndTool;
+    toolInfo.lpszText = pText;
+    SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
+
+    return TRUE;
+}
+
+BOOL
+SetupControls (HWND hwnd)
+{
+    TV_INSERTSTRUCTW Insert = {0};
+    HIMAGELIST hImageList;
+    HINSTANCE hInstance = GetModuleHandle(NULL);
+    WCHAR Cats[MAX_STRING_LENGHT], Apps[MAX_STRING_LENGHT];
+    WCHAR Tooltip1[MAX_STRING_LENGHT], Tooltip2[MAX_STRING_LENGHT], Tooltip3[MAX_STRING_LENGHT];
+    char Buf[MAX_PATH];
+
+       // Getting downloader.xml path
+    if(!GetSystemDirectoryA(Buf,sizeof(Buf))) return FALSE;
+    strcat(Buf, "\\downloader.xml");
+
+    // Parse the XML file
+    if (!ProcessXML(Buf, &Root))
+        return FALSE;
+
+    LoadStringW(hInstance, IDS_CATS_TITLE, Cats, MAX_STRING_LENGHT);
+    LoadStringW(hInstance, IDS_APPS_TITLE, Apps, MAX_STRING_LENGHT);
+
+    // Set up the controls
+    hCategories = CreateWindowExW(0, WC_TREEVIEWW, Cats,
+                                  WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS,
+                                  0, 0, 0, 0, hwnd, NULL, hInstance, NULL);
+
+    hApps = CreateWindowExW(0, WC_TREEVIEWW, Apps,
+                            WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS,
+                            0, 0, 0, 0, hwnd, NULL, hInstance, NULL);
+
+    hLogo = LoadBitmap(GetModuleHandle(NULL),
+                       MAKEINTRESOURCE(IDB_LOGO));
+    hUnderline = LoadBitmap(GetModuleHandle(NULL),
+                            MAKEINTRESOURCE(IDB_UNDERLINE));
+
+    hHelpButton = CreateWindowW(L"Button", L"",
+                                WS_CHILD | WS_VISIBLE | BS_ICON,
+                                550, 10, 40, 40,
+                                hwnd, 0, hInstance, NULL);
+    LoadString(hInstance, TTT_HELPBUTTON, Tooltip1, MAX_STRING_LENGHT);
+    CreateToolTip(hHelpButton, hwnd, Tooltip1);
+
+    hUpdateButton = CreateWindowW(L"Button", L"",
+                                  WS_CHILD | WS_VISIBLE | BS_ICON,
+                                  450, 10, 40, 40,
+                                  hwnd, 0, hInstance, NULL);
+    LoadString(hInstance, TTT_UPDATEBUTTON, Tooltip2, MAX_STRING_LENGHT);
+    CreateToolTip(hUpdateButton, hwnd, Tooltip2);
+
+    hProfButton = CreateWindowW(L"Button", L"",
+                                WS_CHILD | WS_VISIBLE | BS_ICON,
+                                500, 10, 40, 40,
+                                hwnd, 0, hInstance, NULL);
+    LoadString(hInstance, TTT_PROFBUTTON, Tooltip3, MAX_STRING_LENGHT);
+    CreateToolTip(hProfButton, hwnd, Tooltip3);
+
+    hDownloadButton = CreateWindowW(L"Button", L"",
+                                    WS_CHILD | WS_VISIBLE | BS_BITMAP,
+                                    330, 505, 140, 33,
+                                    hwnd, 0, hInstance, NULL);
+
+    hUninstallButton = CreateWindowW(L"Button", L"",
+                                     WS_CHILD | WS_VISIBLE | BS_BITMAP,
+                                     260, 505, 140, 33,
+                                     hwnd, 0, hInstance, NULL);
+
+    SendMessageW(hProfButton,
+                BM_SETIMAGE,
+                (WPARAM)IMAGE_ICON,
+                (LPARAM)(HANDLE)LoadIcon(hInstance,MAKEINTRESOURCE(IDI_PROF)));
+    SendMessageW(hHelpButton,
+                BM_SETIMAGE,
+                (WPARAM)IMAGE_ICON,
+                (LPARAM)(HANDLE)LoadIcon(hInstance, MAKEINTRESOURCE(IDI_HELP)));
+    SendMessageW(hUpdateButton,
+                BM_SETIMAGE,
+                (WPARAM)IMAGE_ICON,
+                (LPARAM)(HANDLE)LoadIcon(hInstance, MAKEINTRESOURCE(IDI_UPDATE)));
+    SendMessageW(hDownloadButton,
+                BM_SETIMAGE,
+                (WPARAM)IMAGE_BITMAP,
+                (LPARAM)(HANDLE)LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_DOWNLOAD)));
+    SendMessageW(hUninstallButton,
+                BM_SETIMAGE,
+                (WPARAM)IMAGE_BITMAP,
+                (LPARAM)(HANDLE)LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_UNINSTALL)));
+    ShowWindow(hUninstallButton, SW_HIDE);
+
+    // Set deflaut entry for hApps
+    Insert.item.mask = TVIF_TEXT|TVIF_IMAGE;
+    Insert.item.pszText = Strings[IDS_CHOOSE_CATEGORY];
+    Insert.item.cchTextMax = lstrlenW(Strings[IDS_CHOOSE_CATEGORY]);
+    Insert.item.iImage = 0;
+    SendMessage(hApps, TVM_INSERTITEM, 0, (LPARAM)&Insert);
+
+    // Create Tree Icons
+    hImageList = ImageList_Create(16, 16, ILC_COLORDDB, 1, 1);
+    SendMessageW(hCategories, TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)(HIMAGELIST)hImageList);
+    SendMessageW(hApps, TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)(HIMAGELIST)hImageList);
+
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_0)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_1)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_2)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_3)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_4)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_5)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_6)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_7)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_8)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_9)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_10)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_11)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_12)), NULL);
+    ImageList_Add(hImageList,
+                  LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TREEVIEW_ICON_13)), NULL);
+
+    // Fill the TreeViews
+    AddItems (hCategories, Root.Children, NULL);
+
+    return TRUE;
+}
+
+static void
+ResizeControl (HWND hwnd, int x1, int y1, int x2, int y2)
+{
+    // Make resizing a little easier
+    MoveWindow(hwnd, x1, y1, x2-x1, y2-y1, TRUE);
+}
+
+static void
+DrawBitmap (HDC hdc, int x, int y, HBITMAP hBmp)
+{
+    BITMAP bm;
+    HDC hdcMem = CreateCompatibleDC(hdc);
+
+    SelectObject(hdcMem, hBmp);
+    GetObject(hBmp, sizeof(bm), &bm);
+    TransparentBlt(hdc, x, y, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, 0xFFFFFF);
+
+    DeleteDC(hdcMem);
+}
+
+static void
+DrawDescription (HDC hdc, RECT DescriptionRect)
+{
+    int i;
+    HFONT Font;
+    RECT Rect = {DescriptionRect.left+5, DescriptionRect.top+3, DescriptionRect.right-2, DescriptionRect.top+22};
+
+    // Backgroud
+    Rectangle(hdc, DescriptionRect.left, DescriptionRect.top, DescriptionRect.right, DescriptionRect.bottom);
+
+    // Underline
+    for (i=DescriptionRect.left+1;i<DescriptionRect.right-1;i++)
+        DrawBitmap(hdc, i, DescriptionRect.top+22, hUnderline); // less code then stretching ;)
+
+    // Headline
+    Font = CreateFont(-16 , 0, 0, 0, FW_EXTRABOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
+                      OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, L"Arial");
+    SelectObject(hdc, Font);
+    DrawTextW(hdc, DescriptionHeadline, lstrlenW(DescriptionHeadline), &Rect, DT_SINGLELINE|DT_NOPREFIX);
+    DeleteObject(Font);
+
+    // Description
+    Font = CreateFont(-13 , 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
+                      OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, L"Arial");
+    SelectObject(hdc, Font);
+    Rect.top += 50;
+    Rect.bottom = DescriptionRect.bottom-2;
+    DrawTextW(hdc, DescriptionText, lstrlenW(DescriptionText), &Rect, DT_WORDBREAK|DT_NOPREFIX); // ToDo: Call TabbedTextOut to draw a nice table
+    DeleteObject(Font);
+
+}
+
+void showUninstaller() {
+    int Split_Vertical = 200;
+    RECT Rect;
+
+    GetClientRect(hwnd,&Rect);
+    ShowWindow(hUninstallButton,SW_SHOW);
+    MoveWindow(hDownloadButton,(Split_Vertical+Rect.right-Rect.left)/2,Rect.bottom-Rect.top-45,140,35,TRUE);;
+}
+
+void hideUninstaller() {
+    int Split_Vertical = 200;
+    RECT Rect;
+
+    GetClientRect(hwnd,&Rect);
+    ShowWindow(hUninstallButton,SW_HIDE);
+    MoveWindow(hDownloadButton,(Split_Vertical+Rect.right-Rect.left)/2-70,Rect.bottom-Rect.top-45,140,35,TRUE);
+}
+
+void startUninstaller(WCHAR* Uninstaller) {
+    STARTUPINFOW si;
+    PROCESS_INFORMATION pi;
+
+    memset(&si, 0, sizeof(si));
+    si.cb = sizeof(si);
+    CreateProcessW(NULL,Uninstaller,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
+    CloseHandle(pi.hThread);
+    // WaitForSingleObject(pi.hProcess, INFINITE); // If you want to wait for the Unistaller
+    CloseHandle(pi.hProcess);
+    hideUninstaller();
+}
+
+BOOL
+SaveSettings(HWND hwnd)
+{
+    HKEY hKey;
+    TCHAR szBuf[MAX_PATH];
+    DWORD dwValue;
+
+    if (RegOpenKey(HKEY_LOCAL_MACHINE,
+                   TEXT("Software\\ReactOS\\Downloader"),
+                   &hKey) != ERROR_SUCCESS)
+        return FALSE;
+
+    GetDlgItemText(hwnd, IDC_DOWNLOAD_FOLDER_EDIT, szBuf, sizeof(szBuf) / sizeof(TCHAR));
+    if (GetFileAttributes(szBuf) == 0xFFFFFFFF)
+        if (!CreateDirectory((LPCTSTR)szBuf,NULL))
+        {
+            LoadString(GetModuleHandle(NULL), IDS_UNABLECREATE_FOLDER, szBuf, sizeof(szBuf) / sizeof(TCHAR));
+            MessageBox(hwnd, (LPCTSTR)szBuf, NULL, MB_ICONSTOP);
+            return FALSE;
+        }
+    if (RegSetValueEx(hKey,
+                      L"DownloadFolder",
+                      0,
+                      REG_SZ,
+                      (LPBYTE)szBuf,
+                      (DWORD)(sizeof(szBuf) / sizeof(TCHAR))))
+        return FALSE;
+
+    GetDlgItemText(hwnd, IDC_UPDATE_SERVER_EDIT, szBuf, sizeof(szBuf) / sizeof(TCHAR));
+    if (RegSetValueEx(hKey,
+                      L"UpdateServer",
+                      0,
+                      REG_SZ,
+                      (LPBYTE)szBuf,
+                      (DWORD)(sizeof(szBuf) / sizeof(TCHAR))))
+        return FALSE;
+
+    if (SendDlgItemMessage(hwnd, IDC_DELINST_FILES_CHECKBOX, BM_GETCHECK, 0, 0) == BST_CHECKED)
+        dwValue = 0x1;
+    else
+        dwValue = 0x0;
+    if (RegSetValueEx(hKey,
+                      L"DeleteInstaller",
+                      0,
+                      REG_DWORD,
+                      (LPBYTE)&dwValue,
+                      sizeof(DWORD)))
+            return FALSE;
+
+    RegCloseKey(hKey);
+
+    return TRUE;
+}
+
+BOOL
+InitProfDlg(HWND hwnd)
+{
+    HKEY hKey;
+    TCHAR Buf[MAX_PATH];
+    DWORD dwDisp, dwSize;
+    DWORD dwValue, dwType = REG_DWORD;
+
+    if (RegOpenKey(HKEY_LOCAL_MACHINE,
+                   TEXT("Software\\ReactOS\\Downloader"),
+                   &hKey) != ERROR_SUCCESS)
+    {
+        if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, L"Software\\ReactOS\\Downloader",
+                           0, NULL, REG_OPTION_NON_VOLATILE,
+                           KEY_WRITE, NULL, &hKey, &dwDisp))
+        {
+            LoadString(GetModuleHandle(NULL), IDS_NOTCREATE_REGKEY, Buf, sizeof(Buf) / sizeof(TCHAR));
+            MessageBox(hwnd, (LPCTSTR)Buf, NULL, MB_ICONSTOP);
+            return FALSE;
+        }
+    }
+
+    dwSize = MAX_PATH;
+    if (RegQueryValueEx(hKey,
+                        L"DownloadFolder",
+                        NULL,
+                        NULL,
+                        (LPBYTE)&Buf,
+                        &dwSize) == ERROR_SUCCESS)
+    {
+        SetDlgItemText(hwnd, IDC_DOWNLOAD_FOLDER_EDIT, Buf);
+    }
+    else
+    {
+        TCHAR DPath[256];
+        int i;
+
+        if (!GetWindowsDirectory(Buf, sizeof(Buf) / sizeof(TCHAR))) return FALSE;
+
+        for (i = 0; i < 4; i++)
+        {
+            if (i == 3)
+            {
+                DPath[i] = '\0';
+                break;
+            }
+            DPath[i] = Buf[i];
+        }
+        LoadString(GetModuleHandle(NULL), IDS_DOWNLOAD_FOLDER, Buf, sizeof(Buf) / sizeof(TCHAR));
+        lstrcat((LPTSTR)DPath, Buf);
+        if (RegSetValueEx(hKey,
+                          L"DownloadFolder",
+                          0,
+                          REG_SZ,
+                          (LPBYTE)DPath,
+                          (DWORD)(sizeof(DPath) / sizeof(TCHAR))))
+            return FALSE;
+        else
+        {
+            if (GetFileAttributes(DPath) == 0xFFFFFFFF)
+                if (!CreateDirectory((LPCTSTR)DPath,NULL)) return FALSE;
+            SetDlgItemText(hwnd, IDC_DOWNLOAD_FOLDER_EDIT, DPath);
+        }
+    }
+
+    dwSize = MAX_PATH;
+    if (RegQueryValueEx(hKey,
+                        L"UpdateServer",
+                        NULL,
+                        NULL,
+                        (LPBYTE)&Buf,
+                        &dwSize) == ERROR_SUCCESS)
+    {
+        SetDlgItemText(hwnd, IDC_UPDATE_SERVER_EDIT, Buf);
+    }
+    else
+    {
+        LoadString(GetModuleHandle(NULL), IDS_UPDATE_URL, Buf, sizeof(Buf) / sizeof(TCHAR));
+        if (RegSetValueEx(hKey,
+                          L"UpdateServer",
+                          0,
+                          REG_SZ,
+                          (LPBYTE)Buf,
+                          (DWORD)(sizeof(Buf) / sizeof(TCHAR))))
+            return FALSE;
+        else
+        {
+            SetDlgItemText(hwnd, IDC_UPDATE_SERVER_EDIT, Buf);
+        }
+    }
+
+    dwSize = sizeof(DWORD);
+    if (RegQueryValueEx(hKey,
+                        L"DeleteInstaller",
+                        NULL,
+                        &dwType,
+                        (LPBYTE)&dwValue,
+                        &dwSize) == ERROR_SUCCESS)
+    {
+        if (dwValue == 0x1)
+            SendDlgItemMessage(hwnd, IDC_DELINST_FILES_CHECKBOX, BM_SETCHECK, 1, 1);
+    }
+    else
+    {
+        dwValue = 0x0;
+        if (RegSetValueEx(hKey,
+                          L"DeleteInstaller",
+                          0,
+                          REG_DWORD,
+                          (LPBYTE)&dwValue,
+                          sizeof(DWORD)))
+            return FALSE;
+    }
+
+    RegCloseKey(hKey);
+
+    return TRUE;
+}
+
+BOOL
+ChooseFolder(HWND hwnd)
+{
+    BROWSEINFO fi;
+    LPCITEMIDLIST lpItemList;
+    TCHAR szPath[MAX_PATH],Buf[256];
+
+    ZeroMemory(&fi, sizeof(BROWSEINFO));
+    fi.hwndOwner = hwnd;
+    LoadString(GetModuleHandle(NULL), IDS_CHOOSE_FOLDER, Buf, sizeof(Buf) / sizeof(TCHAR));
+    fi.lpszTitle = (LPCTSTR)Buf;
+    fi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_BROWSEFORCOMPUTER | BIF_NEWDIALOGSTYLE;
+    fi.lpfn = NULL;
+    fi.lParam = -1;
+    fi.iImage = 0;
+
+    if(!(lpItemList = SHBrowseForFolder(&fi))) return FALSE;
+    SHGetPathFromIDList(lpItemList, szPath);
+
+    if (_tcslen(szPath) == 0) return FALSE;
+    SetDlgItemText(hwnd, IDC_DOWNLOAD_FOLDER_EDIT, szPath);
+
+    return TRUE;
+}
+
+INT_PTR CALLBACK
+ProfDlgProc(HWND hDlg,
+            UINT message,
+            WPARAM wParam,
+            LPARAM lParam)
+{
+    static HICON hIcon;
+    UNREFERENCED_PARAMETER(lParam);
+
+    switch (message)
+    {
+        case WM_INITDIALOG:
+        {
+            hIcon = LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_MAIN),IMAGE_ICON,16,16,0);
+            SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);
+            InitProfDlg(hDlg);
+        }
+        break;
+
+        case WM_COMMAND:
+        {
+            switch (wParam)
+            {
+                case IDC_CHOOSE_BUTTON:
+                    ChooseFolder(hDlg);
+                break;
+                case IDOK:
+                {
+                    SaveSettings(hDlg);
+                    DestroyIcon(hIcon);
+                    EndDialog(hDlg,LOWORD(wParam));
+                    return TRUE;
+                }
+                break;
+                case IDCANCEL:
+                {
+                    DestroyIcon(hIcon);
+                    EndDialog(hDlg,LOWORD(wParam));
+                    return TRUE;
+                }
+                break;
+            }
+        }
+        break;
+    }
+
+    return FALSE;
+}
+
+BOOL IsApplicationInstalled(struct Application* App)
+{
+    WCHAR Uninstaller[200];
+    if(StrCmpW(App->RegName, L"")) {
+        if(getUninstaller(App->RegName, Uninstaller)) {
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+struct Application* GetDependency(const WCHAR* Dependency)
+{
+    struct Category* Category = Root.Children;
+
+    while (Category->Next)
+    {
+        while (Category->Apps)
+        {
+            if(StrCmpW(Category->Apps->RegName, Dependency) == 0)
+                return Category->Apps;
+            Category->Apps = Category->Apps->Next;
+        }
+        Category = Category->Next;
+    }
+    return NULL;
+}
+
+LRESULT CALLBACK
+WndProc (HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
+{
+    static RECT DescriptionRect;
+    struct Application* AppToInstall;
+    WCHAR InstallDep[260];
+    WCHAR InstallDepBuffer[260];
+    WCHAR Title[260];
+
+    switch (Message)
+    {
+        case WM_CREATE:
+        {
+            if(!SetupControls(hwnd))
+                return -1;
+            ShowMessage(Strings[IDS_WELCOME_TITLE], Strings[IDS_WELCOME]);
+        }
+        break;
+
+        case WM_PAINT:
+        {
+            PAINTSTRUCT ps;
+            HDC hdc = BeginPaint(hwnd, &ps);
+            HDC BackbufferHdc = CreateCompatibleDC(hdc);
+            HBITMAP BackbufferBmp = CreateCompatibleBitmap(hdc, ps.rcPaint.right, ps.rcPaint.bottom);
+            SelectObject(BackbufferHdc, BackbufferBmp);
+
+            FillRect(BackbufferHdc, &ps.rcPaint, CreateSolidBrush(RGB(235,235,235)));
+            DrawBitmap(BackbufferHdc, 10, 12, hLogo);
+            DrawDescription(BackbufferHdc, DescriptionRect);
+
+            BitBlt(hdc, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom, BackbufferHdc, 0, 0, SRCCOPY);
+            DeleteObject(BackbufferBmp);
+            DeleteDC(BackbufferHdc);
+            EndPaint(hwnd, &ps);
+        }
+        break;
+
+        case WM_COMMAND:
+        {
+            if(HIWORD(wParam) == BN_CLICKED)
+            {
+                if (lParam == (LPARAM)hProfButton)
+                {
+                    DialogBox(GetModuleHandle(NULL),
+                              MAKEINTRESOURCE(IDD_PROF),
+                              hwnd,
+                              ProfDlgProc);
+                }
+                if (lParam == (LPARAM)hDownloadButton)
+                {
+                    if(SelectedApplication)
+                    {
+                        /* install dependencies */
+                        if(StrCmpW(SelectedApplication->Depends, L""))
+                        {
+                            AppToInstall = SelectedApplication;
+                            SelectedApplication = GetDependency(SelectedApplication->Depends);
+                            if (SelectedApplication)
+                                if (!IsApplicationInstalled(SelectedApplication))
+                                {
+                                    LoadString(GetModuleHandle(NULL), IDS_INSTALL_DEP, InstallDep, sizeof(InstallDep) / sizeof(WCHAR));
+                                    LoadString(GetModuleHandle(NULL), IDS_WINDOW_TITLE, Title, sizeof(Title) / sizeof(WCHAR));
+                                    _snwprintf(InstallDepBuffer, sizeof(InstallDepBuffer) / sizeof(WCHAR), InstallDep, SelectedApplication->Name, AppToInstall->Name, SelectedApplication->Name);
+                                    if (MessageBox(hwnd, InstallDepBuffer, Title, MB_YESNO | MB_ICONINFORMATION) == IDYES)
+                                    {
+                                        DialogBoxW(GetModuleHandle(NULL), MAKEINTRESOURCEW(IDD_DOWNLOAD), 0, DownloadProc);
+                                    }
+                                }
+                            SelectedApplication = AppToInstall;
+                        }
+
+                        /* download and install the app */
+                        DialogBoxW(GetModuleHandle(NULL), MAKEINTRESOURCEW(IDD_DOWNLOAD), 0, DownloadProc);
+                        
+                        /* install req. hacks to get it working */
+                        if(StrCmpW(SelectedApplication->PostInstallAction, L""))
+                        {
+                            AppToInstall = SelectedApplication;
+                            CopyMemory(SelectedApplication->Location, SelectedApplication->PostInstallAction, sizeof(SelectedApplication->Location));
+                            DialogBoxW(GetModuleHandle(NULL), MAKEINTRESOURCEW(IDD_DOWNLOAD), 0, DownloadProc);
+                            SelectedApplication = AppToInstall;
+                        }
+                    }
+                    else
+                        ShowMessage(Strings[IDS_NO_APP_TITLE], Strings[IDS_NO_APP]);
+                }
+                else if (lParam == (LPARAM)hUninstallButton)
+                {
+                    if(SelectedApplication)
+                    {
+                        WCHAR Uninstaller[200];
+                        if(StrCmpW(SelectedApplication->RegName, L"")) {
+                            if(getUninstaller(SelectedApplication->RegName, Uninstaller))
+                                startUninstaller(Uninstaller);
+                        }
+                    }
+                }
+                else if (lParam == (LPARAM)hUpdateButton)
+                {
+                    ShowMessage(Strings[IDS_UPDATE_TITLE], Strings[IDS_UPDATE]);
+                }
+                else if (lParam == (LPARAM)hHelpButton)
+                {
+                    ShowMessage(Strings[IDS_HELP_TITLE], Strings[IDS_HELP]);
+                }
+            }
+        }
+        break;
+
+        case WM_NOTIFY:
+        {
+            LPNMHDR data = (LPNMHDR)lParam;
+            WCHAR Uninstaller[200];
+
+            if(data->code == TVN_SELCHANGED)
+            {
+                BOOL bShowUninstaller = FALSE;
+                if(data->hwndFrom == hCategories)
+                {
+                    struct Category* Category = (struct Category*) ((LPNMTREEVIEW)lParam)->itemNew.lParam;
+                    CategoryChoosen (hApps, Category);
+                }
+                else if(data->hwndFrom == hApps)
+                {
+                    SelectedApplication = (struct Application*) ((LPNMTREEVIEW)lParam)->itemNew.lParam;
+                    if(SelectedApplication)
+                    {
+                        ApplicationText[0]=L'\0';
+                        if(StrCmpW(SelectedApplication->Version, L"")) {
+                            StrCatW(ApplicationText, Strings[IDS_VERSION]);
+                            StrCatW(ApplicationText, SelectedApplication->Version);
+                            StrCatW(ApplicationText, L"\n");
+                        }
+                        if(StrCmpW(SelectedApplication->Licence, L"")) {
+                            StrCatW(ApplicationText, Strings[IDS_LICENCE]);
+                            StrCatW(ApplicationText, SelectedApplication->Licence);
+                            StrCatW(ApplicationText, L"\n");
+                        }
+                        if(StrCmpW(SelectedApplication->Maintainer, L"")) {
+                            StrCatW(ApplicationText, Strings[IDS_MAINTAINER]);
+                            StrCatW(ApplicationText, SelectedApplication->Maintainer);
+                            StrCatW(ApplicationText, L"\n");
+                        }
+                        if(StrCmpW(SelectedApplication->Licence, L"") || StrCmpW(SelectedApplication->Version, L"") || StrCmpW(SelectedApplication->Maintainer, L""))
+                            StrCatW(ApplicationText, L"\n");
+                        StrCatW(ApplicationText, SelectedApplication->Description);
+                        ShowMessage(SelectedApplication->Name, ApplicationText);
+                        if(StrCmpW(SelectedApplication->RegName, L"")) {
+                            if(getUninstaller(SelectedApplication->RegName, Uninstaller)) {
+                                bShowUninstaller = TRUE;
+                            }
+                        }
+                    }
+                }
+                if (bShowUninstaller)
+                    showUninstaller();
+                else
+                    hideUninstaller();
+            }
+        }
+        break;
+
+        case WM_SIZING:
+        {
+            LPRECT pRect = (LPRECT)lParam;
+            if (pRect->right-pRect->left < 520)
+                pRect->right = pRect->left + 520;
+
+            if (pRect->bottom-pRect->top < 300)
+                pRect->bottom = pRect->top + 300;
+        }
+        break;
+
+        case WM_SIZE:
+        {
+            int Split_Hozizontal = (HIWORD(lParam)-(45+60))/2 + 60;
+            int Split_Vertical = 200;
+            RECT Rect;
+
+            ResizeControl(hCategories, 10, 60, Split_Vertical, HIWORD(lParam)-10);
+            ResizeControl(hApps, Split_Vertical+5, 60, LOWORD(lParam)-10, Split_Hozizontal);
+            SetRect(&Rect, Split_Vertical+5, Split_Hozizontal+5, LOWORD(lParam)-10, HIWORD(lParam)-50);
+            DescriptionRect = Rect;
+
+            MoveWindow(hHelpButton, LOWORD(lParam)-50, 10, 40, 40, TRUE);
+            MoveWindow(hUpdateButton, LOWORD(lParam)-150, 10, 40, 40, TRUE);
+            MoveWindow(hProfButton, LOWORD(lParam)-100, 10, 40, 40, TRUE);
+            if(IsWindowVisible(hUninstallButton))
+                MoveWindow(hDownloadButton, (Split_Vertical+LOWORD(lParam))/2, HIWORD(lParam)-45, 140, 35, TRUE);
+            else
+                MoveWindow(hDownloadButton, (Split_Vertical+LOWORD(lParam))/2-70, HIWORD(lParam)-45, 140, 35, TRUE);
+            MoveWindow(hUninstallButton, (Split_Vertical+LOWORD(lParam))/2-140, HIWORD(lParam)-45, 140, 35, TRUE);
+        }
+        break;
+
+        case WM_DESTROY:
+        {
+            DeleteObject(hLogo);
+            if(Root.Children)
+                FreeTree(Root.Children);
+            PostQuitMessage(0);
+            return 0;
+        }
+        break;
+    }
+
+    return DefWindowProc (hwnd, Message, wParam, lParam);
+}
+
+INT WINAPI
+wWinMain (HINSTANCE hInstance,
+          HINSTANCE hPrevInst,
+          LPTSTR lpCmdLine,
+          INT nCmdShow)
+{
+    int i;
+    WNDCLASSEXW WndClass = {0};
+    MSG msg;
+
+    InitCommonControls();
+
+    // Load strings
+    for(i=0; i<STRING_COUNT; i++)
+        LoadStringW(hInstance, i, Strings[i], MAX_STRING_LENGHT); // if you know a better method please tell me.
+
+    // Create the window
+    WndClass.cbSize            = sizeof(WNDCLASSEX);
+    WndClass.lpszClassName     = L"Downloader";
+    WndClass.lpfnWndProc       = WndProc;
+    WndClass.hInstance         = hInstance;
+    WndClass.style             = CS_HREDRAW | CS_VREDRAW;
+    WndClass.hIcon             = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));
+    WndClass.hCursor           = LoadCursor(NULL, IDC_ARROW);
+
+    RegisterClassExW(&WndClass);
+
+    hwnd = CreateWindowW(L"Downloader",
+                         Strings[IDS_WINDOW_TITLE],
+                         WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
+                         CW_USEDEFAULT,
+                         CW_USEDEFAULT,
+                         720, 550,
+                         NULL, NULL,
+                         hInstance,
+                         NULL);
+
+    // Show it
+    ShowWindow(hwnd, SW_SHOW);
+    UpdateWindow(hwnd);
+
+    // Message Loop
+    while(GetMessage(&msg,NULL,0,0))
+    {
+        TranslateMessage(&msg);
+        DispatchMessage(&msg);
+    }
+
+    return 0;
+}
diff --git a/reactos/base/applications/downloader/patches/d2fix.c b/reactos/base/applications/downloader/patches/d2fix.c
new file mode 100644 (file)
index 0000000..f2f09bd
--- /dev/null
@@ -0,0 +1,36 @@
+#include <windows.h>
+#include <stdio.h>
+
+int main()
+{
+  HKEY hKey; 
+  DWORD dwVal = 1;
+  DWORD dwSize = MAX_PATH;
+  DWORD lpdwDisposition = 0;
+  CHAR szBuf[MAX_PATH];
+
+  printf("%s", "Setting Diablo 2 commandline parameters to -w -glide...");
+
+  if (RegCreateKeyExA (HKEY_CURRENT_USER,
+                    "SOFTWARE\\Blizzard Entertainment\\Diablo II Shareware",
+                    0,
+                                       NULL,
+                    0,
+                                       KEY_ALL_ACCESS,
+                                       NULL,
+                    &hKey,
+                                       &lpdwDisposition)); 
+  {
+    strcpy(szBuf, "-w -glide");
+
+    RegSetValueExA(hKey, "UseCmdLine", 0, REG_DWORD, (LPCSTR)&dwVal, sizeof(dwVal));
+    RegSetValueExA(hKey, "CmdLine", 0, REG_SZ, (LPCSTR)szBuf, strlen(szBuf)+1);
+
+    RegCloseKey(hKey);
+       printf("%s", "done.");
+
+  }
+
+  return 0;
+}
diff --git a/reactos/base/applications/downloader/resources.h b/reactos/base/applications/downloader/resources.h
new file mode 100644 (file)
index 0000000..172ed9a
--- /dev/null
@@ -0,0 +1,71 @@
+/* Icons */
+#define IDI_MAIN                      0x0
+#define IDI_UPDATE                    5000
+#define IDI_HELP                      5001
+#define IDI_PROF                      5002
+/* Bitmaps */
+#define IDB_UNDERLINE                 0x100
+#define IDB_LOGO                      0x101
+#define IDB_DOWNLOAD                  0x102
+#define IDB_UNINSTALL                 0x103
+#define IDB_TREEVIEW_ICON_0           0x900
+#define IDB_TREEVIEW_ICON_1           0x901
+#define IDB_TREEVIEW_ICON_2           0x902
+#define IDB_TREEVIEW_ICON_3           0x903
+#define IDB_TREEVIEW_ICON_4           0x904
+#define IDB_TREEVIEW_ICON_5           0x905
+#define IDB_TREEVIEW_ICON_6           0x906
+#define IDB_TREEVIEW_ICON_7           0x907
+#define IDB_TREEVIEW_ICON_8           0x908
+#define IDB_TREEVIEW_ICON_9           0x909
+#define IDB_TREEVIEW_ICON_10          0x910
+#define IDB_TREEVIEW_ICON_11          0x911
+#define IDB_TREEVIEW_ICON_12          0x912
+#define IDB_TREEVIEW_ICON_13          0x913
+/* Dialogs */
+#define IDD_DOWNLOAD                  0x100
+#define IDD_PROF                      6000
+/* Controls */
+#define IDC_PROGRESS                  0x1000
+#define IDC_STATUS                    0x1001
+#define IDC_REMOVE                    0x1002
+#define IDC_DOWNLOAD_FOLDER_EDIT      0x1003
+#define IDC_CHOOSE_BUTTON             0x1004
+#define IDC_UPDATE_SERVER_EDIT        0x1005
+#define IDC_DELINST_FILES_CHECKBOX    0x1006
+/* Strings */
+#define IDS_WINDOW_TITLE              0
+#define IDS_WELCOME_TITLE             1
+#define IDS_WELCOME                   2
+#define IDS_NO_APP_TITLE              3
+#define IDS_NO_APP                    4
+#define IDS_UPDATE_TITLE              5
+#define IDS_UPDATE                    6
+#define IDS_HELP_TITLE                7
+#define IDS_HELP                      8
+#define IDS_NO_APPS                   9
+#define IDS_CHOOSE_APP                10
+#define IDS_CHOOSE_SUB                11
+#define IDS_CHOOSE_CATEGORY           12
+#define IDS_CHOOSE_BOTH               13
+#define IDS_XMLERROR_1                14
+#define IDS_XMLERROR_2                15
+#define IDS_DOWNLOAD_ERROR            16
+#define IDS_VERSION                   17
+#define IDS_LICENCE                   18
+#define IDS_MAINTAINER                19
+#define IDS_APPS_TITLE                20
+#define IDS_CATS_TITLE                21
+#define IDS_CHOOSE_FOLDER             22
+#define IDS_NOTCREATE_REGKEY          23
+#define IDS_DOWNLOAD_FOLDER           24
+#define IDS_UNABLECREATE_FOLDER       25
+#define IDS_UPDATE_URL                26
+#define IDS_INSTALL_DEP               27
+/* Tool tips */
+#define TTT_HELPBUTTON                50
+#define TTT_UPDATEBUTTON              51
+#define TTT_PROFBUTTON                52
+/* Other */
+#define STRING_COUNT                  20
+#define MAX_STRING_LENGHT             0x100
diff --git a/reactos/base/applications/downloader/resources/0.bmp b/reactos/base/applications/downloader/resources/0.bmp
new file mode 100644 (file)
index 0000000..e31ccef
Binary files /dev/null and b/reactos/base/applications/downloader/resources/0.bmp differ
diff --git a/reactos/base/applications/downloader/resources/1.bmp b/reactos/base/applications/downloader/resources/1.bmp
new file mode 100644 (file)
index 0000000..b5d584b
Binary files /dev/null and b/reactos/base/applications/downloader/resources/1.bmp differ
diff --git a/reactos/base/applications/downloader/resources/10.bmp b/reactos/base/applications/downloader/resources/10.bmp
new file mode 100644 (file)
index 0000000..d0825e8
Binary files /dev/null and b/reactos/base/applications/downloader/resources/10.bmp differ
diff --git a/reactos/base/applications/downloader/resources/11.bmp b/reactos/base/applications/downloader/resources/11.bmp
new file mode 100644 (file)
index 0000000..94bd89c
Binary files /dev/null and b/reactos/base/applications/downloader/resources/11.bmp differ
diff --git a/reactos/base/applications/downloader/resources/12.bmp b/reactos/base/applications/downloader/resources/12.bmp
new file mode 100644 (file)
index 0000000..36f74af
Binary files /dev/null and b/reactos/base/applications/downloader/resources/12.bmp differ
diff --git a/reactos/base/applications/downloader/resources/13.bmp b/reactos/base/applications/downloader/resources/13.bmp
new file mode 100644 (file)
index 0000000..bfaa9c0
Binary files /dev/null and b/reactos/base/applications/downloader/resources/13.bmp differ
diff --git a/reactos/base/applications/downloader/resources/2.bmp b/reactos/base/applications/downloader/resources/2.bmp
new file mode 100644 (file)
index 0000000..e59ab5e
Binary files /dev/null and b/reactos/base/applications/downloader/resources/2.bmp differ
diff --git a/reactos/base/applications/downloader/resources/3.bmp b/reactos/base/applications/downloader/resources/3.bmp
new file mode 100644 (file)
index 0000000..860744a
Binary files /dev/null and b/reactos/base/applications/downloader/resources/3.bmp differ
diff --git a/reactos/base/applications/downloader/resources/4.bmp b/reactos/base/applications/downloader/resources/4.bmp
new file mode 100644 (file)
index 0000000..5df366d
Binary files /dev/null and b/reactos/base/applications/downloader/resources/4.bmp differ
diff --git a/reactos/base/applications/downloader/resources/5.bmp b/reactos/base/applications/downloader/resources/5.bmp
new file mode 100644 (file)
index 0000000..fd5099e
Binary files /dev/null and b/reactos/base/applications/downloader/resources/5.bmp differ
diff --git a/reactos/base/applications/downloader/resources/6.bmp b/reactos/base/applications/downloader/resources/6.bmp
new file mode 100644 (file)
index 0000000..280fc7e
Binary files /dev/null and b/reactos/base/applications/downloader/resources/6.bmp differ
diff --git a/reactos/base/applications/downloader/resources/7.bmp b/reactos/base/applications/downloader/resources/7.bmp
new file mode 100644 (file)
index 0000000..1c8007b
Binary files /dev/null and b/reactos/base/applications/downloader/resources/7.bmp differ
diff --git a/reactos/base/applications/downloader/resources/8.bmp b/reactos/base/applications/downloader/resources/8.bmp
new file mode 100644 (file)
index 0000000..e300642
Binary files /dev/null and b/reactos/base/applications/downloader/resources/8.bmp differ
diff --git a/reactos/base/applications/downloader/resources/9.bmp b/reactos/base/applications/downloader/resources/9.bmp
new file mode 100644 (file)
index 0000000..1e28d93
Binary files /dev/null and b/reactos/base/applications/downloader/resources/9.bmp differ
diff --git a/reactos/base/applications/downloader/resources/download.bmp b/reactos/base/applications/downloader/resources/download.bmp
new file mode 100644 (file)
index 0000000..09ff0a3
Binary files /dev/null and b/reactos/base/applications/downloader/resources/download.bmp differ
diff --git a/reactos/base/applications/downloader/resources/help.ico b/reactos/base/applications/downloader/resources/help.ico
new file mode 100644 (file)
index 0000000..e0373ec
Binary files /dev/null and b/reactos/base/applications/downloader/resources/help.ico differ
diff --git a/reactos/base/applications/downloader/resources/logo.bmp b/reactos/base/applications/downloader/resources/logo.bmp
new file mode 100644 (file)
index 0000000..4f10e49
Binary files /dev/null and b/reactos/base/applications/downloader/resources/logo.bmp differ
diff --git a/reactos/base/applications/downloader/resources/main.ico b/reactos/base/applications/downloader/resources/main.ico
new file mode 100644 (file)
index 0000000..4b6a2e4
Binary files /dev/null and b/reactos/base/applications/downloader/resources/main.ico differ
diff --git a/reactos/base/applications/downloader/resources/preferences.ico b/reactos/base/applications/downloader/resources/preferences.ico
new file mode 100644 (file)
index 0000000..c2b7757
Binary files /dev/null and b/reactos/base/applications/downloader/resources/preferences.ico differ
diff --git a/reactos/base/applications/downloader/resources/underline.bmp b/reactos/base/applications/downloader/resources/underline.bmp
new file mode 100644 (file)
index 0000000..7facc72
Binary files /dev/null and b/reactos/base/applications/downloader/resources/underline.bmp differ
diff --git a/reactos/base/applications/downloader/resources/uninstall.bmp b/reactos/base/applications/downloader/resources/uninstall.bmp
new file mode 100644 (file)
index 0000000..077cac9
Binary files /dev/null and b/reactos/base/applications/downloader/resources/uninstall.bmp differ
diff --git a/reactos/base/applications/downloader/resources/update.ico b/reactos/base/applications/downloader/resources/update.ico
new file mode 100644 (file)
index 0000000..82b4a1f
Binary files /dev/null and b/reactos/base/applications/downloader/resources/update.ico differ
diff --git a/reactos/base/applications/downloader/rsrc.rc b/reactos/base/applications/downloader/rsrc.rc
new file mode 100644 (file)
index 0000000..f504bad
--- /dev/null
@@ -0,0 +1,40 @@
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+IDI_MAIN                ICON DISCARDABLE      "resources/main.ico"
+IDI_UPDATE              ICON DISCARDABLE      "resources/update.ico"
+IDI_HELP                ICON DISCARDABLE      "resources/help.ico"
+IDI_PROF                ICON DISCARDABLE      "resources/preferences.ico"
+IDB_LOGO                BITMAP DISCARDABLE    "resources/logo.bmp"
+IDB_DOWNLOAD            BITMAP DISCARDABLE    "resources/download.bmp"
+IDB_UNINSTALL           BITMAP DISCARDABLE    "resources/uninstall.bmp"
+IDB_UNDERLINE           BITMAP DISCARDABLE    "resources/underline.bmp"
+IDB_TREEVIEW_ICON_0     BITMAP DISCARDABLE    "resources/0.bmp"
+IDB_TREEVIEW_ICON_1     BITMAP DISCARDABLE    "resources/1.bmp"
+IDB_TREEVIEW_ICON_2     BITMAP DISCARDABLE    "resources/2.bmp"
+IDB_TREEVIEW_ICON_3     BITMAP DISCARDABLE    "resources/3.bmp"
+IDB_TREEVIEW_ICON_4     BITMAP DISCARDABLE    "resources/4.bmp"
+IDB_TREEVIEW_ICON_5     BITMAP DISCARDABLE    "resources/5.bmp"
+IDB_TREEVIEW_ICON_6     BITMAP DISCARDABLE    "resources/6.bmp"
+IDB_TREEVIEW_ICON_7     BITMAP DISCARDABLE    "resources/7.bmp"
+IDB_TREEVIEW_ICON_8     BITMAP DISCARDABLE    "resources/8.bmp"
+IDB_TREEVIEW_ICON_9     BITMAP DISCARDABLE    "resources/9.bmp"
+IDB_TREEVIEW_ICON_10    BITMAP DISCARDABLE    "resources/10.bmp"
+IDB_TREEVIEW_ICON_11    BITMAP DISCARDABLE    "resources/11.bmp"
+IDB_TREEVIEW_ICON_12    BITMAP DISCARDABLE    "resources/12.bmp"
+IDB_TREEVIEW_ICON_13    BITMAP DISCARDABLE    "resources/13.bmp"
+
+
+#include "lang/bg-BG.rc"
+#include "lang/de-DE.rc"
+#include "lang/el-GR.rc"
+#include "lang/en-US.rc"
+#include "lang/es-ES.rc"
+#include "lang/fr-FR.rc"
+#include "lang/id-ID.rc"
+#include "lang/it-IT.rc"
+#include "lang/no-NO.rc"
+#include "lang/pl-PL.rc"
+#include "lang/lt-LT.rc"
+#include "lang/ru-RU.rc"
+#include "lang/sk-SK.rc"
+#include "lang/uk-UA.rc"
diff --git a/reactos/base/applications/downloader/structures.h b/reactos/base/applications/downloader/structures.h
new file mode 100644 (file)
index 0000000..7aeee66
--- /dev/null
@@ -0,0 +1,26 @@
+
+struct Application
+{
+    WCHAR Name[0x100];
+    WCHAR RegName[0x100];
+    WCHAR Version[0x100];
+    WCHAR Maintainer[0x100];
+    WCHAR Licence[0x100];
+    WCHAR Description[0x400];
+    WCHAR Location[0x100];
+    WCHAR Depends[0x100];
+    WCHAR PostInstallAction[0x100];
+    struct Application* Next;
+};
+
+struct Category
+{
+    WCHAR Name[0x100];
+    //WCHAR Description[0x100];
+    int Icon;
+    HANDLE TreeviewItem;
+    struct Application* Apps;
+    struct Category* Next;
+    struct Category* Children;
+    struct Category* Parent;
+};
diff --git a/reactos/base/applications/downloader/xml.c b/reactos/base/applications/downloader/xml.c
new file mode 100644 (file)
index 0000000..588f020
--- /dev/null
@@ -0,0 +1,236 @@
+/* PROJECT:         ReactOS Downloader
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * FILE:            base\applications\downloader\xml.c
+ * PURPOSE:         Parsing of application information xml files
+ * PROGRAMMERS:     Maarten Bosma, Lester Kortenhoeven
+ */
+
+#include <libs/expat/expat.h>
+#include <string.h>
+#include <stdio.h>
+#include <windows.h>
+#include <shlwapi.h>
+#include "structures.h"
+#include "resources.h"
+
+BOOL TagOpen;
+struct Category* Current;
+struct Application* CurrentApplication;
+char CurrentTag [0x100];
+extern WCHAR Strings [STRING_COUNT][MAX_STRING_LENGHT];
+
+void tag_opened (void* usrdata, const char* tag, const char** arg)
+{
+    int i;
+
+    if(!strcmp(tag, "tree") && !CurrentApplication)
+    {
+        // check version
+    }
+
+    else if(!strcmp(tag, "category") && !CurrentApplication)
+    {
+        if (!Current)
+        {
+            Current = malloc(sizeof(struct Category));
+            memset(Current, 0, sizeof(struct Category));
+        }
+        else if (TagOpen)
+        {
+            Current->Children = malloc(sizeof(struct Category));
+            memset(Current->Children, 0, sizeof(struct Category));
+            Current->Children->Parent = Current;
+            Current = Current->Children;
+        }
+        else
+        {
+            Current->Next = malloc(sizeof(struct Category));
+            memset(Current->Next, 0, sizeof(struct Category));
+            Current->Next->Parent = Current->Parent;
+            Current = Current->Next;
+        }
+        TagOpen = TRUE;
+
+        for (i=0; arg[i]; i+=2)
+        {
+            if(!strcmp(arg[i], "name"))
+            {
+                MultiByteToWideChar(CP_UTF8, 0, arg[i+1], -1, Current->Name, 0x100);
+            }
+            if(!strcmp(arg[i], "icon"))
+            {
+                Current->Icon = atoi(arg[i+1]);
+            }
+        }
+    }
+
+    else if(!strcmp(tag, "application") && !CurrentApplication)
+    {
+        if(Current->Apps)
+        {
+            CurrentApplication = Current->Apps;
+            while(CurrentApplication->Next)
+                CurrentApplication = CurrentApplication->Next;
+            CurrentApplication->Next = malloc(sizeof(struct Application));
+            memset(CurrentApplication->Next, 0, sizeof(struct Application));
+            CurrentApplication = CurrentApplication->Next;
+        }
+        else
+        {
+            Current->Apps = malloc(sizeof(struct Application));
+            memset(Current->Apps, 0, sizeof(struct Application));
+            CurrentApplication = Current->Apps;
+        }
+
+        for (i=0; arg[i]; i+=2)
+        {
+            if(!strcmp(arg[i], "name"))
+            {
+                MultiByteToWideChar(CP_UTF8, 0, arg[i+1], -1, CurrentApplication->Name, 0x100);
+            }
+        }
+    }
+    else if (CurrentApplication)
+    {
+        strncpy(CurrentTag, tag, 0x100);
+    }
+    else
+        MessageBoxW(0,Strings[IDS_XMLERROR_2],0,0);
+}
+
+
+void text (void* usrdata, const char* data, int len)
+{
+    if (!CurrentApplication)
+        return;
+
+    if(!strcmp(CurrentTag, "maintainer"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->Maintainer);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->Maintainer[currentlengt], 0x100-currentlengt);
+    }
+    else if(!strcmp(CurrentTag, "regname"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->RegName);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->RegName[currentlengt], 0x100-currentlengt);
+    }
+    else if(!strcmp(CurrentTag, "description"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->Description);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->Description[currentlengt], 0x400-currentlengt);
+    }
+    else if(!strcmp(CurrentTag, "location"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->Location);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->Location[currentlengt], 0x100-currentlengt);
+    }
+    else if(!strcmp(CurrentTag, "version"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->Version);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->Version[currentlengt], 0x400-currentlengt);
+    }
+    else if(!strcmp(CurrentTag, "licence"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->Licence);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->Licence[currentlengt], 0x100-currentlengt);
+    }
+    else if(!strcmp(CurrentTag, "depends"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->Depends);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->Depends[currentlengt], 0x100-currentlengt);
+    }
+    else if(!strcmp(CurrentTag, "postinstallaction"))
+    {
+        int currentlengt = lstrlenW(CurrentApplication->PostInstallAction);
+        MultiByteToWideChar(CP_UTF8, 0, data, len, &CurrentApplication->PostInstallAction[currentlengt], 0x100-currentlengt);
+    }
+}
+
+void tag_closed (void* tree, const char* tag)
+{
+    CurrentTag[0] = 0;
+
+    if(!strcmp(tag, "category"))
+    {
+        if (TagOpen)
+        {
+            TagOpen = FALSE;
+        }
+        else
+        {
+            Current = Current->Parent;
+        }
+    }
+    else if(!strcmp(tag, "application"))
+    {
+        CurrentApplication = NULL;
+    }
+}
+
+BOOL ProcessXML (const char* filename, struct Category* Root)
+{
+    int done = 0;
+    char buffer[255];
+    FILE* file;
+    XML_Parser parser;
+
+    if(Current)
+        return FALSE;
+
+    Current = Root;
+    TagOpen = TRUE;
+
+    file = fopen("downloader.xml", "r");
+    if(!file)
+    {
+        file = fopen(filename, "r");
+        if(!file)
+        {
+            MessageBoxW(0,Strings[IDS_XMLERROR_1],0,0);
+            return FALSE;
+        }
+    }
+
+    parser = XML_ParserCreate(NULL);
+    XML_SetElementHandler(parser, tag_opened, tag_closed);
+    XML_SetCharacterDataHandler(parser, text);
+
+    while (!done)
+    {
+        size_t len = fread (buffer, 1, sizeof(buffer), file);
+        done = len < sizeof(buffer);
+
+        if(!XML_Parse(parser, buffer, len, done))
+        {
+            MessageBoxW(0,Strings[IDS_XMLERROR_2],0,0);
+            return FALSE;
+        }
+    }
+
+    XML_ParserFree(parser);
+    fclose(file);
+
+    return TRUE;
+}
+
+void FreeApps (struct Application* Apps)
+{
+    if (Apps->Next)
+        FreeApps(Apps->Next);
+
+    free(Apps);
+}
+
+void FreeTree (struct Category* Node)
+{
+    if (Node->Children)
+        FreeTree(Node->Children);
+
+    if (Node->Next)
+        FreeTree(Node->Next);
+
+    if (Node->Apps)
+        FreeApps(Node->Apps);
+
+    free(Node);
+}
index 03bc4af..1cc42cb 100644 (file)
@@ -41,6 +41,8 @@ base\applications\cmdutils\lodctr\lodctr.exe            1
 base\applications\cmdutils\more\more.exe                1
 base\applications\cmdutils\xcopy\xcopy.exe              1
 base\applications\control\control.exe                   1
+base\applications\downloader\downloader.exe             1
+base\applications\downloader\downloader.xml             1
 base\applications\dxdiag\dxdiag.exe                     1
 base\applications\fontview\fontview.exe                 1
 base\applications\mscutils\devmgmt\devmgmt.exe          1