- Sync with trunk head (r50270)
- This also reverts r49298.

svn path=/branches/cmake-bringup/; revision=50271
This commit is contained in:
Amine Khaldi 2011-01-03 00:33:31 +00:00
commit 6c0c23cb53
482 changed files with 40346 additions and 24711 deletions

View file

@ -185,7 +185,7 @@ macro(rpcproxy TARGET)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_DLLDATA_ARG}${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c ${IDLS}
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_DLLDATA_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c ${IDLS}
DEPENDS ${IDLS})
set_source_files_properties(
${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c
@ -198,7 +198,7 @@ macro(idl_files)
get_filename_component(FILE ${_in_FILE} NAME_WE)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${IDL_SERVER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} -h -H ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${IDL_SERVER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
DEPENDS ${_in_file})
set_source_files_properties(
${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c
@ -208,7 +208,7 @@ macro(idl_files)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${IDL_CLIENT_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} -h -H ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${IDL_CLIENT_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
DEPENDS ${_in_file})
set_source_files_properties(
${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c
@ -237,7 +237,7 @@ macro(add_idl_interface IDL_FILE)
get_filename_component(FILE ${IDL_FILE} NAME_WE)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} -u -U ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c ${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE}
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_INTERFACE_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c ${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE}
DEPENDS ${IDL_FILE})
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c PROPERTIES GENERATED TRUE)
endmacro()

View file

@ -6,6 +6,7 @@ add_subdirectory(cmdutils)
add_subdirectory(control)
add_subdirectory(dxdiag)
add_subdirectory(extrac32)
add_subdirectory(findstr)
add_subdirectory(fontview)
add_subdirectory(games)
add_subdirectory(hh)

View file

@ -1,3 +1,4 @@
//<2F>והמגתנרום
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
// Dialog

View file

@ -1,6 +1,6 @@
/* FILE: base/applications/calc/lang/cs-CZ.rc
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* UPDATED: 2009-01-25
* UPDATED: 2010-05-30
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
@ -644,7 +644,7 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_TIME_DAYS "Dny"
IDS_TIME_HOURS "Hodiny"
IDS_TIME_NANOSECONDS "Nanoseconds"
IDS_TIME_NANOSECONDS "Nanosekundy"
IDS_TIME_MICROSECONDS "Mikrosekundy"
IDS_TIME_MILLISECONDS "Milisekundy"
IDS_TIME_MINUTES "Minuty"

View file

@ -351,7 +351,7 @@ static void evalStack(calc_number_t *number)
} else {
push(op);
break;
}
}
}
if(ip.node.operation != RPN_OPERATOR_EQUAL && ip.node.operation != RPN_OPERATOR_PERCENT)
@ -380,6 +380,7 @@ int exec_infix2postfix(calc_number_t *number, unsigned int func)
tmp.node.number = *number;
tmp.node.base = calc.base;
tmp.node.operation = func;
tmp.next = NULL;
push(&tmp);
@ -446,7 +447,7 @@ void flush_postfix()
while (!is_stack_empty())
pop();
/* clear prev and last typed operators */
calc.prev_operator =
calc.prev_operator =
calc.last_operator = 0;
}

View file

@ -0,0 +1,40 @@
/*
* REG.EXE - Wine-compatible reg program.
* Bulgarian language support
*
* Copyright 2008 Andrew Riedi
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "reg.h"
/* UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
STRINGTABLE
{
STRING_USAGE, "Синтаксисът на командата е:\n\nREG [ ADD | DELETE | QUERY ]\nREG команда /?\n"
STRING_ADD_USAGE, "REG ADD ключ_име [/v стойност_име | /ve] [/t вид] [/s разделител] [/d данни] [/f]\n"
STRING_DELETE_USAGE, "REG DELETE ключ_име [/v стойност_име | /ve | /va] [/f]\n"
STRING_QUERY_USAGE, "REG QUERY ключ_име [/v стойност_име | /ve] [/s]\n"
STRING_SUCCESS, "Десйствието е приключено успешно\n"
STRING_INVALID_KEY, "Грешка: Недопустимо име за ключ\n"
STRING_INVALID_CMDLINE, "Грешка: Неправилни параметри на командия ред\n"
STRING_NO_REMOTE, "Грешка: Неуспешно добавяне на ключове в отдалечената машина\n"
STRING_CANNOT_FIND, "Грешка: Уредбата не откри указания регистърен ключ или стойност\n"
}

View file

@ -4,6 +4,7 @@
#include "Pl.rc"
/* UTF-8 */
#include "Bg.rc"
#include "Da.rc"
#include "De.rc"
#include "Es.rc"

View file

@ -34,7 +34,7 @@ STRINGTABLE
STRING_SIMCOPY, "%d file saranno copiati\n"
STRING_COPY, "%d file copiato/i\n"
STRING_QISDIR, "'%s' è il nome di un file o una cartella\n\
nell'obiettivo?\n\
nella destinazione?\n\
(F - File, C - Cartella)\n"
STRING_SRCPROMPT,"%s? (Sì|No)\n"
STRING_OVERWRITE,"Sovrascrivere %s? (Sì|No|Tutti)\n"

View file

@ -56,7 +56,7 @@ XCOPY 원본 [대상] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
\n\
Where:\n\
\n\
[/I] 만약 대상이 존재하지 않는 경우 디렉토리로 가정하고 두개나 더 많은 파일을 \n\
[/I] 만약 대상이 존재하지 않는 경우 디렉토리로 가정하고 두개나 더 많은 파일을\n\
\t복사\n\
[/S] 디렉토리하고 하위 디렉토리 복사\n\
[/E] 빈 디렉토리를 포함해서 디렉토리와 하위 디렉토리 복사\n\

View file

@ -0,0 +1,141 @@
/*
* XCOPY - Wine-compatible xcopy program
* Serbian language support
*
* Copyright (C) 2007 J. Edmeades
* Copyright 2010 Đorđe Vasiljević
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "xcopy.h"
#pragma code_page(65001)
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC
STRINGTABLE
{
STRING_INVPARMS, "Неисправан број параметара. Користите xcopy /? за помоћ\n"
STRING_INVPARM, "Неисправан параметар „%s“. Користите xcopy /? за помоћ\n"
STRING_PAUSE, "Притисните <enter> да започнете умножавање\n"
STRING_SIMCOPY, "%d датотека/е ће бити уможено\n"
STRING_COPY, "%d датотека/е је умножено\n"
STRING_QISDIR, "Да ли је „%s“ назив датотеке или фасцикла\n\
на одредишту?\n\
(Д - датотека, Ф - фасцикла)\n"
STRING_SRCPROMPT,"%s? (Да|Не)\n"
STRING_OVERWRITE,"Заменити %s? (Да|Не|Све)\n"
STRING_COPYFAIL, "Умножавање „%s“ у „%s“ није успело са r/c %d\n"
STRING_OPENFAIL, "Отварање „%s“ датотеке није успело\n"
STRING_READFAIL, "Читање „%s“ датотеке није успело\n"
STRING_YES_CHAR, "Д"
STRING_NO_CHAR, "Н"
STRING_ALL_CHAR, "С"
STRING_FILE_CHAR,"Д"
STRING_DIR_CHAR, "Ф"
STRING_HELP,
"XCOPY — умножава изворне датотеке или гране фасцикли у одредиште\n\
\n\
Синтакса:\n\
XCOPY извор [dest] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
\t [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
\n\
Где:\n\
\n\
[/I] Претпостави фасциклу када одредиште не постоји и када се умножавају две или\n\
\tвише датотека\n\
[/S] Умножи фасцикле и потфасцикле\n\
[/E] Умножи фасцикле и потфасцикле заједно с празним\n\
[/Q] Не приказуј називе током умножавања.\n\
[/F] Прикажи цео извор и одредиште током умножавања\n\
[/L] Опонашај радњу приказујући називе који ће бити умножени\n\
[/W] Питај пре почињања умножавања\n\
[/T] Прави празну структуру фасцикле, али не умножава датотеке\n\
[/Y] Потисни упит при замењивању датотека\n\
[/-Y] Омогући упит при замењивању датотека\n\
[/P] Питај за сваку изворну датотеку пре умножавања\n\
[/N] Умножи користећи кратке називе\n\
[/U] Умножи само оне датотеке које постоје у одредишту\n\
[/R] Замени све датотеке које се само читају\n\
[/H] Укључи сакривене и системске датотеке у умножавање\n\
[/C] Настави иако дође до грешке у умножавању\n\
[/A] Умножи само архивиране датотеке\n\
[/M] Умножи само архивиране датотеке и уклони\n\
\tособине архиве\n\
[/D | /D:m-d-y] Умножи нове или измењене датотеке након одређеног датума.\n\
\t\tАко датум није унесен, умножи само ако је одредиште старије\n\
\t\tод извора\n\n"
}
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
STRINGTABLE
{
STRING_INVPARMS, "Neispravan broj parametara. Koristite xcopy /? za pomoć\n"
STRING_INVPARM, "Neispravan parametar „%s“. Koristite xcopy /? za pomoć\n"
STRING_PAUSE, "Pritisnite <enter> da započnete umnožavanje\n"
STRING_SIMCOPY, "%d datoteka/e će biti umoženo\n"
STRING_COPY, "%d datoteka/e je umnoženo\n"
STRING_QISDIR, "Da li je „%s“ naziv datoteke ili fascikla\n\
na odredištu?\n\
(D - datoteka, F - fascikla)\n"
STRING_SRCPROMPT,"%s? (Da|Ne)\n"
STRING_OVERWRITE,"Zameniti %s? (Da|Ne|Sve)\n"
STRING_COPYFAIL, "Umnožavanje „%s“ u „%s“ nije uspelo sa r/c %d\n"
STRING_OPENFAIL, "Otvaranje „%s“ datoteke nije uspelo\n"
STRING_READFAIL, "Čitanje „%s“ datoteke nije uspelo\n"
STRING_YES_CHAR, "D"
STRING_NO_CHAR, "N"
STRING_ALL_CHAR, "S"
STRING_FILE_CHAR,"D"
STRING_DIR_CHAR, "F"
STRING_HELP,
"XCOPY — umnožava izvorne datoteke ili grane fascikli u odredište\n\
\n\
Sintaksa:\n\
XCOPY izvor [dest] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
\t [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
\n\
Gde:\n\
\n\
[/I] Pretpostavi fasciklu kada odredište ne postoji i kada se umnožavaju dve ili\n\
\tviše datoteka\n\
[/S] Umnoži fascikle i potfascikle\n\
[/E] Umnoži fascikle i potfascikle zajedno s praznim\n\
[/Q] Ne prikazuj nazive tokom umnožavanja.\n\
[/F] Prikaži ceo izvor i odredište tokom umnožavanja\n\
[/L] Oponašaj radnju prikazujući nazive koji će biti umnoženi\n\
[/W] Pitaj pre počinjanja umnožavanja\n\
[/T] Pravi praznu strukturu fascikle, ali ne umnožava datoteke\n\
[/Y] Potisni upit pri zamenjivanju datoteka\n\
[/-Y] Omogući upit pri zamenjivanju datoteka\n\
[/P] Pitaj za svaku izvornu datoteku pre umnožavanja\n\
[/N] Umnoži koristeći kratke nazive\n\
[/U] Umnoži samo one datoteke koje postoje u odredištu\n\
[/R] Zameni sve datoteke koje se samo čitaju\n\
[/H] Uključi sakrivene i sistemske datoteke u umnožavanje\n\
[/C] Nastavi iako dođe do greške u umnožavanju\n\
[/A] Umnoži samo arhivirane datoteke\n\
[/M] Umnoži samo arhivirane datoteke i ukloni\n\
\tosobine arhive\n\
[/D | /D:m-d-y] Umnoži nove ili izmenjene datoteke nakon određenog datuma.\n\
\t\tAko datum nije unesen, umnoži samo ako je odredište starije\n\
\t\tod izvora\n\n"
}

View file

@ -43,5 +43,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#include "Ro.rc"
#include "Ru.rc"
#include "Si.rc"
#include "Sr.rc"
#include "Sv.rc"
#include "Uk.rc"

View file

@ -49,6 +49,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(xcopy);
/* Prototypes */
static int XCOPY_ParseCommandLine(WCHAR *suppliedsource,
WCHAR *supplieddestination, DWORD *flags);
static int XCOPY_ProcessSourceParm(WCHAR *suppliedsource, WCHAR *stem,
WCHAR *spec, DWORD flags);
static int XCOPY_ProcessDestParm(WCHAR *supplieddestination, WCHAR *stem,
@ -108,17 +110,6 @@ int wmain (int argc, WCHAR *argvW[])
const WCHAR PROMPTSTR1[] = {'/', 'Y', 0};
const WCHAR PROMPTSTR2[] = {'/', 'y', 0};
const WCHAR COPYCMD[] = {'C', 'O', 'P', 'Y', 'C', 'M', 'D', 0};
const WCHAR EXCLUDE[] = {'E', 'X', 'C', 'L', 'U', 'D', 'E', ':', 0};
/*
* Parse the command line
*/
/* Confirm at least one parameter */
if (argc < 2) {
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARMS));
return RC_INITERROR;
}
/* Preinitialize flags based on COPYCMD */
if (GetEnvironmentVariableW(COPYCMD, copyCmd, MAXSTRING)) {
@ -135,126 +126,17 @@ int wmain (int argc, WCHAR *argvW[])
lose */
flags |= OPT_COPYHIDSYS;
/* Skip first arg, which is the program name */
argvW++;
while (argc > 1)
{
argc--;
WINE_TRACE("Processing Arg: '%s'\n", wine_dbgstr_w(*argvW));
/* First non-switch parameter is source, second is destination */
if (*argvW[0] != '/') {
if (suppliedsource[0] == 0x00) {
lstrcpyW(suppliedsource, *argvW);
} else if (supplieddestination[0] == 0x00) {
lstrcpyW(supplieddestination, *argvW);
} else {
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARMS));
return RC_INITERROR;
}
} else {
/* Process all the switch options
Note: Windows docs say /P prompts when dest is created
but tests show it is done for each src file
regardless of the destination */
switch (toupper(argvW[0][1])) {
case 'I': flags |= OPT_ASSUMEDIR; break;
case 'S': flags |= OPT_RECURSIVE; break;
case 'Q': flags |= OPT_QUIET; break;
case 'F': flags |= OPT_FULL; break;
case 'L': flags |= OPT_SIMULATE; break;
case 'W': flags |= OPT_PAUSE; break;
case 'T': flags |= OPT_NOCOPY | OPT_RECURSIVE; break;
case 'Y': flags |= OPT_NOPROMPT; break;
case 'N': flags |= OPT_SHORTNAME; break;
case 'U': flags |= OPT_MUSTEXIST; break;
case 'R': flags |= OPT_REPLACEREAD; break;
case 'H': flags |= OPT_COPYHIDSYS; break;
case 'C': flags |= OPT_IGNOREERRORS; break;
case 'P': flags |= OPT_SRCPROMPT; break;
case 'A': flags |= OPT_ARCHIVEONLY; break;
case 'M': flags |= OPT_ARCHIVEONLY |
OPT_REMOVEARCH; break;
/* E can be /E or /EXCLUDE */
case 'E': if (CompareStringW(LOCALE_USER_DEFAULT,
NORM_IGNORECASE | SORT_STRINGSORT,
&argvW[0][1], 8,
EXCLUDE, -1) == 2) {
if (XCOPY_ProcessExcludeList(&argvW[0][9])) {
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
return RC_INITERROR;
} else flags |= OPT_EXCLUDELIST;
} else flags |= OPT_EMPTYDIR | OPT_RECURSIVE;
break;
/* D can be /D or /D: */
case 'D': if ((argvW[0][2])==':' && isdigit(argvW[0][3])) {
SYSTEMTIME st;
WCHAR *pos = &argvW[0][3];
BOOL isError = FALSE;
memset(&st, 0x00, sizeof(st));
/* Parse the arg : Month */
st.wMonth = _wtol(pos);
while (*pos && isdigit(*pos)) pos++;
if (*pos++ != '-') isError = TRUE;
/* Parse the arg : Day */
if (!isError) {
st.wDay = _wtol(pos);
while (*pos && isdigit(*pos)) pos++;
if (*pos++ != '-') isError = TRUE;
}
/* Parse the arg : Day */
if (!isError) {
st.wYear = _wtol(pos);
if (st.wYear < 100) st.wYear+=2000;
}
if (!isError && SystemTimeToFileTime(&st, &dateRange)) {
SYSTEMTIME st;
WCHAR datestring[32], timestring[32];
flags |= OPT_DATERANGE;
/* Debug info: */
FileTimeToSystemTime (&dateRange, &st);
GetDateFormatW(0, DATE_SHORTDATE, &st, NULL, datestring,
sizeof(datestring)/sizeof(WCHAR));
GetTimeFormatW(0, TIME_NOSECONDS, &st,
NULL, timestring, sizeof(timestring)/sizeof(WCHAR));
WINE_TRACE("Date being used is: %s %s\n",
wine_dbgstr_w(datestring), wine_dbgstr_w(timestring));
} else {
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
return RC_INITERROR;
}
} else {
flags |= OPT_DATENEWER;
}
break;
case '-': if (toupper(argvW[0][2])=='Y')
flags &= ~OPT_NOPROMPT; break;
case '?': XCOPY_wprintf(XCOPY_LoadMessage(STRING_HELP));
return RC_OK;
default:
WINE_TRACE("Unhandled parameter '%s'\n", wine_dbgstr_w(*argvW));
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARM), *argvW);
return RC_INITERROR;
}
}
argvW++;
/*
* Parse the command line
*/
if ((rc = XCOPY_ParseCommandLine(suppliedsource, supplieddestination,
&flags)) != RC_OK) {
if (rc == RC_HELP)
return RC_OK;
else
return rc;
}
/* Default the destination if not supplied */
if (supplieddestination[0] == 0x00)
lstrcpyW(supplieddestination, wchr_dot);
/* Trace out the supplied information */
WINE_TRACE("Supplied parameters:\n");
WINE_TRACE("Source : '%s'\n", wine_dbgstr_w(suppliedsource));
@ -310,6 +192,211 @@ int wmain (int argc, WCHAR *argvW[])
}
/* =========================================================================
XCOPY_ParseCommandLine - Parses the command line
========================================================================= */
static BOOL is_whitespace(WCHAR c)
{
return c == ' ' || c == '\t';
}
static WCHAR *skip_whitespace(WCHAR *p)
{
for (; *p && is_whitespace(*p); p++);
return p;
}
/* Windows XCOPY uses a simplified command line parsing algorithm
that lacks the escaped-quote logic of build_argv(), because
literal double quotes are illegal in any of its arguments.
Example: 'XCOPY "c:\DIR A" "c:DIR B\"' is OK. */
static int find_end_of_word(const WCHAR *word, WCHAR **end)
{
BOOL in_quotes = 0;
const WCHAR *ptr = word;
for (;;) {
for (; *ptr != '\0' && *ptr != '"' &&
(in_quotes || !is_whitespace(*ptr)); ptr++);
if (*ptr == '"') {
in_quotes = !in_quotes;
ptr++;
}
/* Odd number of double quotes is illegal for XCOPY */
if (in_quotes && *ptr == '\0')
return RC_INITERROR;
if (*ptr == '\0' || (!in_quotes && is_whitespace(*ptr)))
break;
}
*end = (WCHAR*)ptr;
return RC_OK;
}
/* Remove all double quotes from a word */
static void strip_quotes(WCHAR *word, WCHAR **end)
{
WCHAR *rp, *wp;
for (rp = word, wp = word; *rp != '\0'; rp++) {
if (*rp == '"')
continue;
if (wp < rp)
*wp = *rp;
wp++;
}
*wp = '\0';
*end = wp;
}
static int XCOPY_ParseCommandLine(WCHAR *suppliedsource,
WCHAR *supplieddestination, DWORD *pflags)
{
const WCHAR EXCLUDE[] = {'E', 'X', 'C', 'L', 'U', 'D', 'E', ':', 0};
DWORD flags = *pflags;
WCHAR *cmdline, *word, *end, *next;
int rc = RC_INITERROR;
cmdline = _wcsdup(GetCommandLineW());
if (cmdline == NULL)
return rc;
/* Skip first arg, which is the program name */
if ((rc = find_end_of_word(cmdline, &word)) != RC_OK)
goto out;
word = skip_whitespace(word);
while (*word)
{
WCHAR first;
if ((rc = find_end_of_word(word, &end)) != RC_OK)
goto out;
next = skip_whitespace(end);
first = word[0];
*end = '\0';
strip_quotes(word, &end);
WINE_TRACE("Processing Arg: '%s'\n", wine_dbgstr_w(word));
/* First non-switch parameter is source, second is destination */
if (first != '/') {
if (suppliedsource[0] == 0x00) {
lstrcpyW(suppliedsource, word);
} else if (supplieddestination[0] == 0x00) {
lstrcpyW(supplieddestination, word);
} else {
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARMS));
goto out;
}
} else {
/* Process all the switch options
Note: Windows docs say /P prompts when dest is created
but tests show it is done for each src file
regardless of the destination */
switch (toupper(word[1])) {
case 'I': flags |= OPT_ASSUMEDIR; break;
case 'S': flags |= OPT_RECURSIVE; break;
case 'Q': flags |= OPT_QUIET; break;
case 'F': flags |= OPT_FULL; break;
case 'L': flags |= OPT_SIMULATE; break;
case 'W': flags |= OPT_PAUSE; break;
case 'T': flags |= OPT_NOCOPY | OPT_RECURSIVE; break;
case 'Y': flags |= OPT_NOPROMPT; break;
case 'N': flags |= OPT_SHORTNAME; break;
case 'U': flags |= OPT_MUSTEXIST; break;
case 'R': flags |= OPT_REPLACEREAD; break;
case 'H': flags |= OPT_COPYHIDSYS; break;
case 'C': flags |= OPT_IGNOREERRORS; break;
case 'P': flags |= OPT_SRCPROMPT; break;
case 'A': flags |= OPT_ARCHIVEONLY; break;
case 'M': flags |= OPT_ARCHIVEONLY |
OPT_REMOVEARCH; break;
/* E can be /E or /EXCLUDE */
case 'E': if (CompareStringW(LOCALE_USER_DEFAULT,
NORM_IGNORECASE | SORT_STRINGSORT,
&word[1], 8,
EXCLUDE, -1) == 2) {
if (XCOPY_ProcessExcludeList(&word[9])) {
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
goto out;
} else flags |= OPT_EXCLUDELIST;
} else flags |= OPT_EMPTYDIR | OPT_RECURSIVE;
break;
/* D can be /D or /D: */
case 'D': if (word[2]==':' && isdigit(word[3])) {
SYSTEMTIME st;
WCHAR *pos = &word[3];
BOOL isError = FALSE;
memset(&st, 0x00, sizeof(st));
/* Parse the arg : Month */
st.wMonth = _wtol(pos);
while (*pos && isdigit(*pos)) pos++;
if (*pos++ != '-') isError = TRUE;
/* Parse the arg : Day */
if (!isError) {
st.wDay = _wtol(pos);
while (*pos && isdigit(*pos)) pos++;
if (*pos++ != '-') isError = TRUE;
}
/* Parse the arg : Day */
if (!isError) {
st.wYear = _wtol(pos);
while (*pos && isdigit(*pos)) pos++;
if (st.wYear < 100) st.wYear+=2000;
}
if (!isError && SystemTimeToFileTime(&st, &dateRange)) {
SYSTEMTIME st;
WCHAR datestring[32], timestring[32];
flags |= OPT_DATERANGE;
/* Debug info: */
FileTimeToSystemTime (&dateRange, &st);
GetDateFormatW(0, DATE_SHORTDATE, &st, NULL, datestring,
sizeof(datestring)/sizeof(WCHAR));
GetTimeFormatW(0, TIME_NOSECONDS, &st,
NULL, timestring, sizeof(timestring)/sizeof(WCHAR));
WINE_TRACE("Date being used is: %s %s\n",
wine_dbgstr_w(datestring), wine_dbgstr_w(timestring));
} else {
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
goto out;
}
} else {
flags |= OPT_DATENEWER;
}
break;
case '-': if (toupper(word[2])=='Y')
flags &= ~OPT_NOPROMPT; break;
case '?': XCOPY_wprintf(XCOPY_LoadMessage(STRING_HELP));
rc = RC_HELP;
goto out;
default:
WINE_TRACE("Unhandled parameter '%s'\n", wine_dbgstr_w(word));
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARM), word);
goto out;
}
}
word = next;
}
/* Default the destination if not supplied */
if (supplieddestination[0] == 0x00)
lstrcpyW(supplieddestination, wchr_dot);
*pflags = flags;
rc = RC_OK;
out:
free(cmdline);
return rc;
}
/* =========================================================================
XCOPY_ProcessSourceParm - Takes the supplied source parameter, and
@ -432,8 +519,10 @@ static int XCOPY_ProcessDestParm(WCHAR *supplieddestination, WCHAR *stem, WCHAR
if (attribs == INVALID_FILE_ATTRIBUTES) {
/* If /I supplied and wildcard copy, assume directory */
if (flags & OPT_ASSUMEDIR &&
(wcschr(srcspec, '?') || wcschr(srcspec, '*'))) {
/* Also if destination ends with backslash */
if ((flags & OPT_ASSUMEDIR &&
(wcschr(srcspec, '?') || wcschr(srcspec, '*'))) ||
(supplieddestination[lstrlenW(supplieddestination)-1] == '\\')) {
isDir = TRUE;

View file

@ -26,6 +26,7 @@
#define RC_CTRLC 2
#define RC_INITERROR 4
#define RC_WRITEERROR 5
#define RC_HELP 6
#define OPT_ASSUMEDIR 0x00000001
#define OPT_RECURSIVE 0x00000002

View file

@ -0,0 +1,11 @@
add_definitions(-D_DLL -D__USE_CRTIMP)
add_executable(findstr
findstr.c
findstr.rc
rsrc.rc)
set_module_type(findstr win32cui)
add_importlibs(findstr user32 msvcrt kernel32)
add_cab_target(findstr 1)

View file

@ -0,0 +1,295 @@
/* findstr.c */
/* Copyright (C) 1994-2002, Jim Hall <jhall@freedos.org> */
/* Adapted for ReactOS -Edited for Findstr.exe K'Williams */
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/* This program locates a string in a text file and prints those lines
* that contain the string. Multiple files are clearly separated.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
#include <io.h>
#include <dos.h>
#include "resource.h"
/* Symbol definition */
#define MAX_STR 1024
/* This function prints out all lines containing a substring. There are some
* conditions that may be passed to the function.
*
* RETURN: If the string was found at least once, returns 1.
* If the string was not found at all, returns 0.
*/
int
find_str (char *sz, FILE *p, int invert_search,
int count_lines, int number_output, int ignore_case, int at_start, int literal_search,
int at_end, int reg_express, int exact_match, int sub_dirs, int only_fname)
{
int i, length;
long line_number = 0, total_lines = 0;
char *c, temp_str[MAX_STR], this_line[MAX_STR];
/* Convert to upper if needed */
if (ignore_case)
{
length = strlen (sz);
for (i = 0; i < length; i++)
sz[i] = toupper (sz[i]);
}
/* Scan the file until EOF */
while (fgets (temp_str, MAX_STR, p) != NULL)
{
/* Remove the trailing newline */
length = strlen (temp_str);
if (temp_str[length-1] == '\n')
{
temp_str[length-1] = '\0';
}
/* Increment number of lines */
line_number++;
strcpy (this_line, temp_str);
/* Convert to upper if needed */
if (ignore_case)
{
for (i = 0; i < length; i++)
{
temp_str[i] = toupper (temp_str[i]);
}
}
/* Locate the substring */
/* strstr() returns a pointer to the first occurrence in the
string of the substring */
c = strstr (temp_str, sz);
if ( ((invert_search) ? (c == NULL) : (c != NULL)) )
{
if (!count_lines)
{
if (number_output)
printf ("%ld:", line_number);
/* Print the line of text */
puts (this_line);
}
total_lines++;
} /* long if */
} /* while fgets */
if (count_lines)
{
/* Just show num. lines that contain the string */
printf ("%ld\n", total_lines);
}
/* RETURN: If the string was found at least once, returns 1.
* If the string was not found at all, returns 0.
*/
return (total_lines > 0 ? 1 : 0);
}
/* Show usage */
void
usage (void)
{
TCHAR lpUsage[4096];
LoadString( GetModuleHandle(NULL), IDS_USAGE, (LPTSTR)lpUsage, 4096);
CharToOem(lpUsage, lpUsage);
printf( lpUsage );
}
/* Main program */
int
main (int argc, char **argv)
{
char *opt, *needle = NULL;
int ret = 0;
TCHAR lpMessage[4096];
int invert_search = 0; /* flag to invert the search */
int count_lines = 0; /* flag to whether/not count lines */
int number_output = 0; /* flag to print line numbers */
int ignore_case = 0; /* flag to be case insensitive */
int at_start = 0; /* flag to Match if at the beginning of a line. */
int at_end = 0; /* flag to Match if at the beginning of a line. */
int reg_express = 0; /* flag to use/not use regular expressions */
int exact_match = 0; /* flag to be exact match */
int sub_dirs= 0; /* this and all subdirectories */
int only_fname= 0; /* print only the name of the file*/
int literal_search=0;
FILE *pfile; /* file pointer */
int hfind; /* search handle */
struct _finddata_t finddata; /* _findfirst, filenext block */
/* Scan the command line */
while ((--argc) && (needle == NULL))
{
if (*(opt = *++argv) == '/')
{
switch (opt[1])
{
case 'b':
case 'B': /* Matches pattern if at the beginning of a line */
at_start = 1;
break;
//case 'c':
//case 'C': /* Literal? */
// literal_search = 1;
// break;
case 'e':
case 'E': /* matches pattern if at end of line */
at_end = 1;
break;
case 'i':
case 'I': /* Ignore */
ignore_case = 1;
break;
case 'm':
case 'M': /* only filename */
only_fname = 1;
break;
case 'n':
case 'N': /* Number */
number_output = 1;
break;
case 'r':
case 'R': /* search strings as regular expressions */
reg_express = 1;
break;
case 's':
case 'S': /* search files in child directory too*/
sub_dirs = 1;
break;
case 'v':
case 'V': /* Not with */
invert_search = 1;
break;
case 'x':
case 'X': /* exact match */
exact_match = 1;
break;
default:
usage ();
exit (2); /* syntax error .. return error 2 */
break;
}
}
else
{
/* Get the string */
if (needle == NULL)
{
/* Assign the string to find */
needle = *argv;
}
}
}
/* Check for search string */
if (needle == NULL)
{
/* No string? */
usage ();
exit (1);
}
/* Scan the files for the string */
if (argc == 0)
{
ret = find_str (needle, stdin, invert_search, count_lines,
number_output, ignore_case, at_start, literal_search, at_end, reg_express, exact_match,
sub_dirs, only_fname);
}
while (--argc >= 0)
{
hfind = _findfirst (*++argv, &finddata);
if (hfind < 0)
{
/* We were not able to find a file. Display a message and
set the exit status. */
LoadString( GetModuleHandle(NULL), IDS_NO_SUCH_FILE, (LPTSTR)lpMessage, 4096);
CharToOem(lpMessage, lpMessage);
fprintf (stderr, lpMessage, *argv);//
}
else
{
/* repeat find next file to match the filemask */
do
{
/* We have found a file, so try to open it */
if ((pfile = fopen (finddata.name, "r")) != NULL)
{
printf ("---------------- %s\n", finddata.name);
ret = find_str (needle, pfile, invert_search, count_lines,
number_output, ignore_case, at_start, literal_search, at_end, reg_express, exact_match,
sub_dirs, only_fname);
fclose (pfile);
}
else
{
LoadString(GetModuleHandle(NULL), IDS_CANNOT_OPEN, (LPTSTR)lpMessage, 4096);
CharToOem(lpMessage, lpMessage);
fprintf (stderr, lpMessage,
finddata.name);
}
}
while (_findnext(hfind, &finddata) > 0);
}
_findclose(hfind);
} /* for each argv */
/* RETURN: If the string was found at least once, returns 0.
* If the string was not found at all, returns 1.
* (Note that find_str.c returns the exact opposite values.)
*/
exit ( (ret ? 0 : 1) );
}

View file

@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd">
<module name="findstr" type="win32cui" installbase="system32" installname="findstr.exe">
<library>user32</library>
<file>findstr.c</file>
<file>findstr.rc</file>
<file>rsrc.rc</file>
</module>

View file

@ -0,0 +1,6 @@
#define REACTOS_STR_FILE_DESCRIPTION "W32 findstr command\0"
#define REACTOS_STR_INTERNAL_NAME "findstr\0"
#define REACTOS_STR_ORIGINAL_FILENAME "findstr.exe\0"
#include <reactos/version.rc>
#include "rsrc.rc"

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Извежда всички редове във файла, които съдържат указания низ..\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"низ\" [ файл... ]\n\
/C Брои колко реда съдържат низа\n\
/I Пренебрегва ГлАвНОсТта\n\
/N Брой показани редове, като се започва от 1\n\
/V Извеждане на редовете, НЕсъдържащи низа."
IDS_NO_SUCH_FILE, "FIND: %s: Няма такъв файл\n"
IDS_CANNOT_OPEN, "FIND: %s: Отварянето на файла е невъзможно\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Mostra totes les linies que continguin una determinada cadena de caràcters.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"Cadena de caràcters\" [ file... ]\n\
/C Conta el numero de linies que contenen la cadena de caràcters\n\
/I Ignora majúscules i minúscules\n\
/N Numero de linies mostrades, començant per la primera\n\
/V Mostra les linies que no contenen la cadena de caràcters"
IDS_NO_SUCH_FILE, "FIND: %s: No he trobat el fitxer\n"
IDS_CANNOT_OPEN, "FIND: %s: No puc obrir el fitxer\n"
END

View file

@ -0,0 +1,23 @@
/* FILE: applications/cmdutils/find/lang/cs-CZ.rc
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* THANKS TO: Mario Kacmar aka Kario (kario@szm.sk)
* UPDATED: 2008-02-29
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Zobrazí všechny øádky souboru obsahující hledaný øetìzec.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"øetìzec\" [ soubor... ]\n\
/C Zobrazí poèet øádkù obsahující øetìzec.\n\
/I Ignoruje velikost písmen.\n\
/N Èísluje zobrazené øádky, zaèíná od 1.\n\
/V Zobrazí všechny øádky, které NEobsahují zadaný øetìžec."
IDS_NO_SUCH_FILE, "FIND: Soubor %s nebyl nalezen.\n"
IDS_CANNOT_OPEN, "FIND: Soubor %s nelze otevøít!\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "Sucht in einer Datei nach einer Zeichenfolge.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\
/C Zeigt nur die Anzahl der die Zeichenfolge enthaltenen Zeilen an.\n\
/I Ignoriert Groß-/Kleinbuchstaben bei der Suche.\n\
/N Zeigt die Zeilen mit ihren Zeilennummern an.\n\
/V Zeigt alle Zeilen an, die die Zeichenfolge NICHT enhalten."
IDS_NO_SUCH_FILE, "Datei %s nicht gefunden\n"
IDS_CANNOT_OPEN, "Datei %s kann nicht geöffnet werden.\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Εκτυπώνει όλες τις γραμμές ενός αρχείου που περιέχουν ένα αλφαριθμητικό.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"αλφαριθμητικό\" [ αρχείο... ]\n\
/C Μέτρηση γραμμών που περιέχουν το αλφαριθμητικό\n\
/I Αγνόηση κεφαλαίων\n\
/N Εμφάνιση αριθμών στις εμφανιζόμενες γραμμές, ξεκινώντας από το 1\n\
/V Εκτύπωση γραμμών που δεν περιέχουν το αλφαριθμητικό"
IDS_NO_SUCH_FILE, "FIND: %s: Δεν υπάρχει αυτό το αρχείο\n"
IDS_CANNOT_OPEN, "FIND: %s: Δεν ήταν δυνατό το άνοιγμα του αρχείου\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FINDSTR: Prints all lines of a file that contain a string.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\
/C Count the number of lines that contain string\n\
/I Ignore case\n\
/N Number the displayed lines, starting at 1\n\
/V Print lines that do not contain the string"
IDS_NO_SUCH_FILE, "FINDSTR: %s: No such file\n"
IDS_CANNOT_OPEN, "FINDSTR: %s: Cannot open file\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Imprime todas las líneas de un fichero que contiene una cadena.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"cadena\" [ fichero... ]\n\
/C Cuenta el número de líneas que contienen la cadena de caracteres\n\
/I Ignora mayúsculas y minúsculas\n\
/N Numero de líneas a mostrar en pantalla, a partir de la primera\n\
/V Muestra las líneas que no contienen la cadena de caracteres."
IDS_NO_SUCH_FILE, "FIND: %s: No se encontró el fichero\n"
IDS_CANNOT_OPEN, "FIND: %s: No se pudo abrir el fichero\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Affiche toutes les lignes d'un fichier qui contiennent un morceau de texte.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"texte\" [ fichier... ]\n\
/C Compte le nombre de lignes qui contiennent le texte\n\
/I Insensible à la casse\n\
/N Numérote les lignes affichées en commençant à 1\n\
/V Affiche les lignes qui ne contiennent pas le texte"
IDS_NO_SUCH_FILE, "FIND: %s : fichier inexistant\n"
IDS_CANNOT_OPEN, "FIND: %s : impossible d'ouvrir le fichier\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Visualizza le linee di un file che contengono un stringa.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"stringa\" [ file... ]\n\
/C Conta il numero di linee che contengono la stringa\n\
/I Ignora maiuscole/minuscole\n\
/N Numera le linee visualizzate a partire da 1\n\
/V Visualizza le linee che non contengono la stringa"
IDS_NO_SUCH_FILE, "FIND: %s: File non trovato\n"
IDS_CANNOT_OPEN, "FIND: %s: Impossibile aprire il file\n"
END

View file

@ -0,0 +1,26 @@
/*
* PROJECT: ReactOS find command
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/cmdutils/find/lang/lt-LT.rc
* PURPOSE: Lithuanian Language File
* TRANSLATOR: Vytis "CMan" Girdþijauskas (cman@cman.us)
* DATE: 2007-09-23
*/
LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Spausdina visas bylos eilutes, kuriose yra ieðkomas tekstas.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"tekstas\" [ byla... ]\n\
/C Skaièiuoti eilutes, kuriose yra ieðkomas tekstas\n\
/I Ignoruoti raidþiø dydá\n\
/N Numeruoti vaizduojamas eilutes, pradedant nuo 1\n\
/V Spausdinti eilutes, kuriose nëra ieðkomo teksto"
IDS_NO_SUCH_FILE, "FIND: %s: Tokios bylos nëra\n"
IDS_CANNOT_OPEN, "FIND: %s: Nepavyko atverti bylos\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FINN: Skriv alle linjene for filen som inneholder en streng.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"streng\" [ fil... ]\n\
/C Teller nummer av linjer som inneholder strenger\n\
/I Ignorere sak\n\
/N Nummer viste linjer, start med 1\n\
/V Skriv linjer som ikke inneholder en streng"
IDS_NO_SUCH_FILE, "FINN: %s: Ingen filer\n"
IDS_CANNOT_OPEN, "FINN: %s: Kan ikke åpne filen\n"
END

View file

@ -0,0 +1,24 @@
/*
* translated by Caemyr - Olaf Siejka (Dec,2007)
* Use ReactOS forum PM or IRC to contact me
* http://www.reactos.org
* IRC: irc.freenode.net #reactos-pl
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Wyświetla wszystkie linie danego pliku, zawierające szukany ciąg znaków.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"ciąg znaków\" [ plik... ]\n\
/C Oblicza w ilu liniach pojawił się szukany ciąg znaków\n\
/I Ignoruje wielkość liter\n\
/N Numeruje wyświetlane linie, zaczynając od 1\n\
/V Wyświetla te linie które nie zawierają szukanego ciągu znaków"
IDS_NO_SUCH_FILE, "FIND: %s: Plik nie został znaleziony\n"
IDS_CANNOT_OPEN, "FIND: %s: Nie można otworzyć pliku\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Localiza uma seqüência de texto em um ou mais arquivos.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"seqüência\" [ arquivo... ]\n\
/C Exibe apenas o número de linhas que contêm a seqüência.\n\
/I Ignora maiúsculas/minúsculas ao localizar uma seqüência.\n\
/N Exibe o número de cada linha, iniciando no 1.\n\
/V Exibe todas as linhas que NÃO contêm a seqüência especificada."
IDS_NO_SUCH_FILE, "FIND: %s: Arquivo não encontrado\n"
IDS_CANNOT_OPEN, "FIND: %s: Não foi possível abrir o arquivo\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Поиск текстовой строки в одном или нескольких файлах.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"строка\" [ файл... ]\n\
/C Вывод только общего числа строк, содержащих заданную строку.\n\
/I Поиск без учета регистра символов.\n\
/N Вывод номеров отображаемых строк (начиная с 1).\n\
/V Вывод всех строк, НЕ содержащих заданную строку."
IDS_NO_SUCH_FILE, "FIND: %s: Файл не существует.\n"
IDS_CANNOT_OPEN, "FIND: %s: Невозможно открыть файл.\n"
END

View file

@ -0,0 +1,21 @@
/* TRANSLATOR: M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR: 12-02-2008
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Zobraz¡ vçetky riadky s£boru obsahuj£ce hadanì reœazec.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"reœazec\" [ s£bor... ]\n\
/C Zobraz¡ poŸet riadkov, ktor obsahuj£ reœazec.\n\
/I Ignoruje vekosœ p¡smen.\n\
/N ¬¡sluje zobrazen riadky, zaŸ¡na od 1.\n\
/V Zobraz¡ vçetky riadky, ktor neobsahuj£ hadanì reœazec."
IDS_NO_SUCH_FILE, "FIND: S£bor %s sa nenaçiel.\n"
IDS_CANNOT_OPEN, "FIND: S£bor %s sa ned  otvoriœ.\n"
END

View file

@ -0,0 +1,17 @@
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Skriver ut alla rader i en fil som innehåller en sträng.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"sträng\" [ fil... ]\n\
/C Räkna nummren av linjer som innehåller en strängen\n\
/I Ignorera skiftläge\n\
/N Antal visade rader, börjar på 1\n\
/V Skriver ut rader som inte innehåller strängen"
IDS_NO_SUCH_FILE, "FIND: %s: Ingen sorts fil\n"
IDS_CANNOT_OPEN, "FIND: %s: Kan inte öppna filen\n"
END

View file

@ -0,0 +1,25 @@
/*
* PROJECT: Find
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/cmdutils/find/lang/uk-UA.rc
* PURPOSE: Ukraianian Language File for find
* TRANSLATOR: Artem Reznikov
*/
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE, "FIND: Âèâåäåííÿ âñ³õ ðÿäê³â ôàéëó, ÿê³ ì³ñòÿòü ðÿäîê.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"ðÿäîê\" [ ôàéë... ]\n\
/C Ïîðàõóâàòè ê³ëüê³ñòü ðÿäê³â, ÿê³ ì³ñòÿòü ðÿäîê\n\
/I Íå âðàõîâóâàòè ðåã³ñòð ñèìâîë³â\n\
/N Íóìåðóâàòè ðÿäêè, ÿê³ â³äîáðàæàþòüñÿ (ïî÷èíàþ÷è ç 1)\n\
/V Âèâåäåííÿ ðÿäê³â, ÿê³ íå ì³ñòÿòü çàäàíèé ðÿäîê"
IDS_NO_SUCH_FILE, "FIND: %s: Ôàéë íå ³ñíóº\n"
IDS_CANNOT_OPEN, "FIND: %s: Íåìîæëèâî â³äêðèòè ôàéë\n"
END

View file

@ -0,0 +1,3 @@
#define IDS_USAGE 1000
#define IDS_NO_SUCH_FILE 1001
#define IDS_CANNOT_OPEN 1002

View file

@ -0,0 +1,20 @@
#include <windows.h>
#include "resource.h"
#include "lang/bg-BG.rc"
#include "lang/ca-ES.rc"
#include "lang/cs-CZ.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/it-IT.rc"
#include "lang/lt-LT.rc"
#include "lang/no-NO.rc"
#include "lang/pl-PL.rc"
#include "lang/pt-BR.rc"
#include "lang/ru-RU.rc"
#include "lang/sk-SK.rc"
#include "lang/sv-SE.rc"
#include "lang/uk-UA.rc"

View file

@ -0,0 +1,94 @@
/*
* WineMine
* Bulgarian Language Support
*
* Copyright 2000 Joshua Thielen
* Copyright 2003 Marcelo Duarte
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "resource.h"
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
STRINGTABLE BEGIN
IDS_APPNAME, "Ìèíè÷êè"
IDS_NOBODY, "Íèêîé"
IDS_ABOUT, "Copyright 2000 Joshua Thielen"
END
MENU_WINEMINE MENU
BEGIN
POPUP "Íà&ñòðîéêè" BEGIN
MENUITEM "&Íîâ\tF2", IDM_NEW
MENUITEM SEPARATOR
MENUITEM "Ñëàãàíå íà &ïèòàíêà", IDM_MARKQ
MENUITEM SEPARATOR
MENUITEM "Íà&÷èíàåù", IDM_BEGINNER
MENUITEM "&Íàïðåäíàë", IDM_ADVANCED
MENUITEM "&Âåù", IDM_EXPERT
MENUITEM "&Íàãàæäàíå...", IDM_CUSTOM
MENUITEM SEPARATOR
MENUITEM "Èç&õîä\tAlt+X", IDM_EXIT
END
POPUP "&Ñâåäåíèÿ" BEGIN
MENUITEM "Íàé-&áúðçè...", IDM_TIMES
MENUITEM "&Çà", IDM_ABOUT
END
END
DLG_TIMES DIALOGEX 0, 0, 160, 80
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT
CAPTION "Íàé-áúðçè"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Íàé-áúðçè", -1, 10, 10, 140, 45
LTEXT "Íà÷èíàåù", -1, 20, 20, 40, 8
LTEXT "Ðàçøèðåíè", -1, 20, 30, 40, 8
LTEXT "Ðàçáèðà÷", -1, 20, 40, 40, 8
LTEXT "999", IDC_TIME1, 70, 20, 15, 8
LTEXT "999", IDC_TIME2, 70, 30, 15, 8
LTEXT "999", IDC_TIME3, 70, 40, 15, 8
LTEXT "", IDC_NAME1, 90, 20, 55, 8
LTEXT "", IDC_NAME2, 90, 30, 55, 8
LTEXT "", IDC_NAME3, 90, 40, 55, 8
DEFPUSHBUTTON "Äîáðå", IDOK, 55, 60, 50, 15
END
DLG_CONGRATS DIALOGEX 0, 0, 160, 60
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT
CAPTION "Ïîçäðàâëåíèÿ!"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Âúâåäåòå èìåòî ñè", -1, 10, 10, 150, 10
EDITTEXT IDC_EDITNAME, 25, 20, 110, 12
DEFPUSHBUTTON "Äîáðå", IDOK, 60, 40, 40, 15
END
DLG_CUSTOM DIALOGEX 0, 0, 100, 110
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT
CAPTION "Íàãîäåíà èãðà"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Ðåäîâå", -1, 5, 5, 30, 10
LTEXT "Ñòúëáîâå", -1, 5, 35, 30, 10
LTEXT "Ìèíè", -1, 5, 65, 30, 10
EDITTEXT IDC_EDITROWS, 5, 15, 20, 12, ES_NUMBER
EDITTEXT IDC_EDITCOLS, 5, 45, 20, 12, ES_NUMBER
EDITTEXT IDC_EDITMINES, 5, 75, 20, 12, ES_NUMBER
DEFPUSHBUTTON "Äîáðå", IDOK, 50, 30, 50, 15
PUSHBUTTON "Îòêàç", IDCANCEL, 50, 50, 50, 15
END

View file

@ -42,6 +42,7 @@ LEDS BITMAP rc/leds.bmp
MINES BITMAP rc/mines.bmp
/* include localised resources */
#include "lang/bg-BG.rc"
#include "lang/cs-CZ.rc"
#include "lang/da-DK.rc"
#include "lang/en-US.rc"

View file

@ -16,13 +16,13 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#define WINE_OLESELFREGISTER
#define WINE_FILEDESCRIPTION_STR "Wine core exe"
#define WINE_FILEDESCRIPTION_STR "Wine Internet Explorer"
#define WINE_FILENAME_STR "iexplore.exe"
#define WINE_FILEVERSION 6,0,2900,2180
#define WINE_FILEVERSION_STR "6.0.2900.2180"
#define WINE_PRODUCTVERSION 6,0,2900,2180
#define WINE_PRODUCTVERSION_STR "6.0.2900.2180"
#define WINE_EXTRAVALUES VALUE "OLESelfRegister",""
#include "wine/wine_common_ver.rc"

View file

@ -91,13 +91,13 @@ END
STRINGTABLE
BEGIN
IDS_COLUMNTYPE "Type"
IDS_COLUMNDATE "Date"
IDS_COLUMNTIME "Time"
IDS_COLUMNSOURCE "Source"
IDS_COLUMNCATEGORY "Category"
IDS_COLUMNEVENT "Event"
IDS_COLUMNUSER "User"
IDS_COLUMNCOMPUTER "Computer"
IDS_COLUMNEVENTDATA "Event Data"
IDS_COLUMNTYPE "Âèä"
IDS_COLUMNDATE "Äàòà"
IDS_COLUMNTIME "Âðåìå"
IDS_COLUMNSOURCE "Èçòî÷íèê"
IDS_COLUMNCATEGORY "Ðàçðÿä"
IDS_COLUMNEVENT "Ñúáèòèå"
IDS_COLUMNUSER "Ïîòðåáèòåë"
IDS_COLUMNCOMPUTER "Êîìïþòúð"
IDS_COLUMNEVENTDATA "Äàííè çà ñúáèòèåòî"
END

View file

@ -4,7 +4,7 @@ IDR_MAINMENU MENU
BEGIN
POPUP "&Ôàéë"
BEGIN
MENUITEM "Èçíîñ...", ID_EXPORT
MENUITEM "Èçíàñÿíå...", ID_EXPORT
MENUITEM SEPARATOR
MENUITEM "Èç&õîä", ID_EXIT
END
@ -194,8 +194,8 @@ STRINGTABLE DISCARDABLE
BEGIN
/* IDS_NUM_SERVICES "Num Services: %d" */
IDS_NUM_SERVICES "Áðîé óñëóãè: %d"
IDS_STOP_DEPENDS "When %s stops, these other services will also stop"
IDS_NO_DEPENDS "<No Dependencies>"
IDS_STOP_DEPENDS "Ïðè ñïèðàíåòî íà %s, ùå ñïðàò è ñëåäíèòå óñëóãè"
IDS_NO_DEPENDS "<Áåç çàâèñèìîñòè>"
IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
END
@ -226,7 +226,8 @@ END
STRINGTABLE DISCARDABLE
BEGIN
IDS_HELP_OPTIONS "CREATE OPTIONS:\r\nNOTE: The option name includes the equal sign.\r\n type= <own|share|interact|kernel|filesys|rec>\r\n (default = own)\r\n start= <boot|system|auto|demand|disabled>\r\n (default = demand) \r\n error= <normal|severe|critical|ignore>\r\n (default = normal)\r\n group= <LoadOrderGroup>\r\n tag= <yes|no>\r\n depend= <Dependencies(separated by / (forward slash))>\r\n obj= <AccountName|ObjectName>\r\n (default = LocalSystem)\r\n password= <password>\r\n"
/*IDS_HELP_OPTIONS "CREATE OPTIONS:\r\nNOTE: The option name includes the equal sign.\r\n type= <own|share|interact|kernel|filesys|rec>\r\n (default = own)\r\n start= <boot|system|auto|demand|disabled>\r\n (default = demand) \r\n error= <normal|severe|critical|ignore>\r\n (default = normal)\r\n group= <LoadOrderGroup>\r\n tag= <yes|no>\r\n depend= <Dependencies(separated by / (forward slash))>\r\n obj= <AccountName|ObjectName>\r\n (default = LocalSystem)\r\n password= <password>\r\n" */
IDS_HELP_OPTIONS "ÑÚÇÄÀÂÀÍÅ ÍÀ ÂÚÇÌÎÆÍÎÑÒ:\r\nÁÅËÅÆÊÀ: Èìåòî íà âúçìîæíîñòòà âêëþ÷âà çíàêà çà ðàâåíñòâî.\r\n type= <own|share|interact|kernel|filesys|rec>\r\n (ïîäðàçáèðàíî = own)\r\n start= <boot|system|auto|demand|disabled>\r\n (ïîäðàçáèðàíî = demand) \r\n error= <normal|severe|critical|ignore>\r\n (ïîäðàçáèðàíî = normal)\r\n group= <LoadOrderGroup>\r\n tag= <yes|no>\r\n depend= <Dependencies(separated by / (forward slash))>\r\n obj= <AccountName|ObjectName>\r\n (ïîäðàçáèðàíî = LocalSystem)\r\n password= <password>\r\n"
END
/* Hints */
@ -239,7 +240,7 @@ BEGIN
IDS_HINT_CONNECT " Óïðàâëåíèå íà ðàçëè÷åí êîìïþòúð."
IDS_HINT_START " Ïóñêàíå íà èçáðàíàòà óñëóãà."
IDS_HINT_STOP " Ñïèðàíå íà èçáðàíàòà óñëóãà."
IDS_HINT_PAUSE " Çàäúðæàíå (pause) íà èçáðàíàòà óñëóãà."
IDS_HINT_PAUSE " Çàäúðæàíå íà èçáðàíàòà óñëóãà."
IDS_HINT_RESUME " Ïðîäúëæàâàíå íà èíáðàíàòà óñëóãà."
IDS_HINT_RESTART " Ñïèðàíå è ïóñêàíå íà èçáðàíàòà óñëóãà"
IDS_HINT_REFRESH " Îïðåñíÿâàíå íà ñïèñúêà ñ óñëóãèòå."
@ -255,7 +256,7 @@ BEGIN
IDS_HINT_CUST " Íàãàæäàíå íà èçãëåäà."
IDS_HINT_HELP " Ïîêàçâà ïîìîùåí ïðîçîðåö."
IDS_HINT_ABOUT " Çà óïðàâèòåëÿ íà óñòðéñòâàòà íà ÐåàêòÎÑ."
IDS_HINT_ABOUT " Çà óïðàâèòåëÿ íà óñòðîéñòâàòà íà ÐåàêòÎÑ."
IDS_HINT_SYS_RESTORE " Âúçñòàíîâÿâà ïðîçîðåöà äî îáè÷àéíèÿ ìó ðàìåð."
IDS_HINT_SYS_MOVE " Ïðåìåñòâà ïðîçîðåöà."

View file

@ -791,7 +791,7 @@ int main( int argc, char* argv[] )
RtlZeroMemory( State.DefaultServer, 256 );
RtlZeroMemory( State.DefaultServerAddress, 16 );
strncpy( State.root, DEFAULT_ROOT, strlen( DEFAULT_ROOT ) );
memcpy( State.root, DEFAULT_ROOT, sizeof(DEFAULT_ROOT) );
/* We don't know how long of a buffer it will want to return. So we'll
pass an empty one now and let it fail only once, instead of guessing. */

View file

@ -0,0 +1,198 @@
/* FILE: applications/rapps/lang/cs-CZ.rc
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* UPDATED: 2010-12-12
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
IDR_MAINMENU MENU
BEGIN
POPUP "&Soubor"
BEGIN
MENUITEM "&Nastavení", ID_SETTINGS
MENUITEM SEPARATOR
MENUITEM "&Konec", ID_EXIT
END
POPUP "&Programy"
BEGIN
MENUITEM "&Instalovat", ID_INSTALL
MENUITEM "&Odinstalovat",ID_UNINSTALL
MENUITEM "&Zmìnit", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Odstranit z &registru", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Obnovit", ID_REFRESH
END
POPUP "Nápovìda"
BEGIN
MENUITEM "Nápovìda", ID_HELP, GRAYED
MENUITEM "O programu...", ID_ABOUT
END
END
IDR_LINKMENU MENU
BEGIN
POPUP "popup"
BEGIN
MENUITEM "&Otevøít odkaz v prohlížeèi", ID_OPEN_LINK
MENUITEM "&Kopírovat odkaz do schránky", ID_COPY_LINK
END
END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP "popup"
BEGIN
MENUITEM "&Instalovat", ID_INSTALL
MENUITEM "&Odinstalovat", ID_UNINSTALL
MENUITEM "&Zmìnit", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Odebrat z &registru", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Obnovit", ID_REFRESH
END
END
IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Nastavení"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Obecné", -1, 4, 2, 240, 61
AUTOCHECKBOX "&Uložit pozici okna", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12
AUTOCHECKBOX "&Aktualizovat seznam dostupných programù pøi startu programu", IDC_UPDATE_AVLIST, 15, 29, 219, 12
AUTOCHECKBOX "Ukládat &záznam instalací a odstranìní programù", IDC_LOG_ENABLED, 15, 46, 219, 12
GROUPBOX "Stahování", -1, 4, 65, 240, 51
LTEXT "Složka se staženými soubory:", -1, 16, 75, 100, 9
EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP
PUSHBUTTON "&Procházet...", IDC_CHOOSE, 187, 85, 50, 14
AUTOCHECKBOX "&Smazat instalátor programu po dokonèení instalace", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
PUSHBUTTON "Výchozí", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14
PUSHBUTTON "OK", IDOK, 116, 124, 60, 14
PUSHBUTTON "Storno", IDCANCEL, 181, 124, 60, 14
END
IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Instalace programu"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35
AUTORADIOBUTTON "&Instalovat z média (CD nebo DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP
AUTORADIOBUTTON "&Stáhnout a instalovat", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP
PUSHBUTTON "OK", IDOK, 86, 78, 60, 14
PUSHBUTTON "Storno", IDCANCEL, 150, 78, 60, 14
END
IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
CAPTION "Stahování..."
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Progress1", IDC_DOWNLOAD_PROGRESS, "msctls_progress32", WS_BORDER | PBS_SMOOTH, 10, 10, 200, 12
LTEXT "", IDC_DOWNLOAD_STATUS, 10, 30, 200, 10, SS_CENTER
PUSHBUTTON "Storno", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
END
IDD_ABOUT_DIALOG DIALOGEX 22, 16, 190, 66
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
CAPTION "O programu"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "ReactOS Manažer aplikací\nCopyright (C) 2009\nby Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39
PUSHBUTTON "Zavøít", IDOK, 133, 46, 50, 14
ICON IDI_MAIN, IDC_STATIC, 10, 10, 7, 30
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLTIP_INSTALL "Instalovat"
IDS_TOOLTIP_UNINSTALL "Odinstalovat"
IDS_TOOLTIP_MODIFY "Zmìnit"
IDS_TOOLTIP_SETTINGS "Nastavení"
IDS_TOOLTIP_REFRESH "Obnovit"
IDS_TOOLTIP_EXIT "Konec"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_NAME "Název"
IDS_APP_INST_VERSION "Verze"
IDS_APP_DESCRIPTION "Popis"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_INFO_VERSION "\nVerze: "
IDS_INFO_DESCRIPTION "\nPopis: "
IDS_INFO_PUBLISHER "\nVydavatel: "
IDS_INFO_HELPLINK "\nInternetová pomoc: "
IDS_INFO_HELPPHONE "\nTelefonní pomoc: "
IDS_INFO_README "\nReadme: "
IDS_INFO_REGOWNER "\nRegistrovaný vlastník: "
IDS_INFO_PRODUCTID "\nID produktu: "
IDS_INFO_CONTACT "\nKontakt: "
IDS_INFO_UPDATEINFO "\nInformace o aktualizacích: "
IDS_INFO_INFOABOUT "\nInformace o: "
IDS_INFO_COMMENTS "\nKomentáøe: "
IDS_INFO_INSTLOCATION "\nUmístìní instalace: "
IDS_INFO_INSTALLSRC "\nZdroj instalace: "
IDS_INFO_UNINSTALLSTR "\nOdinstalaèní øetìzec: "
IDS_INFO_MODIFYPATH "\nCesta úpravy: "
IDS_INFO_INSTALLDATE "\nDatum instalace: "
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_AINFO_VERSION "\nVerze: "
IDS_AINFO_DESCRIPTION "\nPopis: "
IDS_AINFO_SIZE "\nVelikost: "
IDS_AINFO_URLSITE "\nDomovská stránka: "
IDS_AINFO_LICENCE "\nLicence: "
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_CAT_AUDIO "Audio"
IDS_CAT_DEVEL "Vývoj"
IDS_CAT_DRIVERS "Ovladaèe"
IDS_CAT_EDU "Škola hrou"
IDS_CAT_ENGINEER "Strojírenství"
IDS_CAT_FINANCE "Finance"
IDS_CAT_GAMES "Hry a zábava"
IDS_CAT_GRAPHICS "Grafika"
IDS_CAT_INTERNET "Internet a sítì"
IDS_CAT_LIBS "Knihovny"
IDS_CAT_OFFICE "Kanceláø"
IDS_CAT_OTHER "Jiné"
IDS_CAT_SCIENCE "Vìda"
IDS_CAT_TOOLS "Nástroje"
IDS_CAT_VIDEO "Video"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_APPTITLE "ReactOS Manažer aplikací"
IDS_SEARCH_TEXT "Hledat..."
IDS_INSTALL "Instalovat"
IDS_UNINSTALL "Odinstalovat"
IDS_MODIFY "Zmìnit"
IDS_APPS_COUNT "Poèet aplikací: %d"
IDS_WELCOME_TITLE "Vítejte v ReactOS Manažeru aplikací!\n\n"
IDS_WELCOME_TEXT "Na levé stranì zvolte kategorii, pak vpravo zvolte aplikaci, která bude nainstalována nebo odinstalována.\nWebová stránka ReactOS: "
IDS_WELCOME_URL "http://www.reactos.org"
IDS_INSTALLED "Nainstalováno"
IDS_AVAILABLEFORINST "Dostupné k instalaci"
IDS_UPDATES "Aktualizace"
IDS_APPLICATIONS "Aplikace"
IDS_CHOOSE_FOLDER_TEXT "Zvolte složku, do které se budou ukládat stažené soubory:"
IDS_CHOOSE_FOLDER_ERROR "Zvolená složka neexistuje. Vytvoøit?"
IDS_USER_NOT_ADMIN "Ke spuštìní ""ReactOS Manažera aplikací"" je tøeba být administrátor!"
IDS_APP_REG_REMOVE "Urèitì odstranit data instalovaného programu z registru?"
IDS_INFORMATION "Informace"
IDS_UNABLE_TO_REMOVE "Nepodaøilo se odstranit data programu z registru!"
END

View file

@ -11,6 +11,12 @@ URLSite = Unknown
URLDownload = http://svn.reactos.org/packages/ac97_vbox.exe
CDPath = none
[Section.0405]
Name = Ovladač AC97 pro VirtualBox
Licence = Neznámá
Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte.
URLSite = Neznámá
[Section.0407]
Name = AC97 Treiber für VirtualBox
Licence = Unbekannt

View file

@ -2,13 +2,13 @@
[Section]
Name = Fox Audio Player
Version = 0.7.2
Version = 0.8.3
Licence = GPL
Description = Simple and lightweight audio player.
Size = 1.84MB
Size = 1.85MB
Category = 1
URLSite = http://foxaudioplayer.sourceforge.net/
URLDownload = http://svn.reactos.org/packages/fap-0.7.2-win32-bin.exe
URLDownload = http://svn.reactos.org/packages/fap-0.8.3-win32-bin.exe
CDPath = none
[Section.0407]

View file

@ -11,6 +11,12 @@ URLSite = http://www.mozilla.com/en-US/
URLDownload = http://svn.reactos.org/packages/Firefox%20Setup%202.0.0.20.exe
CDPath = none
[Section.0405]
Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů.
Size = 5.5M
URLSite = http://www.mozilla-europe.org/cs/
URLDownload = http://194.71.11.70/pub/www/clients/mozilla.org/firefox/releases/2.0.0.20/win32/cs/Firefox%20Setup%202.0.0.20.exe
[Section.0407]
Description = Der populärste und einer der besten freien Webbrowser.

View file

@ -11,6 +11,12 @@ URLSite = http://www.mozilla.com/en-US/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/en-US/Firefox%20Setup%203.0.19.exe
CDPath = none
[Section.0405]
Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů.
Size = 7.0M
URLSite = http://www.mozilla-europe.org/cs/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/cs/Firefox%20Setup%203.0.19.exe
[Section.0407]
Description = Der populärste und einer der besten freien Webbrowser.
Size = 7.0M

View file

@ -2,47 +2,47 @@
[Section]
Name = Mozilla Firefox 3.6
Version = 3.6.12
Version = 3.6.13
Licence = MPL/GPL/LGPL
Description = The most popular and one of the best free Web Browsers out there.
Size = 8.1M
Category = 5
URLSite = http://www.mozilla.com/en-US/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/en-US/Firefox%20Setup%203.6.12.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/en-US/Firefox%20Setup%203.6.13.exe
CDPath = none
[Section.0407]
Description = Der populärste und einer der besten freien Webbrowser.
Size = 8.0M
URLSite = http://www.mozilla-europe.org/de/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/de/Firefox%20Setup%203.6.12.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/de/Firefox%20Setup%203.6.13.exe
[Section.040a]
Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
Size = 8.0M
URLSite = http://www.mozilla-europe.org/es/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/es-ES/Firefox%20Setup%203.6.12.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/es-ES/Firefox%20Setup%203.6.13.exe
[Section.0414]
Description = Mest populære og best også gratis nettleserene der ute.
Size = 8.0M
URLSite = http://www.mozilla-europe.org/no/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/nb-NO/Firefox%20Setup%203.6.12.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/nb-NO/Firefox%20Setup%203.6.13.exe
[Section.0415]
Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
Size = 8.8M
URLSite = http://www.mozilla-europe.org/pl/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/pl/Firefox%20Setup%203.6.12.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/pl/Firefox%20Setup%203.6.13.exe
[Section.0419]
Description = Один из самых популярных и лучших бесплатных браузеров.
Size = 8.4M
URLSite = http://www.mozilla-europe.org/ru/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/ru/Firefox%20Setup%203.6.12.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/ru/Firefox%20Setup%203.6.13.exe
[Section.0422]
Description = Найпопулярніший та один з кращих безплатних веб-браузерів.
Size = 8.4M
URLSite = http://www.mozilla-europe.org/uk/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/uk/Firefox%20Setup%203.6.12.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/uk/Firefox%20Setup%203.6.13.exe

View file

@ -2,13 +2,13 @@
[Section]
Name = IrfanView
Version = 4.27
Version = 4.28
Licence = Freeware (for personal use)
Description = Viewer for all kinds of graphics/audio files/video files.
Size = 1.3MB
Category = 3
URLSite = http://www.irfanview.com/
URLDownload = http://irfanview.tuwien.ac.at/iview427_setup.exe
URLDownload = http://irfanview.tuwien.ac.at/iview428_setup.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = IrfanView Plugins
Version = 4.27
Version = 4.28
Licence = Freeware (for personal use)
Description = Additional Plugins for supporting more file types.
Size = 7.8MB
Category = 3
URLSite = http://www.irfanview.com/
URLDownload = http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_427_setup.exe
URLDownload = http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_428_setup.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = LibreOffice
Version = 3.3.0 Beta 3
Version = 3.3.0 RC2
Licence = LGPL
Description = Former called OpenOffice. Open Source Office Suite.
Size = 300.0MB
Size = 206.0MB
Category = 6
URLSite = http://www.documentfoundation.org/
URLDownload = http://download.documentfoundation.org/libreoffice/testing/3.3.0-beta3/win/x86/LibO_3.3.0_Win_x86_install_multi.exe
URLDownload = http://download.documentfoundation.org/libreoffice/testing/3.3.0-rc2/win/x86/LibO_3.3.0rc2_Win_x86_install_multi.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = Miranda IM
Version = 0.9.11
Version = 0.9.13
Licence = GPL
Description = Open source multiprotocol instant messaging application - May not work completely.
Size = 3.0MB
Category = 5
URLSite = http://www.miranda-im.org/
URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.11-unicode.exe
URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.13-unicode.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = mIRC
Version = 7.15
Version = 7.17
Licence = Shareware
Description = The most popular client for the Internet Relay Chat (IRC).
Size = 2.0M
Category = 5
URLSite = http://www.mirc.com/
URLDownload = http://download.mirc.com/mirc715.exe
URLDownload = http://download.mirc.com/mirc717.exe
CDPath = none
[Section.0407]

View file

@ -11,6 +11,9 @@ URLSite = http://offbyone.com/
URLDownload = http://offbyone.com/offbyone/images/OffByOneSetup.exe
CDPath = none
[Section.0405]
Description = Off-By-One-Browser je velmi malý a rychlý webový prohlížeč s plnou podporou HTML 3.2.
[Section.0407]
Description = Der Off-By-One-Browser ist ein sehr kleiner und schneller Webbrowser mit voller HTML 3.2 Unterstützung.

View file

@ -2,15 +2,18 @@
[Section]
Name = Opera
Version = 10.63
Version = 11.00
Licence = Freeware
Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client.
Size = 12.7M
Size = 8.9M
Category = 5
URLSite = http://www.opera.com/
URLDownload = http://get4.opera.com/pub/opera/win/1063/int/Opera_1063_int_Setup.exe
URLDownload = http://get4.opera.com/pub/opera/win/1100/int/Opera_1100_int_Setup.exe
CDPath = none
[Section.0405]
Description = Populární prohlížeč Opera s mnoha pokročilými vlastnostmi, včetně vestavené podpory pro e-mail a BitTorrent.
[Section.0407]
Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenschaften, enthält einen Mail und BitTorrent Client.

View file

@ -11,6 +11,9 @@ URLSite = http://reactos.org/wiki/Build_Environment
URLDownload = http://ovh.dl.sourceforge.net/project/reactos/RosBE-Windows/i386/1.5.1/RosBE-1.5.1.1.exe
CDPath = none
[Section.0405]
Description = Dovoluje zkompilovat zdrojový kód systému ReactOS. Pro další detaily viz. ReactOS wiki.
[Section.0407]
Description = Erlaubt es Ihnen den ReactOS Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.

View file

@ -11,6 +11,9 @@ URLSite = http://reactos.org/wiki/Build_Environment/
URLDownload = http://dreimer.bplaced.net/rosbe/RosBE64-1.4b.exe
CDPath = none
[Section.0405]
Description = Dovoluje zkompilovat zdrojový kód systému ReactOS AMD64. Pro další detaily viz. ReactOS wiki.
[Section.0407]
Description = Erlaubt es Ihnen den ReactOS AMD64 Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.

View file

@ -2,13 +2,13 @@
[Section]
Name = SciTE
Version = 2.22
Version = 2.23
Licence = Freeware
Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs.
Size = 0.6M
Category = 7
URLSite = http://www.scintilla.org/
URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.22/Sc222.exe
URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.23/Sc223.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = ScummVM
Version = 1.2.0
Version = 1.2.1
Licence = GPL
Description = Sam and Max, Day of the Tentacle, etc on ReactOS.
Size = 3.5MB
Size = 4.0MB
Category = 4
URLSite = http://scummvm.org/
URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.2.0/scummvm-1.2.0-win32.exe
URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.2.1/scummvm-1.2.1-win32.exe
CDPath = none
[Section.0407]

View file

@ -11,6 +11,9 @@ URLSite = http://www.libsdl.org/projects/SDL_mixer/
URLDownload = http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11-win32.zip
CDPath = none
[Section.0405]
Description = Nutný pro spuštění některých open source her. K rozbalení je nutný 7-zip nebo podobný nástroj.
[Section.0407]
Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauchen 7-Zip oder einen ähnlichen Entpacker um es zu entpacken.

View file

@ -2,31 +2,31 @@
[Section]
Name = Mozilla SeaMonkey
Version = 2.0.10
Version = 2.0.11
Licence = MPL/GPL/LGPL
Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.
Size = 10.1MB
Category = 5
URLSite = http://www.seamonkey-project.org/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/en-US/SeaMonkey%20Setup%202.0.10.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/en-US/SeaMonkey%20Setup%202.0.11.exe
CDPath = none
[Section.0407]
Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen.
Size = 10.0MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/de/SeaMonkey%20Setup%202.0.10.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/de/SeaMonkey%20Setup%202.0.11.exe
[Section.040a]
Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás.
Size = 10.0MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/es-ES/SeaMonkey%20Setup%202.0.10.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/es-ES/SeaMonkey%20Setup%202.0.11.exe
[Section.0415]
Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz.
Size = 10.8MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/pl/SeaMonkey%20Setup%202.0.10.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/pl/SeaMonkey%20Setup%202.0.11.exe
[Section.0419]
Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор.
Size = 10.4MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/ru/SeaMonkey%20Setup%202.0.10.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/ru/SeaMonkey%20Setup%202.0.11.exe

View file

@ -2,41 +2,41 @@
[Section]
Name = Mozilla Thunderbird
Version = 3.1.6
Version = 3.1.7
Licence = MPL/GPL/LGPL
Description = The most popular and one of the best free Mail Clients out there.
Size = 9.0M
Category = 5
URLSite = http://www.mozilla-europe.org/en/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/en-US/Thunderbird%20Setup%203.1.6.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/en-US/Thunderbird%20Setup%203.1.7.exe
CDPath = none
[Section.0407]
Description = Der populärste und einer der besten freien Mail-Clients.
Size = 8.8M
URLSite = http://www.mozilla-europe.org/de/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/de/Thunderbird%20Setup%203.1.6.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/de/Thunderbird%20Setup%203.1.7.exe
[Section.040a]
Description = El más popular y uno de los mejores clientes mail que hay.
Size = 8.8M
URLSite = http://www.mozilla-europe.org/es/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/es-ES/Thunderbird%20Setup%203.1.6.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/es-ES/Thunderbird%20Setup%203.1.7.exe
[Section.0415]
Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty.
Size = 9.7M
URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/pl/Thunderbird%20Setup%203.1.6.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/pl/Thunderbird%20Setup%203.1.7.exe
[Section.0419]
Description = Один из самых популярных и лучших бесплатных почтовых клиентов.
Size = 9.2M
URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/ru/Thunderbird%20Setup%203.1.6.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/ru/Thunderbird%20Setup%203.1.7.exe
[Section.0422]
Description = Найпопулярніший та один з кращих поштових клієнтів.
Size = 9.2M
URLSite = http://www.mozillamessaging.com/uk/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/uk/Thunderbird%20Setup%203.1.6.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/uk/Thunderbird%20Setup%203.1.7.exe

View file

@ -2,15 +2,18 @@
[Section]
Name = TuxPaint
Version = 0.9.21
Version = 0.9.21b
Licence = GPL
Description = An Open Source bitmap graphics editor geared towards young children.
Size = 10MB
Size = 11MB
Category = 3
URLSite = http://tuxpaint.org/
URLDownload = http://ovh.dl.sourceforge.net/project/tuxpaint/tuxpaint/0.9.21/tuxpaint-0.9.21-win32-installer.exe
URLDownload = http://ovh.dl.sourceforge.net/project/tuxpaint/tuxpaint/0.9.21b/tuxpaint-0.9.21b-win32-installer.exe
CDPath = none
[Section.0405]
Description = Open source bitmapový editor určený dětem.
[Section.0407]
Description = Ein Open Source Bitmap Zeichenprogramm für kleine Kinder.

View file

@ -2,13 +2,13 @@
[Section]
Name = UltraVNC
Version = 1.0.9.1
Version = 1.0.9.5
Licence = GPL
Description = Open-source VNC client/server.
Size = 2.0MB
Size = 2.1MB
Category = 5
URLSite = http://www.uvnc.com/
URLDownload = http://support1.uvnc.com/download/109/UltraVNC_1.0.9.1_Setup.exe
URLDownload = http://support1.uvnc.com/download/1095/UltraVNC_1.0.9.5_Setup.exe
CDPath = none
[Section.040a]

View file

@ -1,4 +1,5 @@
#include "lang/bg-BG.rc"
#include "lang/cs-CZ.rc"
#include "lang/de-DE.rc"
#include "lang/en-US.rc"
#include "lang/es-ES.rc"

View file

@ -49,12 +49,12 @@ static void draw_splitbar(HWND hWnd, int x)
if(!SizingPattern)
{
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
}
if(!SizingBrush)
{
SizingBrush = CreatePatternBrush(SizingPattern);
SizingBrush = CreatePatternBrush(SizingPattern);
}
GetClientRect(hWnd, &rt);
rt.left = x - SPLIT_WIDTH/2;
@ -72,7 +72,8 @@ static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
const int tHeight = 18;
SetRect(&rt, 0, 0, cx, cy);
cy = 0;
if (hStatusBar != NULL) {
if (hStatusBar != NULL)
{
GetWindowRect(hStatusBar, &rs);
cy = rs.bottom - rs.top;
}
@ -132,7 +133,8 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
UNREFERENCED_PARAMETER(message);
switch (wID) {
switch (wID)
{
/* Parse the menu selections: */
case ID_REGISTRY_EXIT:
DestroyWindow(hWnd);
@ -156,15 +158,15 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
if (keyPath == 0 || *keyPath == 0)
{
MessageBeep(MB_ICONHAND);
} else
if (DeleteKey(hWnd, hRootKey, keyPath))
DeleteNode(g_pChildWnd->hTreeWnd, 0);
MessageBeep(MB_ICONHAND);
}
else if (DeleteKey(hWnd, hRootKey, keyPath))
DeleteNode(g_pChildWnd->hTreeWnd, 0);
break;
case ID_TREE_EXPORT:
case ID_TREE_EXPORT:
ExportRegistryFile(pChildWnd->hTreeWnd);
break;
case ID_EDIT_FIND:
case ID_EDIT_FIND:
FindDialog(hWnd);
break;
case ID_EDIT_COPYKEYNAME:
@ -186,13 +188,13 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
break;
default:
if ((wID >= ID_TREE_SUGGESTION_MIN) && (wID <= ID_TREE_SUGGESTION_MAX))
{
{
s = Suggestions;
while(wID > ID_TREE_SUGGESTION_MIN)
{
if (*s)
s += _tcslen(s) + 1;
wID--;
wID--;
}
SelectNode(pChildWnd->hTreeWnd, s);
break;
@ -210,95 +212,95 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
#define MIN(a,b) ((a < b) ? (a) : (b))
static void SuggestKeys(HKEY hRootKey, LPCTSTR pszKeyPath, LPTSTR pszSuggestions,
size_t iSuggestionsLength)
size_t iSuggestionsLength)
{
TCHAR szBuffer[256];
TCHAR szLastFound[256];
size_t i;
HKEY hOtherKey, hSubKey;
BOOL bFound;
TCHAR szBuffer[256];
TCHAR szLastFound[256];
size_t i;
HKEY hOtherKey, hSubKey;
BOOL bFound;
memset(pszSuggestions, 0, iSuggestionsLength * sizeof(*pszSuggestions));
iSuggestionsLength--;
memset(pszSuggestions, 0, iSuggestionsLength * sizeof(*pszSuggestions));
iSuggestionsLength--;
/* Are we a root key in HKEY_CLASSES_ROOT? */
if ((hRootKey == HKEY_CLASSES_ROOT) && pszKeyPath[0] && !_tcschr(pszKeyPath, TEXT('\\')))
{
do
{
bFound = FALSE;
/* Are we a root key in HKEY_CLASSES_ROOT? */
if ((hRootKey == HKEY_CLASSES_ROOT) && pszKeyPath[0] && !_tcschr(pszKeyPath, TEXT('\\')))
{
do
{
bFound = FALSE;
/* Check default key */
if (QueryStringValue(hRootKey, pszKeyPath, NULL,
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
{
/* Sanity check this key; it cannot be empty, nor can it be a
* loop back */
if ((szBuffer[0] != '\0') && _tcsicmp(szBuffer, pszKeyPath))
{
if (RegOpenKey(hRootKey, szBuffer, &hOtherKey) == ERROR_SUCCESS)
{
lstrcpyn(pszSuggestions, TEXT("HKCR\\"), (int) iSuggestionsLength);
i = _tcslen(pszSuggestions);
pszSuggestions += i;
iSuggestionsLength -= i;
/* Check default key */
if (QueryStringValue(hRootKey, pszKeyPath, NULL,
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
{
/* Sanity check this key; it cannot be empty, nor can it be a
* loop back */
if ((szBuffer[0] != '\0') && _tcsicmp(szBuffer, pszKeyPath))
{
if (RegOpenKey(hRootKey, szBuffer, &hOtherKey) == ERROR_SUCCESS)
{
lstrcpyn(pszSuggestions, TEXT("HKCR\\"), (int) iSuggestionsLength);
i = _tcslen(pszSuggestions);
pszSuggestions += i;
iSuggestionsLength -= i;
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
pszSuggestions += i;
iSuggestionsLength -= i;
RegCloseKey(hOtherKey);
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
pszSuggestions += i;
iSuggestionsLength -= i;
RegCloseKey(hOtherKey);
bFound = TRUE;
_tcscpy(szLastFound, szBuffer);
pszKeyPath = szLastFound;
}
}
}
}
while(bFound && (iSuggestionsLength > 0));
bFound = TRUE;
_tcscpy(szLastFound, szBuffer);
pszKeyPath = szLastFound;
}
}
}
}
while(bFound && (iSuggestionsLength > 0));
/* Check CLSID key */
if (RegOpenKey(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
{
if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer,
COUNT_OF(szBuffer)) == ERROR_SUCCESS)
{
lstrcpyn(pszSuggestions, TEXT("HKCR\\CLSID\\"), (int) iSuggestionsLength);
i = _tcslen(pszSuggestions);
pszSuggestions += i;
iSuggestionsLength -= i;
/* Check CLSID key */
if (RegOpenKey(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
{
if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer,
COUNT_OF(szBuffer)) == ERROR_SUCCESS)
{
lstrcpyn(pszSuggestions, TEXT("HKCR\\CLSID\\"), (int) iSuggestionsLength);
i = _tcslen(pszSuggestions);
pszSuggestions += i;
iSuggestionsLength -= i;
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
pszSuggestions += i;
iSuggestionsLength -= i;
}
RegCloseKey(hSubKey);
}
}
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
pszSuggestions += i;
iSuggestionsLength -= i;
}
RegCloseKey(hSubKey);
}
}
}
LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
WNDPROC oldwndproc;
static TCHAR s_szNode[256];
static TCHAR s_szNode[256];
oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWL_USERDATA);
switch (uMsg)
switch (uMsg)
{
case WM_KEYUP:
if (wParam == VK_RETURN)
{
GetWindowText(hwnd, s_szNode, sizeof(s_szNode) / sizeof(s_szNode[0]));
SelectNode(g_pChildWnd->hTreeWnd, s_szNode);
}
break;
default:
break;
}
return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam);
case WM_KEYUP:
if (wParam == VK_RETURN)
{
GetWindowText(hwnd, s_szNode, sizeof(s_szNode) / sizeof(s_szNode[0]));
SelectNode(g_pChildWnd->hTreeWnd, s_szNode);
}
break;
default:
break;
}
return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam);
}
/*******************************************************************************
@ -317,10 +319,11 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
BOOL Result;
ChildWnd* pChildWnd = g_pChildWnd;
switch (message) {
switch (message)
{
case WM_CREATE:
{
WNDPROC oldproc;
WNDPROC oldproc;
HFONT hFont;
TCHAR buffer[MAX_PATH];
/* load "My Computer" string */
@ -333,12 +336,12 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
pChildWnd->nSplitPos = 250;
pChildWnd->hWnd = hWnd;
pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, (HMENU)0, hInst, 0);
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, (HMENU)0, hInst, 0);
pChildWnd->hAddressBtnWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Button"), _T("»"), WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP | BS_DEFPUSHBUTTON,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, (HMENU)0, hInst, 0);
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, (HMENU)0, hInst, 0);
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
SetFocus(pChildWnd->hTreeWnd);
@ -355,17 +358,19 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
(WPARAM)hFont,
0);
}
/* Subclass the AddressBar */
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
/* Subclass the AddressBar */
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC, (DWORD_PTR)AddressBarProc);
break;
break;
}
case WM_COMMAND:
if(HIWORD(wParam) == BN_CLICKED){
if(HIWORD(wParam) == BN_CLICKED)
{
PostMessage(pChildWnd->hAddressBarWnd, WM_KEYUP, VK_RETURN, 0);
}
else if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
else if (!_CmdWndProc(hWnd, message, wParam, lParam))
{
goto def;
}
break;
@ -373,39 +378,44 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
OnPaint(hWnd);
return 0;
case WM_SETCURSOR:
if (LOWORD(lParam) == HTCLIENT) {
if (LOWORD(lParam) == HTCLIENT)
{
POINT pt;
GetCursorPos(&pt);
ScreenToClient(hWnd, &pt);
if (pt.x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && pt.x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) {
if (pt.x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && pt.x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1)
{
SetCursor(LoadCursor(0, IDC_SIZEWE));
return TRUE;
}
}
goto def;
case WM_DESTROY:
DestroyTreeView();
DestroyListView(pChildWnd->hListWnd);
DestroyMainMenu();
DestroyTreeView();
DestroyListView(pChildWnd->hListWnd);
DestroyMainMenu();
HeapFree(GetProcessHeap(), 0, pChildWnd);
pChildWnd = NULL;
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN: {
RECT rt;
int x = (short)LOWORD(lParam);
GetClientRect(hWnd, &rt);
if (x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) {
last_split = pChildWnd->nSplitPos;
draw_splitbar(hWnd, last_split);
SetCapture(hWnd);
}
break;
case WM_LBUTTONDOWN:
{
RECT rt;
int x = (short)LOWORD(lParam);
GetClientRect(hWnd, &rt);
if (x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1)
{
last_split = pChildWnd->nSplitPos;
draw_splitbar(hWnd, last_split);
SetCapture(hWnd);
}
break;
}
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
if (GetCapture() == hWnd) {
if (GetCapture() == hWnd)
{
finish_splitbar(hWnd, LOWORD(lParam));
}
break;
@ -417,7 +427,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
case WM_KEYDOWN:
if (wParam == VK_ESCAPE)
if (GetCapture() == hWnd) {
if (GetCapture() == hWnd)
{
RECT rt;
draw_splitbar(hWnd, last_split);
GetClientRect(hWnd, &rt);
@ -429,42 +440,44 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
break;
case WM_MOUSEMOVE:
if (GetCapture() == hWnd) {
if (GetCapture() == hWnd)
{
HDC hdc;
RECT rt;
HGDIOBJ OldObj;
int x = LOWORD(lParam);
if(!SizingPattern)
{
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
}
if(!SizingBrush)
{
SizingBrush = CreatePatternBrush(SizingPattern);
SizingBrush = CreatePatternBrush(SizingPattern);
}
GetClientRect(hWnd, &rt);
x = (SHORT) min(max(x, SPLIT_MIN), rt.right - SPLIT_MIN);
if(last_split != x)
{
rt.left = last_split-SPLIT_WIDTH/2;
rt.right = last_split+SPLIT_WIDTH/2+1;
hdc = GetDC(hWnd);
OldObj = SelectObject(hdc, SizingBrush);
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
last_split = x;
rt.left = x-SPLIT_WIDTH/2;
rt.right = x+SPLIT_WIDTH/2+1;
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
SelectObject(hdc, OldObj);
ReleaseDC(hWnd, hdc);
rt.left = last_split-SPLIT_WIDTH/2;
rt.right = last_split+SPLIT_WIDTH/2+1;
hdc = GetDC(hWnd);
OldObj = SelectObject(hdc, SizingBrush);
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
last_split = x;
rt.left = x-SPLIT_WIDTH/2;
rt.right = x+SPLIT_WIDTH/2+1;
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
SelectObject(hdc, OldObj);
ReleaseDC(hWnd, hdc);
}
}
break;
case WM_SETFOCUS:
if (pChildWnd != NULL) {
if (pChildWnd != NULL)
{
SetFocus(pChildWnd->nFocusPanel? pChildWnd->hListWnd: pChildWnd->hTreeWnd);
}
break;
@ -473,283 +486,292 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
break;
case WM_NOTIFY:
if ((int)wParam == TREE_WINDOW) {
switch (((LPNMHDR)lParam)->code) {
if ((int)wParam == TREE_WINDOW)
{
switch (((LPNMHDR)lParam)->code)
{
case TVN_ITEMEXPANDING:
return !OnTreeExpanding(pChildWnd->hTreeWnd, (NMTREEVIEW*)lParam);
case TVN_SELCHANGED: {
LPCTSTR keyPath, rootName;
LPTSTR fullPath;
HKEY hRootKey;
case TVN_SELCHANGED:
{
LPCTSTR keyPath, rootName;
LPTSTR fullPath;
HKEY hRootKey;
keyPath = GetItemPath(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, &hRootKey);
if (keyPath) {
RefreshListView(pChildWnd->hListWnd, hRootKey, keyPath);
rootName = get_root_key_name(hRootKey);
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
if (fullPath) {
/* set (correct) the address bar text */
if(keyPath[0] != '\0')
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
else
fullPath = _tcscpy(fullPath, rootName);
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
HeapFree(GetProcessHeap(), 0, fullPath);
/* disable hive manipulation items temporarily (enable only if necessary) */
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
/* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
_tcsicmp(rootName, TEXT("HKEY_USERS"))))
keyPath = GetItemPath(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, &hRootKey);
if (keyPath)
{
// enable the unload menu item if at the root
// otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
if(keyPath[0] == '\0')
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
else if(!_tcschr(keyPath, _T('\\')))
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
}
RefreshListView(pChildWnd->hListWnd, hRootKey, keyPath);
rootName = get_root_key_name(hRootKey);
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
if (fullPath)
{
/* set (correct) the address bar text */
if(keyPath[0] != '\0')
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
else
fullPath = _tcscpy(fullPath, rootName);
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
HeapFree(GetProcessHeap(), 0, fullPath);
/* disable hive manipulation items temporarily (enable only if necessary) */
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
/* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
_tcsicmp(rootName, TEXT("HKEY_USERS"))))
{
// enable the unload menu item if at the root
// otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
if(keyPath[0] == '\0')
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
else if(!_tcschr(keyPath, _T('\\')))
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
}
{
HKEY hKey;
TCHAR szBuffer[MAX_PATH];
_sntprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), _T("My Computer\\%s\\%s"), rootName, keyPath);
{
HKEY hKey;
TCHAR szBuffer[MAX_PATH];
_sntprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), _T("My Computer\\%s\\%s"), rootName, keyPath);
if (RegCreateKey(HKEY_CURRENT_USER,
g_szGeneralRegKey,
&hKey) == ERROR_SUCCESS)
{
RegSetValueEx(hKey, _T("LastKey"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) _tcslen(szBuffer) * sizeof(szBuffer[0]));
RegCloseKey(hKey);
}
}
}
}
if (RegCreateKey(HKEY_CURRENT_USER,
g_szGeneralRegKey,
&hKey) == ERROR_SUCCESS)
{
RegSetValueEx(hKey, _T("LastKey"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) _tcslen(szBuffer) * sizeof(szBuffer[0]));
RegCloseKey(hKey);
}
}
}
}
}
break;
case NM_SETFOCUS:
pChildWnd->nFocusPanel = 0;
break;
case NM_SETFOCUS:
pChildWnd->nFocusPanel = 0;
break;
case TVN_BEGINLABELEDIT:
{
LPNMTVDISPINFO ptvdi;
/* cancel label edit for rootkeys */
ptvdi = (LPNMTVDISPINFO) lParam;
LPNMTVDISPINFO ptvdi;
/* cancel label edit for rootkeys */
ptvdi = (LPNMTVDISPINFO) lParam;
if (!TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem) ||
!TreeView_GetParent(pChildWnd->hTreeWnd, TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem)))
return TRUE;
break;
}
!TreeView_GetParent(pChildWnd->hTreeWnd, TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem)))
return TRUE;
break;
}
case TVN_ENDLABELEDIT:
{
LPCTSTR keyPath;
HKEY hRootKey;
HKEY hKey = NULL;
LPNMTVDISPINFO ptvdi;
LONG lResult = TRUE;
TCHAR szBuffer[MAX_PATH];
{
LPCTSTR keyPath;
HKEY hRootKey;
HKEY hKey = NULL;
LPNMTVDISPINFO ptvdi;
LONG lResult = TRUE;
TCHAR szBuffer[MAX_PATH];
ptvdi = (LPNMTVDISPINFO) lParam;
if (ptvdi->item.pszText)
{
ptvdi = (LPNMTVDISPINFO) lParam;
if (ptvdi->item.pszText)
{
keyPath = GetItemPath(pChildWnd->hTreeWnd, TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem), &hRootKey);
_sntprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), _T("%s\\%s"), keyPath, ptvdi->item.pszText);
keyPath = GetItemPath(pChildWnd->hTreeWnd, ptvdi->item.hItem, &hRootKey);
if (RegOpenKeyEx(hRootKey, szBuffer, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
lResult = FALSE;
RegCloseKey(hKey);
(void)TreeView_EditLabel(pChildWnd->hTreeWnd, ptvdi->item.hItem);
lResult = FALSE;
RegCloseKey(hKey);
(void)TreeView_EditLabel(pChildWnd->hTreeWnd, ptvdi->item.hItem);
}
else
{
if (RenameKey(hRootKey, keyPath, ptvdi->item.pszText) != ERROR_SUCCESS)
lResult = FALSE;
if (RenameKey(hRootKey, keyPath, ptvdi->item.pszText) != ERROR_SUCCESS)
lResult = FALSE;
}
return lResult;
}
}
}
default:
return 0;
}
} else
}
else
{
if ((int)wParam == LIST_WINDOW)
{
switch (((LPNMHDR)lParam)->code) {
case NM_SETFOCUS:
pChildWnd->nFocusPanel = 1;
break;
default:
if(!ListWndNotifyProc(pChildWnd->hListWnd, wParam, lParam, &Result))
{
goto def;
}
return Result;
break;
}
switch (((LPNMHDR)lParam)->code)
{
case NM_SETFOCUS:
pChildWnd->nFocusPanel = 1;
break;
default:
if(!ListWndNotifyProc(pChildWnd->hListWnd, wParam, lParam, &Result))
{
goto def;
}
return Result;
break;
}
}
}
break;
case WM_CONTEXTMENU:
{
POINT pt;
if((HWND)wParam == pChildWnd->hListWnd)
{
int i, cnt;
BOOL IsDefault;
pt.x = (short) LOWORD(lParam);
pt.y = (short) HIWORD(lParam);
cnt = ListView_GetSelectedCount(pChildWnd->hListWnd);
i = ListView_GetNextItem(pChildWnd->hListWnd, -1, LVNI_FOCUSED | LVNI_SELECTED);
if (pt.x == -1 && pt.y == -1)
POINT pt;
if((HWND)wParam == pChildWnd->hListWnd)
{
RECT rc;
if (i != -1)
int i, cnt;
BOOL IsDefault;
pt.x = (short) LOWORD(lParam);
pt.y = (short) HIWORD(lParam);
cnt = ListView_GetSelectedCount(pChildWnd->hListWnd);
i = ListView_GetNextItem(pChildWnd->hListWnd, -1, LVNI_FOCUSED | LVNI_SELECTED);
if (pt.x == -1 && pt.y == -1)
{
rc.left = LVIR_BOUNDS;
SendMessage(pChildWnd->hListWnd, LVM_GETITEMRECT, i, (LPARAM) &rc);
pt.x = rc.left + 8;
pt.y = rc.top + 8;
RECT rc;
if (i != -1)
{
rc.left = LVIR_BOUNDS;
SendMessage(pChildWnd->hListWnd, LVM_GETITEMRECT, i, (LPARAM) &rc);
pt.x = rc.left + 8;
pt.y = rc.top + 8;
}
else
pt.x = pt.y = 0;
ClientToScreen(pChildWnd->hListWnd, &pt);
}
if(i == -1)
{
TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
}
else
pt.x = pt.y = 0;
ClientToScreen(pChildWnd->hListWnd, &pt);
}
if(i == -1)
{
TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
}
else
{
HMENU mnu = GetSubMenu(hPopupMenus, PM_MODIFYVALUE);
SetMenuDefaultItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND);
IsDefault = IsDefaultValue(pChildWnd->hListWnd, i);
if(cnt == 1)
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | (IsDefault ? MF_DISABLED | MF_GRAYED : MF_ENABLED));
else
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
EnableMenuItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
EnableMenuItem(mnu, ID_EDIT_MODIFY_BIN, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
TrackPopupMenu(mnu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
}
}
else if ((HWND)wParam == pChildWnd->hTreeWnd)
{
TVHITTESTINFO hti;
HMENU hContextMenu;
TVITEM item;
MENUITEMINFO mii;
TCHAR resource[256];
TCHAR buffer[256];
LPTSTR s;
LPCTSTR keyPath;
HKEY hRootKey;
int iLastPos;
WORD wID;
pt.x = (short) LOWORD(lParam);
pt.y = (short) HIWORD(lParam);
if (pt.x == -1 && pt.y == -1)
{
RECT rc;
hti.hItem = TreeView_GetSelection(pChildWnd->hTreeWnd);
if (hti.hItem != NULL)
{
TreeView_GetItemRect(pChildWnd->hTreeWnd, hti.hItem, &rc, TRUE);
pt.x = rc.left + 8;
pt.y = rc.top + 8;
ClientToScreen(pChildWnd->hTreeWnd, &pt);
hti.flags = TVHT_ONITEM;
HMENU mnu = GetSubMenu(hPopupMenus, PM_MODIFYVALUE);
SetMenuDefaultItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND);
IsDefault = IsDefaultValue(pChildWnd->hListWnd, i);
if(cnt == 1)
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | (IsDefault ? MF_DISABLED | MF_GRAYED : MF_ENABLED));
else
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
EnableMenuItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
EnableMenuItem(mnu, ID_EDIT_MODIFY_BIN, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
TrackPopupMenu(mnu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
}
}
else if ((HWND)wParam == pChildWnd->hTreeWnd)
{
TVHITTESTINFO hti;
HMENU hContextMenu;
TVITEM item;
MENUITEMINFO mii;
TCHAR resource[256];
TCHAR buffer[256];
LPTSTR s;
LPCTSTR keyPath;
HKEY hRootKey;
int iLastPos;
WORD wID;
pt.x = (short) LOWORD(lParam);
pt.y = (short) HIWORD(lParam);
if (pt.x == -1 && pt.y == -1)
{
RECT rc;
hti.hItem = TreeView_GetSelection(pChildWnd->hTreeWnd);
if (hti.hItem != NULL)
{
TreeView_GetItemRect(pChildWnd->hTreeWnd, hti.hItem, &rc, TRUE);
pt.x = rc.left + 8;
pt.y = rc.top + 8;
ClientToScreen(pChildWnd->hTreeWnd, &pt);
hti.flags = TVHT_ONITEM;
}
else
hti.flags = 0;
}
else
hti.flags = 0;
{
hti.pt.x = pt.x;
hti.pt.y = pt.y;
ScreenToClient(pChildWnd->hTreeWnd, &hti.pt);
(void)TreeView_HitTest(pChildWnd->hTreeWnd, &hti);
}
if (hti.flags & TVHT_ONITEM)
{
hContextMenu = GetSubMenu(hPopupMenus, PM_TREECONTEXT);
(void)TreeView_SelectItem(pChildWnd->hTreeWnd, hti.hItem);
memset(&item, 0, sizeof(item));
item.mask = TVIF_STATE | TVIF_CHILDREN;
item.hItem = hti.hItem;
(void)TreeView_GetItem(pChildWnd->hTreeWnd, &item);
/* Set the Expand/Collapse menu item appropriately */
LoadString(hInst, (item.state & TVIS_EXPANDED) ? IDS_COLLAPSE : IDS_EXPAND, buffer, sizeof(buffer) / sizeof(buffer[0]));
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STRING | MIIM_STATE | MIIM_ID;
mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
mii.wID = (item.state & TVIS_EXPANDED) ? ID_TREE_COLLAPSEBRANCH : ID_TREE_EXPANDBRANCH;
mii.dwTypeData = (LPTSTR) buffer;
SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
/* Remove any existing suggestions */
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_ID;
GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
{
do
{
iLastPos = GetMenuItemCount(hContextMenu) - 1;
GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
}
while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
}
/* Come up with suggestions */
keyPath = GetItemPath(pChildWnd->hTreeWnd, NULL, &hRootKey);
SuggestKeys(hRootKey, keyPath, Suggestions, sizeof(Suggestions) / sizeof(Suggestions[0]));
if (Suggestions[0])
{
AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
LoadString(hInst, IDS_GOTO_SUGGESTED_KEY, resource, sizeof(resource) / sizeof(resource[0]));
s = Suggestions;
wID = ID_TREE_SUGGESTION_MIN;
while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
{
_sntprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), resource, s);
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STRING | MIIM_ID;
mii.wID = wID++;
mii.dwTypeData = buffer;
InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
s += _tcslen(s) + 1;
}
}
TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, pChildWnd->hWnd, NULL);
}
}
else
{
hti.pt.x = pt.x;
hti.pt.y = pt.y;
ScreenToClient(pChildWnd->hTreeWnd, &hti.pt);
(void)TreeView_HitTest(pChildWnd->hTreeWnd, &hti);
}
if (hti.flags & TVHT_ONITEM)
{
hContextMenu = GetSubMenu(hPopupMenus, PM_TREECONTEXT);
(void)TreeView_SelectItem(pChildWnd->hTreeWnd, hti.hItem);
memset(&item, 0, sizeof(item));
item.mask = TVIF_STATE | TVIF_CHILDREN;
item.hItem = hti.hItem;
(void)TreeView_GetItem(pChildWnd->hTreeWnd, &item);
/* Set the Expand/Collapse menu item appropriately */
LoadString(hInst, (item.state & TVIS_EXPANDED) ? IDS_COLLAPSE : IDS_EXPAND, buffer, sizeof(buffer) / sizeof(buffer[0]));
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STRING | MIIM_STATE | MIIM_ID;
mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
mii.wID = (item.state & TVIS_EXPANDED) ? ID_TREE_COLLAPSEBRANCH : ID_TREE_EXPANDBRANCH;
mii.dwTypeData = (LPTSTR) buffer;
SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
/* Remove any existing suggestions */
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_ID;
GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
{
do
{
iLastPos = GetMenuItemCount(hContextMenu) - 1;
GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
}
while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
}
/* Come up with suggestions */
keyPath = GetItemPath(pChildWnd->hTreeWnd, NULL, &hRootKey);
SuggestKeys(hRootKey, keyPath, Suggestions, sizeof(Suggestions) / sizeof(Suggestions[0]));
if (Suggestions[0])
{
AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
LoadString(hInst, IDS_GOTO_SUGGESTED_KEY, resource, sizeof(resource) / sizeof(resource[0]));
s = Suggestions;
wID = ID_TREE_SUGGESTION_MIN;
while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
{
_sntprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), resource, s);
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STRING | MIIM_ID;
mii.wID = wID++;
mii.dwTypeData = buffer;
InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
s += _tcslen(s) + 1;
}
}
TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, pChildWnd->hWnd, NULL);
}
}
break;
break;
}
case WM_SIZE:
if (wParam != SIZE_MINIMIZED && pChildWnd != NULL) {
if (wParam != SIZE_MINIMIZED && pChildWnd != NULL)
{
ResizeWnd(pChildWnd, LOWORD(lParam), HIWORD(lParam));
}
/* fall through */
default: def:
default:
def:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;

View file

@ -123,41 +123,41 @@ ClbWndProc(IN HWND hwnd,
LRESULT Ret = 0;
DPRINT1("ClbWndProc(0x%p, 0x%x, 0x%p, 0x%p)\n", hwnd, uMsg, wParam, lParam);
PrivData = (PCLB_PRIVATEDATA)GetWindowLongPtr(hwnd,
0);
0);
if (PrivData == NULL && uMsg != WM_CREATE)
{
goto HandleDefMsg;
}
switch (uMsg)
{
case WM_CREATE:
PrivData = HeapAlloc(GetProcessHeap(),
0,
sizeof(CLB_PRIVATEDATA));
if (PrivData == NULL)
{
Ret = (LRESULT)-1;
break;
}
PrivData->hwnd = hwnd;
case WM_CREATE:
PrivData = HeapAlloc(GetProcessHeap(),
0,
sizeof(CLB_PRIVATEDATA));
if (PrivData == NULL)
{
Ret = (LRESULT)-1;
break;
}
PrivData->hwnd = hwnd;
break;
case WM_DESTROY:
HeapFree(GetProcessHeap(),
0,
PrivData);
break;
case WM_DESTROY:
HeapFree(GetProcessHeap(),
0,
PrivData);
break;
default:
default:
HandleDefMsg:
Ret = DefWindowProc(hwnd,
uMsg,
wParam,
lParam);
break;
Ret = DefWindowProc(hwnd,
uMsg,
wParam,
lParam);
break;
}
return Ret;
@ -171,32 +171,32 @@ ClbpStyleDlgProc(IN HWND hwndDlg,
IN LPARAM lParam)
{
INT_PTR Ret = FALSE;
DPRINT1("ClbpStyleDlgProc(0x%p, 0x%x, 0x%p, 0x%p)\n", hwndDlg, uMsg, wParam, lParam);
switch (uMsg)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hwndDlg,
(INT_PTR)LOWORD(wParam));
break;
}
break;
case WM_CLOSE:
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hwndDlg,
IDCANCEL);
(INT_PTR)LOWORD(wParam));
break;
}
break;
case WM_INITDIALOG:
Ret = TRUE;
break;
case WM_CLOSE:
EndDialog(hwndDlg,
IDCANCEL);
break;
case WM_INITDIALOG:
Ret = TRUE;
break;
}
return Ret;
}
@ -230,7 +230,7 @@ CustomControlInfoW(OUT LPCUSTOM_CONTROL_INFO CustomControlInfo OPTIONAL)
ClbClassName);
CustomControlInfo->Zero1 = 0;
wcscpy(CustomControlInfo->ClassName2,
ClbClassName);
@ -240,15 +240,15 @@ CustomControlInfoW(OUT LPCUSTOM_CONTROL_INFO CustomControlInfo OPTIONAL)
CustomControlInfo->Zero2 = 0;
CustomControlInfo->Zero3 = 0;
CustomControlInfo->StylesCount = sizeof(ClbsSupportedStyles) / sizeof(ClbsSupportedStyles[0]);
CustomControlInfo->SupportedStyles = ClbsSupportedStyles;
wcscpy(CustomControlInfo->Columns,
ClbColumns);
CustomControlInfo->ClbStyleW = ClbStyleW;
CustomControlInfo->Zero4 = 0;
CustomControlInfo->Zero5 = 0;
CustomControlInfo->Zero6 = 0;
@ -267,43 +267,43 @@ DllMain(IN HINSTANCE hinstDLL,
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
{
WNDCLASS ClbWndClass;
case DLL_PROCESS_ATTACH:
{
WNDCLASS ClbWndClass;
hDllInstance = hinstDLL;
InitCommonControls();
/* register the control's window class */
ClbWndClass.style = CS_GLOBALCLASS | CS_OWNDC;
ClbWndClass.lpfnWndProc = ClbWndProc;
ClbWndClass.cbClsExtra = 0;
ClbWndClass.cbWndExtra = sizeof(PCLB_PRIVATEDATA);
ClbWndClass.hInstance = hinstDLL,
ClbWndClass.hIcon = NULL;
ClbWndClass.hCursor = LoadCursor(NULL,
(LPWSTR)IDC_ARROW);
ClbWndClass.hbrBackground = NULL;
ClbWndClass.lpszMenuName = NULL;
ClbWndClass.lpszClassName = ClbClassName;
if (!RegisterClass(&ClbWndClass))
{
Ret = FALSE;
break;
}
hDllInstance = hinstDLL;
InitCommonControls();
/* register the control's window class */
ClbWndClass.style = CS_GLOBALCLASS | CS_OWNDC;
ClbWndClass.lpfnWndProc = ClbWndProc;
ClbWndClass.cbClsExtra = 0;
ClbWndClass.cbWndExtra = sizeof(PCLB_PRIVATEDATA);
ClbWndClass.hInstance = hinstDLL,
ClbWndClass.hIcon = NULL;
ClbWndClass.hCursor = LoadCursor(NULL,
(LPWSTR)IDC_ARROW);
ClbWndClass.hbrBackground = NULL;
ClbWndClass.lpszMenuName = NULL;
ClbWndClass.lpszClassName = ClbClassName;
if (!RegisterClass(&ClbWndClass))
{
Ret = FALSE;
break;
}
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
UnregisterClass(ClbClassName,
hinstDLL);
break;
case DLL_PROCESS_DETACH:
UnregisterClass(ClbClassName,
hinstDLL);
break;
}
return Ret;
}

View file

@ -22,8 +22,8 @@
typedef enum _EDIT_MODE
{
EDIT_MODE_DEC,
EDIT_MODE_HEX
EDIT_MODE_DEC,
EDIT_MODE_HEX
} EDIT_MODE;
@ -96,17 +96,18 @@ INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
UNREFERENCED_PARAMETER(lParam);
switch(uMsg) {
switch(uMsg)
{
case WM_INITDIALOG:
if(editValueName && _tcscmp(editValueName, _T("")))
{
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
}
SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData);
SetFocus(GetDlgItem(hwndDlg, IDC_VALUE_DATA));
@ -140,8 +141,8 @@ INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
}
else
{
if (stringValueData)
*stringValueData = 0;
if (stringValueData)
*stringValueData = 0;
}
}
EndDialog(hwndDlg, IDOK);
@ -163,17 +164,18 @@ INT_PTR CALLBACK modify_multi_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wPa
UNREFERENCED_PARAMETER(lParam);
switch(uMsg) {
switch(uMsg)
{
case WM_INITDIALOG:
if(editValueName && _tcscmp(editValueName, _T("")))
{
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
}
SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData);
SetFocus(GetDlgItem(hwndDlg, IDC_VALUE_DATA));
@ -207,8 +209,8 @@ INT_PTR CALLBACK modify_multi_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wPa
}
else
{
if (stringValueData)
*stringValueData = 0;
if (stringValueData)
*stringValueData = 0;
}
}
EndDialog(hwndDlg, IDOK);
@ -274,7 +276,8 @@ INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP
UNREFERENCED_PARAMETER(lParam);
switch(uMsg) {
switch(uMsg)
{
case WM_INITDIALOG:
dwordEditMode = EDIT_MODE_HEX;
@ -290,9 +293,9 @@ INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP
}
else
{
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
}
CheckRadioButton (hwndDlg, IDC_FORMAT_HEX, IDC_FORMAT_DEC, IDC_FORMAT_HEX);
_stprintf (ValueString, _T("%lx"), dwordValueData);
@ -359,8 +362,8 @@ INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP
}
else
{
EndDialog(hwndDlg, IDCANCEL);
return TRUE;
EndDialog(hwndDlg, IDCANCEL);
return TRUE;
}
}
EndDialog(hwndDlg, IDOK);
@ -382,17 +385,18 @@ INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
UNREFERENCED_PARAMETER(lParam);
switch(uMsg) {
switch(uMsg)
{
case WM_INITDIALOG:
if(editValueName && _tcscmp(editValueName, _T("")))
{
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
TCHAR buffer[255];
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
}
hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA);
HexEdit_LoadBuffer(hwndValue, binValueData, valueDataLen);
@ -408,9 +412,9 @@ INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
{
len = (UINT) HexEdit_GetBufferSize(hwndValue);
if (len > 0 && binValueData)
binValueData = HeapReAlloc(GetProcessHeap(), 0, binValueData, len);
binValueData = HeapReAlloc(GetProcessHeap(), 0, binValueData, len);
else
binValueData = HeapAlloc(GetProcessHeap(), 0, len + 1);
binValueData = HeapAlloc(GetProcessHeap(), 0, len + 1);
HexEdit_CopyBuffer(hwndValue, binValueData, len);
valueDataLen = len;
}
@ -439,11 +443,11 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
lRet = RegQueryValueEx(hKey, valueName, 0, &type, 0, &valueDataLen);
if (lRet != ERROR_SUCCESS && (!_tcscmp(valueName, _T("")) || valueName == NULL))
{
lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
type = REG_SZ;
valueDataLen = 0;
stringValueData = NULL;
binValueData = NULL;
lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
type = REG_SZ;
valueDataLen = 0;
stringValueData = NULL;
binValueData = NULL;
}
if (lRet != ERROR_SUCCESS)
@ -494,7 +498,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
size_t llen, listlen, nl_len;
LPTSTR src, lines = NULL;
if (!(stringValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen)))
if (!(stringValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen)))
{
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;
@ -506,7 +510,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
goto done;
}
/* convert \0 to \r\n */
/* convert \0 to \r\n */
src = stringValueData;
nl_len = _tcslen(_T("\r\n")) * sizeof(TCHAR);
listlen = sizeof(TCHAR);
@ -515,12 +519,12 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
{
llen = _tcslen(src);
if(llen == 0)
break;
break;
listlen += (llen * sizeof(TCHAR)) + nl_len;
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, listlen);
_tcscat(lines, src);
_tcscat(lines, _T("\r\n"));
src += llen + 1;
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, listlen);
_tcscat(lines, src);
_tcscat(lines, _T("\r\n"));
src += llen + 1;
}
HeapFree(GetProcessHeap(), 0, stringValueData);
stringValueData = lines;
@ -552,7 +556,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
if(nl == src)
{
EmptyLines = TRUE;
src = nl + c_nl;
src = nl + c_nl;
continue;
}
}
@ -562,7 +566,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
}
if(linechars > 0)
{
buflen += ((linechars + 1) * sizeof(TCHAR));
buflen += ((linechars + 1) * sizeof(TCHAR));
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, buflen);
memcpy((lines + dest), src, linechars * sizeof(TCHAR));
dest += linechars;
@ -581,8 +585,8 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
warning(hwnd, IDS_MULTI_SZ_EMPTY_STRING);
}
lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
HeapFree(GetProcessHeap(), 0, lines);
lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
HeapFree(GetProcessHeap(), 0, lines);
}
else
{
@ -614,44 +618,44 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
LPWSTR u_valuename;
int len_vname = lstrlen(valueName);
if(len_vname > 0)
if(len_vname > 0)
{
if(!(u_valuename = HeapAlloc(GetProcessHeap(), 0, (len_vname + 1) * sizeof(WCHAR))))
{
error(hwnd, IDS_TOO_BIG_VALUE, len_vname);
goto done;
}
/* convert the ansi value name to an unicode string */
MultiByteToWideChar(CP_ACP, 0, valueName, -1, u_valuename, len_vname + 1);
valueDataLen *= sizeof(WCHAR);
if(!(u_valuename = HeapAlloc(GetProcessHeap(), 0, (len_vname + 1) * sizeof(WCHAR))))
{
error(hwnd, IDS_TOO_BIG_VALUE, len_vname);
goto done;
}
/* convert the ansi value name to an unicode string */
MultiByteToWideChar(CP_ACP, 0, valueName, -1, u_valuename, len_vname + 1);
valueDataLen *= sizeof(WCHAR);
}
else
u_valuename = L"";
u_valuename = L"";
#endif
if(valueDataLen > 0)
if(valueDataLen > 0)
{
if(!(binValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + 1)))
if(!(binValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + 1)))
{
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;
}
/* force to use the unicode version, so editing strings in binary mode is correct */
lRet = RegQueryValueExW(hKey,
/* force to use the unicode version, so editing strings in binary mode is correct */
lRet = RegQueryValueExW(hKey,
#ifndef UNICODE
u_valuename,
u_valuename,
#else
valueName,
valueName,
#endif
0, 0, (LPBYTE)binValueData, &valueDataLen);
0, 0, (LPBYTE)binValueData, &valueDataLen);
if (lRet != ERROR_SUCCESS)
{
HeapFree(GetProcessHeap(), 0, binValueData);
#ifndef UNICODE
if(len_vname > 0)
HeapFree(GetProcessHeap(), 0, u_valuename);
HeapFree(GetProcessHeap(), 0, u_valuename);
#endif
error(hwnd, IDS_BAD_VALUE, valueName);
error(hwnd, IDS_BAD_VALUE, valueName);
goto done;
}
}
@ -662,22 +666,22 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_BIN_DATA), hwnd, modify_binary_dlgproc) == IDOK)
{
/* force to use the unicode version, so editing strings in binary mode is correct */
lRet = RegSetValueExW(hKey,
/* force to use the unicode version, so editing strings in binary mode is correct */
lRet = RegSetValueExW(hKey,
#ifndef UNICODE
u_valuename,
u_valuename,
#else
valueName,
valueName,
#endif
0, type, (LPBYTE)binValueData, valueDataLen);
0, type, (LPBYTE)binValueData, valueDataLen);
if (lRet == ERROR_SUCCESS)
result = TRUE;
}
if(binValueData != NULL)
HeapFree(GetProcessHeap(), 0, binValueData);
HeapFree(GetProcessHeap(), 0, binValueData);
#ifndef UNICODE
if(len_vname > 0)
HeapFree(GetProcessHeap(), 0, u_valuename);
HeapFree(GetProcessHeap(), 0, u_valuename);
#endif
}
else
@ -717,7 +721,7 @@ static LONG CopyKey(HKEY hDestKey, LPCTSTR lpDestSubKey, HKEY hSrcKey, LPCTSTR l
/* create the destination subkey */
lResult = RegCreateKeyEx(hDestKey, lpDestSubKey, 0, NULL, 0, KEY_WRITE, NULL,
&hDestSubKey, &dwDisposition);
&hDestSubKey, &dwDisposition);
if (lResult)
goto done;
@ -786,9 +790,10 @@ BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
HKEY hKey;
lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
if (lRet != ERROR_SUCCESS) {
error_code_messagebox(hwnd, lRet);
return FALSE;
if (lRet != ERROR_SUCCESS)
{
error_code_messagebox(hwnd, lRet);
return FALSE;
}
LoadString(hInst, IDS_QUERY_DELETE_KEY_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR));
@ -798,9 +803,10 @@ BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
goto done;
lRet = SHDeleteKey(hKeyRoot, keyPath);
if (lRet != ERROR_SUCCESS) {
error(hwnd, IDS_BAD_KEY, keyPath);
goto done;
if (lRet != ERROR_SUCCESS)
{
error(hwnd, IDS_BAD_KEY, keyPath);
goto done;
}
result = TRUE;

View file

@ -101,10 +101,10 @@ CompareData(
{
if (s_dwFlags & RSF_MATCHCASE)
return 2 == CompareString(LOCALE_SYSTEM_DEFAULT, 0,
psz1, cch1, psz2, cch2);
psz1, cch1, psz2, cch2);
else
return 2 == CompareString(LOCALE_SYSTEM_DEFAULT,
NORM_IGNORECASE, psz1, cch1, psz2, cch2);
return 2 == CompareString(LOCALE_SYSTEM_DEFAULT,
NORM_IGNORECASE, psz1, cch1, psz2, cch2);
}
for(i = 0; i <= cch1 - cch2; i++)
@ -112,13 +112,13 @@ CompareData(
if (s_dwFlags & RSF_MATCHCASE)
{
if (2 == CompareString(LOCALE_SYSTEM_DEFAULT, 0,
psz1 + i, cch2, psz2, cch2))
psz1 + i, cch2, psz2, cch2))
return TRUE;
}
else
{
if (2 == CompareString(LOCALE_SYSTEM_DEFAULT,
NORM_IGNORECASE, psz1 + i, cch2, psz2, cch2))
NORM_IGNORECASE, psz1 + i, cch2, psz2, cch2))
return TRUE;
}
}
@ -134,7 +134,7 @@ int compare(const void *x, const void *y)
}
BOOL RegFindRecurse(
HKEY hKey,
HKEY hKey,
LPCTSTR pszSubKey,
LPCTSTR pszValueName,
LPTSTR *ppszFoundSubKey,
@ -162,7 +162,7 @@ BOOL RegFindRecurse(
pszValueName = s_empty;
lResult = RegQueryInfoKey(hSubKey, NULL, NULL, NULL, NULL, NULL, NULL,
&c, NULL, NULL, NULL, NULL);
&c, NULL, NULL, NULL, NULL);
if (lResult != ERROR_SUCCESS)
goto err;
ppszNames = (LPTSTR *) malloc(c * sizeof(LPTSTR));
@ -176,7 +176,7 @@ BOOL RegFindRecurse(
goto err;
s_cbName = MAX_PATH * sizeof(TCHAR);
lResult = RegEnumValue(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
lResult = RegEnumValue(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
NULL, &cb);
if (lResult == ERROR_NO_MORE_ITEMS)
{
@ -206,8 +206,8 @@ BOOL RegFindRecurse(
if (!fPast)
continue;
if ((s_dwFlags & RSF_LOOKATVALUES) &&
CompareName(ppszNames[i], s_szFindWhat))
if ((s_dwFlags & RSF_LOOKATVALUES) &&
CompareName(ppszNames[i], s_szFindWhat))
{
*ppszFoundSubKey = _tcsdup(szSubKey);
if (ppszNames[i][0] == 0)
@ -218,19 +218,19 @@ BOOL RegFindRecurse(
}
lResult = RegQueryValueEx(hSubKey, ppszNames[i], NULL, &type,
NULL, &cb);
NULL, &cb);
if (lResult != ERROR_SUCCESS)
goto err;
pb = malloc(cb);
if (pb == NULL)
goto err;
lResult = RegQueryValueEx(hSubKey, ppszNames[i], NULL, &type,
pb, &cb);
pb, &cb);
if (lResult != ERROR_SUCCESS)
goto err;
if ((s_dwFlags & RSF_LOOKATDATA) &&
CompareData(type, (LPTSTR) pb, s_szFindWhat))
if ((s_dwFlags & RSF_LOOKATDATA) &&
CompareData(type, (LPTSTR) pb, s_szFindWhat))
{
*ppszFoundSubKey = _tcsdup(szSubKey);
if (ppszNames[i][0] == 0)
@ -252,7 +252,7 @@ BOOL RegFindRecurse(
ppszNames = NULL;
lResult = RegQueryInfoKey(hSubKey, NULL, NULL, NULL, &c, NULL, NULL,
NULL, NULL, NULL, NULL, NULL);
NULL, NULL, NULL, NULL, NULL);
if (lResult != ERROR_SUCCESS)
goto err;
ppszNames = (LPTSTR *) malloc(c * sizeof(LPTSTR));
@ -266,7 +266,7 @@ BOOL RegFindRecurse(
goto err;
s_cbName = MAX_PATH * sizeof(TCHAR);
lResult = RegEnumKeyEx(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
lResult = RegEnumKeyEx(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
NULL, NULL);
if (lResult == ERROR_NO_MORE_ITEMS)
{
@ -289,11 +289,11 @@ BOOL RegFindRecurse(
goto err;
if ((s_dwFlags & RSF_LOOKATKEYS) &&
CompareName(ppszNames[i], s_szFindWhat))
CompareName(ppszNames[i], s_szFindWhat))
{
*ppszFoundSubKey = malloc(
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
sizeof(TCHAR));
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
sizeof(TCHAR));
if (*ppszFoundSubKey == NULL)
goto err;
if (szSubKey[0])
@ -313,7 +313,7 @@ BOOL RegFindRecurse(
{
LPTSTR psz = *ppszFoundSubKey;
*ppszFoundSubKey = malloc(
(lstrlen(szSubKey) + lstrlen(psz) + 2) * sizeof(TCHAR));
(lstrlen(szSubKey) + lstrlen(psz) + 2) * sizeof(TCHAR));
if (*ppszFoundSubKey == NULL)
goto err;
if (szSubKey[0])
@ -352,7 +352,7 @@ success:
}
BOOL RegFindWalk(
HKEY * phKey,
HKEY * phKey,
LPCTSTR pszSubKey,
LPCTSTR pszValueName,
LPTSTR *ppszFoundSubKey,
@ -393,13 +393,13 @@ BOOL RegFindWalk(
lstrcpyn(szKeyName, pch + 1, MAX_PATH);
*pch = 0;
lResult = RegOpenKeyEx(hBaseKey, szSubKey, 0, KEY_ALL_ACCESS,
&hSubKey);
&hSubKey);
if (lResult != ERROR_SUCCESS)
return FALSE;
}
lResult = RegQueryInfoKey(hSubKey, NULL, NULL, NULL, &c, NULL, NULL,
NULL, NULL, NULL, NULL, NULL);
NULL, NULL, NULL, NULL, NULL);
if (lResult != ERROR_SUCCESS)
goto err;
@ -415,7 +415,7 @@ BOOL RegFindWalk(
s_cbName = MAX_PATH * sizeof(TCHAR);
lResult = RegEnumKeyExW(hSubKey, i, s_szName, &s_cbName,
NULL, NULL, NULL, NULL);
NULL, NULL, NULL, NULL);
if (lResult == ERROR_NO_MORE_ITEMS)
{
c = i;
@ -443,11 +443,11 @@ BOOL RegFindWalk(
continue;
if ((s_dwFlags & RSF_LOOKATKEYS) &&
CompareName(ppszNames[i], s_szFindWhat))
CompareName(ppszNames[i], s_szFindWhat))
{
*ppszFoundSubKey = malloc(
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
sizeof(TCHAR));
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
sizeof(TCHAR));
if (*ppszFoundSubKey == NULL)
goto err;
if (szSubKey[0])
@ -462,13 +462,13 @@ BOOL RegFindWalk(
goto success;
}
if (RegFindRecurse(hSubKey, ppszNames[i], NULL,
if (RegFindRecurse(hSubKey, ppszNames[i], NULL,
ppszFoundSubKey, ppszFoundValueName))
{
LPTSTR psz = *ppszFoundSubKey;
*ppszFoundSubKey = malloc(
(lstrlen(szSubKey) + lstrlen(psz) + 2) *
sizeof(TCHAR));
(lstrlen(szSubKey) + lstrlen(psz) + 2) *
sizeof(TCHAR));
if (*ppszFoundSubKey == NULL)
goto err;
if (szSubKey[0])
@ -605,23 +605,23 @@ static INT_PTR CALLBACK AbortFindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam,
switch(uMsg)
{
case WM_CLOSE:
s_bAbort = TRUE;
break;
case WM_CLOSE:
s_bAbort = TRUE;
break;
case WM_COMMAND:
switch(HIWORD(wParam))
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDCANCEL:
s_bAbort = TRUE;
break;
}
break;
case IDCANCEL:
s_bAbort = TRUE;
break;
}
break;
}
break;
}
return 0;
}
@ -652,7 +652,7 @@ BOOL FindNext(HWND hWnd)
/* Create abort find dialog */
s_hwndAbortDialog = CreateDialog(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_FINDING), hWnd, AbortFindDialogProc);
MAKEINTRESOURCE(IDD_FINDING), hWnd, AbortFindDialogProc);
if (s_hwndAbortDialog)
{
ShowWindow(s_hwndAbortDialog, SW_SHOW);
@ -667,7 +667,7 @@ BOOL FindNext(HWND hWnd)
EnableWindow(g_pChildWnd->hListWnd, FALSE);
EnableWindow(g_pChildWnd->hAddressBarWnd, FALSE);
fSuccess = RegFindWalk(&hKeyRoot, pszKeyPath, pszValueName,
fSuccess = RegFindWalk(&hKeyRoot, pszKeyPath, pszValueName,
&pszFoundSubKey, &pszFoundValueName);
EnableWindow(hFrameWnd, TRUE);
@ -703,107 +703,107 @@ static INT_PTR CALLBACK FindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPAR
switch(uMsg)
{
case WM_INITDIALOG:
dwFlags = GetFindFlags();
case WM_INITDIALOG:
dwFlags = GetFindFlags();
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATKEYS) ? TRUE : FALSE, 0);
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATKEYS) ? TRUE : FALSE, 0);
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATVALUES) ? TRUE : FALSE, 0);
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATVALUES) ? TRUE : FALSE, 0);
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATDATA) ? TRUE : FALSE, 0);
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATDATA) ? TRUE : FALSE, 0);
/* Match whole string */
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_WHOLESTRING) ? TRUE : FALSE, 0);
/* Match whole string */
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_WHOLESTRING) ? TRUE : FALSE, 0);
/* Case sensitivity */
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_MATCHCASE) ? TRUE : FALSE, 0);
/* Case sensitivity */
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
if (hControl)
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_MATCHCASE) ? TRUE : FALSE, 0);
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
if (hControl)
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
if (hControl)
{
SetWindowText(hControl, s_szSavedFindValue);
SetFocus(hControl);
SendMessage(hControl, EM_SETSEL, 0, -1);
}
break;
case WM_CLOSE:
EndDialog(hDlg, 0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
SetWindowText(hControl, s_szSavedFindValue);
SetFocus(hControl);
SendMessage(hControl, EM_SETSEL, 0, -1);
case IDOK:
dwFlags = 0;
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_LOOKATKEYS;
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_LOOKATVALUES;
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_LOOKATDATA;
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_WHOLESTRING;
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_MATCHCASE;
SetFindFlags(dwFlags);
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
if (hControl)
GetWindowText(hControl, s_szFindWhat, sizeof(s_szFindWhat) / sizeof(s_szFindWhat[0]));
EndDialog(hDlg, 1);
break;
case IDCANCEL:
EndDialog(hDlg, 0);
break;
}
break;
case WM_CLOSE:
EndDialog(hDlg, 0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
case EN_CHANGE:
switch(LOWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDOK:
dwFlags = 0;
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_LOOKATKEYS;
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_LOOKATVALUES;
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_LOOKATDATA;
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_WHOLESTRING;
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
dwFlags |= RSF_MATCHCASE;
SetFindFlags(dwFlags);
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
if (hControl)
GetWindowText(hControl, s_szFindWhat, sizeof(s_szFindWhat) / sizeof(s_szFindWhat[0]));
EndDialog(hDlg, 1);
break;
case IDCANCEL:
EndDialog(hDlg, 0);
break;
}
break;
case EN_CHANGE:
switch(LOWORD(wParam))
{
case IDC_FINDWHAT:
GetWindowText((HWND) lParam, s_szSavedFindValue, sizeof(s_szSavedFindValue) / sizeof(s_szSavedFindValue[0]));
hControl = GetDlgItem(hDlg, IDOK);
if (hControl)
{
lStyle = GetWindowLongPtr(hControl, GWL_STYLE);
if (s_szSavedFindValue[0])
lStyle &= ~WS_DISABLED;
else
lStyle |= WS_DISABLED;
SetWindowLongPtr(hControl, GWL_STYLE, lStyle);
RedrawWindow(hControl, NULL, NULL, RDW_INVALIDATE);
}
break;
}
case IDC_FINDWHAT:
GetWindowText((HWND) lParam, s_szSavedFindValue, sizeof(s_szSavedFindValue) / sizeof(s_szSavedFindValue[0]));
hControl = GetDlgItem(hDlg, IDOK);
if (hControl)
{
lStyle = GetWindowLongPtr(hControl, GWL_STYLE);
if (s_szSavedFindValue[0])
lStyle &= ~WS_DISABLED;
else
lStyle |= WS_DISABLED;
SetWindowLongPtr(hControl, GWL_STYLE, lStyle);
RedrawWindow(hControl, NULL, NULL, RDW_INVALIDATE);
}
break;
}
break;
}
break;
}
return iResult;
}
@ -811,15 +811,15 @@ static INT_PTR CALLBACK FindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPAR
void FindDialog(HWND hWnd)
{
if (DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_FIND),
hWnd, FindDialogProc, 0) != 0)
hWnd, FindDialogProc, 0) != 0)
{
if (!FindNext(hWnd))
{
TCHAR msg[128], caption[128];
TCHAR msg[128], caption[128];
LoadString(hInst, IDS_FINISHEDFIND, msg, sizeof(msg)/sizeof(TCHAR));
LoadString(hInst, IDS_APP_TITLE, caption, sizeof(caption)/sizeof(TCHAR));
MessageBox(0, msg, caption, MB_ICONINFORMATION);
LoadString(hInst, IDS_FINISHEDFIND, msg, sizeof(msg)/sizeof(TCHAR));
LoadString(hInst, IDS_APP_TITLE, caption, sizeof(caption)/sizeof(TCHAR));
MessageBox(0, msg, caption, MB_ICONINFORMATION);
}
}
}

