Index: available.c =================================================================== --- base/applications/rapps/available.c (revision 66728) +++ base/applications/rapps/available.c (working copy) @@ -3,9 +3,11 @@ * LICENSE: GPL - See COPYING in the top level directory * FILE: base/applications/rapps/available.c * PURPOSE: Functions for working with availabled applications - * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org) + * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org) + * Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com) */ +#include #include "rapps.h" BOOL @@ -23,16 +25,16 @@ #define ADD_TEXT(a, b, c, d) \ if (b[0] != '\0') \ { \ - LoadStringW(hInst, a, szText, sizeof(szText) / sizeof(WCHAR)); \ + LoadStringW(hInst, a, szText, _countof(szText)); \ InsertRichEditText(szText, c); \ InsertRichEditText(b, d); \ } \ - ADD_TEXT(IDS_AINFO_VERSION, Info->szVersion, CFE_BOLD, 0); - ADD_TEXT(IDS_AINFO_LICENSE, Info->szLicense, CFE_BOLD, 0); - ADD_TEXT(IDS_AINFO_SIZE, Info->szSize, CFE_BOLD, 0); - ADD_TEXT(IDS_AINFO_URLSITE, Info->szUrlSite, CFE_BOLD, CFE_LINK); - ADD_TEXT(IDS_AINFO_DESCRIPTION, Info->szDesc, CFE_BOLD, 0); + ADD_TEXT(IDS_AINFO_VERSION, Info->szVersion, CFE_BOLD, 0); + ADD_TEXT(IDS_AINFO_LICENSE, Info->szLicense, CFE_BOLD, 0); + ADD_TEXT(IDS_AINFO_SIZE, Info->szSize, CFE_BOLD, 0); + ADD_TEXT(IDS_AINFO_URLSITE, Info->szUrlSite, CFE_BOLD, CFE_LINK); + ADD_TEXT(IDS_AINFO_DESCRIPTION, Info->szDesc, CFE_BOLD, 0); return TRUE; } @@ -49,7 +51,7 @@ HRESULT hr; BOOL result = TRUE; - if (!GetStorageDirectory(szPath, sizeof(szPath) / sizeof(szPath[0]))) + if (!GetStorageDirectory(szPath, _countof(szPath))) return FALSE; hr = StringCbPrintfW(szCabPath, sizeof(szCabPath), @@ -61,6 +63,7 @@ result = result && DeleteFileW(szCabPath); hr = StringCbCatW(szPath, sizeof(szPath), L"\\rapps\\"); + if (FAILED(hr)) return FALSE; @@ -71,6 +74,7 @@ return FALSE; hFind = FindFirstFileW(szSearchPath, &FindFileData); + if (hFind == INVALID_HANDLE_VALUE) return result; @@ -82,6 +86,7 @@ if (FAILED(hr)) continue; result = result && DeleteFileW(szTmp); + } while (FindNextFileW(hFind, &FindFileData) != 0); FindClose(hFind); @@ -102,7 +107,7 @@ DownloadApplicationsDB(APPLICATION_DATABASE_URL); - if (!GetStorageDirectory(szPath, sizeof(szPath) / sizeof(szPath[0]))) + if (!GetStorageDirectory(szPath, _countof(szPath))) return FALSE; if (FAILED(StringCbPrintfW(szCabPath, sizeof(szCabPath), @@ -124,6 +129,8 @@ return TRUE; } +LIST_ENTRY CachedEntriesHead = {0}; +PLIST_ENTRY pCachedEntry = NULL; BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc) @@ -132,13 +139,18 @@ WIN32_FIND_DATAW FindFileData; WCHAR szPath[MAX_PATH]; WCHAR szAppsPath[MAX_PATH]; - WCHAR szSectionLocale[MAX_PATH] = L"Section."; WCHAR szCabPath[MAX_PATH]; - WCHAR szLocale[4 + 1]; - APPLICATION_INFO Info; + PAPPLICATION_INFO Info; HRESULT hr; - if (!GetStorageDirectory(szPath, sizeof(szPath) / sizeof(szPath[0]))) + /* initialize the cached list if hasn't been yet */ + if (pCachedEntry == NULL) + { + InitializeListHead(&CachedEntriesHead); + pCachedEntry = &CachedEntriesHead; + } + + if (!GetStorageDirectory(szPath, _countof(szPath))) return FALSE; hr = StringCbPrintfW(szCabPath, sizeof(szCabPath), @@ -148,9 +160,12 @@ return FALSE; hr = StringCbCatW(szPath, sizeof(szPath), L"\\rapps\\"); + if (FAILED(hr)) return FALSE; + hr = StringCbCopyW(szAppsPath, sizeof(szAppsPath), szPath); + if (FAILED(hr)) return FALSE; @@ -161,10 +176,12 @@ } hr = StringCbCatW(szPath, sizeof(szPath), L"*.txt"); + if (FAILED(hr)) return FALSE; hFind = FindFirstFileW(szPath, &FindFileData); + if (hFind == INVALID_HANDLE_VALUE) { if (GetFileAttributesW(szCabPath) == INVALID_FILE_ATTRIBUTES) @@ -172,61 +189,121 @@ ExtractFilesFromCab(szCabPath, szAppsPath); hFind = FindFirstFileW(szPath, &FindFileData); + if (hFind == INVALID_HANDLE_VALUE) return FALSE; } - if (!GetLocaleInfoW(GetUserDefaultLCID(), LOCALE_ILANGUAGE, - szLocale, sizeof(szLocale) / sizeof(WCHAR))) - { - FindClose(hFind); - return FALSE; - } - - hr = StringCbCatW(szSectionLocale, sizeof(szSectionLocale), szLocale); - if (FAILED(hr)) - { - FindClose(hFind); - return FALSE; - } - #define GET_STRING1(a, b) \ - if (!ParserGetString(szSectionLocale, a, b, MAX_PATH, FindFileData.cFileName)) \ - if (!ParserGetString(L"Section", a, b, MAX_PATH, FindFileData.cFileName)) \ - continue; + if (!ParserGetString(a, b, MAX_PATH, FindFileData.cFileName)) \ + continue; #define GET_STRING2(a, b) \ - if (!ParserGetString(szSectionLocale, a, b, MAX_PATH, FindFileData.cFileName)) \ - if (!ParserGetString(L"Section", a, b, MAX_PATH, FindFileData.cFileName)) \ - b[0] = '\0'; + if (!ParserGetString(a, b, MAX_PATH, FindFileData.cFileName)) \ + b[0] = '\0'; do { - Info.Category = ParserGetInt(szSectionLocale, L"Category", FindFileData.cFileName); - if (Info.Category == -1) + /* loop for all the cached entries */ + for (pCachedEntry = CachedEntriesHead.Flink; pCachedEntry != &CachedEntriesHead; pCachedEntry = pCachedEntry->Flink) { - Info.Category = ParserGetInt(L"Section", L"Category", FindFileData.cFileName); - if (Info.Category == -1) - continue; + // WCHAR shit[400]; + + Info = CONTAINING_RECORD(pCachedEntry, APPLICATION_INFO, List); + + // StringCbPrintf(shit, sizeof(shit), L"1->> %s - %s", FindFileData.cFileName, Info->cFileName); + // SetWindowTextW(hMainWnd, shit); + + /* do we already have this entry in cache? */ + if(_wcsicmp(FindFileData.cFileName, Info->cFileName) == 0) + { + + // StringCbPrintf(shit, sizeof(shit), L"2->> %s - %s", FindFileData.cFileName, Info->cFileName); + // SetWindowTextW(hMainWnd, shit); + + /* is it current enough, or the file has been modified since our last time here? */ + if (CompareFileTime(&FindFileData.ftLastWriteTime, &Info->ftCacheStamp) == 1) + { + /* recreate our cache, this is the slow path */ + RemoveEntryList(&Info->List); + HeapFree(GetProcessHeap(), 0, Info); + + // StringCbPrintf(shit, sizeof(shit), L"2->> %s - %s", FindFileData.cFileName, Info->cFileName); + // SetWindowTextW(hMainWnd, shit); + + } + else + { + + // StringCbPrintf(shit, sizeof(shit), L"3->> %s - %s", FindFileData.cFileName, Info->cFileName); + // SetWindowTextW(hMainWnd, shit); + + /* speedy path, compare directly, we already have the data */ + Info->szName[0] = L'+'; + goto skip_if_cached; + } + + break; + } } - if (EnumType != Info.Category && EnumType != ENUM_ALL_AVAILABLE) continue; + /* create a new entry */ + Info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(APPLICATION_INFO)); - GET_STRING1(L"Name", Info.szName); - GET_STRING1(L"URLDownload", Info.szUrlDownload); + if(!Info) + break; - GET_STRING2(L"RegName", Info.szRegName); - GET_STRING2(L"Version", Info.szVersion); - GET_STRING2(L"License", Info.szLicense); - GET_STRING2(L"Description", Info.szDesc); - GET_STRING2(L"Size", Info.szSize); - GET_STRING2(L"URLSite", Info.szUrlSite); - GET_STRING2(L"CDPath", Info.szCDPath); + Info->Category = ParserGetInt(L"Category", FindFileData.cFileName); - if (!lpEnumProc(&Info)) break; + // GET_STRING1(L"Name", Info->szName); + // GET_STRING1(L"URLDownload", Info->szUrlDownload); + + // GET_STRING2(L"RegName", Info->szRegName); + // GET_STRING2(L"Version", Info->szVersion); + // GET_STRING2(L"License", Info->szLicense); + // GET_STRING2(L"Description", Info->szDesc); + // GET_STRING2(L"Size", Info->szSize); + // GET_STRING2(L"URLSite", Info->szUrlSite); + // GET_STRING2(L"CDPath", Info->szCDPath); + + /* copy the cache-related fields for the next time */ + RtlCopyMemory(&Info->cFileName, &FindFileData.cFileName, MAX_PATH); + RtlCopyMemory(&Info->ftCacheStamp, &FindFileData.ftLastWriteTime, sizeof(FILETIME)); + + /* add our cached entry to the cached list */ + InsertTailList(&CachedEntriesHead, &Info->List); + +skip_if_cached: + + if (Info->Category == -1) + continue; + + if (EnumType != Info->Category && EnumType != ENUM_ALL_AVAILABLE) + continue; + + /* if our cache hit was only partial, we need to parse + and lazily fill the rest of fields only when needed */ + + if (Info->szUrlDownload[0] == 0) + { + GET_STRING1(L"Name", Info->szName); + GET_STRING1(L"URLDownload", Info->szUrlDownload); + + GET_STRING2(L"RegName", Info->szRegName); + GET_STRING2(L"Version", Info->szVersion); + GET_STRING2(L"License", Info->szLicense); + GET_STRING2(L"Description", Info->szDesc); + GET_STRING2(L"Size", Info->szSize); + GET_STRING2(L"URLSite", Info->szUrlSite); + GET_STRING2(L"CDPath", Info->szCDPath); + } + + if (!lpEnumProc(Info)) + break; + } while (FindNextFileW(hFind, &FindFileData) != 0); FindClose(hFind); return TRUE; -} +} \ No newline at end of file Index: CMakeLists.txt =================================================================== --- base/applications/rapps/CMakeLists.txt (revision 66728) +++ base/applications/rapps/CMakeLists.txt (working copy) @@ -7,7 +7,6 @@ listview.c loaddlg.c misc.c - parser.c richedit.c settingsdlg.c splitter.c Index: lang/es-ES.rc =================================================================== --- base/applications/rapps/lang/es-ES.rc (revision 66728) +++ base/applications/rapps/lang/es-ES.rc (working copy) @@ -70,12 +70,12 @@ PUSHBUTTON "&Seleccionar", IDC_CHOOSE, 187, 85, 50, 14 AUTOCHECKBOX "&Borrar el instalador del programa tras su instalación", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 GROUPBOX "Proxy", -1, 4, 116, 240, 61 - CONTROL "System proxy settings", IDC_PROXY_DEFAULT, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 130, 87, 10 - CONTROL "Direct (No proxy)", IDC_NO_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 145, 71, 10 - CONTROL "Proxy", IDC_USE_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 160, 35, 10 - EDITTEXT IDC_PROXY_SERVER, 50, 160, 70, 14, ES_AUTOHSCROLL - LTEXT "No proxy for", -1, 122, 160, 42, 8 - EDITTEXT IDC_NO_PROXY_FOR, 165, 160, 70, 14, ES_AUTOHSCROLL + CONTROL "Utilizar el proxy del sistema", IDC_PROXY_DEFAULT, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 128, 218, 10 + CONTROL "Conexión directa (sin nada)", IDC_NO_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 141, 218, 10 + CONTROL "Proxy:", IDC_USE_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 154, 35, 10 + EDITTEXT IDC_PROXY_SERVER, 51, 153, 70, 14, ES_AUTOHSCROLL + LTEXT "Sin proxy para:", -1, 125, 154, 50, 8, SS_RIGHT + EDITTEXT IDC_NO_PROXY_FOR, 177, 153, 61, 14, ES_AUTOHSCROLL PUSHBUTTON "Por defecto", IDC_DEFAULT_SETTINGS, 8, 180, 60, 14 PUSHBUTTON "Aceptar", IDOK, 116, 180, 60, 14 PUSHBUTTON "Cancelar", IDCANCEL, 181, 180, 60, 14 Index: misc.c =================================================================== --- base/applications/rapps/misc.c (revision 66728) +++ base/applications/rapps/misc.c (working copy) @@ -3,9 +3,11 @@ * LICENSE: GPL - See COPYING in the top level directory * FILE: base/applications/rapps/misc.c * PURPOSE: Misc functions - * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org) + * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org) + * Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com) */ +#include #include "rapps.h" /* SESSION Operation */ @@ -168,6 +170,7 @@ mii.cbSize = sizeof(mii); mii.fMask = MIIM_STATE; GetMenuItemInfo(hPopupMenu, DefaultItem, FALSE, &mii); + if (!(mii.fState & MFS_GRAYED)) SetMenuDefaultItem(hPopupMenu, DefaultItem, FALSE); @@ -392,3 +395,141 @@ return TRUE; } + + +LPWSTR GetINIFullPath(LPCWSTR lpFileName) +{ + WCHAR szDir[MAX_PATH]; + static WCHAR szBuffer[MAX_PATH]; + + GetStorageDirectory(szDir, _countof(szDir)); + StringCbPrintfW(szBuffer, sizeof(szBuffer), L"%ls\\rapps\\%ls", szDir, lpFileName); + + return szBuffer; +} + + +WCHAR szCachedINISectionLocale[MAX_PATH] = L"Section."; +WCHAR szCachedINISectionLocaleNeutral[MAX_PATH] = {0}; + +BYTE bCachedSectionStatus = FALSE; + +UINT ParserGetString(LPCWSTR lpKeyName, LPWSTR lpReturnedString, UINT nSize, LPCWSTR lpFileName) +{ + PWSTR lpFullFileName = GetINIFullPath(lpFileName); + LPSTR lpRequiredBuf = HeapAlloc(GetProcessHeap(), 0, nSize); + + if (!lpRequiredBuf) + return FALSE; + + /* we don't have cached section strings for the current system language, create them */ + if(bCachedSectionStatus == FALSE) + { + WCHAR szLocale[4 + 1]; + DWORD len; + + /* find out what is the current system lang code (e.g. "0a") and append it to SectionLocale */ + GetLocaleInfoW(GetUserDefaultLCID(), LOCALE_ILANGUAGE, + szLocale, _countof(szLocale)); + + StringCbCatW(szCachedINISectionLocale, sizeof(szCachedINISectionLocale), szLocale); + + /* copy the locale-dependent string into the buffer of the future neutral one */ + StringCbCopyW(szCachedINISectionLocaleNeutral, + sizeof(szCachedINISectionLocale), + szCachedINISectionLocale); + + /* turn "Section.0c0a" into "Section.0a", keeping just the neutral lang part */ + len = wcslen(szCachedINISectionLocale); + + memmove((szCachedINISectionLocaleNeutral + len) - 4, + (szCachedINISectionLocaleNeutral + len) - 2, + (2 * sizeof(WCHAR)) + sizeof(UNICODE_NULL)); + + /* finally, mark us as cache-friendly for the next time */ + bCachedSectionStatus = TRUE; + } + + /* 1st - find localized strings (e.g. "Section.0c0a") */ + GetPrivateProfileStringW(szCachedINISectionLocale, + lpKeyName, + NULL, + lpReturnedString, + nSize, + lpFullFileName); + + + if (GetLastError() == ERROR_SUCCESS) + goto skip; + + + /* 2nd - if they weren't present check for neutral sub-langs/ generic translations (e.g. "Section.0a") */ + GetPrivateProfileStringW(szCachedINISectionLocaleNeutral, + lpKeyName, + NULL, + lpReturnedString, + nSize, + lpFullFileName); + + if (GetLastError() == ERROR_SUCCESS) + goto skip; + + + /* 3rd - if they weren't present fallback to standard english strings (just "Section") */ + GetPrivateProfileStringW(L"Section", + lpKeyName, + NULL, + lpReturnedString, + nSize, + lpFullFileName); + + if (GetLastError() != ERROR_SUCCESS) + { + HeapFree(GetProcessHeap(), 0, lpRequiredBuf); + return FALSE; + } + +skip: + + /* extra silly method of avoiding having to use the ANSI functions. + + this converts UTF-16'd UTF-8 (broken UTF-8 sandwiched with 0x00 bytes) into proper UTF-8, + removing that padding and getting the raw bytes: + + e.g. + Stored in UTF-8 as: 37 2D 5A 69 70 20 C3 91 + GetPrivateProfileStringW output: 37 00 2D 00 5A 00 69 00 70 00 20 00 C3 00 91 00 + After WideCharToMultiByte: 37 2D 5A 69 70 20 C3 91 + After MultiByteToWideChar: 37 00 2D 00 5A 00 69 00 70 00 20 00 D1 00 + + */ + WideCharToMultiByte(CP_ACP, 0, lpReturnedString, -1, lpRequiredBuf, nSize, NULL, NULL); + + /* convert that (single byte -- ANSI) UTF-8 encoded text into proper UTF-16, sigh */ + MultiByteToWideChar(CP_UTF8, 0, lpRequiredBuf, -1, lpReturnedString, nSize); + + /* get rid of the dynamically allocated ANSI buffer */ + HeapFree(GetProcessHeap(), 0, lpRequiredBuf); + + return TRUE; +} + +UINT ParserGetInt(LPCWSTR lpKeyName, LPCWSTR lpFileName) +{ + WCHAR Buffer[30]; + UNICODE_STRING BufferW; + ULONG Result; + + /* grab the text version of our entry */ + if (!ParserGetString(lpKeyName, Buffer, _countof(Buffer), lpFileName)) + return FALSE; + + if (!Buffer[0]) + return FALSE; + + /* convert it to an actual integer */ + RtlInitUnicodeString(&BufferW, Buffer); + RtlUnicodeStringToInteger(&BufferW, 0, &Result); + + return Result; +} \ No newline at end of file Index: rapps.h =================================================================== --- base/applications/rapps/rapps.h (revision 66728) +++ base/applications/rapps/rapps.h (working copy) @@ -81,6 +81,14 @@ WCHAR szUrlDownload[MAX_PATH]; WCHAR szCDPath[MAX_PATH]; + /* caching mechanism related entries */ + WCHAR cFileName[MAX_PATH]; + FILETIME ftCacheStamp; + LIST_ENTRY List; + + /* optional integrity checks */ + BYTE MD5Checksum[16]; + } APPLICATION_INFO, *PAPPLICATION_INFO; typedef struct @@ -166,9 +174,8 @@ VOID FreeLogs(VOID); BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg); -/* parser.c */ -INT ParserGetString(LPCWSTR section, LPCWSTR entry, LPWSTR buffer, UINT len, LPCWSTR filename); -UINT ParserGetInt(LPCWSTR section, LPCWSTR entry, LPCWSTR filename); +UINT ParserGetString(LPCWSTR lpKeyName, LPWSTR lpReturnedString, UINT nSize, LPCWSTR lpFileName); +UINT ParserGetInt(LPCWSTR lpKeyName, LPCWSTR lpFileName); /* richedit.c */ extern HWND hRichEdit; Index: rapps/7zip.txt =================================================================== --- base/applications/rapps/rapps/7zip.txt (revision 66728) +++ base/applications/rapps/rapps/7zip.txt (working copy) @@ -15,7 +15,7 @@ [Section.0407] Description = Ein Dateiarchivierungswerkzeug zum Erstellen und Öffnen von 7zip, zip, tar, rar und vielen anderen Archivformaten. -[Section.040a] +[Section.0a] Description = Utilidad para crear y abrir 7zip, zip, tar, rar y otros archivos comprimidos. [Section.040c] Index: rapps/abiword.txt =================================================================== --- base/applications/rapps/rapps/abiword.txt (revision 66728) +++ base/applications/rapps/rapps/abiword.txt (working copy) @@ -15,7 +15,7 @@ [Section.0407] Description = Textverarbeitung. -[Section.040a] +[Section.0a] Description = Procesador de textos. [Section.040c] Index: rapps/abiword26.txt =================================================================== --- base/applications/rapps/rapps/abiword26.txt (revision 66728) +++ base/applications/rapps/rapps/abiword26.txt (working copy) @@ -15,7 +15,7 @@ [Section.0407] Description = Textverarbeitung. -[Section.040a] +[Section.0a] Description = Procesador de textos. [Section.040c] Index: rapps/abyss.txt =================================================================== --- base/applications/rapps/rapps/abyss.txt (revision 66728) +++ base/applications/rapps/rapps/abyss.txt (working copy) @@ -15,8 +15,8 @@ [Section.0407] Description = Abyss Web Server ermöglicht es Webseiten auf Ihrem Computer zu hosten. Er unterstützt sichere SSL/TLS Verbindungen (HTTPS) sowie eine Vielfalt an Web Technologien. Er kann ebenfalls PHP, Perl, Python, ASP, ASP.NET, und Ruby on Rails Web Anwendungen ausführen, welche von Datenbanken, wie MySQL, SQLite, MS SQL Server, MS Access, oder Oracle unterstützt werden können. -[Section.040a] -Description = Abyss Web Server le permite alojar sitios Web en su ordenador. Soporta conexiones seguras SSL / TLS (HTTPS) así como una gran cantidad de tecnología web. También puede ejecutar aplicaciones web PHP, Perl, Python, ASP, ASP.Net, Ruby y Ruby on Rails, que pueden ser asociadas con bases de datos tales como MySQL, SQLite, MS SQL Server, MS Access u Oracle. +[Section.0a] +Description = Abyss Web Server permite alojar sitios Web localmente en el equipo. Soporta conexiones seguras SSL / TLS (HTTPS) así como una gran cantidad de tecnologías web. También puede ejecutar aplicaciones web en PHP, Perl, Python, ASP, ASP.Net, Ruby y Ruby on Rails, que pueden ser asociadas con bases de datos tales como MySQL, SQLite, MS SQL Server, MS Access u Oracle. [Section.040c] Description = Abyss Web Server vous permet d'héberger vos sites internet sur votre ordinateur. Il supporte les connexions sécurisées SSL/TLS (HTTPS) ainsi qu'un grand nombre de technologies web. Il peut également faire tourner des applications web PHP, Perl, Python, ASP, ASP.Net, Ruby et Ruby on Rails, qui peuvent être associées à des bases de données telles que MySQL, SQLite, MS SQL Server, MS Access ou Oracle. Index: rapps/ac97forvirtualbox.txt =================================================================== --- base/applications/rapps/rapps/ac97forvirtualbox.txt (revision 66728) +++ base/applications/rapps/rapps/ac97forvirtualbox.txt (working copy) @@ -26,10 +26,10 @@ License = Sconosciuta Descrizione = Estrarre nella cartella "ReactOS" e poi riavviare ReactOs due volte. -[Section.040a] -Name = Driver AC97 para VirtualBox +[Section.0a] +Name = Controlador AC97 para VirtualBox License = Desconocida -Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. +Description = Se debe descomprimir en la carpeta "ReactOS" y reiniciar ReactOS dos veces. [Section.040c] Name = Pilote AC97 pour VirtualBox Index: rapps/akelpad.txt =================================================================== --- base/applications/rapps/rapps/akelpad.txt (revision 66728) +++ base/applications/rapps/rapps/akelpad.txt (working copy) @@ -13,6 +13,9 @@ URLDownload = http://switch.dl.sourceforge.net/project/akelpad/AkelPad%204/4.9.1/AkelPad-4.9.1-setup.exe CDPath = none +[Section.0a] +Description = AkelPad es un editor de texto plano de código abierto. Se diseñó para ser ligero y rápido. + [Section.0418] Description = AkelPad - editor de text simplu. Este un program cu sursă deschisă, conceput pentru a fi mic și rapid. Size = 1,11 Mo Index: rapps/alreader.txt =================================================================== --- base/applications/rapps/rapps/alreader.txt (revision 66728) +++ base/applications/rapps/rapps/alreader.txt (working copy) @@ -13,6 +13,9 @@ [Section.0407] Description = Ein FB2 eBook Reader. Unterstützung für folgende Formate: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. ZIP und GZ Archive werden ebenfalls unterstützt. +[Section.0a] +Description = Un lector de libros electrónicos. Soporta los formatos fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc) y tcr, además de libros comprimidos en archivos ZIP y GZ. + [Section.0410] Description = Un eBook Reader. Legge i formati fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Supporta gli archivi ZIP e GZ. Index: rapps/audiograbber.txt =================================================================== --- base/applications/rapps/rapps/audiograbber.txt (revision 66728) +++ base/applications/rapps/rapps/audiograbber.txt (working copy) @@ -18,8 +18,8 @@ [Section.0410] Description = Un buon CD Ripper/Convertitore di file Audio. -[Section.040a] -Description = Un buen CD Ripper/ conversor de archivos de audio. +[Section.0a] +Description = Un buen extractor de pistas de CDs de música y conversor de archivos de audio. [Section.040c] Description = Un très bon extracteur de CD/convertisseur de fichier audio. Index: rapps/bittorrent.txt =================================================================== --- base/applications/rapps/rapps/bittorrent.txt (revision 66728) +++ base/applications/rapps/rapps/bittorrent.txt (working copy) @@ -5,7 +5,7 @@ Name = BitTorrent Version = 7.9.2 License = Freeware for non-commercial uses -Description = The Original BitTorrent Client. +Description = The original BitTorrent client. Size = 1.61 MB Category = 5 URLSite = http://www.bittorrent.com/ @@ -16,6 +16,10 @@ License = Freeware für nichtkommerzielle Nutzung Description = Der Original BitTorrent Client. +[Section.0a] +License = Gratuito para uso no comercial +Description = El cliente de BitTorrent original. + [Section.0410] Description = L'originale Client BitTorrent. Index: rapps/bochs.txt =================================================================== --- base/applications/rapps/rapps/bochs.txt (revision 66728) +++ base/applications/rapps/rapps/bochs.txt (working copy) @@ -16,6 +16,9 @@ [Section.0407] Description = Bochs ist ein portabler Open-Source IA-32 (x86) PC-Emulator geschrieben in C++, der auf den meisten populären Plattformen läuft. +[Section.0a] +Description = Bochs es un emulador de PC IA-32 (x86) multiplataforma y de código abierto escrito en C++, funciona en gran cantidad de arquitecturas. + [Section.0410] Description = Bochs è un emulatore pc IA-32 (x86) scritto in C++ open source e portatile, che può essere eseguito sulle piattaformi più popolari. Index: rapps/boswars.txt =================================================================== --- base/applications/rapps/rapps/boswars.txt (revision 66728) +++ base/applications/rapps/rapps/boswars.txt (working copy) @@ -16,6 +16,9 @@ [Section.0407] Description = Bos Wars ist ein futuristisches Echtzeitstrategiespiel. Um das Spiel zu starten, installieren Sie die Microsoft Visual C++ 2008 Runtime. +[Section.0a] +Description = Bos Wars es un juego de estrategia futurista en tiempo real. Para ejecutar el juego es necesario instalar Microsoft Visual C++ 2008 runtime. + [Section.0410] Description = Bos Wars è un gioco futuristico di strategia in tempo reale. Per iniziare il gioco, installare Microsoft Visual C + + 2008 runtime. Index: rapps/boundaround.txt =================================================================== --- base/applications/rapps/rapps/boundaround.txt (revision 66728) +++ base/applications/rapps/rapps/boundaround.txt (working copy) @@ -14,6 +14,9 @@ [Section.0407] Description = Ein Spiel, ähnlich zu Frozen Fruits. +[Section.0a] +Description = Un juego similar a Frozen Fruits. + [Section.0410] Name = Bound Around (Versione di prova) Description = Un gioco simile a Frozen Fruits. Index: rapps/christmasbound.txt =================================================================== --- base/applications/rapps/rapps/christmasbound.txt (revision 66728) +++ base/applications/rapps/rapps/christmasbound.txt (working copy) @@ -15,6 +15,10 @@ [Section.0407] Description = Ein Spiel, ähnlich zu Frozen Fruits. +[Section.0a] +License = Gratuito +Description = Un juego similar a Frozen Fruits. + [Section.0410] Description = Un gioco simile a Frozen Fuits. Index: rapps/chromium.txt =================================================================== --- base/applications/rapps/rapps/chromium.txt (revision 66728) +++ base/applications/rapps/rapps/chromium.txt (working copy) @@ -16,6 +16,9 @@ [Section.0407] Description = Chromium B.S.U. ist ein Arcade-Style, Top-Scrolling Space Shooter. +[Section.0a] +Description = Chromium B.S.U. es un juego vertical de disparos espacial al clásico estilo arcade. + [Section.0410] Description = Cromo B.S.U. è sparatutto spaziale. Index: rapps/cnt.txt =================================================================== --- base/applications/rapps/rapps/cnt.txt (revision 66728) +++ base/applications/rapps/rapps/cnt.txt (working copy) @@ -15,6 +15,10 @@ [Section.0407] Description = Kostenlose virtuelle Tastatur. +[Section.0a] +License = Gratuito +Description = Aplicación gratuita de teclado virtual. + [Section.0410] License = Gratuita Description = Applicazione gratuita per la simulazione della tastiera. Index: rapps/codeblocks.txt =================================================================== --- base/applications/rapps/rapps/codeblocks.txt (revision 66728) +++ base/applications/rapps/rapps/codeblocks.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Eine quelloffene, plattformübergreifende, mächtige IDE. Diese enthält keinen Compiler. +[Section.0a] +Description = Un IDE potente, de código abierto y multiplataforma. No viene con compilador. + [Section.0410] Description = Un IDE potente, open source, multipiattaforma. Non contiene un compilatore. Index: rapps/codeblocks_gcc.txt =================================================================== --- base/applications/rapps/rapps/codeblocks_gcc.txt (revision 66728) +++ base/applications/rapps/rapps/codeblocks_gcc.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Eine quelloffene, plattformübergreifende, mächtige IDE. Diese enthält den TDM-GCC (version 4.7.1, 32 bit) Compiler. +[Section.0a] +Description = Un IDE potente, de código abierto y multiplataforma. Viene con el compilador TDM-GCC (version 4.7.1, 32 bit). + [Section.0410] Description = Un IDE potente, open source, multipiattaforma. Contiene il compilatore TDM-GCC (versione 4.7.1, 32 bit). Index: rapps/codeblocks_gcc_2.txt =================================================================== --- base/applications/rapps/rapps/codeblocks_gcc_2.txt (revision 66728) +++ base/applications/rapps/rapps/codeblocks_gcc_2.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Eine quelloffene, plattformübergreifende, mächtige IDE. Diese enthät den TDM-GCC (version 4.8.1, 32 bit) Compiler. +[Section.0a] +Description = Un IDE potente, de código abierto y multiplataforma. Viene con el compilador TDM-GCC (version 4.8.1, 32 bit). + [Section.0410] Description = Un IDE potente, open source, multipiattaforma. Contiene il compilatore TDM-GCC (versione 4.8.1, 32 bit). Index: rapps/comctl32ocx.txt =================================================================== --- base/applications/rapps/rapps/comctl32ocx.txt (revision 66728) +++ base/applications/rapps/rapps/comctl32ocx.txt (working copy) @@ -19,9 +19,9 @@ URLSite = http://www.microsoft.com/de-DE/download/details.aspx?id=10019 URLDownload = http://download.microsoft.com/download/c/e/d/ced699fe-7a40-420b-bdd7-10b38caef4c6/VisualBasic6-KB896559-v1-DEU.exe -[Section.040a] +[Section.0a] License = Desconocida -Description = X es necesario para varias aplicaciones. Incluye: comctl32.ocx, mscomctl.ocx, advpack.dll. +Description = Necesario para algunas aplicaciones. Incluye: comctl32.ocx, mscomctl.ocx y advpack.dll. Size = 910.23 kB URLSite = http://www.microsoft.com/es-ES/download/details.aspx?id=10019 URLDownload = http://download.microsoft.com/download/9/0/9/90935db7-89ec-4344-a9ea-e6913c03f060/VisualBasic6-KB896559-v1-ESN.exe Index: rapps/devcpp_tdm_gcc_x64.txt =================================================================== --- base/applications/rapps/rapps/devcpp_tdm_gcc_x64.txt (revision 66728) +++ base/applications/rapps/rapps/devcpp_tdm_gcc_x64.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Eine gepflegte Version von Dev-C++. Der 64 bit TDM-GCC Compiler liegt bei. +[Section.0a] +Description = Una versión en desarrollo de Dev-C++. Viene con el compilador de 64 bits TDM-GCC. + [Section.0410] Description = Una versione sostenuta di Dev-C++. Contiene il compilatore a 64bit TDM-GCC. Index: rapps/diablo2.txt =================================================================== --- base/applications/rapps/rapps/diablo2.txt (revision 66728) +++ base/applications/rapps/rapps/diablo2.txt (working copy) @@ -15,8 +15,8 @@ [Section.0407] Description = Diablo 2 Shareware. zeckensacks glide wrapper wird zum Ausführen benötigt. -[Section.040a] -Description = Diablo 2 Shareware. zeckensack's glide wrapper es necesario para su ejecución. +[Section.0a] +Description = Diablo 2 Shareware. El adaptador de compatibilidad para Glide de zeckensack es necesario para poder ejecutar el juego. [Section.040c] Description = Diablo 2 Shareware. zeckensack's glide wrapper est requis pour le faire tourner. Index: rapps/dosblaster.txt =================================================================== --- base/applications/rapps/rapps/dosblaster.txt (revision 66728) +++ base/applications/rapps/rapps/dosblaster.txt (working copy) @@ -15,8 +15,8 @@ [Section.0407] Description = DosBlaster ist eine Shell Extension, die es ermöglicht jede DOS Anwendung via Rechtsklick in DOSBox zu öffnen. Diese Version beinhaltet DOSBox 0.70, kann aber sehr einfach aktualisiert werden, indem man ein neueres DOSBox in die DosBlaster Ordner installiert. -[Section.040a] -Description = DosBlaster en una extensión Shell que permite abrir cualquier ejecutable DOS en DOSBox desde el botón derecho del ratón. Esta versión contiene DOSBox 0.70, pero puede ser actualizado facilmente instalando una nueva versión de DOSBox en la carpeta de DosBlaster. +[Section.0a] +Description = DosBlaster es una extensión del explorador de archivos que permite abrir cualquier ejecutable DOS en DOSBox haciendo clic derecho del ratón. Esta versión contiene DOSBox 0.70, pero se puede actualizar fácilmente instalando una nueva versión de DOSBox en la carpeta de DosBlaster. [Section.040c] Description = DosBlaster est une extension Shell qui permet d'ouvrir n'importe quel exécutable DOS dans DOSBox via un click droit. Cette version contient DOSBox 0.70 mais peut être simplement mise à jour en installant une nouvelle version de DOSBox dans les répertoires de DosBlaster. Index: rapps/dosbox.txt =================================================================== --- base/applications/rapps/rapps/dosbox.txt (revision 66728) +++ base/applications/rapps/rapps/dosbox.txt (working copy) @@ -15,7 +15,7 @@ [Section.0407] Description = DOSBox ist ein DOS Emulator. -[Section.040a] +[Section.0a] Description = DOSBox es un emulador de DOS. [Section.040c] Index: rapps/doublecommander.txt =================================================================== --- base/applications/rapps/rapps/doublecommander.txt (revision 66728) +++ base/applications/rapps/rapps/doublecommander.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Double Commander ist ein Open Source Dateimanager mit zwei nebeneinander liegenden Panels. Zum extrahieren wird 7-Zip oder ein ähnliches Tool benötigt. +[Section.0a] +Description = Double Commander es un explorador de archivos multipanel de código abierto. Es necesario utilizar 7-Zip u otro programa alternativo para extraerlo. + [Section.0410] Description = Double Commander è un open-source file-manager con due pannelli laterali affiancati. Utilizzare 7-Zip o un' utility simile per estrarlo. Index: rapps/dplus.txt =================================================================== --- base/applications/rapps/rapps/dplus.txt (revision 66728) +++ base/applications/rapps/rapps/dplus.txt (working copy) @@ -12,6 +12,9 @@ URLDownload = http://download.sourceforge.net/project/dplus-browser/Releases/dplus-0.5b/dplus-0.5b-setup.exe CDPath = none +[Section.0a] +Description = DPlus es un navegador de archivos con interfaz gráfica y un énfasis en la seguridad, el rendimiento y la portabilidad. Se basa en Dillo y es una versión alternativa del proyecto Dillo-Win32. + [Section.0410] License = GPL versione 3 Description = DPlus è un web browser grafico con un accenno alla sicurezza, le prestazioni e portabilità. è basata su Dillo ed è diviso dal progetto Dillo-Win32. Index: rapps/dvdwritenow.txt =================================================================== --- base/applications/rapps/rapps/dvdwritenow.txt (revision 66728) +++ base/applications/rapps/rapps/dvdwritenow.txt (working copy) @@ -16,6 +16,10 @@ [Section.0407] Description = Eine kostenlose CD/DVD Brennsoftware. Sobald es installiert ist, kann man CD/DVD RW als USB Flash oder Wechseldatenträger beschreiben. Auch kann man hiermit auf CD/DVD RW schreiben, welche mit dem UDF Dateisystem beschrieben wurden. Auch kann man mit dieser Software UDF Disks, welche mit anderer Software erstellt wurden, lesen. (Microsoft DVD−ROMs, RW Disks erstellt mit Ahead InCD). Es wird für die Installation ein ZIP Dekomprimierprogramm benötigt. +[Section.0a] +License = Gratuito +Description = Un programa gratuito de grabación de CD/DVD. Una vez instalado, es posible utilizar CD/DVDs regrabables como memorias flash o discos duros extraíbles. Aparte, también permite escribir CD/DVDs regrabables que utilicen el sistema de archivos UDF. Además permite leer discos creados con otros programas(DVD−ROMs de Microsoft, discos regrabables hechos con Ahead InCD). Para instalarlo es necesario utilizar un extractor ZIP. + [Section.0410] Description = Un software di masterizzazione CD/DVD diretto e gratuito. Una volta installato, è possibile utilizzare il CD/DVD RW da flash USB o dischi rigidi rimovibili. Insieme a questo è possibile scrivere CD/DVD RW registrati con filesystem UDF. È anche possibile leggere i dischi UDF creati con altri software. (Microsoft DVD-ROM, dischi RW registrati con InCD Ahead). Il programma ha bisogno di un programma di decompressione ZIP per installarlo. Index: rapps/excelview.txt =================================================================== --- base/applications/rapps/rapps/excelview.txt (revision 66728) +++ base/applications/rapps/rapps/excelview.txt (working copy) @@ -18,6 +18,7 @@ URLDownload = http://download.microsoft.com/download/F/8/8/F88CB355-ECAA-4B74-87D6-C05C81D215BF/ExcelViewer.exe [Section.040a] +Name = Visor de Microsoft Excel License = Desconocida Size = 51.11 MB URLDownload = http://download.microsoft.com/download/5/D/9/5D9E41A4-22CE-4497-BD7D-368883EF92F7/ExcelViewer.exe Index: rapps/fap.txt =================================================================== --- base/applications/rapps/rapps/fap.txt (revision 66728) +++ base/applications/rapps/rapps/fap.txt (working copy) @@ -15,7 +15,7 @@ [Section.0407] Description = Kleiner und einfacher Mediaplayer. -[Section.040a] +[Section.0a] Description = Reproductor de audio simple y ligero. [Section.040c] Index: rapps/fira.txt =================================================================== --- base/applications/rapps/rapps/fira.txt (revision 66728) +++ base/applications/rapps/rapps/fira.txt (working copy) @@ -17,6 +17,9 @@ License = Unbekannt Description = Mozilla Fira Font Pack, Beinhaltet Mono und Sans Schriften. Bitte in den "ReactOS" Ordner entpacken. +[Section.0a] +Description = Paquete de fuentes de Mozilla Fira. Incluye las fuentes Mono y Sans. Debe descomprimirse en la carpeta ReactOS. + [Section.0410] License = Sconosciuta Description = Fira Font Pack di Mozilla, Include i font Mono e Sans. Estrare nella cartella "ReactOS". Index: rapps/firefox.txt =================================================================== --- base/applications/rapps/rapps/firefox.txt (revision 66728) +++ base/applications/rapps/rapps/firefox.txt (working copy) @@ -24,8 +24,8 @@ URLSite = http://www.mozilla.org/de/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/34.0/win32/de/Firefox%20Setup%2034.0.exe -[Section.040a] -Description = El más popular y uno de los mejores navegadores web gratuitos que hay. +[Section.0a] +Description = Navegador web popular, libre y gratuito. Size = 37.53 MB URLSite = http://www.mozilla.org/es-ES/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/34.0/win32/es-ES/Firefox%20Setup%2034.0.exe Index: rapps/firefox28.txt =================================================================== --- base/applications/rapps/rapps/firefox28.txt (revision 66728) +++ base/applications/rapps/rapps/firefox28.txt (working copy) @@ -2,7 +2,7 @@ ; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] -Name = Mozilla Firefox 28.0 +Name = Mozilla Firefox 28 Version = 28.0 License = MPL/GPL/LGPL Description = The most popular and one of the best free Web Browsers out there. @@ -24,8 +24,8 @@ URLSite = http://www.mozilla.org/de/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/28.0/win32/de/Firefox%20Setup%2028.0.exe -[Section.040a] -Description = El más popular y uno de los mejores navegadores web gratuitos que hay. +[Section.0a] +Description = Navegador web popular, libre y gratuito. Size = 23.82 MB URLSite = http://www.mozilla.org/es-ES/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/28.0/win32/es-ES/Firefox%20Setup%2028.0.exe Index: rapps/firefox36.txt =================================================================== --- base/applications/rapps/rapps/firefox36.txt (revision 66728) +++ base/applications/rapps/rapps/firefox36.txt (working copy) @@ -24,8 +24,8 @@ URLSite = http://www.mozilla.org/de/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.6.28/win32/de/Firefox%20Setup%203.6.28.exe -[Section.040a] -Description = El más popular y uno de los mejores navegadores web gratuitos que hay. +[Section.0a] +Description = Navegador web popular, libre y gratuito. Size = 8.05 MB URLSite = http://www.mozilla.org/es-ES/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.6.28/win32/es-ES/Firefox%20Setup%203.6.28.exe Index: rapps/foxit.txt =================================================================== --- base/applications/rapps/rapps/foxit.txt (revision 66728) +++ base/applications/rapps/rapps/foxit.txt (working copy) @@ -18,6 +18,11 @@ Size = 50.62 MB URLDownload = http://cdn01.foxitsoftware.com/pub/foxit/reader/desktop/win/7.x/7.0/L10N/FoxitReader708.1216_prom_L10N_Setup.exe +[Section.0a] +License = Gratuito +Description = Uno de los mejores lectores de PDF, parecido a Adobe Reader. +URLDownload = http://cdn01.foxitsoftware.com/pub/foxit/reader/desktop/win/7.x/7.0/L10N/FoxitReader708.1216_prom_L10N_Setup.exe + [Section.041f] Name = Foxit Okuyucu Version = 7.0.8.1216 Index: rapps/freebasic.txt =================================================================== --- base/applications/rapps/rapps/freebasic.txt (revision 66728) +++ base/applications/rapps/rapps/freebasic.txt (working copy) @@ -15,7 +15,7 @@ [Section.0407] Description = Open Source BASIC Compiler. Die BASIC Syntax ist kompatibel zu QBASIC. -[Section.040a] +[Section.0a] Description = Compilador BASIC de código abierto. El lenguaje BASIC es compatible con QBASIC. [Section.040c] Index: rapps/ghostscript.txt =================================================================== --- base/applications/rapps/rapps/ghostscript.txt (revision 66728) +++ base/applications/rapps/rapps/ghostscript.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Ein offener Interpreter für die PostScript Sprache und PDF. +[Section.0a] +Description = Un intérprete libre para el lenguaje PostScript y PDF. + [Section.0418] Description = Un interpretor pentru limbajul PostScript și pentru PDF. Size = 12,65 Mo Index: rapps/ghostview.txt =================================================================== --- base/applications/rapps/rapps/ghostview.txt (revision 66728) +++ base/applications/rapps/rapps/ghostview.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Ein grafisches Interface für Ghostscript. +[Section.0a] +Description = Una interfaz gráfica para Ghostscript. + [Section.0418] License = Licență publică gratuită „Aladdin” Description = O interfață grafică pentru GhostScript. Index: rapps/glidewrapzbag.txt =================================================================== --- base/applications/rapps/rapps/glidewrapzbag.txt (revision 66728) +++ base/applications/rapps/rapps/glidewrapzbag.txt (working copy) @@ -16,7 +16,9 @@ Description = glidewrapper ist erforderlich um Diablo2 in ReactOS auszuführen. [Section.040a] -Description = glidewrapper es necesario para ejecutar Diablo 2 en ReactOS. +Name = Adaptador de compatibilidad para Glide de zeckensack +License = Gratuito +Description = Necesario para ejecutar Diablo 2 en ReactOS. [Section.040c] Description = glidewrapper est nécessaire pour faire tourner Diablo 2 dans ReactOS. Index: rapps/globulation2.txt =================================================================== --- base/applications/rapps/rapps/globulation2.txt (revision 66728) +++ base/applications/rapps/rapps/globulation2.txt (working copy) @@ -16,6 +16,9 @@ [Section.0407] Description = Globulation 2 ist ein Echtzeitstrategiespiel. Das Spiel vereinfacht das Mikromanagement, indem es Einheiten automatisch mit Aufträgen versieht. +[Section.0a] +Description = Globulation 2 es un juego de estrategia en tiempo real. El juego minimiza la supervisión excesiva asignando tareas a las unidades de forma automática. + [Section.0410] Description = Globulation 2 è un gioco di strategia in tempo reale. Il gioco minimizza la supervisone eccessiva assegnando in automatico compiti alle unità. Index: rapps/hover.txt =================================================================== --- base/applications/rapps/rapps/hover.txt (revision 66728) +++ base/applications/rapps/rapps/hover.txt (working copy) @@ -15,6 +15,9 @@ [Section.0407] Description = Das klassische Hover CTF Spiel, dass auf der Windows 95 CD zu finden war. +[Section.0a] +Description = El clásico juego Hover CTF (captura la bandera) incluido en el CD de Windows 95. + [Section.0410] Description = Il classico gioco Hover CTF che trovate sul CD di Windows 95. Index: rapps/hxd.txt =================================================================== --- base/applications/rapps/rapps/hxd.txt (revision 66728) +++ base/applications/rapps/rapps/hxd.txt (working copy) @@ -19,6 +19,10 @@ URLSite = http://mh-nexus.de/de/ URLDownload = http://mh-nexus.de/downloads/HxDSetupDE.zip +[Section.0a] +License = Gratuito +Description = Un buen editor hexadecimal. Para extraerlo es necesario emplear una utilidad del estilo a 7-Zip. + [Section.0415] Description = Dobry edytor Hex. Do wypakowania pliku potrzebny jest program archiwizujący np. 7-Zip. Index: rapps/mirandaim.txt =================================================================== --- base/applications/rapps/rapps/mirandaim.txt (revision 66728) +++ base/applications/rapps/rapps/mirandaim.txt (working copy) @@ -9,7 +9,7 @@ Size = 3.77 MB Category = 5 URLSite = http://www.miranda-im.org/ -URLDownload = http://files.miranda-im.org/stable/0.10.24.0/miranda-im-v0.10.24-unicode.exe +URLDownload = http://sourceforge.net/projects/miranda/files/miranda-im/0.10.27.0/miranda-im-v0.10.27-unicode.exe/download?nowrap CDPath = none [Section.0407] Index: winmain.c =================================================================== --- base/applications/rapps/winmain.c (revision 66728) +++ base/applications/rapps/winmain.c (working copy) @@ -3,13 +3,13 @@ * LICENSE: GPL - See COPYING in the top level directory * FILE: base/applications/rapps/winmain.c * PURPOSE: Main program - * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org) + * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org) + * Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com) */ +#include #include "rapps.h" -#include - #define SEARCH_TIMER_ID 'SR' HWND hMainWnd; @@ -49,7 +49,7 @@ pSettingsInfo->Proxy = 0; StringCbCopyW(pSettingsInfo->szProxyServer, sizeof(pSettingsInfo->szProxyServer), L""); - StringCbCopyW(pSettingsInfo->szNoProxyFor, sizeof(pSettingsInfo->szNoProxyFor), L""); + StringCbCopyW(pSettingsInfo->szNoProxyFor, sizeof(pSettingsInfo->szNoProxyFor), L""); } static BOOL @@ -138,6 +138,7 @@ /* Get version info */ GetApplicationString(ItemInfo->hSubKey, L"DisplayVersion", szText); ListView_SetItemText(hListView, Index, 1, szText); + /* Get comments */ GetApplicationString(ItemInfo->hSubKey, L"Comments", szText); ListView_SetItemText(hListView, Index, 2, szText); @@ -164,7 +165,6 @@ CALLBACK EnumAvailableAppProc(PAPPLICATION_INFO Info) { - PAPPLICATION_INFO ItemInfo; INT Index; if (!SearchPatternMatch(Info->szName, szSearchPattern) && @@ -175,16 +175,12 @@ /* Only add a ListView entry if... - no RegName was supplied (so we cannot determine whether the application is installed or not) or - - a RegName was supplied and the application is not installed + - a RegName was supplied and the application is not installed */ if (!*Info->szRegName || (!IsInstalledApplication(Info->szRegName, FALSE) && !IsInstalledApplication(Info->szRegName, TRUE))) { - ItemInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(APPLICATION_INFO)); - if (!ItemInfo) return FALSE; + Index = ListViewAddItem(Info->Category, 0, Info->szName, (LPARAM)Info); - RtlCopyMemory(ItemInfo, Info, sizeof(APPLICATION_INFO)); - - Index = ListViewAddItem(Info->Category, 0, Info->szName, (LPARAM)ItemInfo); ListView_SetItemText(hListView, Index, 1, Info->szVersion); ListView_SetItemText(hListView, Index, 2, Info->szDesc); } @@ -245,7 +241,7 @@ SelectedEnumType = EnumType; - LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, sizeof(szBuffer2) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, _countof(szBuffer2)); StringCbPrintfW(szBuffer1, sizeof(szBuffer1), szBuffer2, ListView_GetItemCount(hListView)); @@ -252,6 +248,10 @@ SetStatusBarText(szBuffer1); SetWelcomeText(); + + /* set automatic column width for program names if the list is not empty */ + if (ListView_GetItemCount(hListView) > 0) + ListView_SetColumnWidth(hListView, 0, LVSCW_AUTOSIZE); } VOID @@ -260,13 +260,13 @@ WCHAR szText[MAX_STR_LEN]; /* Add columns to ListView */ - LoadStringW(hInst, IDS_APP_NAME, szText, sizeof(szText) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_APP_NAME, szText, _countof(szText)); ListViewAddColumn(0, szText, 200, LVCFMT_LEFT); - LoadStringW(hInst, IDS_APP_INST_VERSION, szText, sizeof(szText) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_APP_INST_VERSION, szText, _countof(szText)); ListViewAddColumn(1, szText, 90, LVCFMT_RIGHT); - LoadStringW(hInst, IDS_APP_DESCRIPTION, szText, sizeof(szText) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_APP_DESCRIPTION, szText, _countof(szText)); ListViewAddColumn(3, szText, 250, LVCFMT_LEFT); UpdateApplicationsList(ENUM_ALL_COMPONENTS); @@ -289,7 +289,7 @@ Index = ImageList_AddIcon(hImageTreeView, hIcon); DestroyIcon(hIcon); - LoadStringW(hInst, TextIndex, szText, sizeof(szText) / sizeof(TCHAR)); + LoadStringW(hInst, TextIndex, szText, _countof(szText)); return TreeViewAddItem(hRootItem, szText, Index, Index, TextIndex); } @@ -352,7 +352,7 @@ InitCategoriesList(); - LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, sizeof(szBuffer2) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, _countof(szBuffer2)); StringCbPrintfW(szBuffer1, sizeof(szBuffer1), szBuffer2, ListView_GetItemCount(hListView)); @@ -385,7 +385,7 @@ { WCHAR szWndText[MAX_STR_LEN]; - LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf)); GetWindowTextW(hSearchBar, szWndText, MAX_STR_LEN); if (wcscmp(szBuf, szWndText) == 0) { @@ -400,7 +400,7 @@ GetWindowTextW(hSearchBar, szBuf, MAX_STR_LEN); if (wcslen(szBuf) < 1) { - LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf)); SearchEnabled = FALSE; SetWindowTextW(hSearchBar, szBuf); } @@ -417,7 +417,7 @@ break; } - LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf)); GetWindowTextW(hSearchBar, szWndText, MAX_STR_LEN); if (wcscmp(szBuf, szWndText) != 0) { @@ -614,11 +614,25 @@ PostMessage(hwnd, WM_CLOSE, 0, 0); break; - + + /* call the list refresh routine when pressing F5, avoid duplicating functionality */ + case WM_KEYDOWN: + { + WCHAR shit[400]; + StringCbPrintf(shit, sizeof(shit), L"3->> %d - %d", wParam, lParam); + SetWindowTextW(hwnd, shit); + + if (wParam == VK_F5) + SendMessage(hwnd, WM_COMMAND, ID_REFRESH, 0); + + TranslateMessage(Msg); + break; + } + case WM_COMMAND: MainWndOnCommand(hwnd, wParam, lParam); break; - + case WM_NOTIFY: { LPNMHDR data = (LPNMHDR)lParam; @@ -801,7 +815,8 @@ { if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1) { - SendMessage(hwnd, WM_COMMAND, ID_INSTALL, 0); //Won't do anything if the program is already installed + /* this won't do anything if the program is already installed */ + SendMessage(hwnd, WM_COMMAND, ID_INSTALL, 0); } } break; @@ -949,7 +964,7 @@ if (RegisterClassExW(&WndClass) == (ATOM)0) goto Exit; - LoadStringW(hInst, IDS_APPTITLE, szWindowName, sizeof(szWindowName) / sizeof(WCHAR)); + LoadStringW(hInst, IDS_APPTITLE, szWindowName, _countof(szWindowName)); hMainWnd = CreateWindowExW(WS_EX_WINDOWEDGE, szWindowClass,