View file

@ -45,7 +45,8 @@ static void resize_frame_rect(HWND hWnd, PRECT prect)
prect->bottom -= rt.bottom+3;
}
*/
if (IsWindowVisible(hStatusBar)) {
if (IsWindowVisible(hStatusBar))
{
SetupStatusBar(hWnd, TRUE);
GetClientRect(hStatusBar, &rt);
prect->bottom -= rt.bottom;
@ -141,12 +142,15 @@ static void OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
TCHAR str[100];
_tcscpy(str, _T(""));
if (nFlags & MF_POPUP) {
if (hSysMenu != GetMenu(hWnd)) {
if (nFlags & MF_POPUP)
{
if (hSysMenu != GetMenu(hWnd))
{
if (nItemID == 2) nItemID = 5;
}
}
if (LoadString(hInst, nItemID, str, 100)) {
if (LoadString(hInst, nItemID, str, 100))
{
/* load appropriate string*/
LPTSTR lpsz = str;
/* first newline terminates actual string*/
@ -171,8 +175,8 @@ void SetupStatusBar(HWND hWnd, BOOL bResize)
void UpdateStatusBar(void)
{
NMHDR nmhdr;
ZeroMemory(&nmhdr, sizeof(NMHDR));
NMHDR nmhdr;
ZeroMemory(&nmhdr, sizeof(NMHDR));
nmhdr.code = TVN_SELCHANGED;
SendMessage(g_pChildWnd->hWnd, WM_NOTIFY, (WPARAM)TREE_WINDOW, (LPARAM)&nmhdr);
}
@ -191,7 +195,8 @@ static BOOL CheckCommDlgError(HWND hWnd)
{
DWORD dwErrorCode = CommDlgExtendedError();
UNREFERENCED_PARAMETER(hWnd);
switch (dwErrorCode) {
switch (dwErrorCode)
{
case CDERR_DIALOGFAILURE:
break;
case CDERR_FINDRESFAILURE:
@ -233,24 +238,24 @@ TCHAR FileTitleBuffer[_MAX_PATH];
typedef struct
{
UINT DisplayID;
UINT FilterID;
UINT DisplayID;
UINT FilterID;
} FILTERPAIR, *PFILTERPAIR;
void
BuildFilterStrings(TCHAR *Filter, PFILTERPAIR Pairs, int PairCount)
{
int i, c;
int i, c;
c = 0;
for(i = 0; i < PairCount; i++)
{
c += LoadString(hInst, Pairs[i].DisplayID, &Filter[c], 255 * sizeof(TCHAR));
c = 0;
for(i = 0; i < PairCount; i++)
{
c += LoadString(hInst, Pairs[i].DisplayID, &Filter[c], 255 * sizeof(TCHAR));
Filter[++c] = '\0';
c += LoadString(hInst, Pairs[i].FilterID, &Filter[c], 255 * sizeof(TCHAR));
Filter[++c] = '\0';
}
Filter[++c] = '\0';
c += LoadString(hInst, Pairs[i].FilterID, &Filter[c], 255 * sizeof(TCHAR));
Filter[++c] = '\0';
}
Filter[++c] = '\0';
}
static BOOL InitOpenFileName(HWND hWnd, OPENFILENAME* pofn)
@ -288,18 +293,18 @@ static INT_PTR CALLBACK LoadHive_KeyNameInHookProc(HWND hWndDlg, UINT uMsg, WPAR
static INT sLength = 0;
switch(uMsg)
{
case WM_INITDIALOG:
case WM_INITDIALOG:
sKey = (LPTSTR)lParam;
sLength = 128; /* FIXME: Ugly hack! */
case WM_COMMAND:
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDOK:
if(GetDlgItemText(hWndDlg, IDC_EDIT_KEY, sKey, sLength))
return EndDialog(hWndDlg, -1);
else
return EndDialog(hWndDlg, 0);
case IDCANCEL:
case IDCANCEL:
return EndDialog(hWndDlg, 0);
}
break;
@ -349,7 +354,9 @@ static BOOL LoadHive(HWND hWnd)
return FALSE;
}
}
} else {
}
else
{
CheckCommDlgError(hWnd);
}
return TRUE;
@ -395,9 +402,11 @@ static BOOL ImportRegistryFile(HWND hWnd)
ofn.lpstrTitle = Caption;
ofn.Flags |= OFN_ENABLESIZING;
/* ofn.lCustData = ;*/
if (GetOpenFileName(&ofn)) {
if (GetOpenFileName(&ofn))
{
FILE *fp = _wfopen(ofn.lpstrFile, L"r");
if (fp == NULL || !import_registry_file(fp)) {
if (fp == NULL || !import_registry_file(fp))
{
LPSTR p = GetMultiByteString(ofn.lpstrFile);
fprintf(stderr, "Can't open file \"%s\"\n", p);
HeapFree(GetProcessHeap(), 0, p);
@ -406,7 +415,9 @@ static BOOL ImportRegistryFile(HWND hWnd)
return FALSE;
}
fclose(fp);
} else {
}
else
{
CheckCommDlgError(hWnd);
}
@ -429,8 +440,9 @@ static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, W
UNREFERENCED_PARAMETER(wParam);
switch(uiMsg) {
case WM_INITDIALOG:
switch(uiMsg)
{
case WM_INITDIALOG:
pOfn = (OPENFILENAME *) lParam;
pszSelectedKey = (LPTSTR) pOfn->lCustData;
@ -447,7 +459,7 @@ static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, W
SetWindowText(hwndExportBranchText, pszSelectedKey);
break;
case WM_NOTIFY:
case WM_NOTIFY:
if (((NMHDR *) lParam)->code == CDN_FILEOK)
{
pOfnNotify = (OFNOTIFY *) lParam;
@ -456,15 +468,15 @@ static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, W
hwndExportBranch = GetDlgItem(hdlg, IDC_EXPORT_BRANCH);
hwndExportBranchText = GetDlgItem(hdlg, IDC_EXPORT_BRANCH_TEXT);
if (hwndExportBranch && hwndExportBranchText
&& (SendMessage(hwndExportBranch, BM_GETCHECK, 0, 0) == BST_CHECKED))
{
GetWindowText(hwndExportBranchText, pszSelectedKey, _MAX_PATH);
}
else
{
pszSelectedKey[0] = '\0';
}
}
&& (SendMessage(hwndExportBranch, BM_GETCHECK, 0, 0) == BST_CHECKED))
{
GetWindowText(hwndExportBranchText, pszSelectedKey, _MAX_PATH);
}
else
{
pszSelectedKey[0] = '\0';
}
}
break;
}
return iResult;
@ -494,7 +506,8 @@ BOOL ExportRegistryFile(HWND hWnd)
ofn.Flags = OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT;
ofn.lpfnHook = ExportRegistryFile_OFNHookProc;
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_EXPORTRANGE);
if (GetSaveFileName(&ofn)) {
if (GetSaveFileName(&ofn))
{
BOOL result;
DWORD format;
@ -503,13 +516,16 @@ BOOL ExportRegistryFile(HWND hWnd)
else
format = REG_FORMAT_4;
result = export_registry_key(ofn.lpstrFile, ExportKeyPath, format);
if (!result) {
if (!result)
{
LPSTR p = GetMultiByteString(ofn.lpstrFile);
fprintf(stderr, "Can't open file \"%s\"\n", p);
HeapFree(GetProcessHeap(), 0, p);
return FALSE;
}
} else {
}
else
{
CheckCommDlgError(hWnd);
}
return TRUE;
@ -532,7 +548,8 @@ BOOL PrintRegistryHive(HWND hWnd, LPTSTR path)
pd.nToPage = 0xFFFF;
pd.nMinPage = 1;
pd.nMaxPage = 0xFFFF;
if (PrintDlg(&pd)) {
if (PrintDlg(&pd))
{
/* GDI calls to render output. */
DeleteDC(pd.hDC); /* Delete DC when done.*/
}
@ -541,8 +558,10 @@ BOOL PrintRegistryHive(HWND hWnd, LPTSTR path)
PRINTDLGEX pd;
hResult = PrintDlgEx(&pd);
if (hResult == S_OK) {
switch (pd.dwResultAction) {
if (hResult == S_OK)
{
switch (pd.dwResultAction)
{
case PD_RESULT_APPLY:
/*The user clicked the Apply button and later clicked the Cancel button. This indicates that the user wants to apply the changes made in the property sheet, but does not yet want to print. The PRINTDLGEX structure contains the information specified by the user at the time the Apply button was clicked. */
break;
@ -555,8 +574,11 @@ BOOL PrintRegistryHive(HWND hWnd, LPTSTR path)
default:
break;
}
} else {
switch (hResult) {
}
else
{
switch (hResult)
{
case E_OUTOFMEMORY:
/*Insufficient memory. */
break;
@ -664,9 +686,11 @@ static BOOL CreateNewValue(HKEY hRootKey, LPCTSTR pszKeyPath, DWORD dwType)
wsprintf(szNewValue, szNewValueFormat, iIndex++);
cbData = sizeof(data);
lResult = RegQueryValueEx(hKey, szNewValue, NULL, &dwExistingType, data, &cbData);
} while(lResult == ERROR_SUCCESS);
}
while(lResult == ERROR_SUCCESS);
switch(dwType) {
switch(dwType)
{
case REG_DWORD:
cbData = sizeof(DWORD);
break;
@ -725,9 +749,9 @@ InitializeRemoteRegistryPicker(OUT IDsObjectPicker **pDsObjectPicker)
{
sizeof(DSOP_SCOPE_INIT_INFO),
DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE | DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE |
DSOP_SCOPE_TYPE_GLOBAL_CATALOG | DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN |
DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN | DSOP_SCOPE_TYPE_WORKGROUP |
DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN | DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN,
DSOP_SCOPE_TYPE_GLOBAL_CATALOG | DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN |
DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN | DSOP_SCOPE_TYPE_WORKGROUP |
DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN | DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN,
0,
{
{
@ -752,7 +776,7 @@ InitializeRemoteRegistryPicker(OUT IDsObjectPicker **pDsObjectPicker)
InitInfo.apwzAttributeNames = NULL;
hRet = (*pDsObjectPicker)->lpVtbl->Initialize(*pDsObjectPicker,
&InitInfo);
&InitInfo);
if (FAILED(hRet))
{
@ -774,8 +798,8 @@ InvokeRemoteRegistryPickerDialog(IN IDsObjectPicker *pDsObjectPicker,
HRESULT hRet;
hRet = pDsObjectPicker->lpVtbl->InvokeDialog(pDsObjectPicker,
hwndParent,
&pdo);
hwndParent,
&pdo);
if (hRet == S_OK)
{
STGMEDIUM stm;
@ -857,7 +881,8 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(message);
switch (LOWORD(wParam)) {
switch (LOWORD(wParam))
{
case ID_REGISTRY_LOADHIVE:
LoadHive(hWnd);
return TRUE;
@ -926,9 +951,9 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
pts = pt;
if(ClientToScreen(g_pChildWnd->hWnd, &pts))
{
SetCursorPos(pts.x, pts.y);
SetCursor(LoadCursor(0, IDC_SIZEWE));
SendMessage(g_pChildWnd->hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(pt.x, pt.y));
SetCursorPos(pts.x, pts.y);
SetCursor(LoadCursor(0, IDC_SIZEWE));
SendMessage(g_pChildWnd->hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(pt.x, pt.y));
}
return TRUE;
}
@ -942,12 +967,14 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
valueName = GetValueName(g_pChildWnd->hListWnd, -1);
if (keyPath) {
if (keyPath)
{
lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, regsam, &hKey);
if (lRet != ERROR_SUCCESS) hKey = 0;
}
switch (LOWORD(wParam)) {
switch (LOWORD(wParam))
{
case ID_EDIT_MODIFY:
if (valueName && ModifyValue(hWnd, hKey, valueName, FALSE))
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
@ -980,49 +1007,49 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if (GetFocus() == g_pChildWnd->hListWnd)
{
UINT nSelected = ListView_GetSelectedCount(g_pChildWnd->hListWnd);
if(nSelected >= 1)
{
TCHAR msg[128], caption[128];
LoadString(hInst, IDS_QUERY_DELETE_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR));
LoadString(hInst, (nSelected == 1 ? IDS_QUERY_DELETE_ONE : IDS_QUERY_DELETE_MORE), msg, sizeof(msg)/sizeof(TCHAR));
if(MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) == IDYES)
UINT nSelected = ListView_GetSelectedCount(g_pChildWnd->hListWnd);
if(nSelected >= 1)
{
int ni, errs;
item = -1;
errs = 0;
while((ni = ListView_GetNextItem(g_pChildWnd->hListWnd, item, LVNI_SELECTED)) > -1)
{
valueName = GetValueName(g_pChildWnd->hListWnd, item);
if(RegDeleteValue(hKey, valueName) != ERROR_SUCCESS)
TCHAR msg[128], caption[128];
LoadString(hInst, IDS_QUERY_DELETE_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR));
LoadString(hInst, (nSelected == 1 ? IDS_QUERY_DELETE_ONE : IDS_QUERY_DELETE_MORE), msg, sizeof(msg)/sizeof(TCHAR));
if(MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) == IDYES)
{
errs++;
}
item = ni;
}
int ni, errs;
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
if(errs > 0)
{
LoadString(hInst, IDS_ERR_DELVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
LoadString(hInst, IDS_ERR_DELETEVALUE, msg, sizeof(msg)/sizeof(TCHAR));
MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONSTOP);
}
item = -1;
errs = 0;
while((ni = ListView_GetNextItem(g_pChildWnd->hListWnd, item, LVNI_SELECTED)) > -1)
{
valueName = GetValueName(g_pChildWnd->hListWnd, item);
if(RegDeleteValue(hKey, valueName) != ERROR_SUCCESS)
{
errs++;
}
item = ni;
}
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
if(errs > 0)
{
LoadString(hInst, IDS_ERR_DELVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
LoadString(hInst, IDS_ERR_DELETEVALUE, msg, sizeof(msg)/sizeof(TCHAR));
MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONSTOP);
}
}
}
}
}
else if (GetFocus() == g_pChildWnd->hTreeWnd)
{
if (keyPath == 0 || *keyPath == 0)
{
MessageBeep(MB_ICONHAND);
} else
if (DeleteKey(hWnd, hKeyRoot, keyPath))
{
DeleteNode(g_pChildWnd->hTreeWnd, 0);
RefreshTreeView(g_pChildWnd->hTreeWnd);
}
if (keyPath == 0 || *keyPath == 0)
{
MessageBeep(MB_ICONHAND);
}
else if (DeleteKey(hWnd, hKeyRoot, keyPath))
{
DeleteNode(g_pChildWnd->hTreeWnd, 0);
RefreshTreeView(g_pChildWnd->hTreeWnd);
}
}
break;
}
@ -1066,9 +1093,9 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
RefreshTreeView(g_pChildWnd->hTreeWnd);
/*RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, NULL); */
break;
/*case ID_OPTIONS_TOOLBAR:*/
/* toggle_child(hWnd, LOWORD(wParam), hToolBar);*/
/* break;*/
/*case ID_OPTIONS_TOOLBAR:*/
/* toggle_child(hWnd, LOWORD(wParam), hToolBar);*/
/* break;*/
case ID_EDIT_NEW_KEY:
CreateNewKey(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd));
break;
@ -1101,7 +1128,7 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
if(hKey)
RegCloseKey(hKey);
RegCloseKey(hKey);
return result;
}
@ -1118,7 +1145,8 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
switch (message)
{
case WM_CREATE:
CreateWindowEx(0, szChildClass, NULL, WS_CHILD | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,4 @@
//Íåäîâúðøåí
/*
* Regedit resources
*
@ -135,8 +136,8 @@ BEGIN
MENUITEM "&Íèçîâà ñòîéíîñò", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Äâîè÷íà ñòîéíîñò", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&Ñòîéíîñò íà äâîéíà äóìà", ID_EDIT_NEW_DWORDVALUE
MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE
MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
MENUITEM "&Ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_MULTISTRINGVALUE
MENUITEM "&Ðàçøèðèìà ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
END
END
POPUP ""
@ -149,8 +150,8 @@ BEGIN
MENUITEM "&Íèçîâà ñòîéíîñò", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Äâîè÷íà ñòîéíîñò", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&Ñòîéíîñò íà äâîéíà äóìà", ID_EDIT_NEW_DWORDVALUE
MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE
MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
MENUITEM "&Ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_MULTISTRINGVALUE
MENUITEM "&Ðàçøèðèìà ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
END
MENUITEM "&Òúðñåíå", ID_EDIT_FIND
MENUITEM SEPARATOR
@ -165,11 +166,11 @@ BEGIN
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM "Çà&ïîìíÿíå", ID_HEXEDIT_COPY
MENUITEM "&Ïîñòàâÿíå", ID_HEXEDIT_PASTE
MENUITEM "Èç&òðèâàíå", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
MENUITEM "Èçáîð íà âñè&÷êè", ID_HEXEDIT_SELECT_ALL
END
END
@ -182,10 +183,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
LTEXT "&Êëàâèø:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
DEFPUSHBUTTON "Äîáðå", IDOK, 140, 17, 50, 14
PUSHBUTTON "Îòêàç", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84

View file

@ -96,23 +96,23 @@ VOID SetValueName(HWND hwndLV, LPCTSTR pszValueName)
i = ListView_FindItem(hwndLV, -1, &fi);
}
ListView_SetItemState(hwndLV, i, LVIS_FOCUSED | LVIS_SELECTED,
LVIS_FOCUSED | LVIS_SELECTED);
LVIS_FOCUSED | LVIS_SELECTED);
iListViewSelect = i;
}
BOOL IsDefaultValue(HWND hwndLV, int i)
{
PLINE_INFO lineinfo;
LVITEM Item;
PLINE_INFO lineinfo;
LVITEM Item;
Item.mask = LVIF_PARAM;
Item.iItem = i;
if(ListView_GetItem(hwndLV, &Item))
{
lineinfo = (PLINE_INFO)Item.lParam;
return lineinfo && (!lineinfo->name || !_tcscmp(lineinfo->name, _T("")));
}
return FALSE;
Item.mask = LVIF_PARAM;
Item.iItem = i;
if(ListView_GetItem(hwndLV, &Item))
{
lineinfo = (PLINE_INFO)Item.lParam;
return lineinfo && (!lineinfo->name || !_tcscmp(lineinfo->name, _T("")));
}
return FALSE;
}
/*******************************************************************************
@ -129,7 +129,7 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB
linfo->val_len = dwCount;
if(dwCount > 0)
{
memcpy(&linfo[1], ValBuf, dwCount);
memcpy(&linfo[1], ValBuf, dwCount);
}
linfo->name = _tcsdup(Name);
@ -146,12 +146,12 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB
item.lParam = (LPARAM)linfo;
switch(dwValType)
{
case REG_SZ:
case REG_EXPAND_SZ:
case REG_MULTI_SZ:
case REG_SZ:
case REG_EXPAND_SZ:
case REG_MULTI_SZ:
item.iImage = Image_String;
break;
default:
default:
item.iImage = Image_Bin;
break;
}
@ -162,87 +162,90 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB
#endif
index = ListView_InsertItem(hwndLV, &item);
if (index != -1) {
switch (dwValType) {
if (index != -1)
{
switch (dwValType)
{
case REG_SZ:
case REG_EXPAND_SZ:
if(dwCount > 0)
{
ListView_SetItemText(hwndLV, index, 2, ValBuf);
ListView_SetItemText(hwndLV, index, 2, ValBuf);
}
else if(!ValExists)
{
TCHAR buffer[255];
/* load (value not set) string */
LoadString(hInst, IDS_VALUE_NOT_SET, buffer, sizeof(buffer)/sizeof(TCHAR));
ListView_SetItemText(hwndLV, index, 2, buffer);
TCHAR buffer[255];
/* load (value not set) string */
LoadString(hInst, IDS_VALUE_NOT_SET, buffer, sizeof(buffer)/sizeof(TCHAR));
ListView_SetItemText(hwndLV, index, 2, buffer);
}
break;
case REG_MULTI_SZ:
{
LPTSTR src, str;
if(dwCount >= 2)
{
LPTSTR src, str;
if(dwCount >= 2)
{
src = (LPTSTR)ValBuf;
str = HeapAlloc(GetProcessHeap(), 0, dwCount);
if(str != NULL)
{
*str = _T('\0');
/* concatenate all srings */
while(*src != _T('\0'))
{
_tcscat(str, src);
_tcscat(str, _T(" "));
src += _tcslen(src) + 1;
}
ListView_SetItemText(hwndLV, index, 2, str);
HeapFree(GetProcessHeap(), 0, str);
}
else
ListView_SetItemText(hwndLV, index, 2, _T(""));
}
else
ListView_SetItemText(hwndLV, index, 2, _T(""));
}
break;
case REG_DWORD: {
TCHAR buf[200];
if(dwCount == sizeof(DWORD))
src = (LPTSTR)ValBuf;
str = HeapAlloc(GetProcessHeap(), 0, dwCount);
if(str != NULL)
{
wsprintf(buf, _T("0x%08x (%u)"), *(DWORD*)ValBuf, *(DWORD*)ValBuf);
}
else
{
LoadString(hInst, IDS_INVALID_DWORD, buf, sizeof(buf)/sizeof(TCHAR));
}
ListView_SetItemText(hwndLV, index, 2, buf);
}
/* lpsRes = convertHexToDWORDStr(lpbData, dwLen); */
break;
default:
{
unsigned int i;
LPBYTE pData = (LPBYTE)ValBuf;
LPTSTR strBinary;
if(dwCount > 0)
{
strBinary = HeapAlloc(GetProcessHeap(), 0, (dwCount * sizeof(TCHAR) * 3) + sizeof(TCHAR));
for (i = 0; i < dwCount; i++)
*str = _T('\0');
/* concatenate all srings */
while(*src != _T('\0'))
{
wsprintf( strBinary + i*3, _T("%02X "), pData[i] );
_tcscat(str, src);
_tcscat(str, _T(" "));
src += _tcslen(src) + 1;
}
strBinary[dwCount * 3] = 0;
ListView_SetItemText(hwndLV, index, 2, strBinary);
HeapFree(GetProcessHeap(), 0, strBinary);
ListView_SetItemText(hwndLV, index, 2, str);
HeapFree(GetProcessHeap(), 0, str);
}
else
{
TCHAR szText[128];
LoadString(hInst, IDS_BINARY_EMPTY, szText, sizeof(szText)/sizeof(TCHAR));
ListView_SetItemText(hwndLV, index, 2, szText);
}
ListView_SetItemText(hwndLV, index, 2, _T(""));
}
break;
else
ListView_SetItemText(hwndLV, index, 2, _T(""));
}
break;
case REG_DWORD:
{
TCHAR buf[200];
if(dwCount == sizeof(DWORD))
{
wsprintf(buf, _T("0x%08x (%u)"), *(DWORD*)ValBuf, *(DWORD*)ValBuf);
}
else
{
LoadString(hInst, IDS_INVALID_DWORD, buf, sizeof(buf)/sizeof(TCHAR));
}
ListView_SetItemText(hwndLV, index, 2, buf);
}
/* lpsRes = convertHexToDWORDStr(lpbData, dwLen); */
break;
default:
{
unsigned int i;
LPBYTE pData = (LPBYTE)ValBuf;
LPTSTR strBinary;
if(dwCount > 0)
{
strBinary = HeapAlloc(GetProcessHeap(), 0, (dwCount * sizeof(TCHAR) * 3) + sizeof(TCHAR));
for (i = 0; i < dwCount; i++)
{
wsprintf( strBinary + i*3, _T("%02X "), pData[i] );
}
strBinary[dwCount * 3] = 0;
ListView_SetItemText(hwndLV, index, 2, strBinary);
HeapFree(GetProcessHeap(), 0, strBinary);
}
else
{
TCHAR szText[128];
LoadString(hInst, IDS_BINARY_EMPTY, szText, sizeof(szText)/sizeof(TCHAR));
ListView_SetItemText(hwndLV, index, 2, szText);
}
}
break;
}
}
}
@ -258,7 +261,8 @@ static BOOL CreateListColumns(HWND hWndListView)
lvC.pszText = szText;
/* Load the column labels from the resource file. */
for (index = 0; index < MAX_LIST_COLUMNS; index++) {
for (index = 0; index < MAX_LIST_COLUMNS; index++)
{
lvC.iSubItem = index;
lvC.cx = default_column_widths[index];
lvC.fmt = column_alignment[index];
@ -288,7 +292,7 @@ static BOOL InitListViewImageLists(HWND hwndLV)
/* Fail if not all of the images were added. */
if (ImageList_GetImageCount(himl) < NUM_ICONS)
{
return FALSE;
return FALSE;
}
/* Associate the image list with the tree view control. */
@ -306,13 +310,15 @@ static void OnGetDispInfo(NMLVDISPINFO* plvdi)
plvdi->item.pszText = NULL;
plvdi->item.cchTextMax = 0;
switch (plvdi->item.iSubItem) {
switch (plvdi->item.iSubItem)
{
case 0:
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
plvdi->item.pszText = buffer;
plvdi->item.pszText = buffer;
break;
case 1:
switch (((LINE_INFO*)plvdi->item.lParam)->dwValType) {
switch (((LINE_INFO*)plvdi->item.lParam)->dwValType)
{
case REG_NONE:
plvdi->item.pszText = _T("REG_NONE");
break;
@ -349,13 +355,14 @@ static void OnGetDispInfo(NMLVDISPINFO* plvdi)
case REG_QWORD: /* REG_QWORD_LITTLE_ENDIAN */
plvdi->item.pszText = _T("REG_QWORD");
break;
default: {
default:
{
TCHAR buf2[200];
LoadString(hInst, IDS_UNKNOWN_TYPE, buf2, sizeof(buf2)/sizeof(TCHAR));
wsprintf(buffer, buf2, ((LINE_INFO*)plvdi->item.lParam)->dwValType);
LoadString(hInst, IDS_UNKNOWN_TYPE, buf2, sizeof(buf2)/sizeof(TCHAR));
wsprintf(buffer, buf2, ((LINE_INFO*)plvdi->item.lParam)->dwValType);
plvdi->item.pszText = buffer;
break;
}
}
}
break;
case 3:
@ -377,7 +384,8 @@ static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSor
if (g_columnToSort == 1 && l->dwValType != r->dwValType)
return g_invertSort ? (int)r->dwValType - (int)l->dwValType : (int)l->dwValType - (int)r->dwValType;
if (g_columnToSort == 2) {
if (g_columnToSort == 2)
{
/* FIXME: Sort on value */
}
return g_invertSort ? _tcsicmp(r->name, l->name) : _tcsicmp(l->name, r->name);
@ -388,87 +396,89 @@ BOOL ListWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
NMLVDISPINFO* Info;
UNREFERENCED_PARAMETER(wParam);
*Result = TRUE;
switch (((LPNMHDR)lParam)->code) {
case LVN_GETDISPINFO:
OnGetDispInfo((NMLVDISPINFO*)lParam);
return TRUE;
case LVN_COLUMNCLICK:
if (g_columnToSort == (DWORD)((LPNMLISTVIEW)lParam)->iSubItem)
g_invertSort = !g_invertSort;
else {
g_columnToSort = ((LPNMLISTVIEW)lParam)->iSubItem;
g_invertSort = FALSE;
}
switch (((LPNMHDR)lParam)->code)
{
case LVN_GETDISPINFO:
OnGetDispInfo((NMLVDISPINFO*)lParam);
return TRUE;
case LVN_COLUMNCLICK:
if (g_columnToSort == (DWORD)((LPNMLISTVIEW)lParam)->iSubItem)
g_invertSort = !g_invertSort;
else
{
g_columnToSort = ((LPNMLISTVIEW)lParam)->iSubItem;
g_invertSort = FALSE;
}
(void)ListView_SortItems(hWnd, CompareFunc, (WPARAM)hWnd);
return TRUE;
case NM_DBLCLK:
case NM_RETURN:
(void)ListView_SortItems(hWnd, CompareFunc, (WPARAM)hWnd);
return TRUE;
case NM_DBLCLK:
case NM_RETURN:
{
SendMessage(hFrameWnd, WM_COMMAND, MAKEWPARAM(ID_EDIT_MODIFY, 0), 0);
}
return TRUE;
case NM_SETFOCUS:
g_pChildWnd->nFocusPanel = 0;
break;
case LVN_BEGINLABELEDIT:
Info = (NMLVDISPINFO*)lParam;
if(Info)
{
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
{
SendMessage(hFrameWnd, WM_COMMAND, MAKEWPARAM(ID_EDIT_MODIFY, 0), 0);
*Result = TRUE;
}
return TRUE;
case NM_SETFOCUS:
g_pChildWnd->nFocusPanel = 0;
break;
case LVN_BEGINLABELEDIT:
Info = (NMLVDISPINFO*)lParam;
if(Info)
else
{
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
*Result = FALSE;
}
}
else
*Result = TRUE;
return TRUE;
case LVN_ENDLABELEDIT:
Info = (NMLVDISPINFO*)lParam;
if(Info && Info->item.pszText)
{
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
{
*Result = FALSE;
}
else
{
if(_tcslen(Info->item.pszText) == 0)
{
TCHAR msg[128], caption[128];
LoadString(hInst, IDS_ERR_RENVAL_TOEMPTY, msg, sizeof(msg)/sizeof(TCHAR));
LoadString(hInst, IDS_ERR_RENVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
MessageBox(0, msg, caption, 0);
*Result = TRUE;
}
else
{
*Result = FALSE;
HKEY hKeyRoot;
LPCTSTR keyPath;
LONG lResult;
keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
lResult = RenameValue(hKeyRoot, keyPath, Info->item.pszText, lineinfo->name);
lineinfo->name = realloc(lineinfo->name, (_tcslen(Info->item.pszText)+1)*sizeof(TCHAR));
if (lineinfo->name != NULL)
_tcscpy(lineinfo->name, Info->item.pszText);
*Result = TRUE;
return (lResult == ERROR_SUCCESS);
}
}
else
*Result = TRUE;
return TRUE;
case LVN_ENDLABELEDIT:
Info = (NMLVDISPINFO*)lParam;
if(Info && Info->item.pszText)
{
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
{
*Result = FALSE;
}
else
{
if(_tcslen(Info->item.pszText) == 0)
{
TCHAR msg[128], caption[128];
}
else
*Result = TRUE;
LoadString(hInst, IDS_ERR_RENVAL_TOEMPTY, msg, sizeof(msg)/sizeof(TCHAR));
LoadString(hInst, IDS_ERR_RENVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
MessageBox(0, msg, caption, 0);
*Result = TRUE;
}
else
{
HKEY hKeyRoot;
LPCTSTR keyPath;
LONG lResult;
keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
lResult = RenameValue(hKeyRoot, keyPath, Info->item.pszText, lineinfo->name);
lineinfo->name = realloc(lineinfo->name, (_tcslen(Info->item.pszText)+1)*sizeof(TCHAR));
if (lineinfo->name != NULL)
_tcscpy(lineinfo->name, Info->item.pszText);
*Result = TRUE;
return (lResult == ERROR_SUCCESS);
}
}
}
else
*Result = TRUE;
return TRUE;
return TRUE;
}
return FALSE;
}
@ -500,10 +510,11 @@ fail:
void DestroyListView(HWND hwndLV)
{
INT count, i;
LVITEM item;
LVITEM item;
count = ListView_GetItemCount(hwndLV);
for (i = 0; i < count; i++) {
for (i = 0; i < count; i++)
{
item.mask = LVIF_PARAM;
item.iItem = i;
(void)ListView_GetItem(hwndLV, &item);
@ -555,7 +566,8 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
/* AddEntryToList(hwndLV, _T("(Default)"), dwValType, ValBuf, dwValSize); */
/* } */
/* dwValSize = max_val_size; */
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS)
{
/* Add a terminating 0 character. Usually this is only necessary for strings. */
ValBuf[dwValSize] = 0;
#ifdef UNICODE
@ -568,7 +580,7 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
++dwIndex;
if(!_tcscmp(ValName, _T("")))
{
AddedDefault = TRUE;
AddedDefault = TRUE;
}
}
HeapFree(GetProcessHeap(), 0, ValBuf);
@ -576,7 +588,7 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
}
if(!AddedDefault)
{
AddEntryToList(hwndLV, _T(""), REG_SZ, NULL, 0, 0, FALSE);
AddEntryToList(hwndLV, _T(""), REG_SZ, NULL, 0, 0, FALSE);
}
ListView_SortItems(hwndLV, CompareFunc, (WPARAM)hwndLV);
c = ListView_GetItemCount(hwndLV);
@ -585,8 +597,8 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
ListView_SetItemState(hwndLV, i, 0, LVIS_FOCUSED | LVIS_SELECTED);
}
ListView_SetItemState(hwndLV, iListViewSelect,
LVIS_FOCUSED | LVIS_SELECTED,
LVIS_FOCUSED | LVIS_SELECTED);
LVIS_FOCUSED | LVIS_SELECTED,
LVIS_FOCUSED | LVIS_SELECTED);
RegCloseKey(hNewKey);
SendMessage(hwndLV, WM_SETREDRAW, TRUE, 0);

View file

@ -88,9 +88,9 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
wcChild.hInstance = hInstance;
wcChild.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_REGEDIT));
wcChild.hCursor = LoadCursor(0, IDC_ARROW),
wcChild.lpszClassName = szChildClass,
wcChild.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_REGEDIT), IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
wcChild.lpszClassName = szChildClass,
wcChild.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_REGEDIT), IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
RegisterClassEx(&wcChild); /* register child windows class */
@ -107,13 +107,13 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
AclUiAvailable = InitializeAclUiDll();
if(!AclUiAvailable)
{
/* hide the Edit/Permissions... menu entry */
if(hEditMenu != NULL)
{
RemoveMenu(hEditMenu, ID_EDIT_PERMISSIONS, MF_BYCOMMAND);
/* remove the separator after the menu item */
RemoveMenu(hEditMenu, 4, MF_BYPOSITION);
}
/* hide the Edit/Permissions... menu entry */
if(hEditMenu != NULL)
{
RemoveMenu(hEditMenu, ID_EDIT_PERMISSIONS, MF_BYCOMMAND);
/* remove the separator after the menu item */
RemoveMenu(hEditMenu, 4, MF_BYPOSITION);
}
}
if(hEditMenu != NULL)
@ -129,14 +129,16 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, hMenuFrame, hInstance, NULL/*lpParam*/);
if (!hFrameWnd) {
if (!hFrameWnd)
{
return FALSE;
}
/* Create the status bar */
hStatusBar = CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS,
_T(""), hFrameWnd, STATUS_WINDOW);
if (hStatusBar) {
if (hStatusBar)
{
/* Create the status bar panes */
SetupStatusBar(hFrameWnd, FALSE);
CheckMenuItem(GetSubMenu(hMenuFrame, ID_VIEW_MENU), ID_VIEW_STATUSBAR, MF_BYCOMMAND|MF_CHECKED);
@ -144,7 +146,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
/* Restore position */
if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("LastKey"),
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
{
SelectNode(g_pChildWnd->hTreeWnd, szBuffer);
}
@ -159,8 +161,9 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
/* we need to destroy the main menu before destroying the main window
to avoid a memory leak */
void DestroyMainMenu() {
DestroyMenu(hMenuFrame);
void DestroyMainMenu()
{
DestroyMenu(hMenuFrame);
}
/******************************************************************************/
@ -175,11 +178,11 @@ void ExitInstance(HINSTANCE hInstance)
BOOL TranslateChildTabMessage(MSG *msg)
{
if (msg->message != WM_KEYDOWN) return FALSE;
if (msg->wParam != VK_TAB) return FALSE;
if (GetParent(msg->hwnd) != g_pChildWnd->hWnd) return FALSE;
PostMessage(g_pChildWnd->hWnd, WM_COMMAND, ID_SWITCH_PANELS, 0);
return TRUE;
if (msg->message != WM_KEYDOWN) return FALSE;
if (msg->wParam != VK_TAB) return FALSE;
if (GetParent(msg->hwnd) != g_pChildWnd->hWnd) return FALSE;
PostMessage(g_pChildWnd->hWnd, WM_COMMAND, ID_SWITCH_PANELS, 0);
return TRUE;
}
int APIENTRY wWinMain(HINSTANCE hInstance,
@ -192,7 +195,8 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
UNREFERENCED_PARAMETER(hPrevInstance);
if (ProcessCmdLine(lpCmdLine)) {
if (ProcessCmdLine(lpCmdLine))
{
return 0;
}
@ -205,15 +209,18 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
hInst = hInstance;
/* Perform application initialization */
if (!InitInstance(hInstance, nCmdShow)) {
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(ID_ACCEL));
/* Main message loop */
while (GetMessage(&msg, (HWND)NULL, 0, 0)) {
while (GetMessage(&msg, (HWND)NULL, 0, 0))
{
if (!TranslateAccelerator(hFrameWnd, hAccel, &msg)
&& !TranslateChildTabMessage(&msg)) {
&& !TranslateChildTabMessage(&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

View file

@ -43,7 +43,8 @@ extern HINSTANCE hInst;
/******************************************************************************/
enum OPTION_FLAGS {
enum OPTION_FLAGS
{
OPTIONS_AUTO_REFRESH = 0x01,
OPTIONS_READ_ONLY_MODE = 0x02,
OPTIONS_CONFIRM_ON_DELETE = 0x04,
@ -53,12 +54,13 @@ enum OPTION_FLAGS {
OPTIONS_VIEW_DATA_ONLY = 0x40,
};
typedef struct {
typedef struct
{
HWND hWnd;
HWND hTreeWnd;
HWND hListWnd;
HWND hAddressBarWnd;
HWND hAddressBtnWnd;
HWND hAddressBarWnd;
HWND hAddressBtnWnd;
int nFocusPanel; /* 0: left 1: right */
int nSplitPos;
WINDOWPLACEMENT pos;

View file

@ -52,7 +52,8 @@ static const char *usage =
"This program is command-line compatible with Microsoft Windows\n"
"regedit.\n";
typedef enum {
typedef enum
{
ACTION_UNDEF, ACTION_ADD, ACTION_EXPORT, ACTION_DELETE
} REGEDIT_ACTION;
@ -79,40 +80,52 @@ void get_file_name(LPWSTR *command_line, LPWSTR file_name)
int pos = 0; /* position of pointer "s" in *command_line */
file_name[0] = 0;
if (!s[0]) {
if (!s[0])
{
return;
}
if (s[0] == L'"') {
if (s[0] == L'"')
{
s++;
(*command_line)++;
while(s[0] != L'"') {
if (!s[0]) {
while(s[0] != L'"')
{
if (!s[0])
{
fprintf(stderr, "%s: Unexpected end of file name!\n", getAppName());
exit(1);
}
s++;
pos++;
}
} else {
while(s[0] && !iswspace(s[0])) {
}
else
{
while(s[0] && !iswspace(s[0]))
{
s++;
pos++;
}
}
memcpy(file_name, *command_line, pos * sizeof((*command_line)[0]));
/* remove the last backslash */
if (file_name[pos - 1] == L'\\') {
if (file_name[pos - 1] == L'\\')
{
file_name[pos - 1] = L'\0';
} else {
}
else
{
file_name[pos] = L'\0';
}
if (s[0]) {
if (s[0])
{
s++;
pos++;
}
while(s[0] && iswspace(s[0])) {
while(s[0] && iswspace(s[0]))
{
s++;
pos++;
}
@ -121,64 +134,75 @@ void get_file_name(LPWSTR *command_line, LPWSTR file_name)
BOOL PerformRegAction(REGEDIT_ACTION action, LPWSTR s)
{
switch (action) {
case ACTION_ADD: {
WCHAR filename[MAX_PATH];
FILE *fp;
switch (action)
{
case ACTION_ADD:
{
WCHAR filename[MAX_PATH];
FILE *fp;
get_file_name(&s, filename);
if (!filename[0]) {
fprintf(stderr, "%s: No file name is specified\n", getAppName());
fprintf(stderr, usage);
exit(4);
}
while(filename[0]) {
fp = _wfopen(filename, L"r");
if (fp == NULL)
{
LPSTR p = GetMultiByteString(filename);
perror("");
fprintf(stderr, "%s: Can't open file \"%s\"\n", getAppName(), p);
HeapFree(GetProcessHeap(), 0, p);
exit(5);
}
import_registry_file(fp);
get_file_name(&s, filename);
}
break;
get_file_name(&s, filename);
if (!filename[0])
{
fprintf(stderr, "%s: No file name is specified\n", getAppName());
fprintf(stderr, usage);
exit(4);
}
case ACTION_DELETE: {
while(filename[0])
{
fp = _wfopen(filename, L"r");
if (fp == NULL)
{
LPSTR p = GetMultiByteString(filename);
perror("");
fprintf(stderr, "%s: Can't open file \"%s\"\n", getAppName(), p);
HeapFree(GetProcessHeap(), 0, p);
exit(5);
}
import_registry_file(fp);
get_file_name(&s, filename);
}
break;
}
case ACTION_DELETE:
{
WCHAR reg_key_name[KEY_MAX_LEN];
get_file_name(&s, reg_key_name);
if (!reg_key_name[0])
{
fprintf(stderr, "%s: No registry key is specified for removal\n", getAppName());
fprintf(stderr, usage);
exit(6);
}
delete_registry_key(reg_key_name);
break;
}
case ACTION_EXPORT:
{
WCHAR filename[MAX_PATH];
filename[0] = _T('\0');
get_file_name(&s, filename);
if (!filename[0])
{
fprintf(stderr, "%s: No file name is specified\n", getAppName());
fprintf(stderr, usage);
exit(7);
}
if (s[0])
{
WCHAR reg_key_name[KEY_MAX_LEN];
get_file_name(&s, reg_key_name);
if (!reg_key_name[0]) {
fprintf(stderr, "%s: No registry key is specified for removal\n", getAppName());
fprintf(stderr, usage);
exit(6);
}
delete_registry_key(reg_key_name);
break;
export_registry_key(filename, reg_key_name, REG_FORMAT_4);
}
case ACTION_EXPORT: {
WCHAR filename[MAX_PATH];
filename[0] = _T('\0');
get_file_name(&s, filename);
if (!filename[0]) {
fprintf(stderr, "%s: No file name is specified\n", getAppName());
fprintf(stderr, usage);
exit(7);
}
if (s[0]) {
WCHAR reg_key_name[KEY_MAX_LEN];
get_file_name(&s, reg_key_name);
export_registry_key(filename, reg_key_name, REG_FORMAT_4);
} else {
export_registry_key(filename, NULL, REG_FORMAT_4);
}
break;
else
{
export_registry_key(filename, NULL, REG_FORMAT_4);
}
break;
}
default:
fprintf(stderr, "%s: Unhandled action!\n", getAppName());
exit(8);
@ -196,9 +220,12 @@ BOOL PerformRegAction(REGEDIT_ACTION action, LPWSTR s)
*/
static void error_unknown_switch(WCHAR chu, LPWSTR s)
{
if (iswalpha(chu)) {
if (iswalpha(chu))
{
fprintf(stderr, "%s: Undefined switch /%c!\n", getAppName(), chu);
} else {
}
else
{
fprintf(stderr, "%s: Alphabetic character is expected after '%c' "
"in swit ch specification\n", getAppName(), *(s - 1));
}
@ -220,12 +247,16 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
ch = *s;
ch2 = *(s + 1);
chu = (WCHAR)towupper(ch);
if (!ch2 || iswspace(ch2)) {
if (!ch2 || iswspace(ch2))
{
if (chu == L'S' || chu == L'V')
{
/* ignore these switches */
} else {
switch (chu) {
}
else
{
switch (chu)
{
case L'D':
action = ACTION_DELETE;
break;
@ -242,14 +273,19 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
}
}
s++;
} else {
if (ch2 == L':') {
switch (chu) {
}
else
{
if (ch2 == L':')
{
switch (chu)
{
case L'L':
/* fall through */
case L'R':
s += 2;
while (*s && !iswspace(*s)) {
while (*s && !iswspace(*s))
{
s++;
}
break;
@ -257,7 +293,9 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
error_unknown_switch(chu, s);
break;
}
} else {
}
else
{
/* this is a file name, starting from '/' */
s--;
break;
@ -265,7 +303,8 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
}
/* skip spaces to the next parameter */
ch = *s;
while (ch && iswspace(ch)) {
while (ch && iswspace(ch))
{
s++;
ch = *s;
}

View file

@ -31,10 +31,10 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#include "rsrc.rc"
IDI_OPEN_FILE ICON DISCARDABLE res/folderopen.ico
IDI_CLOSED_FILE ICON DISCARDABLE res/folder.ico
IDI_ROOT ICON DISCARDABLE res/computer.ico
IDI_STRING ICON DISCARDABLE res/string.ico
IDI_BIN ICON DISCARDABLE res/bin.ico
IDI_REGEDIT ICON DISCARDABLE res/regedit.ico
IDI_REGFILE ICON DISCARDABLE res/regfile.ico
IDI_OPEN_FILE ICON DISCARDABLE res/folderopen.ico
IDI_CLOSED_FILE ICON DISCARDABLE res/folder.ico
IDI_ROOT ICON DISCARDABLE res/computer.ico
IDI_STRING ICON DISCARDABLE res/string.ico
IDI_BIN ICON DISCARDABLE res/bin.ico
IDI_REGEDIT ICON DISCARDABLE res/regedit.ico
IDI_REGFILE ICON DISCARDABLE res/regfile.ico

View file

@ -30,22 +30,25 @@
*/
#define REG_FILE_HEX_LINE_LEN (2 + 25 * 3)
static const CHAR *reg_class_names[] = {
"HKEY_LOCAL_MACHINE", "HKEY_USERS", "HKEY_CLASSES_ROOT",
"HKEY_CURRENT_CONFIG", "HKEY_CURRENT_USER", "HKEY_DYN_DATA"
};
static const CHAR *reg_class_names[] =
{
"HKEY_LOCAL_MACHINE", "HKEY_USERS", "HKEY_CLASSES_ROOT",
"HKEY_CURRENT_CONFIG", "HKEY_CURRENT_USER", "HKEY_DYN_DATA"
};
#define REG_CLASS_NUMBER (sizeof(reg_class_names) / sizeof(reg_class_names[0]))
const WCHAR* reg_class_namesW[REG_CLASS_NUMBER] = {
const WCHAR* reg_class_namesW[REG_CLASS_NUMBER] =
{
L"HKEY_LOCAL_MACHINE", L"HKEY_USERS", L"HKEY_CLASSES_ROOT",
L"HKEY_CURRENT_CONFIG", L"HKEY_CURRENT_USER", L"HKEY_DYN_DATA"
};
static HKEY reg_class_keys[REG_CLASS_NUMBER] = {
HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT,
HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA
};
static HKEY reg_class_keys[REG_CLASS_NUMBER] =
{
HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT,
HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA
};
/* return values */
#define NOT_ENOUGH_MEMORY 1
@ -149,7 +152,8 @@ static BOOL convertHexToDWord(WCHAR* str, DWORD *dw)
char dummy;
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, 9, NULL, NULL);
if (lstrlenW(str) > 8 || sscanf(buf, "%lx%c", dw, &dummy) != 1) {
if (lstrlenW(str) > 8 || sscanf(buf, "%lx%c", dw, &dummy) != 1)
{
fprintf(stderr,"%s: ERROR, invalid hex value\n", getAppName());
return FALSE;
}
@ -172,12 +176,14 @@ static BYTE* convertHexCSVToHex(WCHAR *str, DWORD *size)
s = str;
d = data;
*size=0;
while (*s != '\0') {
while (*s != '\0')
{
UINT wc;
WCHAR *end;
wc = wcstoul(s,&end, 16);
if (end == s || wc > 0xff || (*end && *end != L',')) {
if (end == s || wc > 0xff || (*end && *end != L','))
{
char* strA = GetMultiByteString(s);
fprintf(stderr,"%s: ERROR converting CSV hex stream. Invalid value at '%s'\n",
getAppName(), strA);
@ -203,7 +209,13 @@ static BYTE* convertHexCSVToHex(WCHAR *str, DWORD *size)
*/
static DWORD getDataType(LPWSTR *lpValue, DWORD* parse_type)
{
struct data_type { const WCHAR *tag; int len; int type; int parse_type; };
struct data_type
{
const WCHAR *tag;
int len;
int type;
int parse_type;
};
static const WCHAR quote[] = {'"'};
static const WCHAR str[] = {'s','t','r',':','"'};
@ -213,19 +225,20 @@ static DWORD getDataType(LPWSTR *lpValue, DWORD* parse_type)
static const WCHAR hexp[] = {'h','e','x','('};
static const struct data_type data_types[] = { /* actual type */ /* type to assume for parsing */
{ quote, 1, REG_SZ, REG_SZ },
{ str, 5, REG_SZ, REG_SZ },
{ str2, 8, REG_EXPAND_SZ, REG_SZ },
{ hex, 4, REG_BINARY, REG_BINARY },
{ dword, 6, REG_DWORD, REG_DWORD },
{ hexp, 4, -1, REG_BINARY },
{ NULL, 0, 0, 0 }
};
{ quote, 1, REG_SZ, REG_SZ },
{ str, 5, REG_SZ, REG_SZ },
{ str2, 8, REG_EXPAND_SZ, REG_SZ },
{ hex, 4, REG_BINARY, REG_BINARY },
{ dword, 6, REG_DWORD, REG_DWORD },
{ hexp, 4, -1, REG_BINARY },
{ NULL, 0, 0, 0 }
};
const struct data_type *ptr;
int type;
for (ptr = data_types; ptr->tag; ptr++) {
for (ptr = data_types; ptr->tag; ptr++)
{
if (wcsncmp(ptr->tag, *lpValue, ptr->len))
continue;
@ -233,14 +246,18 @@ static DWORD getDataType(LPWSTR *lpValue, DWORD* parse_type)
*parse_type = ptr->parse_type;
type=ptr->type;
*lpValue+=ptr->len;
if (type == -1) {
if (type == -1)
{
WCHAR* end;
/* "hex(xx):" is special */
type = (int)wcstoul( *lpValue , &end, 16 );
if (**lpValue=='\0' || *end!=')' || *(end+1)!=':') {
if (**lpValue=='\0' || *end!=')' || *(end+1)!=':')
{
type=REG_NONE;
} else {
}
else
{
*lpValue = end + 2;
}
}
@ -258,10 +275,13 @@ static void REGPROC_unescape_string(WCHAR* str)
int str_idx = 0; /* current character under analysis */
int val_idx = 0; /* the last character of the unescaped string */
int len = lstrlenW(str);
for (str_idx = 0; str_idx < len; str_idx++, val_idx++) {
if (str[str_idx] == '\\') {
for (str_idx = 0; str_idx < len; str_idx++, val_idx++)
{
if (str[str_idx] == '\\')
{
str_idx++;
switch (str[str_idx]) {
switch (str[str_idx])
{
case 'n':
str[val_idx] = '\n';
break;
@ -271,11 +291,13 @@ static void REGPROC_unescape_string(WCHAR* str)
break;
default:
fprintf(stderr,"Warning! Unrecognized escape sequence: \\%c'\n",
str[str_idx]);
str[str_idx]);
str[val_idx] = str[str_idx];
break;
}
} else {
}
else
{
str[val_idx] = str[str_idx];
}
}
@ -310,9 +332,11 @@ static BOOL parseKeyName(LPWSTR lpKeyName, HKEY *hKey, LPWSTR *lpKeyPath)
}
*hKey = NULL;
for (i = 0; i < REG_CLASS_NUMBER; i++) {
for (i = 0; i < REG_CLASS_NUMBER; i++)
{
if (CompareStringW(LOCALE_USER_DEFAULT, 0, lpKeyName, len, reg_class_namesW[i], len) == CSTR_EQUAL &&
len == lstrlenW(reg_class_namesW[i])) {
len == lstrlenW(reg_class_namesW[i]))
{
*hKey = reg_class_keys[i];
break;
}
@ -404,12 +428,12 @@ static LONG setValue(WCHAR* val_name, WCHAR* val_data, BOOL is_unicode)
}
res = RegSetValueExW(
currentKeyHandle,
val_name,
0, /* Reserved */
dwDataType,
lpbData,
dwLen);
currentKeyHandle,
val_name,
0, /* Reserved */
dwDataType,
lpbData,
dwLen);
if (dwParseType == REG_BINARY)
HeapFree(GetProcessHeap(), 0, lpbData);
return res;
@ -435,15 +459,15 @@ static LONG openKeyW(WCHAR* stdInput)
return ERROR_INVALID_PARAMETER;
res = RegCreateKeyExW(
keyClass, /* Class */
keyPath, /* Sub Key */
0, /* MUST BE 0 */
NULL, /* object type */
REG_OPTION_NON_VOLATILE, /* option, REG_OPTION_NON_VOLATILE ... */
KEY_ALL_ACCESS, /* access mask, KEY_ALL_ACCESS */
NULL, /* security attribute */
&currentKeyHandle, /* result */
&dwDisp); /* disposition, REG_CREATED_NEW_KEY or
keyClass, /* Class */
keyPath, /* Sub Key */
0, /* MUST BE 0 */
NULL, /* object type */
REG_OPTION_NON_VOLATILE, /* option, REG_OPTION_NON_VOLATILE ... */
KEY_ALL_ACCESS, /* access mask, KEY_ALL_ACCESS */
NULL, /* security attribute */
&currentKeyHandle, /* result */
&dwDisp); /* disposition, REG_CREATED_NEW_KEY or
REG_OPENED_EXISTING_KEY */
if (res == ERROR_SUCCESS)
@ -485,29 +509,39 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
/* get value name */
while ( iswspace(line[line_idx]) ) line_idx++;
if (line[line_idx] == '@' && line[line_idx + 1] == '=') {
if (line[line_idx] == '@' && line[line_idx + 1] == '=')
{
line[line_idx] = '\0';
val_name = line;
line_idx++;
} else if (line[line_idx] == '\"') {
}
else if (line[line_idx] == '\"')
{
line_idx++;
val_name = line + line_idx;
while (TRUE) {
while (TRUE)
{
if (line[line_idx] == '\\') /* skip escaped character */
{
line_idx += 2;
} else {
if (line[line_idx] == '\"') {
}
else
{
if (line[line_idx] == '\"')
{
line[line_idx] = '\0';
line_idx++;
break;
} else {
}
else
{
line_idx++;
}
}
}
while ( iswspace(line[line_idx]) ) line_idx++;
if (line[line_idx] != '=') {
if (line[line_idx] != '=')
{
char* lineA;
line[line_idx] = '\"';
lineA = GetMultiByteString(line);
@ -516,7 +550,9 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
return;
}
} else {
}
else
{
char* lineA = GetMultiByteString(line);
fprintf(stderr,"Warning! unrecognized line:\n%s\n", lineA);
HeapFree(GetProcessHeap(), 0, lineA);
@ -538,10 +574,10 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
char* val_nameA = GetMultiByteString(val_name);
char* val_dataA = GetMultiByteString(val_data);
fprintf(stderr,"%s: ERROR Key %s not created. Value: %s, Data: %s\n",
getAppName(),
currentKeyName,
val_nameA,
val_dataA);
getAppName(),
currentKeyName,
val_nameA,
val_dataA);
HeapFree(GetProcessHeap(), 0, val_nameA);
HeapFree(GetProcessHeap(), 0, val_dataA);
}
@ -558,7 +594,8 @@ static void processRegEntry(WCHAR* stdInput, BOOL isUnicode)
* We encountered the end of the file, make sure we
* close the opened key and exit
*/
if (stdInput == NULL) {
if (stdInput == NULL)
{
closeKey();
return;
}
@ -578,19 +615,22 @@ static void processRegEntry(WCHAR* stdInput, BOOL isUnicode)
if ( stdInput[0] == '-')
{
delete_registry_key(stdInput + 1);
} else if ( openKeyW(stdInput) != ERROR_SUCCESS )
}
else if ( openKeyW(stdInput) != ERROR_SUCCESS )
{
char* stdInputA = GetMultiByteString(stdInput);
fprintf(stderr,"%s: setValue failed to open key %s\n",
getAppName(), stdInputA);
getAppName(), stdInputA);
HeapFree(GetProcessHeap(), 0, stdInputA);
}
} else if( currentKeyHandle &&
(( stdInput[0] == '@') || /* reading a default @=data pair */
( stdInput[0] == '\"'))) /* reading a new value=data pair */
}
else if( currentKeyHandle &&
(( stdInput[0] == '@') || /* reading a default @=data pair */
( stdInput[0] == '\"'))) /* reading a new value=data pair */
{
processSetValue(stdInput, isUnicode);
} else
}
else
{
/* Since we are assuming that the file format is valid we must be
* reading a blank line which indicates the end of this key processing
@ -614,13 +654,15 @@ static void processRegLinesA(FILE *in)
line = HeapAlloc(GetProcessHeap(), 0, lineSize);
CHECK_ENOUGH_MEMORY(line);
while (!feof(in)) {
while (!feof(in))
{
LPSTR s; /* The pointer into line for where the current fgets should read */
LPSTR check;
WCHAR* lineW;
s = line;
for (;;) {
for (;;)
{
size_t size_remaining;
int size_to_get;
char *s_eol; /* various local uses */
@ -650,11 +692,15 @@ static void processRegLinesA(FILE *in)
check = fgets (s, size_to_get, in);
if (check == NULL) {
if (ferror(in)) {
if (check == NULL)
{
if (ferror(in))
{
perror ("While reading input");
exit (IO_ERROR);
} else {
}
else
{
assert (feof(in));
*s = '\0';
/* It is not clear to me from the definition that the
@ -666,40 +712,46 @@ static void processRegLinesA(FILE *in)
/* If we didn't read the eol nor the eof go around for the rest */
s_eol = strchr (s, '\n');
if (!feof (in) && !s_eol) {
if (!feof (in) && !s_eol)
{
s = strchr (s, '\0');
/* It should be s + size_to_get - 1 but this is safer */
continue;
}
/* If it is a comment line then discard it and go around again */
if (line [0] == '#') {
if (line [0] == '#')
{
s = line;
continue;
}
/* Remove any line feed. Leave s_eol on the \0 */
if (s_eol) {
if (s_eol)
{
*s_eol = '\0';
if (s_eol > line && *(s_eol-1) == '\r')
*--s_eol = '\0';
} else
}
else
s_eol = strchr (s, '\0');
/* If there is a concatenating \\ then go around again */
if (s_eol > line && *(s_eol-1) == '\\') {
if (s_eol > line && *(s_eol-1) == '\\')
{
int c;
s = s_eol-1;
do
{
c = fgetc(in);
} while(c == ' ' || c == '\t');
}
while(c == ' ' || c == '\t');
if(c == EOF)
{
fprintf(stderr,"%s: ERROR - invalid continuation.\n",
getAppName());
getAppName());
}
else
{
@ -737,7 +789,8 @@ static void processRegLinesW(FILE *in)
s = buf;
line = buf;
while(!feof(in)) {
while(!feof(in))
{
size_t size_remaining;
int size_to_get;
WCHAR *s_eol = NULL; /* various local uses */
@ -769,11 +822,15 @@ static void processRegLinesW(FILE *in)
CharsInBuf = fread(s, sizeof(WCHAR), size_to_get - 1, in);
s[CharsInBuf] = 0;
if (CharsInBuf == 0) {
if (ferror(in)) {
if (CharsInBuf == 0)
{
if (ferror(in))
{
perror ("While reading input");
exit (IO_ERROR);
} else {
}
else
{
assert (feof(in));
*s = '\0';
/* It is not clear to me from the definition that the
@ -788,7 +845,8 @@ static void processRegLinesW(FILE *in)
{
s_eol = wcschr(line, '\n');
if(!s_eol) {
if(!s_eol)
{
/* Move the stub of the line to the start of the buffer so
* we get the maximum space to read into, and so we don't
* have to recalculate 'line' if the buffer expands */
@ -799,14 +857,16 @@ static void processRegLinesW(FILE *in)
}
/* If it is a comment line then discard it and go around again */
if (*line == '#') {
if (*line == '#')
{
line = s_eol + 1;
continue;
}
/* If there is a concatenating \\ then go around again */
if ((*(s_eol-1) == '\\') ||
(*(s_eol-1) == '\r' && *(s_eol-2) == '\\')) {
(*(s_eol-1) == '\r' && *(s_eol-2) == '\\'))
{
WCHAR* NextLine = s_eol;
while(*(NextLine+1) == ' ' || *(NextLine+1) == '\t')
@ -824,7 +884,8 @@ static void processRegLinesW(FILE *in)
}
/* Remove any line feed. Leave s_eol on the \0 */
if (s_eol) {
if (s_eol)
{
*s_eol = '\0';
if (s_eol > buf && *(s_eol-1) == '\r')
*(s_eol-1) = '\0';
@ -859,10 +920,11 @@ static void REGPROC_print_error(void)
error_code = GetLastError ();
status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, error_code, 0, (LPTSTR) &lpMsgBuf, 0, NULL);
if (!status) {
NULL, error_code, 0, (LPTSTR) &lpMsgBuf, 0, NULL);
if (!status)
{
fprintf(stderr,"%s: Cannot display message for error %ld, status %ld\n",
getAppName(), error_code, GetLastError());
getAppName(), error_code, GetLastError());
exit(1);
}
puts(lpMsgBuf);
@ -883,7 +945,8 @@ static void REGPROC_print_error(void)
static void REGPROC_resize_char_buffer(WCHAR **buffer, DWORD *len, DWORD required_len)
{
required_len++;
if (required_len > *len) {
if (required_len > *len)
{
*len = required_len;
if (!*buffer)
*buffer = HeapAlloc(GetProcessHeap(), 0, *len * sizeof(**buffer));
@ -903,7 +966,8 @@ static void REGPROC_resize_char_buffer(WCHAR **buffer, DWORD *len, DWORD require
*/
static void REGPROC_resize_binary_buffer(BYTE **buffer, DWORD *size, DWORD required_size)
{
if (required_size > *size) {
if (required_size > *size)
{
*size = required_size;
if (!*buffer)
*buffer = HeapAlloc(GetProcessHeap(), 0, *size);
@ -925,9 +989,11 @@ static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD
/* escaping characters */
pos = *line_len;
for (i = 0; i < str_len; i++) {
for (i = 0; i < str_len; i++)
{
WCHAR c = str[i];
switch (c) {
switch (c)
{
case '\n':
extra++;
REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + str_len + extra);
@ -962,9 +1028,12 @@ static void REGPROC_export_binary(WCHAR **line_buf, DWORD *line_buf_size, DWORD
const WCHAR newline[] = {'\n',0};
CHAR* value_multibyte = NULL;
if (type == REG_BINARY) {
if (type == REG_BINARY)
{
hex_prefix = hex;
} else {
}
else
{
const WCHAR hex_format[] = {'h','e','x','(','%','u',')',':',0};
hex_prefix = hex_buf;
wsprintfW(hex_buf, hex_format, type);
@ -1011,7 +1080,8 @@ static void REGPROC_export_binary(WCHAR **line_buf, DWORD *line_buf_size, DWORD
column += 3;
/* wrap the line */
if (column >= REG_FILE_HEX_LINE_LEN) {
if (column >= REG_FILE_HEX_LINE_LEN)
{
lstrcpyW(*line_buf + data_pos, concat);
data_pos += concat_len;
column = concat_prefix;
@ -1062,11 +1132,11 @@ static void REGPROC_write_line(FILE *file, const WCHAR* str, BOOL unicode)
* val_size - size of the buffer for storing values in bytes.
*/
static void export_hkey(FILE *file, HKEY key,
WCHAR **reg_key_name_buf, DWORD *reg_key_name_size,
WCHAR **val_name_buf, DWORD *val_name_size,
BYTE **val_buf, DWORD *val_size,
WCHAR **line_buf, DWORD *line_buf_size,
BOOL unicode)
WCHAR **reg_key_name_buf, DWORD *reg_key_name_size,
WCHAR **val_name_buf, DWORD *val_name_size,
BYTE **val_buf, DWORD *val_size,
WCHAR **line_buf, DWORD *line_buf_size,
BOOL unicode)
{
DWORD max_sub_key_len;
DWORD max_val_name_len;
@ -1079,16 +1149,17 @@ static void export_hkey(FILE *file, HKEY key,
/* get size information and resize the buffers if necessary */
if (RegQueryInfoKeyW(key, NULL, NULL, NULL, NULL,
&max_sub_key_len, NULL,
NULL, &max_val_name_len, &max_val_size, NULL, NULL
) != ERROR_SUCCESS) {
&max_sub_key_len, NULL,
NULL, &max_val_name_len, &max_val_size, NULL, NULL
) != ERROR_SUCCESS)
{
REGPROC_print_error();
}
curr_len = lstrlenW(*reg_key_name_buf);
REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_size,
max_sub_key_len + curr_len + 1);
max_sub_key_len + curr_len + 1);
REGPROC_resize_char_buffer(val_name_buf, val_name_size,
max_val_name_len);
max_val_name_len);
REGPROC_resize_binary_buffer(val_buf, val_size, max_val_size);
REGPROC_resize_char_buffer(line_buf, line_buf_size, lstrlenW(*reg_key_name_buf) + 4);
/* output data for the current key */
@ -1098,26 +1169,34 @@ static void export_hkey(FILE *file, HKEY key,
/* print all the values */
i = 0;
more_data = TRUE;
while(more_data) {
while(more_data)
{
DWORD value_type;
DWORD val_name_size1 = *val_name_size;
DWORD val_size1 = *val_size;
ret = RegEnumValueW(key, i, *val_name_buf, &val_name_size1, NULL,
&value_type, *val_buf, &val_size1);
if (ret == ERROR_MORE_DATA) {
&value_type, *val_buf, &val_size1);
if (ret == ERROR_MORE_DATA)
{
/* Increase the size of the buffers and retry */
REGPROC_resize_char_buffer(val_name_buf, val_name_size, val_name_size1);
REGPROC_resize_binary_buffer(val_buf, val_size, val_size1);
} else if (ret != ERROR_SUCCESS) {
}
else if (ret != ERROR_SUCCESS)
{
more_data = FALSE;
if (ret != ERROR_NO_MORE_ITEMS) {
if (ret != ERROR_NO_MORE_ITEMS)
{
REGPROC_print_error();
}
} else {
}
else
{
DWORD line_len;
i++;
if ((*val_name_buf)[0]) {
if ((*val_name_buf)[0])
{
const WCHAR val_start[] = {'"','%','s','"','=',0};
line_len = 0;
@ -1128,22 +1207,28 @@ static void export_hkey(FILE *file, HKEY key,
line_len = 3 + lstrlenW(*val_name_buf);
REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
wsprintfW(*line_buf, val_start, *val_name_buf);
} else {
}
else
{
const WCHAR std_val[] = {'@','=',0};
line_len = 2;
REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
lstrcpyW(*line_buf, std_val);
}
switch (value_type) {
switch (value_type)
{
case REG_SZ:
{
WCHAR* wstr = (WCHAR*)*val_buf;
if (val_size1 < sizeof(WCHAR) || val_size1 % sizeof(WCHAR) ||
wstr[val_size1 / sizeof(WCHAR) - 1]) {
wstr[val_size1 / sizeof(WCHAR) - 1])
{
REGPROC_export_binary(line_buf, line_buf_size, &line_len, value_type, *val_buf, val_size1, unicode);
} else {
}
else
{
const WCHAR start[] = {'"',0};
const WCHAR end[] = {'"','\n',0};
DWORD len;
@ -1178,14 +1263,14 @@ static void export_hkey(FILE *file, HKEY key,
char* key_nameA = GetMultiByteString(*reg_key_name_buf);
char* value_nameA = GetMultiByteString(*val_name_buf);
fprintf(stderr,"%s: warning - unsupported registry format '%ld', "
"treat as binary\n",
getAppName(), value_type);
"treat as binary\n",
getAppName(), value_type);
fprintf(stderr,"key name: \"%s\"\n", key_nameA);
fprintf(stderr,"value name:\"%s\"\n\n", value_nameA);
HeapFree(GetProcessHeap(), 0, key_nameA);
HeapFree(GetProcessHeap(), 0, value_nameA);
}
/* falls through */
/* falls through */
case REG_EXPAND_SZ:
case REG_MULTI_SZ:
/* falls through */
@ -1199,30 +1284,40 @@ static void export_hkey(FILE *file, HKEY key,
i = 0;
more_data = TRUE;
(*reg_key_name_buf)[curr_len] = '\\';
while(more_data) {
while(more_data)
{
DWORD buf_size = *reg_key_name_size - curr_len - 1;
ret = RegEnumKeyExW(key, i, *reg_key_name_buf + curr_len + 1, &buf_size,
NULL, NULL, NULL, NULL);
if (ret == ERROR_MORE_DATA) {
NULL, NULL, NULL, NULL);
if (ret == ERROR_MORE_DATA)
{
/* Increase the size of the buffer and retry */
REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_size, curr_len + 1 + buf_size);
} else if (ret != ERROR_SUCCESS) {
}
else if (ret != ERROR_SUCCESS)
{
more_data = FALSE;
if (ret != ERROR_NO_MORE_ITEMS) {
if (ret != ERROR_NO_MORE_ITEMS)
{
REGPROC_print_error();
}
} else {
}
else
{
HKEY subkey;
i++;
if (RegOpenKeyW(key, *reg_key_name_buf + curr_len + 1,
&subkey) == ERROR_SUCCESS) {
&subkey) == ERROR_SUCCESS)
{
export_hkey(file, subkey, reg_key_name_buf, reg_key_name_size,
val_name_buf, val_name_size, val_buf, val_size,
line_buf, line_buf_size, unicode);
val_name_buf, val_name_size, val_buf, val_size,
line_buf, line_buf_size, unicode);
RegCloseKey(subkey);
} else {
}
else
{
REGPROC_print_error();
}
}
@ -1246,7 +1341,8 @@ static FILE *REGPROC_open_export_file(WCHAR *file_name, BOOL unicode)
file = _wfopen(file_name, L"wb");
else
file = _wfopen(file_name, L"w");
if (!file) {
if (!file)
{
CHAR* file_nameA = GetMultiByteString(file_name);
perror("");
fprintf(stderr,"%s: Can't open file \"%s\"\n", getAppName(), file_nameA);
@ -1291,75 +1387,87 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
BOOL unicode = (format == REG_FORMAT_5);
reg_key_name_buf = HeapAlloc(GetProcessHeap(), 0,
reg_key_name_size * sizeof(*reg_key_name_buf));
reg_key_name_size * sizeof(*reg_key_name_buf));
val_name_buf = HeapAlloc(GetProcessHeap(), 0,
val_name_size * sizeof(*val_name_buf));
val_name_size * sizeof(*val_name_buf));
val_buf = HeapAlloc(GetProcessHeap(), 0, val_size);
line_buf = HeapAlloc(GetProcessHeap(), 0, line_buf_size * sizeof(*line_buf));
CHECK_ENOUGH_MEMORY(reg_key_name_buf && val_name_buf && val_buf && line_buf);
if (reg_key_name && reg_key_name[0]) {
if (reg_key_name && reg_key_name[0])
{
HKEY reg_key_class;
WCHAR *branch_name = NULL;
HKEY key;
REGPROC_resize_char_buffer(&reg_key_name_buf, &reg_key_name_size,
lstrlenW(reg_key_name));
lstrlenW(reg_key_name));
lstrcpyW(reg_key_name_buf, reg_key_name);
/* open the specified key */
if (!parseKeyName(reg_key_name, &reg_key_class, &branch_name)) {
if (!parseKeyName(reg_key_name, &reg_key_class, &branch_name))
{
CHAR* key_nameA = GetMultiByteString(reg_key_name);
fprintf(stderr,"%s: Incorrect registry class specification in '%s'\n",
getAppName(), key_nameA);
getAppName(), key_nameA);
HeapFree(GetProcessHeap(), 0, key_nameA);
exit(1);
}
if (!branch_name[0]) {
if (!branch_name[0])
{
/* no branch - registry class is specified */
file = REGPROC_open_export_file(file_name, unicode);
export_hkey(file, reg_key_class,
&reg_key_name_buf, &reg_key_name_size,
&val_name_buf, &val_name_size,
&val_buf, &val_size, &line_buf,
&line_buf_size, unicode);
} else if (RegOpenKeyW(reg_key_class, branch_name, &key) == ERROR_SUCCESS) {
&reg_key_name_buf, &reg_key_name_size,
&val_name_buf, &val_name_size,
&val_buf, &val_size, &line_buf,
&line_buf_size, unicode);
}
else if (RegOpenKeyW(reg_key_class, branch_name, &key) == ERROR_SUCCESS)
{
file = REGPROC_open_export_file(file_name, unicode);
export_hkey(file, key,
&reg_key_name_buf, &reg_key_name_size,
&val_name_buf, &val_name_size,
&val_buf, &val_size, &line_buf,
&line_buf_size, unicode);
&reg_key_name_buf, &reg_key_name_size,
&val_name_buf, &val_name_size,
&val_buf, &val_size, &line_buf,
&line_buf_size, unicode);
RegCloseKey(key);
} else {
}
else
{
CHAR* key_nameA = GetMultiByteString(reg_key_name);
fprintf(stderr,"%s: Can't export. Registry key '%s' does not exist!\n",
getAppName(), key_nameA);
getAppName(), key_nameA);
HeapFree(GetProcessHeap(), 0, key_nameA);
REGPROC_print_error();
}
} else {
}
else
{
unsigned int i;
/* export all registry classes */
file = REGPROC_open_export_file(file_name, unicode);
for (i = 0; i < REG_CLASS_NUMBER; i++) {
for (i = 0; i < REG_CLASS_NUMBER; i++)
{
/* do not export HKEY_CLASSES_ROOT */
if (reg_class_keys[i] != HKEY_CLASSES_ROOT &&
reg_class_keys[i] != HKEY_CURRENT_USER &&
reg_class_keys[i] != HKEY_CURRENT_CONFIG &&
reg_class_keys[i] != HKEY_DYN_DATA) {
reg_class_keys[i] != HKEY_CURRENT_USER &&
reg_class_keys[i] != HKEY_CURRENT_CONFIG &&
reg_class_keys[i] != HKEY_DYN_DATA)
{
lstrcpyW(reg_key_name_buf, reg_class_namesW[i]);
export_hkey(file, reg_class_keys[i],
&reg_key_name_buf, &reg_key_name_size,
&val_name_buf, &val_name_size,
&val_buf, &val_size, &line_buf,
&line_buf_size, unicode);
&reg_key_name_buf, &reg_key_name_size,
&val_name_buf, &val_name_size,
&val_buf, &val_size, &line_buf,
&line_buf_size, unicode);
}
}
}
if (file) {
if (file)
{
fclose(file);
}
HeapFree(GetProcessHeap(), 0, reg_key_name);
@ -1382,7 +1490,8 @@ BOOL import_registry_file(FILE* reg_file)
if (s[0] == 0xff && s[1] == 0xfe)
{
processRegLinesW(reg_file);
} else
}
else
{
fseek(reg_file, 0, SEEK_SET);
processRegLinesA(reg_file);
@ -1408,17 +1517,19 @@ void delete_registry_key(WCHAR *reg_key_name)
if (!reg_key_name || !reg_key_name[0])
return;
if (!parseKeyName(reg_key_name, &key_class, &key_name)) {
if (!parseKeyName(reg_key_name, &key_class, &key_name))
{
char* reg_key_nameA = GetMultiByteString(reg_key_name);
fprintf(stderr,"%s: Incorrect registry class specification in '%s'\n",
getAppName(), reg_key_nameA);
getAppName(), reg_key_nameA);
HeapFree(GetProcessHeap(), 0, reg_key_nameA);
exit(1);
}
if (!*key_name) {
if (!*key_name)
{
char* reg_key_nameA = GetMultiByteString(reg_key_name);
fprintf(stderr,"%s: Can't delete registry class '%s'\n",
getAppName(), reg_key_nameA);
getAppName(), reg_key_nameA);
HeapFree(GetProcessHeap(), 0, reg_key_nameA);
exit(1);
}

View file

@ -42,19 +42,22 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPTSTR* pKe
item.hItem = hItem;
if (!TreeView_GetItem(hwndTV, &item)) return FALSE;
if (item.lParam) {
/* found root key with valid key value */
*phKey = (HKEY)item.lParam;
return TRUE;
if (item.lParam)
{
/* found root key with valid key value */
*phKey = (HKEY)item.lParam;
return TRUE;
}
if(!get_item_path(hwndTV, TreeView_GetParent(hwndTV, hItem), phKey, pKeyPath, pPathLen, pMaxLen)) return FALSE;
if (*pPathLen) {
if (*pPathLen)
{
(*pKeyPath)[*pPathLen] = _T('\\');
++(*pPathLen);
}
do {
do
{
item.mask = TVIF_TEXT;
item.hItem = hItem;
item.pszText = *pKeyPath + *pPathLen;
@ -62,15 +65,17 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPTSTR* pKe
item.cchTextMax = (int) maxLen;
if (!TreeView_GetItem(hwndTV, &item)) return FALSE;
len = _tcslen(item.pszText);
if (len < maxLen - 1) {
if (len < maxLen - 1)
{
*pPathLen += (int) len;
break;
}
newStr = HeapReAlloc(GetProcessHeap(), 0, *pKeyPath, *pMaxLen * 2);
if (!newStr) return FALSE;
*pKeyPath = newStr;
*pMaxLen *= 2;
} while(TRUE);
}
newStr = HeapReAlloc(GetProcessHeap(), 0, *pKeyPath, *pMaxLen * 2);
if (!newStr) return FALSE;
*pKeyPath = newStr;
*pMaxLen *= 2;
}
while(TRUE);
return TRUE;
}
@ -87,9 +92,10 @@ LPCTSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY* phRootKey)
if (maxLen == -1) return NULL;
if (!hItem) hItem = TreeView_GetSelection(hwndTV);
if (!hItem) return NULL;
if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen)) {
return NULL;
}
if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen))
{
return NULL;
}
return pathBuffer;
}
@ -106,8 +112,10 @@ static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPTSTR label, HK
TVITEM tvi;
TVINSERTSTRUCT tvins;
if (hKey) {
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
if (hKey)
{
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
{
dwChildren = 0;
}
}
@ -140,15 +148,20 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
KeyPath = GetItemPath(hwndTV, hItem, &hRoot);
if (*KeyPath) {
if (RegOpenKeyEx(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
if (*KeyPath)
{
if (RegOpenKeyEx(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
goto done;
}
} else {
}
else
{
hKey = hRoot;
}
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
{
goto done;
}
@ -156,19 +169,22 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
tvItem.mask = TVIF_CHILDREN;
tvItem.hItem = hItem;
tvItem.cChildren = dwCount;
if (!TreeView_SetItem(hwndTV, &tvItem)) {
if (!TreeView_SetItem(hwndTV, &tvItem))
{
goto done;
}
/* We don't have to bother with the rest if it's not expanded. */
if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDED) == 0) {
if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDED) == 0)
{
RegCloseKey(hKey);
bSuccess = TRUE;
goto done;
}
dwMaxSubKeyLen++; /* account for the \0 terminator */
if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR)))) {
if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR))))
{
goto done;
}
tvItem.cchTextMax = dwMaxSubKeyLen;
@ -185,7 +201,8 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
DWORD dwStep = 10000;
for (childItem = TreeView_GetChild(hwndTV, hItem); childItem;
childItem = TreeView_GetNextSibling(hwndTV, childItem)) {
childItem = TreeView_GetNextSibling(hwndTV, childItem))
{
if (dwActualSize + dwMaxSubKeyLen + 1 > dwPhysicalSize)
{
@ -218,40 +235,50 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
/* Now go through all the children in the tree, and check if any have to be removed. */
childItem = TreeView_GetChild(hwndTV, hItem);
while (childItem) {
while (childItem)
{
HTREEITEM nextItem = TreeView_GetNextSibling(hwndTV, childItem);
if (RefreshTreeItem(hwndTV, childItem) == FALSE) {
if (RefreshTreeItem(hwndTV, childItem) == FALSE)
{
(void)TreeView_DeleteItem(hwndTV, childItem);
}
childItem = nextItem;
}
/* Now go through all the children in the registry, and check if any have to be added. */
/* Now go through all the children in the registry, and check if any have to be added. */
bAddedAny = FALSE;
for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
{
DWORD cName = dwMaxSubKeyLen, dwSubCount;
BOOL found;
found = FALSE;
if (RegEnumKeyEx(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS) {
if (RegEnumKeyEx(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS)
{
continue;
}
/* Check if the node is already in there. */
if (pszNodes) {
for (s = pszNodes; *s; s += _tcslen(s) + 1) {
if (!_tcscmp(s, Name)) {
if (pszNodes)
{
for (s = pszNodes; *s; s += _tcslen(s) + 1)
{
if (!_tcscmp(s, Name))
{
found = TRUE;
break;
}
}
}
if (found == FALSE) {
if (found == FALSE)
{
/* Find the number of children of the node. */
dwSubCount = 0;
if (RegOpenKeyEx(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS) {
if (RegQueryInfoKey(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
if (RegOpenKeyEx(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
{
if (RegQueryInfoKey(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
{
dwSubCount = 0;
}
RegCloseKey(hSubKey);
@ -287,7 +314,8 @@ BOOL RefreshTreeView(HWND hwndTV)
SendMessage(hwndTV, WM_SETREDRAW, FALSE, 0);
hItem = TreeView_GetChild(hwndTV, TreeView_GetRoot(hwndTV));
while (hItem) {
while (hItem)
{
RefreshTreeItem(hwndTV, hItem);
hItem = TreeView_GetNextSibling(hwndTV, hItem);
}
@ -325,7 +353,7 @@ HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPTSTR name)
hNewItem = AddEntryToTree(hwndTV, hItem, name, 0, 0);
SendMessage(hwndTV, TVM_SORTCHILDREN, 0, (LPARAM) hItem);
}
else
else
{
item.mask = TVIF_CHILDREN | TVIF_HANDLE;
item.hItem = hItem;
@ -388,11 +416,11 @@ static BOOL InitTreeViewItems(HWND hwndTV, LPTSTR pHostName)
if (!AddEntryToTree(hwndTV, hRoot, _T("HKEY_USERS"), HKEY_USERS, 1)) return FALSE;
if (!AddEntryToTree(hwndTV, hRoot, _T("HKEY_CURRENT_CONFIG"), HKEY_CURRENT_CONFIG, 1)) return FALSE;
if (GetVersion() & 0x80000000)
if (GetVersion() & 0x80000000)
{
/* Win9x specific key */
if (!AddEntryToTree(hwndTV, hRoot, _T("HKEY_DYN_DATA"), HKEY_DYN_DATA, 1)) return FALSE;
}
}
/* expand and select host name */
(void)TreeView_Expand(hwndTV, hRoot, TVE_EXPAND);
@ -431,8 +459,8 @@ static BOOL InitTreeViewImageLists(HWND hwndTV)
0);
if (hico)
{
Image_Open = ImageList_AddIcon(himl, hico);
DestroyIcon(hico);
Image_Open = ImageList_AddIcon(himl, hico);
DestroyIcon(hico);
}
hico = LoadImage(hInst,
@ -443,8 +471,8 @@ static BOOL InitTreeViewImageLists(HWND hwndTV)
0);
if (hico)
{
Image_Closed = ImageList_AddIcon(himl, hico);
DestroyIcon(hico);
Image_Closed = ImageList_AddIcon(himl, hico);
DestroyIcon(hico);
}
hico = LoadImage(hInst,
@ -455,8 +483,8 @@ static BOOL InitTreeViewImageLists(HWND hwndTV)
0);
if (hico)
{
Image_Root = ImageList_AddIcon(himl, hico);
DestroyIcon(hico);
Image_Root = ImageList_AddIcon(himl, hico);
DestroyIcon(hico);
}
/* Fail if not all of the images were added. */
@ -483,7 +511,8 @@ BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv)
static int expanding;
if (expanding) return FALSE;
if (pnmtv->itemNew.state & TVIS_EXPANDEDONCE ) {
if (pnmtv->itemNew.state & TVIS_EXPANDEDONCE )
{
return TRUE;
}
expanding = TRUE;
@ -493,11 +522,14 @@ BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv)
keyPath = GetItemPath(hwndTV, pnmtv->itemNew.hItem, &hRoot);
if (!keyPath) goto done;
if (*keyPath) {
if (*keyPath)
{
errCode = RegOpenKeyEx(hRoot, keyPath, 0, KEY_READ, &hNewKey);
if (errCode != ERROR_SUCCESS) goto done;
} else {
hNewKey = hRoot;
}
else
{
hNewKey = hRoot;
}
errCode = RegQueryInfoKey(hNewKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0);
@ -506,13 +538,15 @@ BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv)
Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR));
if (!Name) goto done;
for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
{
DWORD cName = dwMaxSubKeyLen, dwSubCount;
errCode = RegEnumKeyEx(hNewKey, dwIndex, Name, &cName, 0, 0, 0, 0);
if (errCode != ERROR_SUCCESS) continue;
errCode = RegOpenKeyEx(hNewKey, Name, 0, KEY_QUERY_VALUE, &hKey);
if (errCode == ERROR_SUCCESS) {
if (errCode == ERROR_SUCCESS)
{
errCode = RegQueryInfoKey(hKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0);
RegCloseKey(hKey);
}
@ -611,88 +645,90 @@ HWND CreateTreeView(HWND hwndParent, LPTSTR pHostName, HMENU id)
0, 0, rcClient.right, rcClient.bottom,
hwndParent, id, hInst, NULL);
/* Initialize the image list, and add items to the control. */
if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV, pHostName)) {
if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV, pHostName))
{
DestroyWindow(hwndTV);
return NULL;
}
return hwndTV;
}
void DestroyTreeView() {
if (pathBuffer)
HeapFree(GetProcessHeap(), 0, pathBuffer);
void DestroyTreeView()
{
if (pathBuffer)
HeapFree(GetProcessHeap(), 0, pathBuffer);
}
BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
{
HTREEITEM hRoot, hItem;
HTREEITEM hChildItem;
TCHAR szPathPart[128];
TCHAR szBuffer[128];
LPCTSTR s;
TVITEM tvi;
HTREEITEM hRoot, hItem;
HTREEITEM hChildItem;
TCHAR szPathPart[128];
TCHAR szBuffer[128];
LPCTSTR s;
TVITEM tvi;
/* Total no-good hack */
if (!_tcsnicmp(keyPath, _T("My Computer\\"), 12))
keyPath += 12;
hRoot = TreeView_GetRoot(hwndTV);
hItem = hRoot;
hRoot = TreeView_GetRoot(hwndTV);
hItem = hRoot;
while(keyPath[0])
{
s = _tcschr(keyPath, TEXT('\\'));
lstrcpyn(szPathPart, keyPath, s ? s - keyPath + 1 : _tcslen(keyPath) + 1);
while(keyPath[0])
{
s = _tcschr(keyPath, TEXT('\\'));
lstrcpyn(szPathPart, keyPath, s ? s - keyPath + 1 : _tcslen(keyPath) + 1);
/* Special case for root to expand root key abbreviations */
if (hItem == hRoot)
{
if (!_tcsicmp(szPathPart, TEXT("HKCR")))
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
else if (!_tcsicmp(szPathPart, TEXT("HKU")))
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
}
/* Special case for root to expand root key abbreviations */
if (hItem == hRoot)
{
if (!_tcsicmp(szPathPart, TEXT("HKCR")))
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
else if (!_tcsicmp(szPathPart, TEXT("HKU")))
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
}
for (hChildItem = TreeView_GetChild(hwndTV, hItem); hChildItem;
hChildItem = TreeView_GetNextSibling(hwndTV, hChildItem))
{
memset(&tvi, 0, sizeof(tvi));
tvi.hItem = hChildItem;
tvi.mask = TVIF_TEXT | TVIF_CHILDREN;
tvi.pszText = szBuffer;
tvi.cchTextMax = sizeof(szBuffer) / sizeof(szBuffer[0]);
for (hChildItem = TreeView_GetChild(hwndTV, hItem); hChildItem;
hChildItem = TreeView_GetNextSibling(hwndTV, hChildItem))
{
memset(&tvi, 0, sizeof(tvi));
tvi.hItem = hChildItem;
tvi.mask = TVIF_TEXT | TVIF_CHILDREN;
tvi.pszText = szBuffer;
tvi.cchTextMax = sizeof(szBuffer) / sizeof(szBuffer[0]);
(void)TreeView_GetItem(hwndTV, &tvi);
(void)TreeView_GetItem(hwndTV, &tvi);
if (!_tcsicmp(szBuffer, szPathPart))
break;
}
if (!_tcsicmp(szBuffer, szPathPart))
break;
}
if (!hChildItem)
return FALSE;
if (!hChildItem)
return FALSE;
if (tvi.cChildren > 0)
{
if (!TreeView_Expand(hwndTV, hChildItem, TVE_EXPAND))
return FALSE;
}
if (tvi.cChildren > 0)
{
if (!TreeView_Expand(hwndTV, hChildItem, TVE_EXPAND))
return FALSE;
}
keyPath = s ? s + 1 : _T("");
hItem = hChildItem;
}
keyPath = s ? s + 1 : _T("");
hItem = hChildItem;
}
(void)TreeView_SelectItem(hwndTV, hItem);
(void)TreeView_EnsureVisible(hwndTV, hItem);
(void)TreeView_SelectItem(hwndTV, hItem);
(void)TreeView_EnsureVisible(hwndTV, hItem);
return TRUE;
return TRUE;
}

View file

@ -210,6 +210,11 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
ApplicationPageOnNotify(wParam, lParam);
break;
case WM_KEYDOWN:
if (wParam == VK_DELETE)
ProcessPage_OnEndProcess();
break;
}
return 0;
@ -584,6 +589,14 @@ void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
ApplicationPage_OnSwitchTo();
break;
case LVN_KEYDOWN:
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
ApplicationPage_OnEndTask();
break;
}
}
else if (pnmh->hwndFrom == ListView_GetHeader(hApplicationPageListCtrl))

View file

@ -392,13 +392,13 @@ BEGIN
WS_TABSTOP,125,94,115,10
CONTROL "GDI Objects",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,125,105,115,10
CONTROL "I/O Writes",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX |
CONTROL "Â/È ïèñàíåòà",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,125,116,115,10
CONTROL "I/O Write Bytes",IDC_IOWRITEBYTES,"Button",
CONTROL "Â/È áàéòîâå çà ïèñàíå",IDC_IOWRITEBYTES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,125,127,65,10
CONTROL "I/O Other",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX |
CONTROL "Äðóãè Â/È",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,125,138,115,10
CONTROL "I/O Other Bytes",IDC_IOOTHERBYTES,"Button",
CONTROL "Äðóãè Â/È áàéòîâå",IDC_IOOTHERBYTES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,125,149,115,10
END

View file

@ -201,6 +201,11 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
case WM_NOTIFY:
ProcessPageOnNotify(wParam, lParam);
break;
case WM_KEYDOWN:
if (wParam == VK_DELETE)
ProcessPage_OnEndProcess();
break;
}
return 0;
@ -251,6 +256,12 @@ void ProcessPageOnNotify(WPARAM wParam, LPARAM lParam)
ProcessPageShowContextMenu(GetSelectedProcessId());
break;
case LVN_KEYDOWN:
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
ProcessPage_OnEndProcess();
break;
}
}
else if (pnmh->hwndFrom == hProcessPageHeaderCtrl)

View file

@ -21,49 +21,51 @@
#include "winhelp_res.h"
#pragma code_page(65001)
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
/* Menu */
MAIN_MENU MENU
{
POPUP "파일(&F)" {
MENUITEM "열기(&O)...", MNID_FILE_OPEN
POPUP "파일(&F)" {
MENUITEM "열기(&O)...", MNID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "인쇄(&P)", MNID_FILE_PRINT
MENUITEM "프린터 설정(&S)...", MNID_FILE_SETUP
MENUITEM "인쇄(&P)", MNID_FILE_PRINT
MENUITEM "프린터 설정(&S)...", MNID_FILE_SETUP
MENUITEM SEPARATOR
MENUITEM "종료(&E)", MNID_FILE_EXIT
MENUITEM "종료(&E)", MNID_FILE_EXIT
}
POPUP "편집(&E)" {
MENUITEM "복사(&C)...", MNID_EDIT_COPYDLG
POPUP "편집(&E)" {
MENUITEM "복사(&C)...", MNID_EDIT_COPYDLG
MENUITEM SEPARATOR
MENUITEM "주석(&A)...", MNID_EDIT_ANNOTATE
MENUITEM "주석(&A)...", MNID_EDIT_ANNOTATE
}
POPUP "책갈피(&B)" {
MENUITEM "정의(&D)...", MNID_BKMK_DEFINE
POPUP "책갈피(&B)" {
MENUITEM "정의(&D)...", MNID_BKMK_DEFINE
}
POPUP "옵션(&O)" {
POPUP "가능한 도움말 보이기"
POPUP "옵션(&O)" {
POPUP "가능한 도움말 보이기"
BEGIN
MENUITEM "기본", MNID_OPTS_HELP_DEFAULT
MENUITEM "보이기", MNID_OPTS_HELP_VISIBLE
MENUITEM "보여주지 않기", MNID_OPTS_HELP_NONVISIBLE
MENUITEM "기본", MNID_OPTS_HELP_DEFAULT
MENUITEM "보이기", MNID_OPTS_HELP_VISIBLE
MENUITEM "보여주지 않기", MNID_OPTS_HELP_NONVISIBLE
END
MENUITEM "기록", MNID_OPTS_HISTORY
POPUP "글꼴"
MENUITEM "기록", MNID_OPTS_HISTORY
POPUP "글꼴"
BEGIN
MENUITEM "작게", MNID_OPTS_FONTS_SMALL
MENUITEM "보통", MNID_OPTS_FONTS_NORMAL
MENUITEM "크게", MNID_OPTS_FONTS_LARGE
MENUITEM "작게", MNID_OPTS_FONTS_SMALL
MENUITEM "보통", MNID_OPTS_FONTS_NORMAL
MENUITEM "크게", MNID_OPTS_FONTS_LARGE
END
MENUITEM "시스템 색상 사용", MNID_OPTS_SYSTEM_COLORS
MENUITEM "시스템 색상 사용", MNID_OPTS_SYSTEM_COLORS
}
POPUP "도움말(&H)" {
MENUITEM "도움말 사용법(&O)", MNID_HELP_HELPON
MENUITEM "항상 위(&T)", MNID_HELP_HELPTOP
POPUP "도움말(&H)" {
MENUITEM "도움말 사용법(&O)", MNID_HELP_HELPON
MENUITEM "항상 위(&T)", MNID_HELP_HELPTOP
MENUITEM SEPARATOR
MENUITEM "정보(&I)...", MNID_HELP_ABOUT
MENUITEM "Wine 도움말 정보(&I)...", MNID_HELP_ABOUT
}
}
@ -71,7 +73,7 @@ MAIN_MENU MENU
IDD_INDEX DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 9, "MS Shell Dlg"
CAPTION "인덱스"
CAPTION "인덱스"
{
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}
@ -79,50 +81,50 @@ CAPTION "
IDD_SEARCH DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 9, "MS Shell Dlg"
CAPTION "찾기"
CAPTION "찾기"
{
LTEXT "아직 구현되지 않음", -1, 10, 10, 180, 150
LTEXT "아직 구현되지 않음", -1, 10, 10, 180, 150
}
/* Strings */
STRINGTABLE
{
STID_WINE_HELP, "Wine 도움말"
STID_WHERROR, "에러"
STID_WARNING, "경고"
STID_INFO, "정보"
STID_NOT_IMPLEMENTED, "구현되지 않았음"
STID_HLPFILE_ERROR_s, "도움말 파일 `%s'를 읽는 도중 오류 발생"
STID_INDEX, "목차(&C)"
STID_CONTENTS, "요약"
STID_BACK, "뒤로(&B)"
STID_ALL_FILES, "모든 파일 (*.*)"
STID_HELP_FILES_HLP, "도움말 파일 (*.hlp)"
STID_FILE_NOT_FOUND_s "%s을 찾을 수 없습니다'. 이 파일을 직접 찾겠습니까?"
STID_NO_RICHEDIT "richedit 구현을 찾을수 업습니다.. 취소중"
STID_PSH_INDEX, "도움말 목차: "
STID_WINE_HELP, "Wine 도움말"
STID_WHERROR, "에러"
STID_WARNING, "경고"
STID_INFO, "정보"
STID_NOT_IMPLEMENTED, "구현되지 않았음"
STID_HLPFILE_ERROR_s, "도움말 파일 `%s'를 읽는 도중 오류 발생"
STID_INDEX, "목차(&C)"
STID_CONTENTS, "요약"
STID_BACK, "뒤로(&B)"
STID_ALL_FILES, "모든 파일 (*.*)"
STID_HELP_FILES_HLP, "도움말 파일 (*.hlp)"
STID_FILE_NOT_FOUND_s "%s을 찾을 수 없습니다'. 이 파일을 직접 찾겠습니까?"
STID_NO_RICHEDIT "richedit 구현을 찾을수 업습니다.. 취소중"
STID_PSH_INDEX, "도움말 목차: "
}
CONTEXT_MENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "주석...", MNID_CTXT_ANNOTATE
MENUITEM "복사", MNID_CTXT_COPY
MENUITEM "인쇄...", MNID_CTXT_PRINT
POPUP "글꼴"
MENUITEM "주석...", MNID_CTXT_ANNOTATE
MENUITEM "복사", MNID_CTXT_COPY
MENUITEM "인쇄...", MNID_CTXT_PRINT
POPUP "글꼴"
BEGIN
MENUITEM "좁게", MNID_CTXT_FONTS_SMALL
MENUITEM "보통", MNID_CTXT_FONTS_NORMAL
MENUITEM "넓게", MNID_CTXT_FONTS_LARGE
MENUITEM "좁게", MNID_CTXT_FONTS_SMALL
MENUITEM "보통", MNID_CTXT_FONTS_NORMAL
MENUITEM "넓게", MNID_CTXT_FONTS_LARGE
END
POPUP "도움말 항상 보이기"
POPUP "도움말 항상 보이기"
BEGIN
MENUITEM "기본", MNID_CTXT_HELP_DEFAULT
MENUITEM "보이기", MNID_CTXT_HELP_VISIBLE
MENUITEM "안 보이기", MNID_CTXT_HELP_NONVISIBLE
MENUITEM "기본", MNID_CTXT_HELP_DEFAULT
MENUITEM "보이기", MNID_CTXT_HELP_VISIBLE
MENUITEM "안 보이기", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "시스템 색상 사용", MNID_CTXT_SYSTEM_COLORS
MENUITEM "시스템 색상 사용", MNID_CTXT_SYSTEM_COLORS
END
END

View file

@ -4,6 +4,7 @@
*
* Copyright 2002 liuspider <liuspider@yahoo.com>
* Copyright 2008 Hongbo Ni <hongbo.at.njstar.com>
* Copyright 2010 Cheer Xiao <xiaqqaix.at.gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -37,7 +38,7 @@ MAIN_MENU MENU
MENUITEM "打印(&P)", MNID_FILE_PRINT
MENUITEM "打印机设置(&S)...", MNID_FILE_SETUP
MENUITEM SEPARATOR
MENUITEM "退出(&E)", MNID_FILE_EXIT
MENUITEM "退出(&X)", MNID_FILE_EXIT
}
POPUP "编辑(&E)" {
MENUITEM "复制(&C)...", MNID_EDIT_COPYDLG
@ -48,7 +49,7 @@ MAIN_MENU MENU
MENUITEM "定义(&D)...", MNID_BKMK_DEFINE
}
POPUP "选项(&O)" {
POPUP "显示帮助"
POPUP "总是显示帮助"
BEGIN
MENUITEM "默认", MNID_OPTS_HELP_DEFAULT
MENUITEM "显示", MNID_OPTS_HELP_VISIBLE
@ -67,10 +68,26 @@ MAIN_MENU MENU
MENUITEM "如何使用帮助(&O)", MNID_HELP_HELPON
MENUITEM "总是在最前面(&T)", MNID_HELP_HELPTOP
MENUITEM SEPARATOR
MENUITEM "资料信息(&I)...", MNID_HELP_ABOUT
MENUITEM "关于 Wine 帮助(&I)...", MNID_HELP_ABOUT
}
}
IDD_INDEX DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "索引"
{
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}
IDD_SEARCH DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "搜索"
{
LTEXT "尚未实现", -1, 10, 10, 180, 150
}
/* Strings */
STRINGTABLE
{
@ -79,17 +96,40 @@ STID_WHERROR, "错误"
STID_WARNING, "警告"
STID_INFO, "信息"
STID_NOT_IMPLEMENTED, "未实现"
STID_HLPFILE_ERROR_s, "读入帮助文件 %s 时发生错误"
STID_INDEX, "内容(&C)"
STID_HLPFILE_ERROR_s, "读入帮助文件“%s”时发生错误"
STID_INDEX, "索引(&I)"
STID_CONTENTS, "概要"
STID_BACK, "返回(&B)"
STID_ALL_FILES, "所有文件 (*.*)"
STID_HELP_FILES_HLP, "帮助文件 (*.hlp)"
STID_FILE_NOT_FOUND_s "不能打开文件 '%s'. 你想要自己找这个文件吗?"
STID_NO_RICHEDIT "找不到 richedit... 终止"
STID_PSH_INDEX, "帮助内容: "
STID_FILE_NOT_FOUND_s "找不到文件“%s”。 你想要自己找这个文件吗?"
STID_NO_RICHEDIT "找不到 richedit 的实现……终止"
STID_PSH_INDEX, "帮助主题:"
}
CONTEXT_MENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "注释...", MNID_CTXT_ANNOTATE
MENUITEM "复制", MNID_CTXT_COPY
MENUITEM "打印...", MNID_CTXT_PRINT
POPUP "字体"
BEGIN
MENUITEM "小号", MNID_CTXT_FONTS_SMALL
MENUITEM "中号", MNID_CTXT_FONTS_NORMAL
MENUITEM "大号", MNID_CTXT_FONTS_LARGE
END
POPUP "总是显示帮助"
BEGIN
MENUITEM "默认", MNID_CTXT_HELP_DEFAULT
MENUITEM "显示", MNID_CTXT_HELP_VISIBLE
MENUITEM "不显示", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "使用系统颜色", MNID_CTXT_SYSTEM_COLORS
END
END
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
/* Menu */

View file

@ -30,7 +30,6 @@ IDI_WINHELP ICON winhelp.ico
#include "Es.rc"
#include "Fi.rc"
#include "Hu.rc"
#include "Ko.rc"
#include "No.rc"
#include "Pl.rc"
#include "Sk.rc"
@ -44,6 +43,7 @@ IDI_WINHELP ICON winhelp.ico
#include "He.rc"
#include "It.rc"
#include "Ja.rc"
#include "Ko.rc"
#include "Lt.rc"
#include "Nl.rc"
#include "Pt.rc"

View file

@ -61,7 +61,7 @@ BEGIN
MENUITEM SEPARATOR
POPUP "其他(&X)"
BEGIN
MENUITEM "选中信息(&I)", ID_EDIT_SELECTIONINFO
MENUITEM "选中信息(&I)", ID_EDIT_SELECTIONINFO /* 准确性待议 */
MENUITEM "文字格式(&F)", ID_EDIT_CHARFORMAT
MENUITEM "默认格式(&D)", ID_EDIT_DEFCHARFORMAT
MENUITEM "段落格式(&H)", ID_EDIT_PARAFORMAT
@ -107,8 +107,8 @@ BEGIN
MENUITEM "复制(&C)", ID_EDIT_COPY
MENUITEM "粘贴(&P)", ID_EDIT_PASTE
MENUITEM SEPARATOR
MENUITEM "项目符号(&B)", ID_BULLET
MENUITEM "段落(&P)...", ID_PARAFORMAT
MENUITEM "项目符号(&B)", ID_BULLET
MENUITEM "段落(&P)...", ID_PARAFORMAT
END
END
@ -118,21 +118,21 @@ BEGIN
BEGIN
MENUITEM "黑色", ID_COLOR_BLACK /* 未找到“标准译名表” */
MENUITEM "栗色", ID_COLOR_MAROON
MENUITEM "调和绿", ID_COLOR_GREEN
MENUITEM "橄榄色", ID_COLOR_OLIVE
MENUITEM "藏青", ID_COLOR_NAVY
MENUITEM "紫色", ID_COLOR_PURPLE
MENUITEM "鸭翅绿", ID_COLOR_TEAL
MENUITEM "灰色", ID_COLOR_GRAY
MENUITEM "银色", ID_COLOR_SILVER
MENUITEM "红色", ID_COLOR_RED
MENUITEM "绿色", ID_COLOR_LIME
MENUITEM "黄色", ID_COLOR_YELLOW
MENUITEM "蓝色", ID_COLOR_BLUE
MENUITEM "洋红", ID_COLOR_FUCHSIA /* =magenta? */
MENUITEM "水绿", ID_COLOR_AQUA
MENUITEM "白色", ID_COLOR_WHITE
MENUITEM "自动", ID_COLOR_AUTOMATIC
MENUITEM "绿", ID_COLOR_GREEN
MENUITEM "橄榄色", ID_COLOR_OLIVE
MENUITEM "藏青", ID_COLOR_NAVY
MENUITEM "紫色", ID_COLOR_PURPLE
MENUITEM "鸭翅绿", ID_COLOR_TEAL
MENUITEM "灰色", ID_COLOR_GRAY
MENUITEM "银色", ID_COLOR_SILVER
MENUITEM "红色", ID_COLOR_RED
MENUITEM "青柠色", ID_COLOR_LIME
MENUITEM "黄色", ID_COLOR_YELLOW
MENUITEM "蓝色", ID_COLOR_BLUE
MENUITEM "洋红", ID_COLOR_FUCHSIA /* =magenta? */
MENUITEM "水绿", ID_COLOR_AQUA
MENUITEM "白色", ID_COLOR_WHITE
MENUITEM "自动", ID_COLOR_AUTOMATIC
END
END
@ -359,8 +359,8 @@ BEGIN
MENUITEM "複製(&C)", ID_EDIT_COPY
MENUITEM "貼上(&P)", ID_EDIT_PASTE
MENUITEM SEPARATOR
MENUITEM "子彈點(&B)", ID_BULLET
MENUITEM "段落(&P)...", ID_PARAFORMAT
MENUITEM "子彈點(&B)", ID_BULLET
MENUITEM "段落(&P)...", ID_PARAFORMAT
END
END
@ -487,7 +487,9 @@ BEGIN
STRING_PROMPT_SAVE_CHANGES, "儲存改動到 '%s'?"
STRING_SEARCH_FINISHED, "檔案查找結束."
STRING_LOAD_RICHED_FAILED, "RichEdit 裝載失敗."
STRING_SAVE_LOSEFORMATTING, "你已經選擇儲存為文本檔案, 這可能導致格式丟失. 你確定要這麼做嗎?"
STRING_SAVE_LOSEFORMATTING, "你已經選擇儲存為文本檔案, " \
"這可能導致格式丟失. " \
"你確定要這麼做嗎?"
STRING_INVALID_NUMBER, "數字格式無效"
STRING_OLE_STORAGE_NOT_SUPPORTED, "不支援OLE 儲存檔案"
STRING_WRITE_FAILED, "不能儲存檔案."

View file

@ -162,7 +162,7 @@ static void AddButton(HWND hwndToolBar, int nImage, int nCommand)
button.iBitmap = nImage;
button.idCommand = nCommand;
button.fsState = TBSTATE_ENABLED;
button.fsStyle = TBSTYLE_BUTTON;
button.fsStyle = BTNS_BUTTON;
button.dwData = 0;
button.iString = -1;
SendMessageW(hwndToolBar, TB_ADDBUTTONSW, 1, (LPARAM)&button);
@ -176,7 +176,7 @@ static void AddSeparator(HWND hwndToolBar)
button.iBitmap = -1;
button.idCommand = 0;
button.fsState = 0;
button.fsStyle = TBSTYLE_SEP;
button.fsStyle = BTNS_SEP;
button.dwData = 0;
button.iString = -1;
SendMessageW(hwndToolBar, TB_ADDBUTTONSW, 1, (LPARAM)&button);
@ -1818,7 +1818,7 @@ static LRESULT OnCreate( HWND hWnd )
if(!SendMessageW(hReBarWnd, RB_SETBARINFO, 0, (LPARAM)&rbi))
return -1;
hToolBarWnd = CreateToolbarEx(hReBarWnd, CCS_NOPARENTALIGN|CCS_NOMOVEY|WS_VISIBLE|WS_CHILD|TBSTYLE_TOOLTIPS|TBSTYLE_BUTTON,
hToolBarWnd = CreateToolbarEx(hReBarWnd, CCS_NOPARENTALIGN|CCS_NOMOVEY|WS_VISIBLE|WS_CHILD|TBSTYLE_TOOLTIPS|BTNS_BUTTON,
IDC_TOOLBAR,
1, hInstance, IDB_TOOLBAR,
NULL, 0,
@ -1880,7 +1880,7 @@ static LRESULT OnCreate( HWND hWnd )
SendMessageW(hReBarWnd, RB_INSERTBAND, -1, (LPARAM)&rbb);
hFormatBarWnd = CreateToolbarEx(hReBarWnd,
CCS_NOPARENTALIGN | CCS_NOMOVEY | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_BUTTON,
CCS_NOPARENTALIGN | CCS_NOMOVEY | WS_VISIBLE | TBSTYLE_TOOLTIPS | BTNS_BUTTON,
IDC_FORMATBAR, 8, hInstance, IDB_FORMATBAR, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON));
AddButton(hFormatBarWnd, 0, ID_FORMAT_BOLD);

View file

@ -0,0 +1,38 @@
/*
* Serbian language support
*
* Copyright (C) 2007 Mikolaj Zalewski
* Copyright 2010 Đorđe Vasiljević
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "resources.h"
#pragma code_page(65001)
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC
STRINGTABLE
{
IDS_FAILED, "Покретање Писанке није успело"
}
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
STRINGTABLE
{
IDS_FAILED, "Pokretanje Pisanke nije uspelo"
}

View file

@ -0,0 +1,31 @@
/*
* Simplified Chinese language support
*
* Copyright (C) 2010 Cheer Xiao <xiaqqaix.at.gmail.com>
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "resources.h"
/* Chinese text is encoded in UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
STRINGTABLE
{
IDS_FAILED, "启动写字板失败"
}

View file

@ -39,4 +39,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#include "Ro.rc"
#include "Ru.rc"
#include "Si.rc"
#include "Sr.rc"
#include "Uk.rc"
#include "Zh.rc"

View file

@ -104,7 +104,7 @@ BOOL PrepareService(LPCTSTR ServiceName)
HeapFree(GetProcessHeap(), 0, Buffer);
/* Load the service dll */
DPRINT1("Trying to load dll\n");
DPRINT("Trying to load dll\n");
hServiceDll = LoadLibrary(DllPath);
if (NULL == hServiceDll)
@ -226,7 +226,7 @@ int _tmain (int argc, LPTSTR argv [])
NrOfServices = LoadServiceCategory(argv[2]);
DPRINT1("NrOfServices: %lu\n", NrOfServices);
DPRINT("NrOfServices: %lu\n", NrOfServices);
if (0 == NrOfServices)
return 0;
@ -240,7 +240,7 @@ int _tmain (int argc, LPTSTR argv [])
/* Fill the service table */
for (i = 0; i < NrOfServices; ++i)
{
DPRINT1("Loading service: %s\n", Service->Name);
DPRINT("Loading service: %s\n", Service->Name);
ServiceTable[i].lpServiceName = Service->Name;
ServiceTable[i].lpServiceProc = Service->ServiceMainFunc;
Service = Service->Next;

View file

@ -94,20 +94,37 @@ static DWORD WINAPI
RpcServerThread(LPVOID lpParameter)
{
RPC_STATUS Status;
BOOLEAN RegisteredProtSeq = FALSE;
UNREFERENCED_PARAMETER(lpParameter);
DPRINT("RpcServerThread() called\n");
#if 0
/* XP-compatible protocol sequence/endpoint */
Status = RpcServerUseProtseqEpW(L"ncacn_np",
20,
L"\\pipe\\umpnpmgr",
L"\\pipe\\ntsvcs",
NULL); // Security descriptor
if (Status != RPC_S_OK)
{
if (Status == RPC_S_OK)
RegisteredProtSeq = TRUE;
else
DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
#endif
/* Vista-compatible protocol sequence/endpoint */
Status = RpcServerUseProtseqEpW(L"ncacn_np",
20,
L"\\pipe\\plugplay",
NULL); // Security descriptor
if (Status == RPC_S_OK)
RegisteredProtSeq = TRUE;
else
DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
/* Make sure there's a usable endpoint */
if (RegisteredProtSeq == FALSE)
return 0;
}
Status = RpcServerRegisterIf(pnp_v1_0_s_ifspec,
NULL,

View file

@ -1496,7 +1496,7 @@ MUI_ERROR bgBGErrorEntries[] =
},
{
//ERROR_INSUFFICIENT_DISKSPACE,
"Not enough free space in the selected partition.\n"
"<EFBFBD>  ¨§΅ΰ ­¨ο ¤ο« ­ο¬  ¤®αβ βκη­® αΆ®΅®¤­® ―ΰ®αβΰ ­αβΆ®.\n"
" * <20> â¨á­¥â¥ ª« ¢¨è, §  ¤  ¯à®¤ê«¦¨â¥.",
NULL
},
@ -1640,7 +1640,7 @@ MUI_STRING bgBGStrings[] =
{STRING_COPYING,
" ‡ ¯¨á ­  ä ©«: %S"},
{STRING_SETUPCOPYINGFILES,
"’¥ç¥ § ¯¨á¢ ­¥ ­  ä ©«®¢¥â¥..."},
"” ©«®Ά¥β¥ α¥ § ―¨αΆ β..."},
{STRING_REGHIVEUPDATE,
" Žáê¢à¥¬¥­ï¢ ­¥ ­  ॣ¨áâê୨⥠஥¢¥..."},
{STRING_IMPORTFILE,

View file

@ -1,7 +1,7 @@
/* FILE: setup/usetup/lang/cs-CZ.rc
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* THANKS TO: preston
* UPDATED: 2010-05-25
* UPDATED: 2010-12-12
*/
#pragma once
@ -993,13 +993,13 @@ static MUI_ENTRY csCZBootLoaderEntries[] =
{
8,
12,
"Install bootloader on the harddisk (MBR and VBR).",
"Nainstalovat zavadŘź na pevně disk (MBR a VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Install bootloader on the harddisk (VBR only).",
"Nainstalovat zavadŘź na pevně disk (pouze VBR).",
TEXT_STYLE_NORMAL
},
{

View file

@ -180,7 +180,7 @@ WORD wDefColor; /* default color */
* insert commas into a number
*/
INT
ConvertULargeInteger(ULONGLONG num, LPTSTR des, INT len, BOOL bPutSeperator)
ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeperator)
{
TCHAR temp[39]; /* maximum length with nNumberGroups == 1 */
UINT n, iTarget;

View file

@ -99,7 +99,7 @@ INT cmd_cls (LPTSTR);
/* Prototypes for CMD.C */
INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, INT len, BOOL bPutSeperator);
INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeperator);
HANDLE RunFile(DWORD, LPTSTR, LPTSTR, LPTSTR, INT);
INT ParseCommandLine(LPTSTR);
struct _PARSED_COMMAND;

View file

@ -131,7 +131,7 @@ static VOID ConWrite(TCHAR *str, DWORD len, DWORD nStdHandle)
error_out_of_memory();
return;
}
len = MultiByteToWideChar(OutputCodePage, 0, str, len, buffer, len, NULL, NULL);
len = MultiByteToWideChar(OutputCodePage, 0, str, len, buffer, len);
str = (PVOID)buffer;
#endif
WriteFile(hOutput, str, len * sizeof(WCHAR), &dwWritten, NULL);

View file

@ -23,6 +23,7 @@
#include <stdarg.h>
#include <math.h>
#include <time.h>
#include <assert.h>
#define NTOS_MODE_USER
#include <ndk/ntndk.h>

View file

@ -152,7 +152,7 @@ CreateDropTarget(IN HWND hwndTarget,
{
CopyMemory(&This->Callbacks,
Callbacks,
sizeof(Callbacks));
sizeof(*Callbacks));
}
hr = CoCreateInstance(&CLSID_DragDropHelper,

View file

@ -1,3 +1,4 @@
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
IDM_TRAYWND MENU DISCARDABLE
@ -36,7 +37,7 @@ BEGIN
MENUITEM "&Ñèãóðíîñò...", IDM_SECURITY, MFT_STRING, MFS_ENABLED
MENUITEM "&Ìðåæîâè âðúçêè", IDM_NETWORKCONNECTIONS, MFT_STRING, MFS_ENABLED
MENUITEM "&Ïå÷àòà÷è è ôàêñîâå", IDM_PRINTERSANDFAXES, MFT_STRING, MFS_ENABLED
MENUITEM "&Taskbar and Start Menu", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED
MENUITEM "&Задачна лента и изборник „Пуск“", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED
END
POPUP "&Òúðñåíå", IDM_SEARCH
BEGIN
@ -49,6 +50,7 @@ BEGIN
MENUITEM "&Èçõîä %s...", IDM_LOGOFF, MFT_STRING, MFS_ENABLED
MENUITEM "&Îòêà÷âàíå...", IDM_DISCONNECT, MFT_STRING, MFS_ENABLED
/* undock computer*/
/* неясно */
MENUITEM "Îò&ãíåçäâàíå íà êîìïþòúðà", IDM_UNDOCKCOMPUTER, MFT_STRING, MFS_ENABLED
MENUITEM "&Èçêëþ÷âàíå...", IDM_SHUTDOWN, MFT_STRING, MFS_ENABLED
END
@ -121,7 +123,7 @@ BEGIN
IDS_PROPERTIES "&Ñâîéñòâà"
IDS_OPEN_ALL_USERS "&Îòâàðÿíå íà âñè÷êè ïîòðåáèòåëè"
IDS_EXPLORE_ALL_USERS "&Ðàçëèñòâàíå íà âñè÷êè ïîòðåáèòåëè"
IDS_STARTUP_ERROR "The system cannot start explorer because the registry is corrupted or unavailable."
IDS_STARTUP_ERROR "Уредбата не може да пусне изследователя, понеже понеже регистърът е увреден или недостъпен."
END
STRINGTABLE DISCARDABLE

Some files were not shown because too many files have changed in this diff Show more