From 9d56b53fe7096f9a0a4af502bf21950b5821a581 Mon Sep 17 00:00:00 2001 From: Jan Zerebecki Date: Sat, 25 Jul 2009 01:12:39 +0200 Subject: [PATCH] push 6377a023768d7480eb1b17e57456824888936b43 --- dlls/advapi32/advapi32.spec | 4 +- dlls/advapi32/tests/service.c | 14 + dlls/appwiz.cpl/Ru.rc | 57 +- dlls/appwiz.cpl/Si.rc | 4 +- dlls/avifil32/avifile_En.rc | 2 +- dlls/avifil32/avifile_Ru.rc | 35 +- dlls/browseui/rsrc_Ru.rc | 7 +- dlls/comctl32/comctl_Ru.rc | 53 +- dlls/comctl32/listview.c | 37 +- dlls/comctl32/tests/listview.c | 181 +++- dlls/comdlg32/cdlg_Ru.rc | 971 +++++++++--------- dlls/credui/credui_Ru.rc | 25 +- dlls/crypt32/crypt32_Lt.rc | 4 +- dlls/cryptui/Makefile.in | 3 +- dlls/cryptui/cryptui_Lt.rc | 4 +- dlls/cryptui/cryptui_Pt.rc | 465 +++++++++ dlls/d3dx9_36/math.c | 60 +- dlls/d3dx9_36/tests/math.c | 35 +- dlls/ddraw/device.c | 4 +- dlls/dplayx/tests/dplayx.c | 133 +++ dlls/gphoto2.ds/gphoto2_Ru.rc | 25 +- dlls/hhctrl.ocx/Ru.rc | 59 +- dlls/iccvid/iccvid_Ru.rc | 7 +- dlls/jscript/Makefile.in | 11 +- dlls/jscript/array.c | 14 +- dlls/jscript/bool.c | 26 +- dlls/jscript/date.c | 370 +++---- dlls/jscript/engine.c | 22 +- dlls/jscript/error.c | 481 +++++++++ dlls/jscript/function.c | 6 +- dlls/jscript/global.c | 76 +- dlls/jscript/jscript.h | 21 + .../Lt.rc => dlls/jscript/jscript_De.rc | 22 +- dlls/jscript/jscript_En.rc | 40 + .../Lt.rc => dlls/jscript/jscript_Fr.rc | 21 +- .../Lt.rc => dlls/jscript/jscript_Lt.rc | 17 +- dlls/jscript/jscript_Nl.rc | 40 + dlls/jscript/jscript_main.c | 2 +- dlls/jscript/jsutils.c | 8 +- dlls/jscript/number.c | 20 +- dlls/jscript/object.c | 2 + dlls/jscript/parser.y | 76 +- dlls/jscript/regexp.c | 13 +- dlls/jscript/resource.h | 35 + dlls/jscript/string.c | 4 +- dlls/jscript/tests/api.js | 90 ++ dlls/kernel32/ne_module.c | 43 +- dlls/kernel32/nls/winerr_fra.mc | 5 + dlls/kernel32/volume.c | 66 +- dlls/localspl/spl_Ru.rc | 7 +- dlls/localui/ui_Lt.rc | 2 +- dlls/localui/ui_Ru.rc | 25 +- dlls/mapi32/version.rc | 4 + dlls/mountmgr.sys/device.c | 630 ++++++++---- dlls/mountmgr.sys/diskarb.c | 29 +- dlls/mountmgr.sys/hal.c | 49 +- dlls/mountmgr.sys/mountmgr.c | 35 +- dlls/mountmgr.sys/mountmgr.h | 12 +- dlls/mpr/mpr_Ru.rc | 19 +- dlls/msacm32/msacm_Ru.rc | 19 +- dlls/mshtml/Ru.rc | 35 +- dlls/mshtml/main.c | 2 + dlls/msrle32/msrle_En.rc | 6 +- dlls/ntdll/nt.c | 9 + dlls/ole32/tests/compobj.c | 13 +- dlls/oleacc/Makefile.in | 3 +- dlls/oleacc/oleacc_Pt.rc | 94 ++ dlls/oledlg/oledlg_Lt.rc | 2 +- dlls/riched20/editor.c | 50 +- dlls/riched20/paint.c | 23 +- dlls/riched20/reader.c | 4 + dlls/riched20/rtf.h | 2 +- dlls/setupapi/Lt.rc | 2 +- dlls/shdoclc/Pt.rc | 4 +- dlls/shell32/control.c | 43 +- dlls/shell32/cpanel.h | 1 + dlls/shell32/shell32_De.rc | 6 +- dlls/shell32/shell32_En.rc | 6 +- dlls/shell32/shell32_Lt.rc | 12 +- dlls/shell32/shellpath.c | 7 +- dlls/shell32/tests/shfldr_special.c | 15 +- dlls/shell32/tests/shlexec.c | 17 +- dlls/user32/button.c | 7 +- dlls/user32/defwnd.c | 2 +- dlls/user32/menu.c | 305 +++--- dlls/user32/tests/menu.c | 98 +- dlls/winealsa.drv/dsoutput.c | 7 + dlls/wined3d/arb_program_shader.c | 50 +- dlls/wined3d/basetexture.c | 6 +- dlls/wined3d/buffer.c | 10 +- dlls/wined3d/context.c | 705 ++++++++----- dlls/wined3d/cubetexture.c | 2 +- dlls/wined3d/device.c | 155 ++- dlls/wined3d/directx.c | 6 +- dlls/wined3d/drawprim.c | 17 +- dlls/wined3d/gl_compat.c | 54 +- dlls/wined3d/glsl_shader.c | 6 +- dlls/wined3d/query.c | 193 ++-- dlls/wined3d/shader_sm4.c | 2 + dlls/wined3d/state.c | 4 +- dlls/wined3d/surface.c | 54 +- dlls/wined3d/swapchain.c | 27 +- dlls/wined3d/texture.c | 2 +- dlls/wined3d/volumetexture.c | 2 +- dlls/wined3d/wined3d_main.c | 32 + dlls/wined3d/wined3d_private.h | 71 +- dlls/winex11.drv/bitblt.c | 3 +- dlls/winex11.drv/bitmap.c | 45 +- dlls/winex11.drv/brush.c | 4 +- dlls/winex11.drv/graphics.c | 2 +- dlls/winex11.drv/x11drv.h | 2 - dlls/winex11.drv/xrender.c | 70 +- dlls/winhttp/net.c | 65 +- dlls/winhttp/request.c | 7 +- dlls/winhttp/session.c | 99 +- dlls/winhttp/tests/winhttp.c | 8 +- dlls/winhttp/winhttp_private.h | 5 +- dlls/wininet/cookie.c | 98 +- dlls/wininet/dialogs.c | 234 ++++- dlls/wininet/http.c | 19 +- dlls/wininet/resource.h | 2 + dlls/wininet/urlcache.c | 93 +- dlls/wininet/wininet_De.rc | 25 +- dlls/wininet/wininet_En.rc | 20 + dlls/wininet/wininet_Fr.rc | 20 + dlls/wininet/wininet_Lt.rc | 20 + dlls/wininet/wininet_Nl.rc | 20 + dlls/ws2_32/socket.c | 29 +- dlls/ws2_32/tests/sock.c | 65 +- include/Makefile.in | 7 + include/binres.idl | 49 + include/crtrow.idl | 51 + dlls/localspl/spl_Ru.rc => include/dbccmd.idl | 27 +- dlls/localspl/spl_Ru.rc => include/dbcses.idl | 27 +- include/dbdsad.idl | 75 ++ include/dbprop.idl | 11 +- include/dbs.idl | 10 + include/msctf.idl | 332 ++++++ include/oledb.idl | 12 +- include/opnrst.idl | 47 + include/sesprp.idl | 51 + include/textstor.idl | 16 +- include/wingdi.h | 4 +- libs/wine/wctomb.c | 9 +- programs/clock/It.rc | 2 +- programs/clock/Ru.rc | 35 +- programs/cmdlgtst/Ru.rc | 125 +-- programs/net/Ru.rc | 39 +- programs/notepad/En.rc | 12 +- programs/notepad/Fr.rc | 4 +- programs/notepad/Ko.rc | 4 +- programs/notepad/Ru.rc | 259 ++--- programs/oleview/Ru.rc | 135 +-- programs/progman/Ru.rc | 202 ++-- programs/reg/Ru.rc | 11 +- programs/regedit/Lt.rc | 10 +- programs/regedit/Ru.rc | 663 ++++++------ programs/start/Lt.rc | 2 +- programs/start/Ru.rc | 47 +- programs/taskmgr/Lt.rc | 2 +- programs/taskmgr/No.rc | 2 +- programs/taskmgr/Ru.rc | 1055 +++++++++++--------- programs/uninstaller/Lt.rc | 2 +- programs/uninstaller/Ru.rc | 7 +- programs/view/Ru.rc | 23 +- programs/wineboot/wineboot_Ru.rc | 13 +- programs/winecfg/En.rc | 4 +- programs/winecfg/Nl.rc | 81 +- programs/winecfg/Pt.rc | 2 +- programs/winecfg/Ru.rc | 667 +++++++------ programs/wineconsole/wineconsole_Ru.rc | 125 +-- programs/winedbg/Makefile.in | 1 + programs/winedbg/{rsrc_Ru.rc => rsrc_Pt.rc} | 34 +- programs/winedbg/rsrc_Ru.rc | 29 +- programs/winefile/Ru.rc | 521 +++++----- programs/winemenubuilder/winemenubuilder.c | 25 +- programs/winemine/Lt.rc | 2 +- programs/winemine/Ru.rc | 49 +- programs/winhlp32/Pt.rc | 92 +- programs/winhlp32/Ru.rc | 241 ++--- programs/winhlp32/macro.c | 7 +- programs/winhlp32/winhelp.c | 2 +- programs/wordpad/Nl.rc | 20 +- programs/wordpad/Ru.rc | 485 ++++----- programs/write/Ru.rc | 5 +- programs/xcopy/Lt.rc | 10 +- programs/xcopy/Ru.rc | 169 ++-- tools/make_makefiles | 7 + tools/wmc/write.c | 9 +- 189 files changed, 8536 insertions(+), 5112 deletions(-) rewrite dlls/comdlg32/cdlg_Ru.rc (60%) create mode 100644 dlls/cryptui/cryptui_Pt.rc create mode 100644 dlls/jscript/error.c copy programs/uninstaller/Lt.rc => dlls/jscript/jscript_De.rc (51%) create mode 100644 dlls/jscript/jscript_En.rc copy programs/uninstaller/Lt.rc => dlls/jscript/jscript_Fr.rc (50%) copy programs/uninstaller/Lt.rc => dlls/jscript/jscript_Lt.rc (57%) create mode 100644 dlls/jscript/jscript_Nl.rc create mode 100644 dlls/jscript/resource.h create mode 100644 dlls/oleacc/oleacc_Pt.rc create mode 100644 include/binres.idl create mode 100644 include/crtrow.idl copy dlls/localspl/spl_Ru.rc => include/dbccmd.idl (54%) copy dlls/localspl/spl_Ru.rc => include/dbcses.idl (54%) create mode 100644 include/dbdsad.idl create mode 100644 include/opnrst.idl create mode 100644 include/sesprp.idl rewrite programs/notepad/Ru.rc (61%) rewrite programs/regedit/Ru.rc (63%) rewrite programs/taskmgr/Ru.rc (62%) rewrite programs/winecfg/Ru.rc (64%) copy programs/winedbg/{rsrc_Ru.rc => rsrc_Pt.rc} (52%) rewrite programs/winefile/Ru.rc (61%) rewrite programs/winhlp32/Ru.rc (66%) rewrite programs/wordpad/Ru.rc (67%) rewrite programs/xcopy/Ru.rc (62%) diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec index d641efdbf2c..e9168aa7c39 100644 --- a/dlls/advapi32/advapi32.spec +++ b/dlls/advapi32/advapi32.spec @@ -98,8 +98,8 @@ @ stdcall CreateProcessAsUserW(long str str ptr ptr long long ptr str ptr ptr) @ stdcall CreateProcessWithLogonW(wstr wstr wstr long wstr wstr long ptr wstr ptr ptr) @ stdcall CreateRestrictedToken(long long long ptr long ptr long ptr ptr) -@ stdcall CreateServiceA(long ptr ptr long long long long ptr ptr ptr ptr ptr ptr) -@ stdcall CreateServiceW (long ptr ptr long long long long ptr ptr ptr ptr ptr ptr) +@ stdcall CreateServiceA(long str str long long long long str str ptr str str str) +@ stdcall CreateServiceW(long wstr wstr long long long long wstr wstr ptr wstr wstr wstr) # @ stub CreateTraceInstanceId @ stdcall CreateWellKnownSid(long ptr ptr ptr) @ stdcall CredDeleteA(str long long) diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c index b924c69d3d4..0851384b70b 100644 --- a/dlls/advapi32/tests/service.c +++ b/dlls/advapi32/tests/service.c @@ -28,6 +28,7 @@ #include "winsvc.h" #include "winnls.h" #include "lmcons.h" +#include "aclapi.h" #include "wine/test.h" @@ -37,6 +38,8 @@ static BOOL (WINAPI *pChangeServiceConfig2A)(SC_HANDLE,DWORD,LPVOID); static BOOL (WINAPI *pEnumServicesStatusExA)(SC_HANDLE, SC_ENUM_TYPE, DWORD, DWORD, LPBYTE, DWORD, LPDWORD, LPDWORD, LPDWORD, LPCSTR); +static DWORD (WINAPI *pGetSecurityInfo)(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, + PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); static BOOL (WINAPI *pQueryServiceConfig2A)(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); static BOOL (WINAPI *pQueryServiceConfig2W)(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); static BOOL (WINAPI *pQueryServiceStatusEx)(SC_HANDLE, SC_STATUS_TYPE, LPBYTE, @@ -48,6 +51,7 @@ static void init_function_pointers(void) pChangeServiceConfig2A = (void*)GetProcAddress(hadvapi32, "ChangeServiceConfig2A"); pEnumServicesStatusExA= (void*)GetProcAddress(hadvapi32, "EnumServicesStatusExA"); + pGetSecurityInfo = (void *)GetProcAddress(hadvapi32, "GetSecurityInfo"); pQueryServiceConfig2A= (void*)GetProcAddress(hadvapi32, "QueryServiceConfig2A"); pQueryServiceConfig2W= (void*)GetProcAddress(hadvapi32, "QueryServiceConfig2W"); pQueryServiceStatusEx= (void*)GetProcAddress(hadvapi32, "QueryServiceStatusEx"); @@ -1743,7 +1747,17 @@ static void test_sequence(void) return; } else + { ok(svc_handle != NULL, "Could not create the service : %d\n", GetLastError()); + if ((svc_handle != NULL) && (pGetSecurityInfo != NULL)) + { + PSID sidOwner, sidGroup; + PACL dacl, sacl; + PSECURITY_DESCRIPTOR pSD; + HRESULT retval = pGetSecurityInfo(svc_handle,SE_SERVICE,DACL_SECURITY_INFORMATION,&sidOwner,&sidGroup,&dacl,&sacl,&pSD); + todo_wine ok(ERROR_SUCCESS == retval, "Expected GetSecurityInfo to succeed: result %d\n",retval); + } + } if (!svc_handle) return; diff --git a/dlls/appwiz.cpl/Ru.rc b/dlls/appwiz.cpl/Ru.rc index e3b00183fd1..4de5991f7d3 100644 --- a/dlls/appwiz.cpl/Ru.rc +++ b/dlls/appwiz.cpl/Ru.rc @@ -21,57 +21,60 @@ #include "res.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE { - IDS_CPL_TITLE, "Óñòàíîâêà/Óäàëåíèå ïðîãðàìì" - IDS_CPL_DESC, "Ïîçâîëÿåò óñòàíàâëèâàòü íîâîå ÏÎ, èëè óäàëÿòü ñóùåñòâóþùåå ñ Âàøåãî êîìïüþòåðà." - IDS_TAB1_TITLE, "Ïðèëîæåíèÿ" + IDS_CPL_TITLE, "Установка/Удаление программ" + IDS_CPL_DESC, "Позволяет устанавливать новое ПО, или удалять существующее с Вашего компьютера." + IDS_TAB1_TITLE, "Приложения" - IDS_UNINSTALL_FAILED, "Íåâîçìîæíî âûïîëíèòü, '%s'. Âû õîòèòå óäàëèòü ïðîãðàììó èç ñïèñêà?" - IDS_NOT_SPECIFIED, "Îòñóòñòâóåò" + IDS_UNINSTALL_FAILED, "Невозможно выполнить, '%s'. Вы хотите удалить программу из списка?" + IDS_NOT_SPECIFIED, "Отсутствует" - IDS_COLUMN_NAME, "Íàçâàíèå" - IDS_COLUMN_PUBLISHER, "Èçäàòåëü" - IDS_COLUMN_VERSION, "Âåðñèÿ" + IDS_COLUMN_NAME, "Название" + IDS_COLUMN_PUBLISHER, "Издатель" + IDS_COLUMN_VERSION, "Версия" - IDS_REMOVE, "&Óäàëèòü..." - IDS_MODIFY_REMOVE, "&Modify/Remove..." + IDS_REMOVE, "&Удалить..." + IDS_MODIFY_REMOVE, "&Изменить/Удалить..." } IDD_MAIN DIALOG 0, 0, 320, 235 STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Óñòàíîâêà/Óäàëåíèå" +CAPTION "Установка/Удаление" FONT 8, "MS Shell Dlg" { -CONTROL "×òîáû óñòàíîâèòü ïðîãðàììó ñ CD-ROM, äèñêåòû èëè æ¸ñòêîãî äèñêà, íàæìèòå Óñòàíîâèòü.", 1000, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 7, 270, 20 - CONTROL "Óñ&òàíîâèòü...", IDC_INSTALL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 246, 26, 64, 14 +CONTROL "Чтобы установить программу с CD-ROM, дискеты или жёсткого диска, нажмите Установить.", 1000, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 7, 270, 20 + CONTROL "Ус&тановить...", IDC_INSTALL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 246, 26, 64, 14 CONTROL "", -1, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 7, 46, 303, 1 CONTROL 2, 1001, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 7, 21, 20 - CONTROL "&Ïåðå÷èñëåííûå ïðîãðàììû ìîæíî óäàëèòü èëè ïåðåóñòàíîâèòü àâòîìàòè÷åñêè. ×òîáû óäàëèòü ïðîãðàììó èëè èçìåíèòü ñîñòàâ óñòàíîâëåííûõ êîìïîíåíòîâ, âûáåðèòå íóæíûé ïóíêò ñïèñêà è íàæìèòå êíîïêó Óñòàíîâèòü/Óäàëèòü.", 1002, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 55, 270, 32 + CONTROL "&Перечисленные программы можно удалить или переустановить автоматически. Чтобы удалить программу или изменить состав установленных компонентов, выберите нужный пункт списка и нажмите кнопку Установить/Удалить.", 1002, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 55, 270, 32 CONTROL "", IDL_PROGRAMS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SORTASCENDING | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 90, 303, 100 - CONTROL "&Ñâåäåíèÿ î ïîääåðæêå...", IDC_SUPPORT_INFO, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 198, 94, 14 - CONTROL "&Modify...", IDC_MODIFY, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 172, 198, 68, 14 - CONTROL "&Óäàëèòü...", IDC_ADDREMOVE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 244, 198, 68, 14 + CONTROL "&Сведения о поддержке...", IDC_SUPPORT_INFO, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 198, 94, 14 + CONTROL "&Изменить...", IDC_MODIFY, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 172, 198, 68, 14 + CONTROL "&Удалить...", IDC_ADDREMOVE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 244, 198, 68, 14 CONTROL 3, 1003, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 57, 21, 20 } IDD_INFO DIALOG 0, 0, 256, 138 STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ñâåäåíèÿ î ïîääåðæêå" +CAPTION "Сведения о поддержке" FONT 8, "MS Shell Dlg" { CONTROL "OK", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 103, 116, 50, 14 - CONTROL "Ïåðå÷èñëåííàÿ èíôîðìàöèÿ ìîæåò áûòü èñïîëüçîâàíà äëÿ ïîëó÷åíèÿ òåõíè÷åñêîé ïîääåðæêè ïðèëîæåíèÿ %s:", IDC_INFO_LABEL, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 12, 9, 228, 23 - CONTROL "Èçäàòåëü:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 33, 60, 8 - CONTROL "Âåðñèÿ:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 43, 60, 8 - CONTROL "Êîíòàêòíîå ëèöî:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 53, 60, 8 - CONTROL "Ïîääåðæêà:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 63, 64, 8 - CONTROL "Òåëåôîí:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 73, 68, 8 - CONTROL "Ôàéë 'Readme':", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 83, 60, 8 - CONTROL "Îáíîâëåíèÿ:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 93, 60, 8 - CONTROL "Êîììåíòàðèé:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 103, 60, 8 + CONTROL "Перечисленная информация может быть использована для получения технической поддержки приложения %s:", IDC_INFO_LABEL, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 12, 9, 228, 23 + CONTROL "Издатель:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 33, 60, 8 + CONTROL "Версия:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 43, 60, 8 + CONTROL "Контактное лицо:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 53, 60, 8 + CONTROL "Поддержка:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 63, 64, 8 + CONTROL "Телефон:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 73, 68, 8 + CONTROL "Файл 'Readme':", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 83, 60, 8 + CONTROL "Обновления:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 93, 60, 8 + CONTROL "Комментарий:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 103, 60, 8 CONTROL "", IDC_INFO_PUBLISHER, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 104, 33, 136, 8 CONTROL "", IDC_INFO_VERSION, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 104, 43, 136, 8 CONTROL "", IDC_INFO_CONTACT, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 104, 53, 136, 8 diff --git a/dlls/appwiz.cpl/Si.rc b/dlls/appwiz.cpl/Si.rc index d936cf9a60d..dc37ae0ef6a 100644 --- a/dlls/appwiz.cpl/Si.rc +++ b/dlls/appwiz.cpl/Si.rc @@ -40,7 +40,7 @@ STRINGTABLE IDS_INSTALL_FILTER, "Instalacijski programi\0*instal*.exe;*setup*.exe;*.msi\0Programi (*.exe)\0*.exe\0Vse datoteke (*.*)\0*.*\0\0" IDS_REMOVE, "&Odstrani ..." - IDS_MODIFY_REMOVE, "&Modify/Remove..." + IDS_MODIFY_REMOVE, "&Modify/Remove ..." } IDD_MAIN DIALOG 0, 0, 320, 220 @@ -55,7 +55,7 @@ FONT 8, "MS Shell Dlg" CONTROL "Naslednji programi omogočajo samodejno odstranitev. Za odstranitev programa oz. spremembo nameščenih komponent izberite program s seznama in kliknite 'Dodaj/Odstrani'.", 1002, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 57, 270, 30 CONTROL "", IDL_PROGRAMS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SORTASCENDING | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 90, 303, 100 CONTROL "&Informacije ...", IDC_SUPPORT_INFO, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 104, 198, 64, 14 - CONTROL "&Modify...", IDC_MODIFY, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 172, 198, 68, 14 + CONTROL "&Modify ...", IDC_MODIFY, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 172, 198, 68, 14 CONTROL "&Odstrani ...", IDC_ADDREMOVE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 244, 198, 68, 14 CONTROL 3, 1003, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 57, 21, 20 } diff --git a/dlls/avifil32/avifile_En.rc b/dlls/avifil32/avifile_En.rc index 71c5d3edbd9..e136569e044 100644 --- a/dlls/avifil32/avifile_En.rc +++ b/dlls/avifil32/avifile_En.rc @@ -1,5 +1,5 @@ /* - * Copyright 2002 Michael Günnewig + * Copyright 2002 Michael Günnewig * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/dlls/avifil32/avifile_Ru.rc b/dlls/avifil32/avifile_Ru.rc index 512bf46840b..12ac27d3b98 100644 --- a/dlls/avifil32/avifile_Ru.rc +++ b/dlls/avifil32/avifile_Ru.rc @@ -20,35 +20,38 @@ #include "avifile_private.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Íàñòðîéêè ñæàòèÿ" +CAPTION "Настройки сжатия" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "&Âûáåðèòå ïîòîê:",-1,2,5,154,10 + LTEXT "&Выберите поток:",-1,2,5,154,10 COMBOBOX IDC_STREAM,2,18,154,61,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Îïöèè...",IDC_OPTIONS,170,17,50,14 - AUTOCHECKBOX "&Ïðîñëàèâàòü êàæäûå",IDC_INTERLEAVE,3,42,85,11,WS_TABSTOP + PUSHBUTTON "&Опции...",IDC_OPTIONS,170,17,50,14 + AUTOCHECKBOX "&Прослаивать каждые",IDC_INTERLEAVE,3,42,85,11,WS_TABSTOP EDITTEXT IDC_INTERLEAVEEVERY,91,41,32,12,ES_AUTOHSCROLL - LTEXT "ôðåéìà",-1,129,43,36,9 - LTEXT "Òåêóùèé ôîðìàò:",-1,3,56,73,9 - LTEXT "Ýòî ìåñòî ñäà¸òñÿ â àðåíäó",IDC_FORMATTEXT,75,56,90,26 + LTEXT "фрейма",-1,129,43,36,9 + LTEXT "Текущий формат:",-1,3,56,73,9 + LTEXT "Это место сдаётся в аренду",IDC_FORMATTEXT,75,56,90,26 DEFPUSHBUTTON "OK",IDOK,170,42,50,14 - PUSHBUTTON "Îòìåíà",IDCANCEL,170,61,50,14 + PUSHBUTTON "Отмена",IDCANCEL,170,61,50,14 END STRINGTABLE DISCARDABLE { - IDS_WAVESTREAMFORMAT "Çâóêîâîé ïîòîê: %s" - IDS_WAVEFILETYPE "Çâóêîâîé ïîòîê" - IDS_ALLMULTIMEDIA "Âñå ôàéëû ìóëüòèìåäèà" - IDS_ALLFILES "Âñå ôàéëû (*.*)@*.*" - IDS_VIDEO "âèäåî" - IDS_AUDIO "àóäèî" + IDS_WAVESTREAMFORMAT "Звуковой поток: %s" + IDS_WAVEFILETYPE "Звуковой поток" + IDS_ALLMULTIMEDIA "Все файлы мультимедиа" + IDS_ALLFILES "Все файлы (*.*)@*.*" + IDS_VIDEO "видео" + IDS_AUDIO "аудио" IDS_AVISTREAMFORMAT "%s %s #%d" - IDS_AVIFILETYPE "Îáðàáîò÷èê ïî óìîë÷àíèþ avi-ôàéëîâ â Wine" - IDS_UNCOMPRESSED "áåç ñæàòèÿ" + IDS_AVIFILETYPE "Обработчик по умолчанию avi-файлов в Wine" + IDS_UNCOMPRESSED "без сжатия" } diff --git a/dlls/browseui/rsrc_Ru.rc b/dlls/browseui/rsrc_Ru.rc index 40e26f940ae..31c9ec04111 100644 --- a/dlls/browseui/rsrc_Ru.rc +++ b/dlls/browseui/rsrc_Ru.rc @@ -18,11 +18,14 @@ #include "resids.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE { - IDS_CANCELLING "Îòìåíà..." + IDS_CANCELLING "Отмена..." } IDD_PROGRESS_DLG DIALOG 0, 0, 260, 85 @@ -34,6 +37,6 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDC_TEXT_LINE, 7, 45, 250, 10, SS_LEFT|SS_NOPREFIX LTEXT "", IDC_TEXT_LINE + 1, 7, 55, 250, 10, SS_LEFT|SS_NOPREFIX CONTROL "", IDC_PROGRESS_BAR, PROGRESS_CLASSA, WS_BORDER, 7, 65, 190, 8 - PUSHBUTTON "&Îòìåíà", IDCANCEL, 205, 65, 40, 15, WS_GROUP | WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Отмена", IDCANCEL, 205, 65, 40, 15, WS_GROUP | WS_TABSTOP | WS_VISIBLE LTEXT "", IDC_TEXT_LINE + 2, 7, 75, 190, 10, SS_LEFT|SS_NOPREFIX } diff --git a/dlls/comctl32/comctl_Ru.rc b/dlls/comctl32/comctl_Ru.rc index 511559bf5d3..9cba44d1b62 100644 --- a/dlls/comctl32/comctl_Ru.rc +++ b/dlls/comctl32/comctl_Ru.rc @@ -20,31 +20,34 @@ #include "comctl32.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "Ñâîéñòâà äëÿ %s" +CAPTION "Свойства для %s" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP - PUSHBUTTON "Îòìåíà", IDCANCEL,58,122,50,14 - PUSHBUTTON "Ïðè&ìåíèòü", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED - PUSHBUTTON "&Ñïðàâêà", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP + PUSHBUTTON "Отмена", IDCANCEL,58,122,50,14 + PUSHBUTTON "При&менить", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED + PUSHBUTTON "&Справка", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 END IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "Ìàñòåð" +CAPTION "Мастер" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "< &Íàçàä", IDC_BACK_BUTTON,71,138,50,14 - DEFPUSHBUTTON "&Äàëåå >", IDC_NEXT_BUTTON,121,138,50,14 - DEFPUSHBUTTON "Ãîòîâî", IDC_FINISH_BUTTON,121,138,50,14 - PUSHBUTTON "Îòìåíà", IDCANCEL,178,138,50,14 - PUSHBUTTON "&Ñïðàâêà", IDHELP,235,138,50,14,WS_GROUP + PUSHBUTTON "< &Назад", IDC_BACK_BUTTON,71,138,50,14 + DEFPUSHBUTTON "&Далее >", IDC_NEXT_BUTTON,121,138,50,14 + DEFPUSHBUTTON "Готово", IDC_FINISH_BUTTON,121,138,50,14 + PUSHBUTTON "Отмена", IDCANCEL,178,138,50,14 + PUSHBUTTON "&Справка", IDHELP,235,138,50,14,WS_GROUP LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5 LTEXT "", IDC_SUNKEN_LINEHEADER,0,35,290,1,SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE @@ -53,39 +56,39 @@ END IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Íàñòðîéêà ïàíåëè èíñòðóìåíòîâ" +CAPTION "Настройка панели инструментов" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "&Çàêðûòü", IDCANCEL,308,6,44,14 - PUSHBUTTON "Ñ&áðîñèòü", IDC_RESET_BTN,308,23,44,14 - PUSHBUTTON "&Ñïðàâêà", IDC_HELP_BTN,308,40,44,14 - PUSHBUTTON "Ïåðåìåñòèòü &ââåðõ", IDC_MOVEUP_BTN,308,74,44,14 - PUSHBUTTON "Ïåðåìåñòèòü &âíèç", IDC_MOVEDN_BTN,308,91,44,14 - LTEXT "&Äîñòóïíûå êíîïêè:", -1,4,5,84,10 + DEFPUSHBUTTON "&Закрыть", IDCANCEL,308,6,44,14 + PUSHBUTTON "С&бросить", IDC_RESET_BTN,308,23,44,14 + PUSHBUTTON "&Справка", IDC_HELP_BTN,308,40,44,14 + PUSHBUTTON "Переместить &вверх", IDC_MOVEUP_BTN,308,74,44,14 + PUSHBUTTON "Переместить &вниз", IDC_MOVEDN_BTN,308,91,44,14 + LTEXT "&Доступные кнопки:", -1,4,5,84,10 LISTBOX IDC_AVAILBTN_LBOX,4,17,120,100, LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "&Äîáàâèòü ->", IDOK, 131, 42, 44, 14 - PUSHBUTTON "<- &Óäàëèòü", IDC_REMOVE_BTN,131,62,44,14 - LTEXT "&Êíîïêè ïàíåëè èíñòðóìåíòîâ:", -1,182,5,78,10 + PUSHBUTTON "&Добавить ->", IDOK, 131, 42, 44, 14 + PUSHBUTTON "<- &Удалить", IDC_REMOVE_BTN,131,62,44,14 + LTEXT "&Кнопки панели инструментов:", -1,182,5,78,10 LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END STRINGTABLE DISCARDABLE { - IDS_CLOSE "Çàêðûòü" + IDS_CLOSE "Закрыть" } STRINGTABLE DISCARDABLE { - IDM_TODAY "Ñåãîäíÿ:" - IDM_GOTODAY "Òåêóùàÿ äàòà" + IDM_TODAY "Сегодня:" + IDM_GOTODAY "Текущая дата" } STRINGTABLE DISCARDABLE { - IDS_SEPARATOR "Ðàçäåëèòåëü" + IDS_SEPARATOR "Разделитель" } STRINGTABLE DISCARDABLE { - HKY_NONE "Íåò" + HKY_NONE "Нет" } diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 73781b2dfa9..07133086af2 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -8108,6 +8108,9 @@ static BOOL LISTVIEW_SetItemState(LISTVIEW_INFO *infoPtr, INT nItem, const LVITE if ((lvItem.state & lvItem.stateMask & LVIS_SELECTED) && (infoPtr->dwStyle & LVS_SINGLESEL)) return FALSE; + /* focus all isn't allowed */ + if (lvItem.state & lvItem.stateMask & LVIS_FOCUSED) return FALSE; + /* apply to all items */ for (lvItem.iItem = 0; lvItem.iItem < infoPtr->nItemCount; lvItem.iItem++) if (!LISTVIEW_SetItemT(infoPtr, &lvItem, TRUE)) bResult = FALSE; @@ -8115,39 +8118,6 @@ static BOOL LISTVIEW_SetItemState(LISTVIEW_INFO *infoPtr, INT nItem, const LVITE else bResult = LISTVIEW_SetItemT(infoPtr, &lvItem, TRUE); - /* - * Update selection mark - * - * Investigation on windows 2k showed that selection mark was updated - * whenever a new selection was made, but if the selected item was - * unselected it was not updated. - * - * we are probably still not 100% accurate, but this at least sets the - * proper selection mark when it is needed - */ - - if (bResult && (lvItem.state & lvItem.stateMask & LVIS_SELECTED) && - (infoPtr->nSelectionMark == -1)) - { - int i; - for (i = 0; i < infoPtr->nItemCount; i++) - { - if (infoPtr->uCallbackMask & LVIS_SELECTED) - { - if (LISTVIEW_GetItemState(infoPtr, i, LVIS_SELECTED)) - { - infoPtr->nSelectionMark = i; - break; - } - } - else if (ranges_contain(infoPtr->selectionRanges, i)) - { - infoPtr->nSelectionMark = i; - break; - } - } - } - return bResult; } @@ -10653,6 +10623,7 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return LISTVIEW_SetItemPosition(infoPtr, (INT)wParam, *((POINT*)lParam)); case LVM_SETITEMSTATE: + if (lParam == 0) return FALSE; return LISTVIEW_SetItemState(infoPtr, (INT)wParam, (LPLVITEMW)lParam); case LVM_SETITEMTEXTA: diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index b886d86848d..888b323bb3b 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -79,6 +79,8 @@ static const WCHAR testparentclassW[] = HWND hwndparent, hwndparentW; /* prevents edit box creation, LVN_BEGINLABELEDIT return value */ BOOL blockEdit; +/* dumps LVN_ITEMCHANGED message data */ +static BOOL g_dump_itemchanged; /* format reported to control: -1 falls to defproc, anything else returned */ INT notifyFormat; @@ -205,6 +207,42 @@ static const struct message ownderdata_select_focus_parent_seq[] = { { 0 } }; +static const struct message ownerdata_setstate_all_parent_seq[] = { + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + { 0 } +}; + +static const struct message ownerdata_defocus_all_parent_seq[] = { + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + { WM_NOTIFY, sent|id, 0, 0, LVN_GETDISPINFOA }, + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + { 0 } +}; + +static const struct message ownerdata_deselect_all_parent_seq[] = { + { WM_NOTIFY, sent|id, 0, 0, LVN_ODCACHEHINT }, + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + { 0 } +}; + +static const struct message select_all_parent_seq[] = { + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGING }, + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGING }, + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGING }, + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGING }, + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGING }, + { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, + { 0 } +}; + static const struct message textcallback_set_again_parent_seq[] = { { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGING }, { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, @@ -305,6 +343,14 @@ static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LP "BEGIN" : "END", pScroll->dx, pScroll->dy); } break; + case LVN_ITEMCHANGED: + if (g_dump_itemchanged) + { + NMLISTVIEW *nmlv = (NMLISTVIEW*)lParam; + trace("LVN_ITEMCHANGED: item=%d,new=%x,old=%x,changed=%x\n", + nmlv->iItem, nmlv->uNewState, nmlv->uOldState, nmlv->uChanged); + } + break; } break; } @@ -1916,6 +1962,24 @@ static void test_multiselect(void) } item_count = (int)SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); expect(items,item_count); + + /* try with NULL pointer */ + r = SendMessageA(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)NULL); + expect(FALSE, r); + + /* select all, check notifications */ + ListView_SetItemState(hwnd, -1, 0, LVIS_SELECTED); + + flush_sequences(sequences, NUM_MSG_SEQUENCES); + + item.stateMask = LVIS_SELECTED; + item.state = LVIS_SELECTED; + r = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, r); + + ok_sequence(sequences, PARENT_SEQ_INDEX, select_all_parent_seq, + "select all notification", FALSE); + /* deselect all items */ ListView_SetItemState(hwnd, -1, 0, LVIS_SELECTED); SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, -1); @@ -1926,7 +1990,6 @@ static void test_multiselect(void) r = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0); expect(3, r); r = SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0); -todo_wine expect(-1, r); style = GetWindowLongPtrA(hwnd, GWL_STYLE); @@ -1958,7 +2021,6 @@ todo_wine r = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0); expect(1, r); r = SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0); -todo_wine expect(-1, r); /* try to select all on LVS_SINGLESEL */ @@ -2385,7 +2447,7 @@ static void test_ownerdata(void) /* check notifications after focused/selected changed */ hwnd = create_listview_control(LVS_OWNERDATA); ok(hwnd != NULL, "failed to create a listview window\n"); - res = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0); + res = SendMessageA(hwnd, LVM_SETITEMCOUNT, 20, 0); ok(res != 0, "Expected LVM_SETITEMCOUNT to succeed\n"); flush_sequences(sequences, NUM_MSG_SEQUENCES); @@ -2409,6 +2471,119 @@ static void test_ownerdata(void) ok_sequence(sequences, PARENT_SEQ_INDEX, ownderdata_select_focus_parent_seq, "ownerdata focus notification", TRUE); + + /* select all, check notifications */ + item.stateMask = LVIS_SELECTED; + item.state = 0; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + + flush_sequences(sequences, NUM_MSG_SEQUENCES); + + item.stateMask = LVIS_SELECTED; + item.state = LVIS_SELECTED; + + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + g_dump_itemchanged = FALSE; + + ok_sequence(sequences, PARENT_SEQ_INDEX, ownerdata_setstate_all_parent_seq, + "ownerdata select all notification", TRUE); + + /* select all again, note that all items are selected already */ + flush_sequences(sequences, NUM_MSG_SEQUENCES); + item.stateMask = LVIS_SELECTED; + item.state = LVIS_SELECTED; + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + g_dump_itemchanged = FALSE; + ok_sequence(sequences, PARENT_SEQ_INDEX, ownerdata_setstate_all_parent_seq, + "ownerdata select all notification", TRUE); + /* deselect all */ + flush_sequences(sequences, NUM_MSG_SEQUENCES); + item.stateMask = LVIS_SELECTED; + item.state = 0; + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + g_dump_itemchanged = FALSE; + ok_sequence(sequences, PARENT_SEQ_INDEX, ownerdata_deselect_all_parent_seq, + "ownerdata deselect all notification", TRUE); + + /* select one, then deselect all */ + item.stateMask = LVIS_SELECTED; + item.state = LVIS_SELECTED; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)&item); + expect(TRUE, res); + flush_sequences(sequences, NUM_MSG_SEQUENCES); + item.stateMask = LVIS_SELECTED; + item.state = 0; + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + g_dump_itemchanged = FALSE; + ok_sequence(sequences, PARENT_SEQ_INDEX, ownerdata_deselect_all_parent_seq, + "ownerdata select all notification", TRUE); + + /* remove focused, try to focus all */ + item.stateMask = LVIS_FOCUSED; + item.state = LVIS_FOCUSED; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)&item); + expect(TRUE, res); + item.stateMask = LVIS_FOCUSED; + item.state = 0; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + item.stateMask = LVIS_FOCUSED; + res = SendMessageA(hwnd, LVM_GETITEMSTATE, 0, LVIS_FOCUSED); + expect(0, res); + /* setting all to focused returns failure value */ + flush_sequences(sequences, NUM_MSG_SEQUENCES); + item.stateMask = LVIS_FOCUSED; + item.state = LVIS_FOCUSED; + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(FALSE, res); + g_dump_itemchanged = FALSE; + ok_sequence(sequences, PARENT_SEQ_INDEX, empty_seq, + "ownerdata focus all notification", FALSE); + /* focus single item, remove all */ + item.stateMask = LVIS_FOCUSED; + item.state = LVIS_FOCUSED; + res = SendMessage(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)&item); + expect(TRUE, res); + flush_sequences(sequences, NUM_MSG_SEQUENCES); + item.stateMask = LVIS_FOCUSED; + item.state = 0; + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + g_dump_itemchanged = FALSE; + ok_sequence(sequences, PARENT_SEQ_INDEX, ownerdata_defocus_all_parent_seq, + "ownerdata remove focus all notification", TRUE); + /* set all cut */ + flush_sequences(sequences, NUM_MSG_SEQUENCES); + item.stateMask = LVIS_CUT; + item.state = LVIS_CUT; + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + g_dump_itemchanged = FALSE; + ok_sequence(sequences, PARENT_SEQ_INDEX, ownerdata_setstate_all_parent_seq, + "ownerdata cut all notification", TRUE); + /* all marked cut, try again */ + flush_sequences(sequences, NUM_MSG_SEQUENCES); + item.stateMask = LVIS_CUT; + item.state = LVIS_CUT; + g_dump_itemchanged = TRUE; + res = SendMessageA(hwnd, LVM_SETITEMSTATE, -1, (LPARAM)&item); + expect(TRUE, res); + g_dump_itemchanged = FALSE; + ok_sequence(sequences, PARENT_SEQ_INDEX, ownerdata_setstate_all_parent_seq, + "ownerdata cut all notification #2", TRUE); + DestroyWindow(hwnd); /* check notifications on LVM_GETITEM */ diff --git a/dlls/comdlg32/cdlg_Ru.rc b/dlls/comdlg32/cdlg_Ru.rc dissimilarity index 60% index fd35552f918..b3904cfe6d4 100644 --- a/dlls/comdlg32/cdlg_Ru.rc +++ b/dlls/comdlg32/cdlg_Ru.rc @@ -1,484 +1,487 @@ -/* - * Copyright 1999 Alexander Kanavin - * - * 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 "cdlg.h" -#include "filedlgbrowser.h" - -/* - * WARNING: DO NOT CHANGE THE SIZE OF THE STANDARD DIALOG TEMPLATES. - */ - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Îòêðûòü" -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Èìÿ ôàéëà:", 1090, 6, 6, 76, 9 - EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP - LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP - LTEXT "&Êàòàëîãè:", -1, 110, 6, 92, 9 - LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP - LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP - LTEXT "Ïîêàçûâàòü ôàéëû &òèïà:", 1089, 6, 104, 90, 9 - COMBOBOX 1136, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - LTEXT "&Äèñêè:", 1091, 110, 104, 92, 9 - COMBOBOX 1137, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "Îòêðûòü", IDOK, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ñïðàâêà", 1038, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP - CHECKBOX "Ò&îëüêî äëÿ ÷òåíèÿ", 1040, 208, 68, 54, 24, BS_AUTOCHECKBOX | BS_MULTILINE | WS_GROUP | WS_TABSTOP -} - - -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ñîõðàíèòü êàê..." -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Èìÿ ôàéëà:", 1090, 6, 6, 76, 9 - EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP - LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP - LTEXT "&Êàòàëîãè:", -1, 110, 6, 92, 9 - LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP - LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP - LTEXT "Ïîêàçûâàòü ôàéëû &òèïà:", 1089, 6, 104, 90, 9 - COMBOBOX 1136, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - LTEXT "&Äèñêè:", 1091, 110, 104, 92, 9 - COMBOBOX 1137, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "Ñîõðàíèòü êàê", IDOK, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ñïðàâêà", 1038, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP - CHECKBOX "&Òîëüêî äëÿ ÷òåíèÿ", 1040, 208, 68, 54, 24, BS_AUTOCHECKBOX | BS_MULTILINE | WS_GROUP | WS_TABSTOP -} - - -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ïå÷àòü" -FONT 8, "MS Shell Dlg" -{ - LTEXT "Ïðèíòåð:", 1088, 6, 6, 40, 9 - LTEXT "", 1089, 60, 6, 150, 9 - GROUPBOX "Ïå÷àòàòü", 1072, 6, 30, 160, 65, BS_GROUPBOX - RADIOBUTTON "&Âñå", 1056, 16, 45, 60, 12 - RADIOBUTTON "Â&ûäåëåííûé ôðàãìåíò", 1057, 16, 60, 60, 12 - RADIOBUTTON "&Ñòðàíèöû", 1058, 16, 75, 60, 12 - DEFPUSHBUTTON "Ïå÷àòü", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ñâî&éñòâà", 1024, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP - LTEXT "&ñ:", 1090, 60, 80, 30, 9 - LTEXT "&ïî:", 1091, 120, 80, 30, 9 - LTEXT "&Êà÷åñòâî ïå÷àòè:", 1092, 6, 100, 76, 9 - COMBOBOX 1136, 80, 100, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - CHECKBOX "Ï&å÷àòü â ôàéë", 1040, 20, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "Ñæàòî", 1041, 160, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP -} - - -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Íàñòðîéêà ïðèíòåðà" -FONT 8, "MS Shell Dlg" -{ - GROUPBOX "Ïðèíòåð", 1072, 6, 10, 180, 65, BS_GROUPBOX - RADIOBUTTON "Ïðèíòåð ïî &óìîë÷àíèþ", 1056, 16, 20, 80, 12 - LTEXT "[íåò]", 1088, 35, 35, 120, 9 - RADIOBUTTON "&Äðóãîé ïðèíòåð", 1057, 16, 50, 80, 12 - COMBOBOX 1136, 35, 65, 149, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Íàñòðîéêà", 1024, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP - GROUPBOX "Îðèåíòàöèÿ", 1073, 6, 85, 100, 50, BS_GROUPBOX - RADIOBUTTON "&Êíèæíàÿ", 1058, 50, 100, 40, 12 - RADIOBUTTON "&Àëüáîìíàÿ", 1059, 50, 115, 40, 12 - ICON "LANDSCAP", 1097, 10, 95, 32, 32 - ICON "PORTRAIT", 1098, 10, 95, 32, 32 - GROUPBOX "Áóìàãà", 1074, 120, 85, 180, 50, BS_GROUPBOX - LTEXT "Ðà&çìåð", 1089, 130, 95, 30, 9 - LTEXT "&Èñòî÷íèê", 1090, 130, 110, 30, 9 - COMBOBOX 1137, 155, 95, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - COMBOBOX 1138, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP -} - - -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Øðèôò" -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Øðèôò:",1088 ,6,3,40,9 - COMBOBOX 1136 ,6,13,94,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | - CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE - LTEXT "&Íà÷åðòàíèå:",1089 ,108,3,44,9 - COMBOBOX 1137,108,13,64,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | - WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE - LTEXT "&Ðàçìåð:",1090,179,3,30,9 - COMBOBOX 1138,179,13,32,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | - WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT - DEFPUSHBUTTON "OK",IDOK,218,6,40,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "Îòìåíà",IDCANCEL,218,23,40,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ïðèìåíèòü", 1026,218,40,40,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ñïðàâêà" , 1038,218,57,40,14,WS_GROUP | WS_TABSTOP - GROUPBOX "Àòðèáóòû",1072,6,72,84,34,WS_GROUP - CHECKBOX "&Çà÷åðêíóòûé", 1040, 10,82,75,10, BS_AUTOCHECKBOX | WS_TABSTOP - CHECKBOX "Ïîä&÷åðêíóòûé", 1041, 10,94,75,10, BS_AUTOCHECKBOX - LTEXT "Ö&âåò:", 1091 ,6,110,30,9 - COMBOBOX 1139,6,120,84,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | - CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Îáðàçåö",grp2,98,72,120,36,WS_GROUP - CTEXT "ÀàÁáAaBb",stc5,103,80,109,24,SS_NOPREFIX | NOT WS_VISIBLE - LTEXT "Íà&áîð ñèìâîëîâ:",stc7 ,98,114,80,9 - COMBOBOX cmb5,98,124,120,90,CBS_DROPDOWNLIST | CBS_HASSTRINGS | - CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP -} - - -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 310, 185 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Èçìåíåíèå ïàëèòðû" -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Áàçîâàÿ ïàëèòðà:", 1088, 4, 4, 140, 10 - LTEXT "Äî&ïîëíèòåëüíûå öâåòà:", 1089, 4, 106, 140, 10 - LTEXT "Öâåò|Çà&ëèâêà", 1090, 150, 151, 48, 10 - LTEXT "Êðàñ&íûé:", 726 /*1094*/,254,126,32,10 - EDITTEXT 706, 288,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "&Çåë¸íûé:",727/*1095*/,254,140,32,10 - EDITTEXT 707, 288,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "Ñ&èíèé:",728 /*1096*/,264,154,24,10 - EDITTEXT 708, 288,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "Î&òòåíîê:" ,723 /*1091*/,202,126,30,10 - EDITTEXT 703, 234,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "&Êîíòðàñò:" ,724 /*1092*/,199,140,34,10 - EDITTEXT 704, 234,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "&ßðêîñòü:" ,725 /*1093*/,202,154,30,10 - EDITTEXT 705, 234,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP - CONTROL "" ,720,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,14,140,86 - CONTROL "" ,721,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,116,140,28 - CONTROL "" ,710,"STATIC",WS_BORDER|SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,4,118,116 - CONTROL "" ,702,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 278,4,8,116 - CONTROL "" ,709,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26 - DEFPUSHBUTTON "OK", IDOK, 4, 166, 44, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL, 52, 166, 44, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cïðàâêà", 1038,100,166, 44, 14 - PUSHBUTTON "&Äîáàâèòü â íàáîð", 712/*1024*/, 152, 166, 142, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Îïðåäåëèòü öâåò >>", 719/*1025*/, 4, 150, 142, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&i",713,300,200,4,14 /* just a dummy: 'i' is like &i in "sol&id" */ -} - - -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 245, 62 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ïîèñê" -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Îáðàçåö:", -1, 4, 8, 42, 8 - EDITTEXT 1152, 47, 7, 138, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP - CHECKBOX "&Òîëüêî ñëîâî öåëèêîì", 1040, 4, 26, 100, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "C &ó÷åòîì ðåãèñòðà", 1041, 4, 42, 100, 12, BS_AUTOCHECKBOX | WS_TABSTOP - GROUPBOX "Íàïðàâëåíèå", 1072, 107, 26, 78, 28 - CONTROL "&Ââåðõ", 1056, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 111, 38, 40, 12 - CONTROL "Â&íèç", 1057, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 152, 38, 30, 12 - - DEFPUSHBUTTON "&Íàéòè äàëåå", IDOK, 190, 5, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "Îòìåíà", IDCANCEL , 190, 23, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ñïðàâêà", pshHelp , 190, 45, 50, 14, WS_GROUP | WS_TABSTOP -} - - -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Çàìåíà" -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Îáðàçåö:", -1, 4, 9, 48, 8 - EDITTEXT 1152, 54, 7, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "Ç&àìåíèòü íà:", -1, 4, 26, 48, 8 - EDITTEXT 1153, 54, 24, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP - CHECKBOX "&Òîëüêî ñëîâî öåëèêîì", 1040, 5, 46, 104, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "Ñ &ó÷¸òîì ðåãèñòðà", 1041, 5, 62, 104, 12, BS_AUTOCHECKBOX | WS_TABSTOP - - DEFPUSHBUTTON "&Íàéòè äàëåå", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "&Çàìåíèòü", psh1 , 174, 21, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Çàìåíèòü &âñå", psh2 , 174, 38, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL , 174, 55, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ñïðàâêà", pshHelp , 174, 75, 50, 14, WS_GROUP | WS_TABSTOP -} - -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | - DS_CONTEXTHELP | DS_3DLOOK -CAPTION "Ïå÷àòü" -FONT 8, "MS Shell Dlg" -{ - DEFPUSHBUTTON "OK", IDOK, 180,164, 48,14, WS_GROUP | BS_DEFPUSHBUTTON - PUSHBUTTON "Îòìåíà", IDCANCEL, 232,164, 48,14, WS_GROUP - PUSHBUTTON "&Ñïðàâêà", pshHelp, 50, 161, 48,14, WS_GROUP - - GROUPBOX "Ïðèíòåð", grp4, 8, 4, 272,84, WS_GROUP - CONTROL "Ïå÷àòü â ôàé&ë", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,212,70,64,12 - PUSHBUTTON "&Ñâîéñòâà", psh2, 212, 17, 60,14, WS_GROUP - LTEXT "&Èìÿ:", stc6, 16, 20, 46,8 - COMBOBOX cmb4, 64, 18, 140,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "Ñòàòóñ:", stc8, 16, 36, 46,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàí", stc12, 64, 36, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Òèï:", stc7, 16, 48, 46,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàí", stc11, 64, 48, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Ìåñòî:", stc10, 16, 60, 46,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàíî", stc14, 64, 60, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Ïðèìå÷àíèå:", stc9, 16, 72, 46,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàíî", stc13, 64, 72, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - - GROUPBOX "Êîïèè", grp2, 160, 92, 120,64, WS_GROUP - LTEXT "×èñëî &êîïèé:",stc5,168,108,68,8 - ICON "", ico3, 162,124, 60,24, WS_GROUP | SS_CENTERIMAGE - CONTROL "&Ðàçáèòü", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,230,130,42,12 - EDITTEXT edt3, 230,106, 42,12, WS_GROUP | ES_NUMBER - - GROUPBOX "Ïå÷àòàòü", grp1, 8,92, 144,64, WS_GROUP - CONTROL "&Âñå", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12 - CONTROL "&Ñòðàíèöû", rad3,"Button",BS_AUTORADIOBUTTON,16,122,50,12 - CONTROL "&Âûäåëåíèå", rad2,"Button",BS_AUTORADIOBUTTON,16,138,64,12 - EDITTEXT edt1, 85,122, 20,12, WS_GROUP | ES_NUMBER - EDITTEXT edt2, 120,122, 20,12, WS_GROUP | ES_NUMBER - RTEXT "&îò:", stc2, 70,124, 10,8 - RTEXT "&äî:", stc3, 106,124, 10,8 -} - -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | - DS_CONTEXTHELP | DS_3DLOOK -CAPTION "Óñòàíîâêè ïðèíòåðà" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON "OK",IDOK,180,156,48,14,WS_GROUP - PUSHBUTTON "Îòìåíà",IDCANCEL,232,156,48,14 -/* PUSHBUTTON "Ñåòü...", psh5, 284,156,48,14 */ - - GROUPBOX "Ïðèíòåð", grp4, 8, 4, 272,84, WS_GROUP - PUSHBUTTON "&Ñâîéñòâà", psh2, 212, 17, 60,14, WS_GROUP - LTEXT "&Èìÿ:", stc6, 16, 20, 36,8 - COMBOBOX cmb1, 52, 18, 152,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "Ñòàòóñ:", stc8, 16, 36, 36,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàí", stc12, 52, 36, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Òèï:", stc7, 16, 48, 36,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàí", stc11, 52, 48, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Ìåñòî:", stc10, 16, 60, 36,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàíî", stc14, 52, 60, 36,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Çàìåòêè:", stc9, 16, 72, 36,10, SS_NOPREFIX - LTEXT "Ýìóëèðîâàíû", stc13, 52, 72, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - - GROUPBOX "Áóìàãà", grp2, 8, 92, 164,56, WS_GROUP - LTEXT "Ðàç&ìåð:", stc2, 16,108, 36, 8 - COMBOBOX cmb2, 52,106, 112,112,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "&Èñòî÷íèê:", stc3, 16,128, 36, 8 - COMBOBOX cmb3, 52,126, 112,112,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP - - GROUPBOX "Îðèåíòàöèÿ", grp1, 180, 92, 100,56, WS_GROUP - ICON "", ico1, 195,112, 18,20, WS_GROUP - CONTROL "&Ïîðòðåò", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP |WS_TABSTOP,224,106,52,12 - CONTROL "Ë&àíäøàôò", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 -END - -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ïàðàìåòðû ñòðàíèöû" -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "", rct1, "Static", SS_WHITERECT, 80, 8, 80, 80 - CONTROL "", rct2, "Static", SS_GRAYRECT, 160, 12, 4, 80 - CONTROL "", rct3, "Static", SS_GRAYRECT, 84, 88, 80, 4 - GROUPBOX "Áóìàãà", grp2, 8, 96, 224, 56, BS_GROUPBOX - LTEXT "&Ðàçìåð:", stc2, 16, 112, 36, 8 - COMBOBOX cmb2, 64, 110, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL - LTEXT "Ïîäà&÷à:", stc3, 16, 132, 36, 8 - COMBOBOX cmb3, 64, 130, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL - GROUPBOX "Îðèåíòàöèÿ", grp1, 8, 156, 64, 56, BS_GROUPBOX - AUTORADIOBUTTON "Ê&íèæíàÿ", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Àëü&áîìíàÿ", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON - GROUPBOX "Ïîëÿ", grp4, 80, 156, 152, 56, BS_GROUPBOX - LTEXT "&Ñëåâà:", stc15, 88, 172, 31, 8 - EDITTEXT edt4, 121, 170, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "Ñ&âåðõó:", stc16, 159, 172, 27, 8 - EDITTEXT edt6, 187, 170, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "Ñïð&àâà:", stc17, 88, 192, 31, 8 - EDITTEXT edt5, 121, 190, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "Ñíè&çó:", stc18, 159, 192, 23, 8 - EDITTEXT edt7, 187, 190, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - DEFPUSHBUTTON "ÎÊ", IDOK, 71, 220, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Îòìåíà", IDCANCEL, 126, 220, 50, 14 - PUSHBUTTON "&Ïðèíòåð...", psh3, 184, 220, 48, 14 -END - - -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Îòêðûòü" -FONT 8, "MS Shell Dlg" -{ - LTEXT "Èñêàòü &â",IDC_LOOKINSTATIC,4,6,43,8, SS_NOTIFY - COMBOBOX IDC_LOOKIN,49,3,132,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - - LTEXT "" , IDC_TOOLBARSTATIC, 181, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE - LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - - LTEXT "Èìÿ &ôàéëà:",IDC_FILENAMESTATIC,5,112,46,8, SS_NOTIFY - EDITTEXT IDC_FILENAME,54,110,155,12,ES_AUTOHSCROLL - - LTEXT "&Òèï ôàéëîâ:",IDC_FILETYPESTATIC,5,128,42,8, SS_NOTIFY - COMBOBOX IDC_FILETYPE,54,126,155,53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - - CONTROL "Òîëüêî äëÿ &÷òåíèÿ",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,145,100,10 - - DEFPUSHBUTTON "&Îòêðûòü", IDOK,222,110,50,14 - PUSHBUTTON "Îòìåíà", IDCANCEL,222,128,50,14 - PUSHBUTTON "&Ñïðàâêà", pshHelp,222,145,50,14 -} - -STRINGTABLE DISCARDABLE -{ - IDS_ABOUTBOX "&Î òåñòå ÂûáîðÏàïêè" - IDS_DOCUMENTFOLDERS "Ïàïêè äîêóìåíòîâ" - IDS_PERSONAL "Ìîè äîêóìåíòû" - IDS_FAVORITES "Èçáðàííîå" - IDS_PATH "Ñèñòåìíûé ïóòü" - IDS_DESKTOP "Ðàáî÷èé ñòîë" - IDS_FONTS "Øðèôòû" - IDS_MYCOMPUTER "Ìîé êîìïüþòåð" -} - -STRINGTABLE DISCARDABLE -{ - IDS_SYSTEMFOLDERS "Ñèñòåìíûå ïàïêè" - IDS_LOCALHARDRIVES "Ëîêàëüíûå æåñòêèå äèñêè" - IDS_FILENOTFOUND "Ôàéë íå íàéäåí" - IDS_VERIFYFILE "Ïðîâåðüòå, ïðàâèëüíî ëè óêàçàíî èìÿ ôàéëà" - IDS_CREATEFILE "Ôàéëà íå ñóùåñòâóåò\nÕîòèòå ëè Âû åãî ñîçäàòü?" - IDS_OVERWRITEFILE "Ôàéë óæå ñóùåñòâóåò.\nÇàìåíèòü åãî?" - IDS_INVALID_FILENAME_TITLE "Íåêîððåêòíûé ñèìâîë â çàïèñè ïóòè" - IDS_INVALID_FILENAME "Èìÿ ôàéëà íå ìîæåò ñîäåðæàòü ñëåäóþùèå ñèìâîëû:\n / : < > |" - IDS_PATHNOTEXISTING "Ïóòü íå ñóùåñòâóåò" - IDS_FILENOTEXISTING "Ôàéë íå ñóùåñòâóåò" -} - -STRINGTABLE DISCARDABLE -{ - IDS_UPFOLDER "Ââåðõ íà îäèí óðîâåíü" - IDS_NEWFOLDER "Ñîçäàòü íîâóþ ïàïêó" - IDS_LISTVIEW "Ñïèñîê" - IDS_REPORTVIEW "Ïîäðîáíîñòè" - IDS_TODESKTOP "Ïåðåõîä íà ðàáî÷èé ñòîë" -} - -STRINGTABLE DISCARDABLE -{ - PD32_PRINT_TITLE "Ïå÷àòü" - - PD32_VALUE_UREADABLE "Íå÷èòàåìûé ýëåìåíò" - PD32_INVALID_PAGE_RANGE "Ýòî çíà÷åíèå íå ëåæèò âíóòðè äèàïàçîíà ñòðàíèö\n\ -Ââåäèòå çíà÷åíèå ìåæäó %d è %d" - PD32_FROM_NOT_ABOVE_TO "Çíà÷åíèå ÎÒ íå äîëæíî ïðåâûøàòü ÄÎ:" - PD32_MARGINS_OVERLAP "Ãðàíèöû ïåðåêðûâàþò èëè ïðåâûøàþò \ -ðàçìåðû áóìàãè.\nÂâåäèòå èõ çàíîâî" - PD32_NR_OF_COPIES_EMPTY "Çíà÷åíèå ×èñëà Êîïèé íå ìîæåò áûòü \ -ïóñòûì" - PD32_TOO_LARGE_COPIES "Òàêîå áîëüøîå êîëè÷åñòâî êîïèé íå \ -ìîæåò áûòü íàïå÷àòàíî Âàøèì ïðèíòåðîì.\nÂâåäèòå çíà÷åíèå ìåæäó 1 è %d" - PD32_PRINT_ERROR "Ïðîèçîøëà îøèáêà ïðèíòåðà" - PD32_NO_DEFAULT_PRINTER "Íåò ïðèíòåðà, óñòàíîâëåííîãî ïî óìîë÷àíèþ" - PD32_CANT_FIND_PRINTER "Íå óäàëîñü íàéòè ïðèíòåð" - PD32_OUT_OF_MEMORY "Ìàëî ïàìÿòè" - PD32_GENERIC_ERROR "Ïðîèçîøëà(è) îøèáêà(è)" - PD32_DRIVER_UNKNOWN "Íåèçâåñòíûé äðàéâåð ïðèíòåðà" - PD32_NO_DEVICES "Îòñóòñòâóþò ïðèíòåðû â ñèñòåìå. \ -Ïðîâåðüòå, ÷òî õîòÿ áû îäèí ïðèíòåð óñòàíîâëåí è ñèñòåìà ïå÷àòè çàïóùåíà. \ -" - - PD32_DEFAULT_PRINTER "Ïðèíòåð ïî óìîë÷àíèþ; " - PD32_NR_OF_DOCUMENTS_IN_QUEUE "%d äîêóìåíòîâ â î÷åðåäè" - PD32_MARGINS_IN_INCHES "Ãðàíèöû [äþéìû)" - PD32_MARGINS_IN_MILLIMETERS "Ãðàíèöû [ìì]" - PD32_MILLIMETERS "ìì" - - PD32_PRINTER_STATUS_READY "Ãîòîâî" - PD32_PRINTER_STATUS_PAUSED "Ïðèîñòàíîâëåíî; " - PD32_PRINTER_STATUS_ERROR "Îøèáêà; " - PD32_PRINTER_STATUS_PENDING_DELETION "Îæèäàíèå óäàëåíèÿ; " - PD32_PRINTER_STATUS_PAPER_JAM "Áóìàãà çàñòðÿëà; " - PD32_PRINTER_STATUS_PAPER_OUT "Íå õâàòàåò áóìàãè; " - PD32_PRINTER_STATUS_MANUAL_FEED "Âñòàâüòå áóìàãó âðó÷íóþ; " - PD32_PRINTER_STATUS_PAPER_PROBLEM "Ïðîáëåìà ñ áóìàãîé; " - PD32_PRINTER_STATUS_OFFLINE "Ïðèíòåð â ðåæèìå offline; " - PD32_PRINTER_STATUS_IO_ACTIVE "Ââîä/Âûâîä àêòèâåí; " - PD32_PRINTER_STATUS_BUSY "Çàíÿò; " - PD32_PRINTER_STATUS_PRINTING "Èäåò ïå÷àòü; " - PD32_PRINTER_STATUS_OUTPUT_BIN_FULL "Ëîòîê ïåðåïîëíåí áóìàãîé; " - PD32_PRINTER_STATUS_NOT_AVAILABLE "Íå äîñòóïåí; " - PD32_PRINTER_STATUS_WAITING "Îæèäàíèå; " - PD32_PRINTER_STATUS_PROCESSING "Îáðàáîòêà; " - PD32_PRINTER_STATUS_INITIALIZING "Ïîäãîòîâêà; " - PD32_PRINTER_STATUS_WARMING_UP "Ïðîãðåâ; " - PD32_PRINTER_STATUS_TONER_LOW "Òîíåð íà èñõîäå; " - PD32_PRINTER_STATUS_NO_TONER "Íåò òîíåðà; " - PD32_PRINTER_STATUS_PAGE_PUNT "Page punt; " - PD32_PRINTER_STATUS_USER_INTERVENTION "Ïðåðâàíî ïîëüçîâàòåëåì; " - PD32_PRINTER_STATUS_OUT_OF_MEMORY "Ìàëî ïàìÿòè; " - PD32_PRINTER_STATUS_DOOR_OPEN "Êðûøêà ïðèíòåðà îòêðûòà; " - PD32_PRINTER_STATUS_SERVER_UNKNOWN "Íåèçâåñòíûé ñåðâåð ïðèíòåðà; " - PD32_PRINTER_STATUS_POWER_SAVE "Ïèòàíèå â áåçîïàñíîì ðåæèìå; " -} - -STRINGTABLE DISCARDABLE /* Font styles */ -{ - IDS_FONT_REGULAR "Íîðìàëüíûé" - IDS_FONT_BOLD "Æèðíûé" - IDS_FONT_ITALIC "Êóðñèâ" - IDS_FONT_BOLD_ITALIC "Æèðíûé êóðñèâ" -} - -STRINGTABLE DISCARDABLE /* Color names */ -{ - IDS_COLOR_BLACK "׸ðíûé" - IDS_COLOR_MAROON "Ò¸ìíî-áîðäîâûé" - IDS_COLOR_GREEN "Çåë¸íûé" - IDS_COLOR_OLIVE "Îëèâêîâûé" - IDS_COLOR_NAVY "Ò¸ìíî-ñèíèé" - IDS_COLOR_PURPLE "Ïóðïóðíûé" - IDS_COLOR_TEAL "Ìîðñêîé âîëíû" - IDS_COLOR_GRAY "Ñåðûé" - IDS_COLOR_SILVER "Ñåðåáðÿíûé" - IDS_COLOR_RED "Êðàñíûé" - IDS_COLOR_LIME "Ëèìîííûé" - IDS_COLOR_YELLOW "Ƹëòûé" - IDS_COLOR_BLUE "Ñèíèé" - IDS_COLOR_FUCHSIA "ßðêî-ðîçîâûé" - IDS_COLOR_AQUA "Ãîëóáîé" - IDS_COLOR_WHITE "Áåëûé" -} - -STRINGTABLE DISCARDABLE -{ - IDS_FONT_SIZE "Âûáåðèòå øðèôò ðàçìåðîì %d - %d ïóíêòîâ." - IDS_SAVE_BUTTON "&Ñîõðàíèòü" - IDS_SAVE_IN "Ñîõðàíèòü &â:" - IDS_SAVE "Ñîõðàíèòü" - IDS_SAVE_AS "Ñîõðàíèòü êàê" - IDS_OPEN_FILE "Îòêðûòü ôàéë" -} +/* + * Copyright 1999 Alexander Kanavin + * + * 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 "cdlg.h" +#include "filedlgbrowser.h" + +/* + * WARNING: DO NOT CHANGE THE SIZE OF THE STANDARD DIALOG TEMPLATES. + */ + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Открыть" +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Имя файла:", 1090, 6, 6, 76, 9 + EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP + LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "&Каталоги:", -1, 110, 6, 92, 9 + LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP + LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "Показывать файлы &типа:", 1089, 6, 104, 90, 9 + COMBOBOX 1136, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP + LTEXT "&Диски:", 1091, 110, 104, 92, 9 + COMBOBOX 1137, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Открыть", IDOK, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Справка", 1038, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "Т&олько для чтения", 1040, 208, 68, 54, 24, BS_AUTOCHECKBOX | BS_MULTILINE | WS_GROUP | WS_TABSTOP +} + + +SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Сохранить как..." +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Имя файла:", 1090, 6, 6, 76, 9 + EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP + LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "&Каталоги:", -1, 110, 6, 92, 9 + LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP + LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "Показывать файлы &типа:", 1089, 6, 104, 90, 9 + COMBOBOX 1136, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP + LTEXT "&Диски:", 1091, 110, 104, 92, 9 + COMBOBOX 1137, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Сохранить как", IDOK, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Справка", 1038, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "&Только для чтения", 1040, 208, 68, 54, 24, BS_AUTOCHECKBOX | BS_MULTILINE | WS_GROUP | WS_TABSTOP +} + + +PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Печать" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Принтер:", 1088, 6, 6, 40, 9 + LTEXT "", 1089, 60, 6, 150, 9 + GROUPBOX "Печатать", 1072, 6, 30, 160, 65, BS_GROUPBOX + RADIOBUTTON "&Все", 1056, 16, 45, 60, 12 + RADIOBUTTON "В&ыделенный фрагмент", 1057, 16, 60, 60, 12 + RADIOBUTTON "&Страницы", 1058, 16, 75, 60, 12 + DEFPUSHBUTTON "Печать", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Сво&йства", 1024, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP + LTEXT "&с:", 1090, 60, 80, 30, 9 + LTEXT "&по:", 1091, 120, 80, 30, 9 + LTEXT "&Качество печати:", 1092, 6, 100, 76, 9 + COMBOBOX 1136, 80, 100, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + CHECKBOX "П&ечать в файл", 1040, 20, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "Сжато", 1041, 160, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP +} + + +PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Настройка принтера" +FONT 8, "MS Shell Dlg" +{ + GROUPBOX "Принтер", 1072, 6, 10, 180, 65, BS_GROUPBOX + RADIOBUTTON "Принтер по &умолчанию", 1056, 16, 20, 80, 12 + LTEXT "[нет]", 1088, 35, 35, 120, 9 + RADIOBUTTON "&Другой принтер", 1057, 16, 50, 80, 12 + COMBOBOX 1136, 35, 65, 149, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Настройка", 1024, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP + GROUPBOX "Ориентация", 1073, 6, 85, 100, 50, BS_GROUPBOX + RADIOBUTTON "&Книжная", 1058, 50, 100, 40, 12 + RADIOBUTTON "&Альбомная", 1059, 50, 115, 40, 12 + ICON "LANDSCAP", 1097, 10, 95, 32, 32 + ICON "PORTRAIT", 1098, 10, 95, 32, 32 + GROUPBOX "Бумага", 1074, 120, 85, 180, 50, BS_GROUPBOX + LTEXT "Ра&змер", 1089, 130, 95, 30, 9 + LTEXT "&Источник", 1090, 130, 110, 30, 9 + COMBOBOX 1137, 155, 95, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + COMBOBOX 1138, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP +} + + +CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Шрифт" +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Шрифт:",1088 ,6,3,40,9 + COMBOBOX 1136 ,6,13,94,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE + LTEXT "&Начертание:",1089 ,108,3,44,9 + COMBOBOX 1137,108,13,64,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE + LTEXT "&Размер:",1090,179,3,30,9 + COMBOBOX 1138,179,13,32,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT + DEFPUSHBUTTON "OK",IDOK,218,6,40,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Отмена",IDCANCEL,218,23,40,14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Применить", 1026,218,40,40,14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Справка" , 1038,218,57,40,14,WS_GROUP | WS_TABSTOP + GROUPBOX "Атрибуты",1072,6,72,84,34,WS_GROUP + CHECKBOX "&Зачеркнутый", 1040, 10,82,75,10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "Под&черкнутый", 1041, 10,94,75,10, BS_AUTOCHECKBOX + LTEXT "Ц&вет:", 1091 ,6,110,30,9 + COMBOBOX 1139,6,120,84,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | + CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Образец",grp2,98,72,120,36,WS_GROUP + CTEXT "АаБбAaBb",stc5,103,80,109,24,SS_NOPREFIX | NOT WS_VISIBLE + LTEXT "На&бор символов:",stc7 ,98,114,80,9 + COMBOBOX cmb5,98,124,120,90,CBS_DROPDOWNLIST | CBS_HASSTRINGS | + CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP +} + + +CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 310, 185 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Изменение палитры" +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Базовая палитра:", 1088, 4, 4, 140, 10 + LTEXT "До&полнительные цвета:", 1089, 4, 106, 140, 10 + LTEXT "Цвет|За&ливка", 1090, 150, 151, 48, 10 + LTEXT "Крас&ный:", 726 /*1094*/,254,126,32,10 + EDITTEXT 706, 288,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Зелёный:",727/*1095*/,254,140,32,10 + EDITTEXT 707, 288,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "С&иний:",728 /*1096*/,264,154,24,10 + EDITTEXT 708, 288,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "О&ттенок:" ,723 /*1091*/,202,126,30,10 + EDITTEXT 703, 234,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Контраст:" ,724 /*1092*/,199,140,34,10 + EDITTEXT 704, 234,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Яркость:" ,725 /*1093*/,202,154,30,10 + EDITTEXT 705, 234,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + CONTROL "" ,720,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,14,140,86 + CONTROL "" ,721,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,116,140,28 + CONTROL "" ,710,"STATIC",WS_BORDER|SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,4,118,116 + CONTROL "" ,702,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 278,4,8,116 + CONTROL "" ,709,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26 + DEFPUSHBUTTON "OK", IDOK, 4, 166, 44, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 52, 166, 44, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cправка", 1038,100,166, 44, 14 + PUSHBUTTON "&Добавить в набор", 712/*1024*/, 152, 166, 142, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Определить цвет >>", 719/*1025*/, 4, 150, 142, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&i",713,300,200,4,14 /* just a dummy: 'i' is like &i in "sol&id" */ +} + + +FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 245, 62 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Поиск" +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Образец:", -1, 4, 8, 42, 8 + EDITTEXT 1152, 47, 7, 138, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + CHECKBOX "&Только слово целиком", 1040, 4, 26, 100, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "C &учетом регистра", 1041, 4, 42, 100, 12, BS_AUTOCHECKBOX | WS_TABSTOP + GROUPBOX "Направление", 1072, 107, 26, 78, 28 + CONTROL "&Вверх", 1056, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 111, 38, 40, 12 + CONTROL "В&низ", 1057, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 152, 38, 30, 12 + + DEFPUSHBUTTON "&Найти далее", IDOK, 190, 5, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Отмена", IDCANCEL , 190, 23, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Справка", pshHelp , 190, 45, 50, 14, WS_GROUP | WS_TABSTOP +} + + +REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Замена" +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Образец:", -1, 4, 9, 48, 8 + EDITTEXT 1152, 54, 7, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "З&аменить на:", -1, 4, 26, 48, 8 + EDITTEXT 1153, 54, 24, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + CHECKBOX "&Только слово целиком", 1040, 5, 46, 104, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "С &учётом регистра", 1041, 5, 62, 104, 12, BS_AUTOCHECKBOX | WS_TABSTOP + + DEFPUSHBUTTON "&Найти далее", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "&Заменить", psh1 , 174, 21, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Заменить &все", psh2 , 174, 38, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL , 174, 55, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Справка", pshHelp , 174, 75, 50, 14, WS_GROUP | WS_TABSTOP +} + +PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | + DS_CONTEXTHELP | DS_3DLOOK +CAPTION "Печать" +FONT 8, "MS Shell Dlg" +{ + DEFPUSHBUTTON "OK", IDOK, 180,164, 48,14, WS_GROUP | BS_DEFPUSHBUTTON + PUSHBUTTON "Отмена", IDCANCEL, 232,164, 48,14, WS_GROUP + PUSHBUTTON "&Справка", pshHelp, 50, 161, 48,14, WS_GROUP + + GROUPBOX "Принтер", grp4, 8, 4, 272,84, WS_GROUP + CONTROL "Печать в фай&л", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,212,70,64,12 + PUSHBUTTON "&Свойства", psh2, 212, 17, 60,14, WS_GROUP + LTEXT "&Имя:", stc6, 16, 20, 46,8 + COMBOBOX cmb4, 64, 18, 140,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "Статус:", stc8, 16, 36, 46,10, SS_NOPREFIX + LTEXT "Эмулирован", stc12, 64, 36, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Тип:", stc7, 16, 48, 46,10, SS_NOPREFIX + LTEXT "Эмулирован", stc11, 64, 48, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Место:", stc10, 16, 60, 46,10, SS_NOPREFIX + LTEXT "Эмулировано", stc14, 64, 60, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Примечание:", stc9, 16, 72, 46,10, SS_NOPREFIX + LTEXT "Эмулировано", stc13, 64, 72, 100,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + + GROUPBOX "Копии", grp2, 160, 92, 120,64, WS_GROUP + LTEXT "Число &копий:",stc5,168,108,68,8 + ICON "", ico3, 162,124, 60,24, WS_GROUP | SS_CENTERIMAGE + CONTROL "&Разбить", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,230,130,42,12 + EDITTEXT edt3, 230,106, 42,12, WS_GROUP | ES_NUMBER + + GROUPBOX "Печатать", grp1, 8,92, 144,64, WS_GROUP + CONTROL "&Все", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12 + CONTROL "&Страницы", rad3,"Button",BS_AUTORADIOBUTTON,16,122,50,12 + CONTROL "&Выделение", rad2,"Button",BS_AUTORADIOBUTTON,16,138,64,12 + EDITTEXT edt1, 85,122, 20,12, WS_GROUP | ES_NUMBER + EDITTEXT edt2, 120,122, 20,12, WS_GROUP | ES_NUMBER + RTEXT "&от:", stc2, 70,124, 10,8 + RTEXT "&до:", stc3, 106,124, 10,8 +} + +PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | + DS_CONTEXTHELP | DS_3DLOOK +CAPTION "Установки принтера" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,180,156,48,14,WS_GROUP + PUSHBUTTON "Отмена",IDCANCEL,232,156,48,14 +/* PUSHBUTTON "Сеть...", psh5, 284,156,48,14 */ + + GROUPBOX "Принтер", grp4, 8, 4, 272,84, WS_GROUP + PUSHBUTTON "&Свойства", psh2, 212, 17, 60,14, WS_GROUP + LTEXT "&Имя:", stc6, 16, 20, 36,8 + COMBOBOX cmb1, 52, 18, 152,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "Статус:", stc8, 16, 36, 36,10, SS_NOPREFIX + LTEXT "Эмулирован", stc12, 52, 36, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Тип:", stc7, 16, 48, 36,10, SS_NOPREFIX + LTEXT "Эмулирован", stc11, 52, 48, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Место:", stc10, 16, 60, 36,10, SS_NOPREFIX + LTEXT "Эмулировано", stc14, 52, 60, 36,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Заметки:", stc9, 16, 72, 36,10, SS_NOPREFIX + LTEXT "Эмулированы", stc13, 52, 72, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + + GROUPBOX "Бумага", grp2, 8, 92, 164,56, WS_GROUP + LTEXT "Раз&мер:", stc2, 16,108, 36, 8 + COMBOBOX cmb2, 52,106, 112,112,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "&Источник:", stc3, 16,128, 36, 8 + COMBOBOX cmb3, 52,126, 112,112,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + + GROUPBOX "Ориентация", grp1, 180, 92, 100,56, WS_GROUP + ICON "", ico1, 195,112, 18,20, WS_GROUP + CONTROL "&Портрет", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP |WS_TABSTOP,224,106,52,12 + CONTROL "Л&андшафт", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 +END + +PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Параметры страницы" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", rct1, "Static", SS_WHITERECT, 80, 8, 80, 80 + CONTROL "", rct2, "Static", SS_GRAYRECT, 160, 12, 4, 80 + CONTROL "", rct3, "Static", SS_GRAYRECT, 84, 88, 80, 4 + GROUPBOX "Бумага", grp2, 8, 96, 224, 56, BS_GROUPBOX + LTEXT "&Размер:", stc2, 16, 112, 36, 8 + COMBOBOX cmb2, 64, 110, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL + LTEXT "Пода&ча:", stc3, 16, 132, 36, 8 + COMBOBOX cmb3, 64, 130, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL + GROUPBOX "Ориентация", grp1, 8, 156, 64, 56, BS_GROUPBOX + AUTORADIOBUTTON "К&нижная", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "Аль&бомная", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON + GROUPBOX "Поля", grp4, 80, 156, 152, 56, BS_GROUPBOX + LTEXT "&Слева:", stc15, 88, 172, 31, 8 + EDITTEXT edt4, 121, 170, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "С&верху:", stc16, 159, 172, 27, 8 + EDITTEXT edt6, 187, 170, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "Спр&ава:", stc17, 88, 192, 31, 8 + EDITTEXT edt5, 121, 190, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "Сни&зу:", stc18, 159, 192, 23, 8 + EDITTEXT edt7, 187, 190, 29, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + DEFPUSHBUTTON "ОК", IDOK, 71, 220, 50, 14, BS_PUSHBUTTON + PUSHBUTTON "Отмена", IDCANCEL, 126, 220, 50, 14 + PUSHBUTTON "&Принтер...", psh3, 184, 220, 48, 14 +END + + +NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN +CAPTION "Открыть" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Искать &в",IDC_LOOKINSTATIC,4,6,43,8, SS_NOTIFY + COMBOBOX IDC_LOOKIN,49,3,132,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + + LTEXT "" , IDC_TOOLBARSTATIC, 181, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE + LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE + + LTEXT "Имя &файла:",IDC_FILENAMESTATIC,5,112,46,8, SS_NOTIFY + EDITTEXT IDC_FILENAME,54,110,155,12,ES_AUTOHSCROLL + + LTEXT "&Тип файлов:",IDC_FILETYPESTATIC,5,128,42,8, SS_NOTIFY + COMBOBOX IDC_FILETYPE,54,126,155,53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + + CONTROL "Только для &чтения",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,145,100,10 + + DEFPUSHBUTTON "&Открыть", IDOK,222,110,50,14 + PUSHBUTTON "Отмена", IDCANCEL,222,128,50,14 + PUSHBUTTON "&Справка", pshHelp,222,145,50,14 +} + +STRINGTABLE DISCARDABLE +{ + IDS_ABOUTBOX "&О тесте ВыборПапки" + IDS_DOCUMENTFOLDERS "Папки документов" + IDS_PERSONAL "Мои документы" + IDS_FAVORITES "Избранное" + IDS_PATH "Системный путь" + IDS_DESKTOP "Рабочий стол" + IDS_FONTS "Шрифты" + IDS_MYCOMPUTER "Мой компьютер" +} + +STRINGTABLE DISCARDABLE +{ + IDS_SYSTEMFOLDERS "Системные папки" + IDS_LOCALHARDRIVES "Локальные жесткие диски" + IDS_FILENOTFOUND "Файл не найден" + IDS_VERIFYFILE "Проверьте, правильно ли указано имя файла" + IDS_CREATEFILE "Файла не существует\nХотите ли Вы его создать?" + IDS_OVERWRITEFILE "Файл уже существует.\nЗаменить его?" + IDS_INVALID_FILENAME_TITLE "Некорректный символ в записи пути" + IDS_INVALID_FILENAME "Имя файла не может содержать следующие символы:\n / : < > |" + IDS_PATHNOTEXISTING "Путь не существует" + IDS_FILENOTEXISTING "Файл не существует" +} + +STRINGTABLE DISCARDABLE +{ + IDS_UPFOLDER "Вверх на один уровень" + IDS_NEWFOLDER "Создать новую папку" + IDS_LISTVIEW "Список" + IDS_REPORTVIEW "Подробности" + IDS_TODESKTOP "Переход на рабочий стол" +} + +STRINGTABLE DISCARDABLE +{ + PD32_PRINT_TITLE "Печать" + + PD32_VALUE_UREADABLE "Нечитаемый элемент" + PD32_INVALID_PAGE_RANGE "Это значение не лежит внутри диапазона страниц\n\ +Введите значение между %d и %d" + PD32_FROM_NOT_ABOVE_TO "Значение ОТ не должно превышать ДО:" + PD32_MARGINS_OVERLAP "Границы перекрывают или превышают \ +размеры бумаги.\nВведите их заново" + PD32_NR_OF_COPIES_EMPTY "Значение Числа Копий не может быть \ +пустым" + PD32_TOO_LARGE_COPIES "Такое большое количество копий не \ +может быть напечатано Вашим принтером.\nВведите значение между 1 и %d" + PD32_PRINT_ERROR "Произошла ошибка принтера" + PD32_NO_DEFAULT_PRINTER "Нет принтера, установленного по умолчанию" + PD32_CANT_FIND_PRINTER "Не удалось найти принтер" + PD32_OUT_OF_MEMORY "Мало памяти" + PD32_GENERIC_ERROR "Произошла(и) ошибка(и)" + PD32_DRIVER_UNKNOWN "Неизвестный драйвер принтера" + PD32_NO_DEVICES "Отсутствуют принтеры в системе. \ +Проверьте, что хотя бы один принтер установлен и система печати запущена. \ +" + + PD32_DEFAULT_PRINTER "Принтер по умолчанию; " + PD32_NR_OF_DOCUMENTS_IN_QUEUE "%d документов в очереди" + PD32_MARGINS_IN_INCHES "Границы [дюймы)" + PD32_MARGINS_IN_MILLIMETERS "Границы [мм]" + PD32_MILLIMETERS "мм" + + PD32_PRINTER_STATUS_READY "Готово" + PD32_PRINTER_STATUS_PAUSED "Приостановлено; " + PD32_PRINTER_STATUS_ERROR "Ошибка; " + PD32_PRINTER_STATUS_PENDING_DELETION "Ожидание удаления; " + PD32_PRINTER_STATUS_PAPER_JAM "Бумага застряла; " + PD32_PRINTER_STATUS_PAPER_OUT "Не хватает бумаги; " + PD32_PRINTER_STATUS_MANUAL_FEED "Вставьте бумагу вручную; " + PD32_PRINTER_STATUS_PAPER_PROBLEM "Проблема с бумагой; " + PD32_PRINTER_STATUS_OFFLINE "Принтер в режиме offline; " + PD32_PRINTER_STATUS_IO_ACTIVE "Ввод/Вывод активен; " + PD32_PRINTER_STATUS_BUSY "Занят; " + PD32_PRINTER_STATUS_PRINTING "Идет печать; " + PD32_PRINTER_STATUS_OUTPUT_BIN_FULL "Лоток переполнен бумагой; " + PD32_PRINTER_STATUS_NOT_AVAILABLE "Не доступен; " + PD32_PRINTER_STATUS_WAITING "Ожидание; " + PD32_PRINTER_STATUS_PROCESSING "Обработка; " + PD32_PRINTER_STATUS_INITIALIZING "Подготовка; " + PD32_PRINTER_STATUS_WARMING_UP "Прогрев; " + PD32_PRINTER_STATUS_TONER_LOW "Тонер на исходе; " + PD32_PRINTER_STATUS_NO_TONER "Нет тонера; " + PD32_PRINTER_STATUS_PAGE_PUNT "Page punt; " + PD32_PRINTER_STATUS_USER_INTERVENTION "Прервано пользователем; " + PD32_PRINTER_STATUS_OUT_OF_MEMORY "Мало памяти; " + PD32_PRINTER_STATUS_DOOR_OPEN "Крышка принтера открыта; " + PD32_PRINTER_STATUS_SERVER_UNKNOWN "Неизвестный сервер принтера; " + PD32_PRINTER_STATUS_POWER_SAVE "Питание в безопасном режиме; " +} + +STRINGTABLE DISCARDABLE /* Font styles */ +{ + IDS_FONT_REGULAR "Нормальный" + IDS_FONT_BOLD "Жирный" + IDS_FONT_ITALIC "Курсив" + IDS_FONT_BOLD_ITALIC "Жирный курсив" +} + +STRINGTABLE DISCARDABLE /* Color names */ +{ + IDS_COLOR_BLACK "Чёрный" + IDS_COLOR_MAROON "Тёмно-бордовый" + IDS_COLOR_GREEN "Зелёный" + IDS_COLOR_OLIVE "Оливковый" + IDS_COLOR_NAVY "Тёмно-синий" + IDS_COLOR_PURPLE "Пурпурный" + IDS_COLOR_TEAL "Морской волны" + IDS_COLOR_GRAY "Серый" + IDS_COLOR_SILVER "Серебряный" + IDS_COLOR_RED "Красный" + IDS_COLOR_LIME "Лимонный" + IDS_COLOR_YELLOW "Жёлтый" + IDS_COLOR_BLUE "Синий" + IDS_COLOR_FUCHSIA "Ярко-розовый" + IDS_COLOR_AQUA "Голубой" + IDS_COLOR_WHITE "Белый" +} + +STRINGTABLE DISCARDABLE +{ + IDS_FONT_SIZE "Выберите шрифт размером %d - %d пунктов." + IDS_SAVE_BUTTON "&Сохранить" + IDS_SAVE_IN "Сохранить &в:" + IDS_SAVE "Сохранить" + IDS_SAVE_AS "Сохранить как" + IDS_OPEN_FILE "Открыть файл" +} diff --git a/dlls/credui/credui_Ru.rc b/dlls/credui/credui_Ru.rc index a990525b3b6..9e0a2d2bbed 100644 --- a/dlls/credui/credui_Ru.rc +++ b/dlls/credui/credui_Ru.rc @@ -20,6 +20,9 @@ #include "credui_resources.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 @@ -30,23 +33,23 @@ BEGIN CONTROL IDB_BANNER,-1,"Static",SS_BITMAP | SS_CENTERIMAGE,0, 0,213,37 LTEXT "IDS_MESSAGEFORMAT",IDC_MESSAGE,8,48,199,8,NOT WS_GROUP - LTEXT "Ïî&ëüçîâàòåëü:",-1,8,62,72,12,SS_CENTERIMAGE + LTEXT "По&льзователь:",-1,8,62,72,12,SS_CENTERIMAGE CONTROL "",IDC_USERNAME,"ComboBoxEx32",CBS_DROPDOWN | CBS_NOINTEGRALHEIGHT | WS_TABSTOP,80,62,126,87 - LTEXT "&Ïàðîëü:",-1,8,80,72,12,SS_CENTERIMAGE + LTEXT "&Пароль:",-1,8,80,72,12,SS_CENTERIMAGE EDITTEXT IDC_PASSWORD,80,80,126,12,ES_PASSWORD | ES_AUTOHSCROLL - CONTROL "Ñî&õðàíèòü ïàðîëü",IDC_SAVE,"Button", + CONTROL "Со&хранить пароль",IDC_SAVE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,80,98,126,12 - DEFPUSHBUTTON "ÎÊ",IDOK,97,128,50,14 - PUSHBUTTON "Îòìåíà",IDCANCEL,156,128,50,14 + DEFPUSHBUTTON "ОК",IDOK,97,128,50,14 + PUSHBUTTON "Отмена",IDCANCEL,156,128,50,14 END STRINGTABLE DISCARDABLE { - IDS_TITLEFORMAT "Ïîäêëþ÷åíèå ê %s" - IDS_MESSAGEFORMAT "Ïîäêëþ÷åíèå ê %s" - IDS_INCORRECTPASSWORDTITLE "Âõîä íå áûë ïðîèçâåä¸í" - IDS_INCORRECTPASSWORD "Óáåäèòåñü, ÷òî èìÿ ïîëüçîâàòåëÿ\nè ïàðîëü âåðíû." - IDS_CAPSLOCKONTITLE "Caps Lock âêëþ÷åí" - IDS_CAPSLOCKON "Ïàðîëü ìîæåò áûòü ââåä¸í íåïðàâèëüíî èç-çà íàæàòîé êëàâèøè Caps Lock.\n\nÎòêëþ÷èòå Caps Lock ïåðåä òåì, êàê ââîäèòü ïàðîëü." + IDS_TITLEFORMAT "Подключение к %s" + IDS_MESSAGEFORMAT "Подключение к %s" + IDS_INCORRECTPASSWORDTITLE "Вход не был произведён" + IDS_INCORRECTPASSWORD "Убедитесь, что имя пользователя\nи пароль верны." + IDS_CAPSLOCKONTITLE "Caps Lock включен" + IDS_CAPSLOCKON "Пароль может быть введён неправильно из-за нажатой клавиши Caps Lock.\n\nОтключите Caps Lock перед тем, как вводить пароль." } diff --git a/dlls/crypt32/crypt32_Lt.rc b/dlls/crypt32/crypt32_Lt.rc index d5302b499cf..9ed21510372 100644 --- a/dlls/crypt32/crypt32_Lt.rc +++ b/dlls/crypt32/crypt32_Lt.rc @@ -53,7 +53,7 @@ STRINGTABLE DISCARDABLE IDS_UNSTRUCTURED_ADDRESS "Nestruktūrinis adresas" IDS_SMIME_CAPABILITIES "SMIME gebėjimai" IDS_PREFER_SIGNED_DATA "Teikti pirmenybę pasirašytiems duomenims" - IDS_CPS "SVN" /* Sertifikavimo Veiklos Nuostatos */ + IDS_CPS "Sertifikavimo Veiklos Nuostatos (CPS)" IDS_USER_NOTICE "Naudotojo pastaba" IDS_OCSP "Būsenos paliudijimo tinklu protokolas (OCSP)" IDS_CA_ISSUER "Liudijimo įstaigos steigėjai" @@ -177,7 +177,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_CA "Tarpinės liudijimų įstaigos" IDS_LOCALIZEDNAME_ADDRESSBOOK "Kiti žmonės" IDS_LOCALIZEDNAME_TRUSTEDPUBLISHER "Patikimi publikuotojai" - IDS_LOCALIZEDNAME_DISALLOWED "Atmesti" + IDS_LOCALIZEDNAME_DISALLOWED "Nepatikimi liudijimai" } STRINGTABLE DISCARDABLE diff --git a/dlls/cryptui/Makefile.in b/dlls/cryptui/Makefile.in index 3180df63716..d859f46db08 100644 --- a/dlls/cryptui/Makefile.in +++ b/dlls/cryptui/Makefile.in @@ -17,7 +17,8 @@ RC_SRCS = \ cryptui_Fr.rc \ cryptui_Ko.rc \ cryptui_Lt.rc \ - cryptui_Nl.rc + cryptui_Nl.rc \ + cryptui_Pt.rc @MAKE_DLL_RULES@ diff --git a/dlls/cryptui/cryptui_Lt.rc b/dlls/cryptui/cryptui_Lt.rc index de656c54749..d4ba0eb2608 100644 --- a/dlls/cryptui/cryptui_Lt.rc +++ b/dlls/cryptui/cryptui_Lt.rc @@ -46,8 +46,8 @@ STRINGTABLE DISCARDABLE IDS_CERTIFICATE_VALID "Šis liudijimas yra geras." IDS_FIELD "Laukas" IDS_VALUE "Reikšmė" - IDS_FIELDS_ALL "" - IDS_FIELDS_V1 "Tik versijos 1 laukai" + IDS_FIELDS_ALL "" + IDS_FIELDS_V1 "Tik pirmos versijos laukai" IDS_FIELDS_EXTENSIONS "Tik plėtiniai" IDS_FIELDS_CRITICAL_EXTENSIONS "Tik būtini plėtiniai" IDS_FIELDS_PROPERTIES "Tik savybės" diff --git a/dlls/cryptui/cryptui_Pt.rc b/dlls/cryptui/cryptui_Pt.rc new file mode 100644 index 00000000000..f8795293d9f --- /dev/null +++ b/dlls/cryptui/cryptui_Pt.rc @@ -0,0 +1,465 @@ +/* + * cryptui dll Portuguese resources + * + * Copyright 2009 Ricardo Filipe + * + * 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 "cryptuires.h" + +#pragma code_page(65001) + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +STRINGTABLE DISCARDABLE +{ + IDS_CERTIFICATE "Certificado" + IDS_CERTIFICATEINFORMATION "Informação do Certificado" + IDS_CERT_INFO_BAD_SIG "Este certificado tem uma assinatura inválida. O certificado pode ter sido alterado ou corrompido." + IDS_CERT_INFO_UNTRUSTED_CA "Este certificado raíz não é confiável. Para ficar confiável, adicione-o ao conjunto de certificados raíz confiáveis do seu sistema." + IDS_CERT_INFO_UNTRUSTED_ROOT "Este certificado não foi validado num certificado raíz confiável." + IDS_CERT_INFO_PARTIAL_CHAIN "O emissor deste certificado não foi encontrado." + IDS_CERT_INFO_BAD_PURPOSES "Todos os propósitos deste certificado não foram verificados." + IDS_CERT_INFO_PURPOSES "Este certificado é intencionado com os seguintes propósitos::" + IDS_SUBJECT_HEADING "Emitido a: " + IDS_ISSUER_HEADING "Emitido por: " + IDS_VALID_FROM "Válido de " + IDS_VALID_TO " para " + IDS_CERTIFICATE_BAD_SIGNATURE "Este certificado tem uma assinatura inválida." + IDS_CERTIFICATE_BAD_TIME "Este certificado expirou ou ainda não é válido." + IDS_CERTIFICATE_BAD_TIMENEST "O período de validade deste certificado excede o do seu emissor." + IDS_CERTIFICATE_REVOKED "Este certificado foi revogado pelo seu emissor." + IDS_CERTIFICATE_VALID "Este certificado está OK." + IDS_FIELD "Campo" + IDS_VALUE "Valor" + IDS_FIELDS_ALL "" + IDS_FIELDS_V1 "Campos da Versão 1 Apenas" + IDS_FIELDS_EXTENSIONS "Extensões Apenas" + IDS_FIELDS_CRITICAL_EXTENSIONS "Extensões Críticas Apenas" + IDS_FIELDS_PROPERTIES "Propriedades Apenas" + IDS_FIELD_VERSION "Versão" + IDS_FIELD_SERIAL_NUMBER "Número de Série" + IDS_FIELD_ISSUER "Emissor" + IDS_FIELD_VALID_FROM "Válido desde" + IDS_FIELD_VALID_TO "Válido até" + IDS_FIELD_SUBJECT "Sujeito" + IDS_FIELD_PUBLIC_KEY "Chave Pública" + IDS_FIELD_PUBLIC_KEY_FORMAT "%s (%d bits)" + IDS_PROP_HASH "SHA1 hash" + IDS_PROP_ENHKEY_USAGE "Uso de chave avançado (propriedade)" + IDS_PROP_FRIENDLY_NAME "Nome amigável" + IDS_PROP_DESCRIPTION "Descrição" + IDS_CERTIFICATE_PROPERTIES "Propriedades do Certificado" + IDS_CERTIFICATE_PURPOSE_ERROR "Por favor insira um OID na forma 1.2.3.4" + IDS_CERTIFICATE_PURPOSE_EXISTS "O OID inserido já existe." + IDS_SELECT_STORE_TITLE "Seleccione o Conjunto de Certificados" + IDS_SELECT_STORE "Por favor seleccione um conjunto de certificados." + IDS_IMPORT_WIZARD "Assistente de Importação de Certificados" + IDS_IMPORT_TYPE_MISMATCH "O ficheiro contém objectos que não correspondem ao critério dado. Por favor seleccione outro ficheiro." + IDS_IMPORT_FILE_TITLE "Ficheiro a Importar" + IDS_IMPORT_FILE_SUBTITLE "Especifique o ficheiro que deseja Importar." + IDS_IMPORT_STORE_TITLE "Conjunto de Certificados" + IDS_IMPORT_STORE_SUBTITLE "Os Conjuntos de Certificados são coleccões de certificados, listas de revogação de certificados e listas de certificados confiáveis." + IDS_IMPORT_FILTER_CERT "Certificado X.509 (*.cer; *.crt)" + IDS_IMPORT_FILTER_PFX "Troca de Informações Pessoais (*.pfx; *.p12)" + IDS_IMPORT_FILTER_CRL "Lista de Revogação de Certificados (*.crl)" + IDS_IMPORT_FILTER_CTL "Lista de Certificados Confiáveis (*.stl)" + IDS_IMPORT_FILTER_SERIALIZED_STORE "Conjunto de Certificados Serializados da Microsoft (*.sst)" + IDS_IMPORT_FILTER_CMS "Mensagens CMS/PKCS #7 (*.spc; *.p7b)" + IDS_IMPORT_FILTER_ALL "Todos os Ficheiros (*.*)" + IDS_IMPORT_EMPTY_FILE "Por favor seleccione um ficheiro." + IDS_IMPORT_BAD_FORMAT "O formato do ficheiro não é reconhecido. Por favor seleccione outro ficheiro." + IDS_IMPORT_OPEN_FAILED "Não consegui abrir " + IDS_IMPORT_DEST_DETERMINED "Determinado pelo programa" + IDS_IMPORT_SELECT_STORE "Por favor seleccione um conjunto" + IDS_IMPORT_STORE_SELECTION "Conjunto de certificados seleccionado" + IDS_IMPORT_DEST_AUTOMATIC "Determinado automaticamente pelo programa" + IDS_IMPORT_FILE "Ficheiro" + IDS_IMPORT_CONTENT "Conteúdo" + IDS_IMPORT_CONTENT_CERT "Certificado" + IDS_IMPORT_CONTENT_CRL "Lista de Revogação de Certificados" + IDS_IMPORT_CONTENT_CTL "Lista de Certificados Confiáveis" + IDS_IMPORT_CONTENT_CMS "Mensagem CMS/PKCS #7" + IDS_IMPORT_CONTENT_PFX "Troca de Informações Pessoais" + IDS_IMPORT_CONTENT_STORE "Conjunto de Certificados" + IDS_IMPORT_SUCCEEDED "A importação foi bem sucedida." + IDS_IMPORT_FAILED "A importação falhou." + IDS_WIZARD_TITLE_FONT "Arial" + IDS_PURPOSE_ALL "" + IDS_PURPOSE_ADVANCED "" + IDS_SUBJECT_COLUMN "Emitido para" + IDS_ISSUER_COLUMN "Emitido por" + IDS_EXPIRATION_COLUMN "Data de Expiração" + IDS_FRIENDLY_NAME_COLUMN "Nome Amigável" + IDS_ALLOWED_PURPOSE_ALL "" + IDS_ALLOWED_PURPOSE_NONE "" + IDS_WARN_REMOVE_MY "Não vai poder continuar a decifrar ou assinar mensagens com este certificado.\nTem a certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_MY "Não vai poder continuar a decifrar ou assinar mensagens com estes certificados.\nTem a certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_ADDRESSBOOK "Não vai poder continuar a cifrar ou verificar mensagens com este certificado.\nTem a certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_ADDRESSBOOK "Não vai poder continuar a cifrar ou verificar mensagens com estes certificados.\nTem a certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_CA "Os certificados emitidos por esta autoridade de certificação não continuarão a ser confiáveis.\nTem a certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_CA "Os certificados emitidos por estas autoridades de certificação não continuarão a ser confiáveis.\nTem a certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_ROOT "Os certificados emitidos por esta autoridade de certificação raíz ou quaisquer autoridades de certificação por ela emitidas não continuarão a ser confiáveis.\nTem a certeza que deseja remover este certificado raíz confiável?" + IDS_WARN_REMOVE_PLURAL_ROOT "Os certificados emitidos por estas autoridades de certificação raíz ou quaisquer autoridades de certificação por elas emitidas não continuarão a ser confiáveis.\nTem a certeza que deseja remover estes certificados raíz confiáveis?" + IDS_WARN_REMOVE_TRUSTEDPUBLISHER "Software assinado por este editor não continuará a ser confiável.\nTem a certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_TRUSTEDPUBLISHER "Software assinado por estes editores não continuará a ser confiável.\nTem a certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_DEFAULT "Tem a certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_DEFAULT "Tem a certeza que deseja remover estes certificados?" + IDS_CERT_MGR "Certificados" + IDS_PURPOSE_SERVER_AUTH "Assegura a identidade de um computador remoto" + IDS_PURPOSE_CLIENT_AUTH "Prova a sua identidade a um computador remoto" + IDS_PURPOSE_CODE_SIGNING "Assegura que o software veio de uma editora de software\nProtege o software de alterações após publicação" + IDS_PURPOSE_EMAIL_PROTECTION "Protege mensagens de e-mail" + IDS_PURPOSE_IPSEC "Permite comunicação segura pela Internet" + IDS_PURPOSE_TIMESTAMP_SIGNING "Permite que os dados sejam assinados com o tempo actual" + IDS_PURPOSE_CTL_USAGE_SIGNING "Permite que assine digitalmente uma lista de certificados confiáveis" + IDS_PURPOSE_EFS "Permite que os dados em disco sejam cifrados" + IDS_PURPOSE_EFS_RECOVERY "Recuperação de Ficheiros" + IDS_PURPOSE_WHQL "Windows Hardware Driver Verification" + IDS_PURPOSE_NT5 "Windows System Component Verification" + IDS_PURPOSE_OEM_WHQL "OEM Windows System Component Verification" + IDS_PURPOSE_EMBEDDED_NT "Embedded Windows System Component Verification" + IDS_PURPOSE_ROOT_LIST_SIGNER "Root List Signer" + IDS_PURPOSE_QUALIFIED_SUBORDINATION "Qualified Subordination" + IDS_PURPOSE_KEY_RECOVERY "Key Recovery" + IDS_PURPOSE_DOCUMENT_SIGNING "Document Signing" + IDS_PURPOSE_LIFETIME_SIGNING "Lifetime Signing" + IDS_PURPOSE_DRM "Digital Rights" + IDS_PURPOSE_LICENSES "Key Pack Licenses" + IDS_PURPOSE_LICENSE_SERVER "License Server Verification" + IDS_PURPOSE_ENROLLMENT_AGENT "Certificate Request Agent" + IDS_PURPOSE_SMARTCARD_LOGON "Smart Card Logon" + IDS_PURPOSE_CA_EXCHANGE "Private Key Archival" + IDS_PURPOSE_KEY_RECOVERY_AGENT "Key Recovery Agent" + IDS_PURPOSE_DS_EMAIL_REPLICATION "Directory Service Email Replication" + IDS_EXPORT_WIZARD "Assistente de Exportação de Certificados" + IDS_EXPORT_FORMAT_TITLE "Formato de Exportação" + IDS_EXPORT_FORMAT_SUBTITLE "Escolha o formato em que o conteúdo será guardado." + IDS_EXPORT_FILE_TITLE "Exportar Ficheiro" + IDS_EXPORT_FILE_SUBTITLE "Especifique o nome do ficheiro em que o conteúdo será guardado." + IDS_EXPORT_FILE_EXISTS "O ficheiro especificado já existe. Deseja substituí-lo?" + IDS_EXPORT_FILTER_CERT "DER-Encoded Binary X.509 (*.cer)" + IDS_EXPORT_FILTER_BASE64_CERT "Base64-Encoded X.509 (*.cer)" + IDS_EXPORT_FILTER_CRL "Certificate Revocation List (*.crl)" + IDS_EXPORT_FILTER_CTL "Certificate Trust List (*.stl)" + IDS_EXPORT_FILTER_CMS "CMS/PKCS #7 Messages (*.p7b)" + IDS_EXPORT_FILTER_PFX "Personal Information Exchange (*.pfx)" + IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE "Serialized Certificate Store (*.sst)" + IDS_EXPORT_FORMAT "Formato do Ficheiro" + IDS_EXPORT_INCLUDE_CHAIN "Incluir todos os certificados no caminho do certificado" + IDS_EXPORT_KEYS "Exportar Chaves" + IDS_YES "Sim" + IDS_NO "Não" + IDS_EXPORT_SUCCEEDED "A exportação foi bem sucedida." + IDS_EXPORT_FAILED "A exportação falhou." + IDS_EXPORT_PRIVATE_KEY_TITLE "Exportar Chave Privada" + IDS_EXPORT_PRIVATE_KEY_SUBTITLE "O certificado contém uma chave privada que pode ser exportada em conjunto com o certificado." + IDS_EXPORT_PASSWORD_TITLE "Digite Palavra Chave" + IDS_EXPORT_PASSWORD_SUBTITLE "Pode proteger uma chave privada com uma palavra chave." + IDS_EXPORT_PASSWORD_MISMATCH "As palavras chave não coincidem." + IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Nota: A chave privada para este certificado não conseguiu ser aberta." + IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Nota: A chave privada para este certificado não é exportável." +} + +IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +CAPTION "Geral" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", -1, "Static", WS_BORDER|SS_WHITERECT, 6,10,241,200 + CONTROL "", IDC_CERTIFICATE_ICON,"RichEdit20W", + ES_READONLY|WS_DISABLED,8,11,26,26 + CONTROL "", IDC_CERTIFICATE_INFO,"RichEdit20W", + ES_READONLY|WS_DISABLED,34,11,212,26 + CONTROL "", -1, "Static", SS_BLACKFRAME, 16,37,222,1 + CONTROL "", IDC_CERTIFICATE_STATUS,"RichEdit20W", + ES_READONLY|ES_MULTILINE,8,38,238,78 + CONTROL "", -1, "Static", SS_BLACKFRAME, 16,116,222,1 + CONTROL "", IDC_CERTIFICATE_NAMES,"RichEdit20W", + ES_READONLY|ES_MULTILINE|WS_DISABLED,8,118,238,90 + PUSHBUTTON "&Instalar Certificado...", IDC_ADDTOSTORE,103,216,70,14 + PUSHBUTTON "&Declaração do Emissor", IDC_ISSUERSTATEMENT,177,216,70,14 +END + +IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +CAPTION "Detalhes" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Mostrar:", -1, 6,12,40,14 + COMBOBOX IDC_DETAIL_SELECT, 28,10,100,14, + CBS_DROPDOWNLIST|WS_BORDER|WS_VSCROLL|WS_TABSTOP + CONTROL "", IDC_DETAIL_LIST, "SysListView32", + LVS_REPORT|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 6,28,241,100 + CONTROL "", IDC_DETAIL_VALUE, "RichEdit20W", + ES_READONLY|ES_MULTILINE|WS_TABSTOP, 6,136,241,70 + PUSHBUTTON "&Editar Propriedades...", IDC_EDITPROPERTIES,103,216,70,14 + PUSHBUTTON "&Copiar para Ficheiro...", IDC_EXPORT,177,216,70,14 +END + +IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +CAPTION "Caminho de Certificação" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "&Caminho de Certificação", -1,6,10,245,165, BS_GROUPBOX + CONTROL "",IDC_CERTPATH, "SysTreeView32", TVS_HASLINES|WS_BORDER, + 13,22,231,130 + PUSHBUTTON "&Ver Certificado", IDC_VIEWCERTIFICATE,175,156,70,14 + LTEXT "&Estado do Certificado:", IDC_CERTIFICATESTATUS,6,183,70,14 + CONTROL "", IDC_CERTIFICATESTATUSTEXT,"RichEdit20W", + WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 +END + +IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +CAPTION "Declaração" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_USERNOTICE,"RichEdit20W", + WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,10,241,200 + PUSHBUTTON "&Fechar", IDOK,103,216,70,14 + PUSHBUTTON "&Mais Informação", IDC_CPS,177,216,70,14 +END + +IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +CAPTION "Geral" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Nome amigável:", -1, 6,14,60,14 + EDITTEXT IDC_FRIENDLY_NAME, 60,12,191,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Descrição:", -1, 6,32,60,14 + EDITTEXT IDC_DESCRIPTION, 60,30,191,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + GROUPBOX "Propósitos do Certificado", -1,6,48,245,165, BS_GROUPBOX + AUTORADIOBUTTON "&Activar todos os propósitos para este certificado", + IDC_ENABLE_ALL_PURPOSES, 12,58,180,14, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "D&esactivar todos os propósitos para este certificado", + IDC_DISABLE_ALL_PURPOSES, 12,70,180,14, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "A&ctivar apenas os seguintes propósitos para este certificado:", + IDC_ENABLE_SELECTED_PURPOSES, 12,82,180,14, BS_AUTORADIOBUTTON + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 24,100,220,90 + PUSHBUTTON "Adicionar &Propósito...", IDC_ADD_PURPOSE,184,194,60,14 +END + +IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +CAPTION "Adicionar Propósito" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Adicione o identificador de objecto (OID) para o propósito que deseja adicionar:", + -1, 6,6,190,28 + EDITTEXT IDC_NEW_PURPOSE, 6,28,190,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + PUSHBUTTON "OK", IDOK, 33,48,60,14 + PUSHBUTTON "Cancelar", IDCANCEL, 100,48,60,14 +END + +IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +CAPTION "Seleccione Conjunto de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Seleccione o conjunto de certificados que deseja usar:", IDC_STORE_TEXT, 6,6,190,28 + CONTROL "",IDC_STORE_LIST, "SysTreeView32", TVS_HASLINES|WS_BORDER|WS_TABSTOP, + 6,28,188,70 + CHECKBOX "&Mostrar conjuntos físicos", IDC_SHOW_PHYSICAL_STORES, 6,102,90,14, + BS_AUTOCHECKBOX|WS_TABSTOP + PUSHBUTTON "OK", IDOK, 90,118,50,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Cancelar", IDCANCEL, 144,118,50,14 +END + +IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Benvindo ao Assistente de Importação de Certificados", IDC_IMPORT_TITLE, + 115,7,195,12 + LTEXT "Este assistente vai ajudá-lo a importar certificados, listas de revogação de certificados e listas de certificados confiáveis a partir de um ficheiro para um conjunto de certificados.", + -1, 115,26,195,25 + LTEXT "Um certificado pode ser usado para identificá-lo ou ao computador do qual está a comunicar. Também pode ser usado para autenticação e para assinar mensagens. Conjuntos de certificados são colecções de certificados, listas de revogação de certificados e listas de certificados confiáveis.", + -1, 115,56,195,40 + LTEXT "Para continuar clique em Seguinte.", + -1, 115,103,195,8 +END + +IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,178 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Nome do ficheiro:", -1, 21,1,195,10 + EDITTEXT IDC_IMPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "&Procurar...", IDC_IMPORT_BROWSE_FILE, 236,11,60,14 + LTEXT "Nota: os seguintes formatos de ficheiro podem conter mais que um certificado, lista de revogação de certificados ou lista de certificados confiáveis:", + -1, 21,26,265,16 + LTEXT "Cryptographic Message Syntax Standard/PKCS #7 Messages (.p7b)", + -1, 31,49,265,10 + LTEXT "Personal Information Exchange/PKCS #12 (.pfx, .p12)", + -1, 31,64,265,10 + LTEXT "Microsoft Serialized Certificate Store (.sst)", + -1, 31,79,265,10 +END + +IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "O Wine pode automaticamente seleccionar o conjunto de certificados ou você pode especificar a localização para os certificados.", + -1, 21,1,195,20 + AUTORADIOBUTTON "&Seleccionar conjunto de certificados automaticamente", + IDC_IMPORT_AUTO_STORE, 31,18,180,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Colocar todos os certificados no seguinte conjunto:", + IDC_IMPORT_SPECIFY_STORE, 31,30,180,12, BS_AUTORADIOBUTTON + EDITTEXT IDC_IMPORT_STORE, 44,49,185,14, ES_READONLY + PUSHBUTTON "&Procurar...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 +END + +IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "A completar o Assistente de Importação de Certificados", IDC_IMPORT_TITLE, + 115,1,195,40 + LTEXT "Completou com sucesso o Assistente de Importação de Certificados.", + -1, 115,33,195,24 + LTEXT "Especificou as seguintes configurações:", + -1, 115,57,195,12 + CONTROL "", IDC_IMPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END + +IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +CAPTION "Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Com o propósito:", -1, 7,9,100,12 + COMBOBOX IDC_MGR_PURPOSE_SELECTION, 83,7,245,14, + CBS_DROPDOWNLIST|WS_BORDER|WS_VSCROLL|WS_TABSTOP + CONTROL "", IDC_MGR_STORES, "SysTabControl32", + WS_CLIPSIBLINGS|WS_TABSTOP, 7,25,321,140 + CONTROL "", IDC_MGR_CERTS, "SysListView32", + LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 15,46,305,111 + PUSHBUTTON "&Importar...", IDC_MGR_IMPORT, 7,172,51,14 + PUSHBUTTON "&Exportar...", IDC_MGR_EXPORT, 62,172,51,14, WS_DISABLED + PUSHBUTTON "&Remover", IDC_MGR_REMOVE, 117,172,51,14, WS_DISABLED + PUSHBUTTON "&Avançadas...", IDC_MGR_ADVANCED, 277,172,51,14 + GROUPBOX "Propósitos do Certificado", -1,7,194,321,47, BS_GROUPBOX + LTEXT "", IDC_MGR_PURPOSES, 13,208,252,30 + PUSHBUTTON "&Ver...", IDC_MGR_VIEW, 269,218,51,14, WS_DISABLED + PUSHBUTTON "&Fechar", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON +END + +IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +CAPTION "Opções Avançadas" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Propósito do certificado", -1, 7,7,234,141, BS_GROUPBOX + LTEXT "Seleccione um ou mais propósitos a serem listados quando Propósitos Avançados estiver seleccionado.", + -1, 14,18,220,16 + LTEXT "&Propósitos de Certificados:", -1, 14,41,90,12, WS_TABSTOP + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 14,51,220,90 + PUSHBUTTON "OK", IDOK, 132,155,51,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Cancelar", IDCANCEL, 190,155,51,14 +END + +IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Benvindo ao Assistente de Exportação de Certificados", IDC_EXPORT_TITLE, + 115,7,195,12 + LTEXT "Este assostente vai ajudá-lo a exportar certificados, listas de revogação de certificados e listas de certificados confiáveis a partir de um conjunto de certificados para um ficheiro.", + -1, 115,26,195,25 + LTEXT "Um certificado pode ser usado para identificá-lo ou ao computador de onde está a comunicar. Pode também ser usado para autenticação e para assinar mensagens. Conjuntos de certificados são colecções de certificados, listas de revogação de certificados e listas de certificados confiáveis.", + -1, 115,56,195,40 + LTEXT "Para continuar clique em Seguinte.", + -1, 115,103,195,8 +END + +IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Se escolher exportar a chave privada será pedida uma palavra-passe para proteger a chave privada mais à frente.", -1, 21,1,195,25 + LTEXT "Deseja exportar a chave privada?", -1, 21,27,195,10 + AUTORADIOBUTTON "&Sim, exportar a chave privada", + IDC_EXPORT_PRIVATE_KEY_YES, 31,36,200,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Não exportar a chave privada", + IDC_EXPORT_PRIVATE_KEY_NO, 31,48,200,12, BS_AUTORADIOBUTTON + LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 +END + +IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Palavra-passe:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_PASSWORD, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Confirmar palavra-passe:", -1, 21,35,195,10 + EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP +END + +IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Seleccione o formato que deseja utilizar:", -1, 21,1,195,10 + AUTORADIOBUTTON "&DER-encoded X.509 (.cer)", + IDC_EXPORT_FORMAT_DER, 31,18,240,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "Ba&se64-encoded X.509 (.cer):", + IDC_EXPORT_FORMAT_BASE64, 31,30,240,12, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "&Cryptographic Message Syntax Standard/PKCS #7 Message (.p7b)", + IDC_EXPORT_FORMAT_CMS, 31,42,240,12, BS_AUTORADIOBUTTON + CHECKBOX "&Include all certificates in the certification path if possible", + IDC_EXPORT_CMS_INCLUDE_CHAIN, 44,57,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + AUTORADIOBUTTON "&Personal Information Exchange/PKCS #12 (.pfx)", + IDC_EXPORT_FORMAT_PFX, 31,72,240,12, BS_AUTORADIOBUTTON|WS_DISABLED + CHECKBOX "&Incluir todos os certificados no caminho de certificação se possível", + IDC_EXPORT_PFX_INCLUDE_CHAIN, 44,87,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "&Activar cifra forte", + IDC_EXPORT_PFX_STRONG_ENCRYPTION, 44,102,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "&Apagar a chave privada se a exportação for bem sucedida", + IDC_EXPORT_PFX_DELETE_PRIVATE_KEY, 44,117,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED +END + +IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Nome do ficheiro:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "&Procurar...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 +END + +IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "A completar o Assistente de Exportação de Certificados", IDC_EXPORT_TITLE, + 115,1,195,40 + LTEXT "Completou com sucesso o Assistente de Exportação de Certificados.", + -1, 115,33,195,24 + LTEXT "Especificou as seguintes configurações:", + -1, 115,57,195,12 + CONTROL "", IDC_EXPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c index 30f7ec9bf92..c2193c83eba 100644 --- a/dlls/d3dx9_36/math.c +++ b/dlls/d3dx9_36/math.c @@ -844,7 +844,6 @@ static HRESULT WINAPI ID3DXMatrixStackImpl_LoadMatrix(ID3DXMatrixStack *iface, C TRACE("iface %p\n", iface); - if (!pm) return D3DERR_INVALIDCALL; This->stack[This->current] = *pm; return D3D_OK; @@ -856,7 +855,6 @@ static HRESULT WINAPI ID3DXMatrixStackImpl_MultMatrix(ID3DXMatrixStack *iface, C TRACE("iface %p\n", iface); - if (!pm) return D3DERR_INVALIDCALL; D3DXMatrixMultiply(&This->stack[This->current], &This->stack[This->current], pm); return D3D_OK; @@ -868,7 +866,6 @@ static HRESULT WINAPI ID3DXMatrixStackImpl_MultMatrixLocal(ID3DXMatrixStack *ifa TRACE("iface %p\n", iface); - if (!pm) return D3DERR_INVALIDCALL; D3DXMatrixMultiply(&This->stack[This->current], pm, &This->stack[This->current]); return D3D_OK; @@ -936,7 +933,6 @@ static HRESULT WINAPI ID3DXMatrixStackImpl_RotateAxis(ID3DXMatrixStack *iface, C TRACE("iface %p\n", iface); - if (!pv) return D3DERR_INVALIDCALL; D3DXMatrixRotationAxis(&temp, pv, angle); D3DXMatrixMultiply(&This->stack[This->current], &This->stack[This->current], &temp); @@ -950,7 +946,6 @@ static HRESULT WINAPI ID3DXMatrixStackImpl_RotateAxisLocal(ID3DXMatrixStack *ifa TRACE("iface %p\n", iface); - if (!pv) return D3DERR_INVALIDCALL; D3DXMatrixRotationAxis(&temp, pv, angle); D3DXMatrixMultiply(&This->stack[This->current], &temp, &This->stack[This->current]); @@ -1440,20 +1435,15 @@ D3DXVECTOR4* WINAPI D3DXVec2TransformArray(D3DXVECTOR4* out, UINT outstride, CON D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm) { + D3DXVECTOR2 v; FLOAT norm; + v = *pv; norm = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[3][3]; - if ( norm ) - { - CONST D3DXVECTOR2 v = *pv; - pout->x = (pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y + pm->u.m[3][0]) / norm; - pout->y = (pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y + pm->u.m[3][1]) / norm; - } - else - { - pout->x = 0.0f; - pout->y = 0.0f; - } + + pout->x = (pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y + pm->u.m[3][0]) / norm; + pout->y = (pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y + pm->u.m[3][1]) / norm; + return pout; } @@ -1603,20 +1593,12 @@ D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 norm = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[2][3] *pv->z + pm->u.m[3][3]; - if ( norm ) - { - CONST D3DXVECTOR3 v = *pv; - out.x = (pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y + pm->u.m[2][0] * v.z + pm->u.m[3][0]) / norm; - out.y = (pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y + pm->u.m[2][1] * v.z + pm->u.m[3][1]) / norm; - out.z = (pm->u.m[0][2] * v.x + pm->u.m[1][2] * v.y + pm->u.m[2][2] * v.z + pm->u.m[3][2]) / norm; - } - else - { - out.x = 0.0f; - out.y = 0.0f; - out.z = 0.0f; - } + out.x = (pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[2][0] * pv->z + pm->u.m[3][0]) / norm; + out.y = (pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[2][1] * pv->z + pm->u.m[3][1]) / norm; + out.z = (pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[2][2] * pv->z + pm->u.m[3][2]) / norm; + *pout = out; + return pout; } @@ -1738,20 +1720,12 @@ D3DXVECTOR4* WINAPI D3DXVec4Normalize(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv) FLOAT norm; norm = D3DXVec4Length(pv); - if ( !norm ) - { - out.x = 0.0f; - out.y = 0.0f; - out.z = 0.0f; - out.w = 0.0f; - } - else - { - out.x = pv->x / norm; - out.y = pv->y / norm; - out.z = pv->z / norm; - out.w = pv->w / norm; - } + + out.x = pv->x / norm; + out.y = pv->y / norm; + out.z = pv->z / norm; + out.w = pv->w / norm; + *pout = out; return pout; } diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index 6e9f25da7de..60d71939f35 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -1,6 +1,8 @@ /* * Copyright 2008 David Adam + * Copyright 2008 Luis Busquets * Copyright 2008 Philip Nilsson + * Copyright 2008 Henri Verbeet * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -950,7 +952,7 @@ static void D3DXQuaternionTest(void) static void D3DXVector2Test(void) { - D3DXVECTOR2 expectedvec, gotvec, nul, nulproj, u, v, w, x; + D3DXVECTOR2 expectedvec, gotvec, nul, u, v, w, x; LPD3DXVECTOR2 funcpointer; D3DXVECTOR4 expectedtrans, gottrans; D3DXMATRIX mat; @@ -1105,11 +1107,6 @@ static void D3DXVector2Test(void) expectedvec.x = 0.6f; expectedvec.y = 11.0f/15.0f; D3DXVec2TransformCoord(&gotvec,&u,&mat); expect_vec(expectedvec,gotvec); - /* Test the nul projected vector */ - nulproj.x = -2.0f; nulproj.y = -1.0f; - expectedvec.x = 0.0f; expectedvec.y = 0.0f; - D3DXVec2TransformCoord(&gotvec,&nulproj,&mat); - expect_vec(expectedvec,gotvec); /*_______________D3DXVec2TransformNormal______________________*/ expectedvec.x = 23.0f; expectedvec.y = 30.0f; @@ -1120,7 +1117,7 @@ static void D3DXVector2Test(void) static void D3DXVector3Test(void) { D3DVIEWPORT9 viewport; - D3DXVECTOR3 expectedvec, gotvec, nul, nulproj, u, v, w, x; + D3DXVECTOR3 expectedvec, gotvec, nul, u, v, w, x; LPD3DXVECTOR3 funcpointer; D3DXVECTOR4 expectedtrans, gottrans; D3DXMATRIX mat, projection, view, world; @@ -1295,11 +1292,6 @@ static void D3DXVector3Test(void) expectedvec.x = 70.0f/124.0f; expectedvec.y = 88.0f/124.0f; expectedvec.z = 106.0f/124.0f; D3DXVec3TransformCoord(&gotvec,&u,&mat); expect_vec3(expectedvec,gotvec); - /* Test the nul projected vector */ - nulproj.x = 1.0f; nulproj.y = -1.0f, nulproj.z = -1.0f; - expectedvec.x = 0.0f; expectedvec.y = 0.0f; expectedvec.z = 0.0f; - D3DXVec3TransformCoord(&gotvec,&nulproj,&mat); - expect_vec3(expectedvec,gotvec); /*_______________D3DXVec3TransformNormal______________________*/ expectedvec.x = 57.0f; expectedvec.y = 74.0f; expectedvec.z = 91.0f; @@ -1429,10 +1421,6 @@ static void D3DXVector4Test(void) expectedvec.x = 1.0f/11.0f; expectedvec.y = 2.0f/11.0f; expectedvec.z = 4.0f/11.0f; expectedvec.w = 10.0f/11.0f; D3DXVec4Normalize(&gotvec,&u); expect_vec4(expectedvec,gotvec); - /* Test the nul vector */ - expectedvec.x = 0.0f; expectedvec.y = 0.0f; expectedvec.z = 0.0f; expectedvec.w = 0.0f; - D3DXVec4Normalize(&gotvec,&nul); - expect_vec4(expectedvec,gotvec); /*_______________D3DXVec4Scale____________________________*/ expectedvec.x = -6.5f; expectedvec.y = -13.0f; expectedvec.z = -26.0f; expectedvec.w = -65.0f; @@ -1497,9 +1485,6 @@ static void test_matrix_stack(void) hr = ID3DXMatrixStack_Push(stack); ok(SUCCEEDED(hr), "Push failed, hr %#x\n", hr); - hr = ID3DXMatrixStack_LoadMatrix(stack, NULL); - ok(hr == D3DERR_INVALIDCALL, "LoadMatrix returned %#x, expected D3DERR_INVALIDCALL\n", hr); - hr = ID3DXMatrixStack_LoadMatrix(stack, &mat1); ok(SUCCEEDED(hr), "LoadMatrix failed, hr %#x\n", hr); expect_mat(&mat1, ID3DXMatrixStack_GetTop(stack)); @@ -1536,18 +1521,6 @@ static void test_matrix_stack(void) ok(SUCCEEDED(hr), "Pop failed, hr %#x\n", hr); ok(D3DXMatrixIsIdentity(ID3DXMatrixStack_GetTop(stack)), "The top should be an identity matrix\n"); - hr = ID3DXMatrixStack_MultMatrix(stack, NULL); - ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr); - - hr = ID3DXMatrixStack_MultMatrixLocal(stack, NULL); - ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr); - - hr = ID3DXMatrixStack_RotateAxis(stack, NULL, 2.0f); - ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr); - - hr = ID3DXMatrixStack_RotateAxisLocal(stack, NULL, 2.0f); - ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr); - refcount = ID3DXMatrixStack_Release(stack); ok(!refcount, "Matrix stack has %u references left.\n", refcount); } diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 439e99f07cd..360604e83eb 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -5937,8 +5937,8 @@ static BOOL is_mip_level_subset(IDirectDrawSurfaceImpl *dest, static void copy_mipmap_chain(IDirect3DDeviceImpl *device, IDirectDrawSurfaceImpl *dest, IDirectDrawSurfaceImpl *src, - POINT *DestPoint, - RECT *SrcRect) + const POINT *DestPoint, + const RECT *SrcRect) { IDirectDrawSurfaceImpl *src_level, *dest_level; IDirectDrawSurface7 *temp; diff --git a/dlls/dplayx/tests/dplayx.c b/dlls/dplayx/tests/dplayx.c index 2d14584359f..3eba14702ef 100644 --- a/dlls/dplayx/tests/dplayx.c +++ b/dlls/dplayx/tests/dplayx.c @@ -6132,6 +6132,138 @@ static void test_remote_data_replication(void) } +/* Host migration */ + +static void test_host_migration(void) +{ + + LPDIRECTPLAY4 pDP[2]; + DPSESSIONDESC2 dpsd; + DPID dpid[2], idFrom, idTo; + HRESULT hr; + UINT i; + DWORD dwCount; + + DWORD dwDataSize = 1024; + LPDPMSG_DESTROYPLAYERORGROUP lpData = HeapAlloc( GetProcessHeap(), + HEAP_ZERO_MEMORY, + dwDataSize ); + + + for (i=0; i<2; i++) + { + CoCreateInstance( &CLSID_DirectPlay, NULL, CLSCTX_ALL, + &IID_IDirectPlay4A, (LPVOID*) &pDP[i] ); + init_TCPIP_provider( pDP[i], "127.0.0.1", 0 ); + } + ZeroMemory( &dpsd, sizeof(DPSESSIONDESC2) ); + dpsd.dwSize = sizeof(DPSESSIONDESC2); + dpsd.guidApplication = appGuid; + dpsd.dwMaxPlayers = 10; + dpsd.dwFlags = DPSESSION_MIGRATEHOST; + + /* Host */ + hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE ); + todo_wine checkHR( DP_OK, hr ); + + if ( hr != DP_OK ) + { + todo_wine win_skip( "dplay not implemented enough for this test yet\n" ); + return; + } + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid[0], NULL, NULL, NULL, 0, 0 ); + checkHR( DP_OK, hr ); + + /* Peer */ + hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join, + pDP[1], 0 ); + checkHR( DP_OK, hr ); + + hr = IDirectPlayX_CreatePlayer( pDP[1], &dpid[1], NULL, NULL, NULL, 0, 0 ); + checkHR( DP_OK, hr ); + + + /* Host: One message in queue */ + IDirectPlayX_GetMessageCount( pDP[0], dpid[0], &dwCount ); + check( 1, dwCount ); + dwDataSize = 1024; + hr = IDirectPlayX_Receive( pDP[0], &idFrom, &idTo, DPRECEIVE_PEEK, + lpData, &dwDataSize ); + checkHR( DP_OK, hr ); + checkConv( DPSYS_CREATEPLAYERORGROUP, lpData->dwType, dpMsgType2str ); + + /* Peer: No messages */ + IDirectPlayX_GetMessageCount( pDP[1], dpid[1], &dwCount ); + check( 0, dwCount ); + hr = IDirectPlayX_Receive( pDP[1], &idFrom, &idTo, DPRECEIVE_PEEK, + lpData, &dwDataSize ); + checkHR( DPERR_NOMESSAGES, hr ); + + + /* Closing host */ + IDirectPlayX_Close( pDP[0] ); + + + /* Host: Queue is cleaned */ + IDirectPlayX_GetMessageCount( pDP[0], dpid[0], &dwCount ); + check( 0, dwCount ); + hr = IDirectPlayX_Receive( pDP[0], &idFrom, &idTo, DPRECEIVE_PEEK, + lpData, &dwDataSize ); + checkHR( DPERR_NOMESSAGES, hr ); + + /* Peer: gets message of player destruction */ + IDirectPlayX_GetMessageCount( pDP[1], dpid[1], &dwCount ); + check( 2, dwCount ); + dwDataSize = 1024; + hr = IDirectPlayX_Receive( pDP[1], &idFrom, &idTo, DPRECEIVE_PEEK, + lpData, &dwDataSize ); + checkHR( DP_OK, hr ); + checkConv( DPSYS_DESTROYPLAYERORGROUP, lpData->dwType, dpMsgType2str ); + + + /* Message analysis */ + for (i=0; i<2; i++) + { + hr = IDirectPlayX_Receive( pDP[1], &idFrom, &idTo, 0, + lpData, &dwDataSize ); + checkHR( DP_OK, hr ); + check( DPID_SYSMSG, idFrom ); + check( dpid[1], idTo ); /* Peer player id */ + switch(i) + { + case 0: + checkConv( DPSYS_DESTROYPLAYERORGROUP, lpData->dwType, + dpMsgType2str ); + check( DPPLAYERTYPE_PLAYER, lpData->dwPlayerType ); + check( dpid[0], lpData->dpId ); /* Host player id */ + checkLP( NULL, lpData->lpLocalData ); + check( 0, lpData->dwLocalDataSize ); + checkLP( NULL, lpData->lpRemoteData ); + check( 0, lpData->dwRemoteDataSize ); + checkLP( NULL, lpData->dpnName.lpszShortNameA ); + check( 0, lpData->dpIdParent ); + checkFlags( 0, lpData->dwFlags, + FLAGS_DPPLAYER | FLAGS_DPGROUP ); + break; + case 1: + checkConv( DPSYS_HOST, lpData->dwType, dpMsgType2str ); + break; + default: + break; + } + dwDataSize = 1024; + } + hr = IDirectPlayX_Receive( pDP[1], &idFrom, &idTo, 0, lpData, &dwDataSize ); + checkHR( DPERR_NOMESSAGES, hr ); + + + HeapFree( GetProcessHeap(), 0, lpData ); + IDirectPlayX_Release( pDP[0] ); + IDirectPlayX_Release( pDP[1] ); + +} + START_TEST(dplayx) { @@ -6183,6 +6315,7 @@ START_TEST(dplayx) test_GetMessageQueue(); test_remote_data_replication(); + test_host_migration(); CoUninitialize(); } diff --git a/dlls/gphoto2.ds/gphoto2_Ru.rc b/dlls/gphoto2.ds/gphoto2_Ru.rc index ad03a35b81c..563b0afa2ba 100644 --- a/dlls/gphoto2.ds/gphoto2_Ru.rc +++ b/dlls/gphoto2.ds/gphoto2_Ru.rc @@ -20,35 +20,38 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT IDD_CAMERAUI DIALOG DISCARDABLE 0, 0, 372, 273 STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ôàéëû â êàìåðå" +CAPTION "Файлы в камере" MENU 20545 FONT 8, "MS Sans Serif" BEGIN - CONTROL "Ñïèñîê1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER | WS_TABSTOP,7,7,358,229 - DEFPUSHBUTTON "Çàãðóçèòü âûáðàííûå",IDC_IMPORT,152,252,72,14 - PUSHBUTTON "Ïðîñìîòð",IDC_FETCH,7,252,64,14 - PUSHBUTTON "Çàãðóçèòü âñå",IDC_IMPORTALL,80,252,64,14 - CONTROL "Áîëüøå íå ñïðàøèâàòü",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14 - PUSHBUTTON "Âûõîä",IDC_EXIT,315,252,50,14 + CONTROL "Список1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER | WS_TABSTOP,7,7,358,229 + DEFPUSHBUTTON "Загрузить выбранные",IDC_IMPORT,152,252,72,14 + PUSHBUTTON "Просмотр",IDC_FETCH,7,252,64,14 + PUSHBUTTON "Загрузить все",IDC_IMPORTALL,80,252,64,14 + CONTROL "Больше не спрашивать",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14 + PUSHBUTTON "Выход",IDC_EXIT,315,252,50,14 END IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTER | DS_SETFOREGROUND -CAPTION "Çàãðóçêà" +CAPTION "Загрузка" FONT 8, "MS Sans Serif" BEGIN - LTEXT "Çàãðóçêà... Æäèòå",IDC_STATIC,5,19,176,8, SS_CENTER + LTEXT "Загрузка... Ждите",IDC_STATIC,5,19,176,8, SS_CENTER END IDD_CONNECTING DIALOG DISCARDABLE 0, 0, 280, 116 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU| WS_VISIBLE | DS_CENTER -CAPTION "Ïîäêëþ÷åíèå ê êàìåðå" +CAPTION "Подключение к камере" FONT 8, "MS Sans Serif" BEGIN CONTROL "",IDC_BITMAP,"Static",SS_BITMAP|SS_CENTERIMAGE,4,4,110,110 - LTEXT "Ïîäêëþ÷åíèå ê êàìåðå... Æäèòå",IDC_STATIC,128,58,116,8 + LTEXT "Подключение к камере... Ждите",IDC_STATIC,128,58,116,8 END diff --git a/dlls/hhctrl.ocx/Ru.rc b/dlls/hhctrl.ocx/Ru.rc index 9d16db16ea9..0634c39da21 100644 --- a/dlls/hhctrl.ocx/Ru.rc +++ b/dlls/hhctrl.ocx/Ru.rc @@ -21,40 +21,43 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE BEGIN - IDS_CONTENTS "&Ñîäåðæàíèå" - IDS_INDEX "&Îãëàâëåíèå" - IDS_SEARCH "&Ïîèñê" - IDS_FAVORITES "&Èçáðàííîå" + IDS_CONTENTS "&Содержание" + IDS_INDEX "&Оглавление" + IDS_SEARCH "&Поиск" + IDS_FAVORITES "&Избранное" END STRINGTABLE BEGIN - IDTB_EXPAND "Ïîêàçàòü" - IDTB_CONTRACT "Ñïðÿòàòü" - IDTB_STOP "Îñòàíîâèòü" - IDTB_REFRESH "Îáíîâèòü" - IDTB_BACK "Íàçàä" - IDTB_HOME " íà÷àëî" - IDTB_SYNC "Ñèíõðîíèçèðîâàòü" - IDTB_PRINT "Ïå÷àòü" - IDTB_OPTIONS "Íàñòðîéêè" - IDTB_FORWARD "Âïåð¸ä" - IDTB_NOTES "Çàïèñêè" - IDTB_BROWSE_FWD "Ïðîñìîòð âïåð¸ä" - IDTB_BROWSE_BACK "Ïðîñìîòð íàçàä" - IDTB_CONTENTS "Ñîäåðæàíèå" - IDTB_INDEX "Îãëàâëåíèå" - IDTB_SEARCH "Ïîèñê" - IDTB_HISTORY "Èñòîðèÿ" - IDTB_FAVORITES "Èçáðàííîå" - IDTB_JUMP1 "Ïåðåõîä 1" - IDTB_JUMP2 "Ïåðåõîä 2" - IDTB_CUSTOMIZE "Ïåðñîíàëèçîâàòü" - IDTB_ZOOM "Ìàñøòàá" - IDTB_TOC_NEXT "Ñëåäóþùàÿ ãëàâà" - IDTB_TOC_PREV "Ïðåäûäóùàÿ ãëàâà" + IDTB_EXPAND "Показать" + IDTB_CONTRACT "Спрятать" + IDTB_STOP "Остановить" + IDTB_REFRESH "Обновить" + IDTB_BACK "Назад" + IDTB_HOME "В начало" + IDTB_SYNC "Синхронизировать" + IDTB_PRINT "Печать" + IDTB_OPTIONS "Настройки" + IDTB_FORWARD "Вперёд" + IDTB_NOTES "Записки" + IDTB_BROWSE_FWD "Просмотр вперёд" + IDTB_BROWSE_BACK "Просмотр назад" + IDTB_CONTENTS "Содержание" + IDTB_INDEX "Оглавление" + IDTB_SEARCH "Поиск" + IDTB_HISTORY "История" + IDTB_FAVORITES "Избранное" + IDTB_JUMP1 "Переход 1" + IDTB_JUMP2 "Переход 2" + IDTB_CUSTOMIZE "Персонализовать" + IDTB_ZOOM "Масштаб" + IDTB_TOC_NEXT "Следующая глава" + IDTB_TOC_PREV "Предыдущая глава" END diff --git a/dlls/iccvid/iccvid_Ru.rc b/dlls/iccvid/iccvid_Ru.rc index 01bbec0255f..7a77b349eaf 100644 --- a/dlls/iccvid/iccvid_Ru.rc +++ b/dlls/iccvid/iccvid_Ru.rc @@ -18,10 +18,13 @@ #include "iccvid_private.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE { - IDS_NAME "Âèäåî êîäåð-äåêîäåð Cinepak" - IDS_DESCRIPTION "Âèäåî êîäåð-äåêîäåð Cinepak" + IDS_NAME "Видео кодер-декодер Cinepak" + IDS_DESCRIPTION "Видео кодер-декодер Cinepak" } diff --git a/dlls/jscript/Makefile.in b/dlls/jscript/Makefile.in index 3a32a299036..489567fc104 100644 --- a/dlls/jscript/Makefile.in +++ b/dlls/jscript/Makefile.in @@ -3,9 +3,15 @@ TOPOBJDIR = ../.. SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = jscript.dll -IMPORTS = oleaut32 advapi32 kernel32 +IMPORTS = oleaut32 user32 advapi32 kernel32 -RC_SRCS = rsrc.rc +RC_SRCS = \ + jscript_De.rc \ + jscript_En.rc \ + jscript_Fr.rc \ + jscript_Lt.rc \ + jscript_Nl.rc \ + rsrc.rc C_SRCS = \ array.c \ @@ -13,6 +19,7 @@ C_SRCS = \ date.c \ dispex.c \ engine.c \ + error.c \ function.c \ global.c \ jscript.c \ diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index 9b4314275d2..b2bd5b2de48 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -74,10 +74,8 @@ static HRESULT Array_length(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM else len = floor(V_R8(&num)); - if(len!=(DWORD)len) { - FIXME("Throw RangeError\n"); - return E_FAIL; - } + if(len!=(DWORD)len) + return throw_range_error(dispex->ctx, ei, IDS_INVALID_LENGTH, NULL); for(i=len; ilength; i++) { hres = jsdisp_delete_idx(dispex, i); @@ -772,6 +770,8 @@ static HRESULT Array_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS TRACE("\n"); switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); case INVOKE_PROPERTYGET: return array_join(dispex, lcid, ((ArrayInstance*)dispex)->length, default_separatorW, retv, ei, sp); default: @@ -850,10 +850,8 @@ static HRESULT ArrayConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, DISP case DISPATCH_METHOD: case DISPATCH_CONSTRUCT: { if(arg_cnt(dp) == 1 && V_VT((arg_var = get_arg(dp, 0))) == VT_I4) { - if(V_I4(arg_var) < 0) { - FIXME("throw RangeError\n"); - return E_FAIL; - } + if(V_I4(arg_var) < 0) + return throw_range_error(dispex->ctx, ei, IDS_INVALID_LENGTH, NULL); hres = create_array(dispex->ctx, V_I4(arg_var), &obj); if(FAILED(hres)) diff --git a/dlls/jscript/bool.c b/dlls/jscript/bool.c index ab9ef435a2c..bfacebf3ec6 100644 --- a/dlls/jscript/bool.c +++ b/dlls/jscript/bool.c @@ -46,10 +46,8 @@ static HRESULT Bool_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA TRACE("\n"); - if(!is_class(dispex, JSCLASS_BOOLEAN)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_BOOLEAN)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_BOOL, NULL); if(retv) { BoolInstance *bool = (BoolInstance*)dispex; @@ -81,10 +79,8 @@ static HRESULT Bool_valueOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM { TRACE("\n"); - if(!is_class(dispex, JSCLASS_BOOLEAN)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_BOOLEAN)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_BOOL, NULL); if(retv) { BoolInstance *bool = (BoolInstance*)dispex; @@ -120,8 +116,18 @@ static HRESULT Bool_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DIS static HRESULT Bool_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + TRACE("\n"); + + switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; + } static const builtin_prop_t Bool_props[] = { diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c index b65f03e3df1..5085f212ebe 100644 --- a/dlls/jscript/date.c +++ b/dlls/jscript/date.c @@ -590,10 +590,8 @@ static HRESULT Date_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; time = local_time(date->time, date); @@ -615,10 +613,8 @@ static HRESULT Date_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags, DI TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; @@ -679,10 +675,8 @@ static HRESULT Date_valueOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -720,10 +714,8 @@ static HRESULT Date_toUTCString(DispatchEx *dispex, LCID lcid, WORD flags, DISPP TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; @@ -829,10 +821,8 @@ static HRESULT Date_toDateString(DispatchEx *dispex, LCID lcid, WORD flags, DISP TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; @@ -927,10 +917,8 @@ static HRESULT Date_toTimeString(DispatchEx *dispex, LCID lcid, WORD flags, DISP TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; @@ -986,10 +974,8 @@ static HRESULT Date_toLocaleDateString(DispatchEx *dispex, LCID lcid, WORD flags TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; @@ -1033,10 +1019,8 @@ static HRESULT Date_toLocaleTimeString(DispatchEx *dispex, LCID lcid, WORD flags TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; @@ -1074,10 +1058,8 @@ static HRESULT Date_getTime(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1092,10 +1074,8 @@ static HRESULT Date_getFullYear(DispatchEx *dispex, LCID lcid, WORD flags, DISPP { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1112,10 +1092,8 @@ static HRESULT Date_getUTCFullYear(DispatchEx *dispex, LCID lcid, WORD flags, DI { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1130,10 +1108,8 @@ static HRESULT Date_getMonth(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1150,10 +1126,8 @@ static HRESULT Date_getUTCMonth(DispatchEx *dispex, LCID lcid, WORD flags, DISPP { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1168,10 +1142,8 @@ static HRESULT Date_getDate(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1188,10 +1160,8 @@ static HRESULT Date_getUTCDate(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1206,10 +1176,8 @@ static HRESULT Date_getDay(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1226,10 +1194,8 @@ static HRESULT Date_getUTCDay(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1244,10 +1210,8 @@ static HRESULT Date_getHours(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1264,10 +1228,8 @@ static HRESULT Date_getUTCHours(DispatchEx *dispex, LCID lcid, WORD flags, DISPP { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1282,10 +1244,8 @@ static HRESULT Date_getMinutes(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1302,10 +1262,8 @@ static HRESULT Date_getUTCMinutes(DispatchEx *dispex, LCID lcid, WORD flags, DIS { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1320,10 +1278,8 @@ static HRESULT Date_getSeconds(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1340,10 +1296,8 @@ static HRESULT Date_getUTCSeconds(DispatchEx *dispex, LCID lcid, WORD flags, DIS { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1358,10 +1312,8 @@ static HRESULT Date_getMilliseconds(DispatchEx *dispex, LCID lcid, WORD flags, D { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1378,10 +1330,8 @@ static HRESULT Date_getUTCMilliseconds(DispatchEx *dispex, LCID lcid, WORD flags { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1396,10 +1346,8 @@ static HRESULT Date_getTimezoneOffset(DispatchEx *dispex, LCID lcid, WORD flags, { TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); if(retv) { DateInstance *date = (DateInstance*)dispex; @@ -1419,16 +1367,11 @@ static HRESULT Date_setTime(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); hres = to_number(dispex->ctx, get_arg(dp, 0), ei, &v); if(FAILED(hres)) @@ -1454,16 +1397,11 @@ static HRESULT Date_setMilliseconds(DispatchEx *dispex, LCID lcid, WORD flags, D TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); hres = to_number(dispex->ctx, get_arg(dp, 0), ei, &v); if(FAILED(hres)) @@ -1492,16 +1430,11 @@ static HRESULT Date_setUTCMilliseconds(DispatchEx *dispex, LCID lcid, WORD flags TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); hres = to_number(dispex->ctx, get_arg(dp, 0), ei, &v); if(FAILED(hres)) @@ -1530,16 +1463,11 @@ static HRESULT Date_setSeconds(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = local_time(date->time, date); @@ -1578,16 +1506,11 @@ static HRESULT Date_setUTCSeconds(DispatchEx *dispex, LCID lcid, WORD flags, DIS TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = date->time; @@ -1626,16 +1549,11 @@ static HRESULT Date_setMinutes(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = local_time(date->time, date); @@ -1682,16 +1600,11 @@ static HRESULT Date_setUTCMinutes(DispatchEx *dispex, LCID lcid, WORD flags, DIS TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = date->time; @@ -1738,16 +1651,11 @@ static HRESULT Date_setHours(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = local_time(date->time, date); @@ -1801,16 +1709,11 @@ static HRESULT Date_setUTCHours(DispatchEx *dispex, LCID lcid, WORD flags, DISPP TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = date->time; @@ -1864,16 +1767,11 @@ static HRESULT Date_setDate(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); hres = to_number(dispex->ctx, get_arg(dp, 0), ei, &v); if(FAILED(hres)) @@ -1902,16 +1800,11 @@ static HRESULT Date_setUTCDate(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); hres = to_number(dispex->ctx, get_arg(dp, 0), ei, &v); if(FAILED(hres)) @@ -1940,16 +1833,11 @@ static HRESULT Date_setMonth(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = local_time(date->time, date); @@ -1988,16 +1876,11 @@ static HRESULT Date_setUTCMonth(DispatchEx *dispex, LCID lcid, WORD flags, DISPP TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = date->time; @@ -2036,16 +1919,11 @@ static HRESULT Date_setFullYear(DispatchEx *dispex, LCID lcid, WORD flags, DISPP TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = local_time(date->time, date); @@ -2091,16 +1969,11 @@ static HRESULT Date_setUTCFullYear(DispatchEx *dispex, LCID lcid, WORD flags, DI TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); - if(!arg_cnt(dp)) { - FIXME("throw ArgumentNotOptional\n"); - if(retv) num_set_nan(retv); - return S_OK; - } + if(!arg_cnt(dp)) + return throw_type_error(dispex->ctx, ei, IDS_ARG_NOT_OPT, NULL); date = (DateInstance*)dispex; t = date->time; @@ -2144,10 +2017,8 @@ static HRESULT Date_getYear(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM TRACE("\n"); - if(!is_class(dispex, JSCLASS_DATE)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_DATE)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_DATE, NULL); date = (DateInstance*)dispex; t = local_time(date->time, date); @@ -2169,8 +2040,17 @@ static HRESULT Date_getYear(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM static HRESULT Date_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller) { - FIXME("\n"); - return E_NOTIMPL; + TRACE("\n"); + + switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; } static const builtin_prop_t Date_props[] = { diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index f3ea33f782d..ff5e6a896c3 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -232,10 +232,8 @@ static HRESULT disp_get_id(IDispatch *disp, BSTR name, DWORD flags, DISPID *id) /* ECMA-262 3rd Edition 8.7.2 */ static HRESULT put_value(script_ctx_t *ctx, exprval_t *ref, VARIANT *v, jsexcept_t *ei) { - if(ref->type != EXPRVAL_IDREF) { - FIXME("throw ReferemceError\n"); - return E_FAIL; - } + if(ref->type != EXPRVAL_IDREF) + return throw_reference_error(ctx, ei, IDS_ILLEGAL_ASSIGN, NULL); return disp_propput(ref->u.idref.disp, ref->u.idref.id, ctx->lcid, v, ei, NULL/*FIXME*/); } @@ -433,7 +431,7 @@ HRESULT exec_source(exec_ctx_t *ctx, parser_ctx_t *parser, source_elements_t *so } /* ECMA-262 3rd Edition 10.1.4 */ -static HRESULT identifier_eval(exec_ctx_t *ctx, BSTR identifier, DWORD flags, exprval_t *ret) +static HRESULT identifier_eval(exec_ctx_t *ctx, BSTR identifier, DWORD flags, jsexcept_t *ei, exprval_t *ret) { scope_chain_t *scope; named_item_t *item; @@ -518,8 +516,7 @@ static HRESULT identifier_eval(exec_ctx_t *ctx, BSTR identifier, DWORD flags, ex return S_OK; } - WARN("Could not find identifier %s\n", debugstr_w(identifier)); - return E_FAIL; + return throw_type_error(ctx->var_disp->ctx, ei, IDS_UNDEFINED, identifier); } /* ECMA-262 3rd Edition 12.1 */ @@ -855,7 +852,7 @@ HRESULT forin_statement_eval(exec_ctx_t *ctx, statement_t *_stat, return_type_t TRACE("iter %s\n", debugstr_w(str)); if(stat->variable) - hres = identifier_eval(ctx, identifier, 0, &exprval); + hres = identifier_eval(ctx, identifier, 0, NULL, &exprval); else hres = expr_eval(ctx, stat->expr, EXPR_NEWREF, &rt->ei, &exprval); if(SUCCEEDED(hres)) { @@ -1539,11 +1536,8 @@ HRESULT call_expression_eval(exec_ctx_t *ctx, expression_t *_expr, DWORD flags, if(SUCCEEDED(hres)) { switch(exprval.type) { case EXPRVAL_VARIANT: - if(V_VT(&exprval.u.var) != VT_DISPATCH) { - FIXME("throw TypeError\n"); - hres = E_NOTIMPL; - break; - } + if(V_VT(&exprval.u.var) != VT_DISPATCH) + return throw_type_error(ctx->var_disp->ctx, ei, IDS_NO_PROPERTY, NULL); hres = disp_call(V_DISPATCH(&exprval.u.var), DISPID_VALUE, ctx->parser->script->lcid, DISPATCH_METHOD, &dp, flags & EXPR_NOVAL ? NULL : &var, ei, NULL/*FIXME*/); @@ -1599,7 +1593,7 @@ HRESULT identifier_expression_eval(exec_ctx_t *ctx, expression_t *_expr, DWORD f if(!identifier) return E_OUTOFMEMORY; - hres = identifier_eval(ctx, identifier, flags, ret); + hres = identifier_eval(ctx, identifier, flags, ei, ret); SysFreeString(identifier); return hres; diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c new file mode 100644 index 00000000000..25a3836cc8f --- /dev/null +++ b/dlls/jscript/error.c @@ -0,0 +1,481 @@ +/* + * Copyright 2009 Piotr Caban + * + * 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 "config.h" +#include "wine/port.h" + +#include + +#include "jscript.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(jscript); + +typedef struct { + DispatchEx dispex; + + VARIANT number; + VARIANT description; + VARIANT message; +} ErrorInstance; + +static const WCHAR descriptionW[] = {'d','e','s','c','r','i','p','t','i','o','n',0}; +static const WCHAR messageW[] = {'m','e','s','s','a','g','e',0}; +static const WCHAR numberW[] = {'n','u','m','b','e','r',0}; +static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0}; +static const WCHAR hasOwnPropertyW[] = {'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0}; +static const WCHAR propertyIsEnumerableW[] = + {'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0}; +static const WCHAR isPrototypeOfW[] = {'i','s','P','r','o','t','o','t','y','p','e','O','f',0}; + +static HRESULT Error_number(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + ErrorInstance *This = (ErrorInstance*)dispex; + + TRACE("\n"); + + switch(flags) { + case DISPATCH_PROPERTYGET: + return VariantCopy(retv, &This->number); + case DISPATCH_PROPERTYPUT: + return VariantCopy(&This->number, get_arg(dp, 0)); + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } +} + +static HRESULT Error_description(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + ErrorInstance *This = (ErrorInstance*)dispex; + + TRACE("\n"); + + switch(flags) { + case DISPATCH_PROPERTYGET: + return VariantCopy(retv, &This->description); + case DISPATCH_PROPERTYPUT: + return VariantCopy(&This->description, get_arg(dp, 0)); + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } +} + +/* ECMA-262 3rd Edition 15.11.4.3 */ +static HRESULT Error_message(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + ErrorInstance *This = (ErrorInstance*)dispex; + + TRACE("\n"); + + switch(flags) { + case DISPATCH_PROPERTYGET: + return VariantCopy(retv, &This->message); + case DISPATCH_PROPERTYPUT: + return VariantCopy(&This->message, get_arg(dp, 0)); + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } +} + +/* ECMA-262 3rd Edition 15.11.4.4 */ +static HRESULT Error_toString(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + static const WCHAR str[] = {'[','o','b','j','e','c','t',' ','E','r','r','o','r',']',0}; + + TRACE("\n"); + + if(retv) { + V_VT(retv) = VT_BSTR; + V_BSTR(retv) = SysAllocString(str); + if(!V_BSTR(retv)) + return E_OUTOFMEMORY; + } + + return S_OK; +} + +static HRESULT Error_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + FIXME("\n"); + return E_NOTIMPL; +} + +static HRESULT Error_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + FIXME("\n"); + return E_NOTIMPL; +} + + +static HRESULT Error_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + FIXME("\n"); + return E_NOTIMPL; +} + +static HRESULT Error_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; +} + +static void Error_destructor(DispatchEx *dispex) +{ + ErrorInstance *This = (ErrorInstance*)dispex; + + VariantClear(&This->number); + VariantClear(&This->description); + VariantClear(&This->message); + heap_free(This); +} + +static const builtin_prop_t Error_props[] = { + {descriptionW, Error_description, 0}, + {hasOwnPropertyW, Error_hasOwnProperty, PROPF_METHOD}, + {isPrototypeOfW, Error_isPrototypeOf, PROPF_METHOD}, + {messageW, Error_message, 0}, + {numberW, Error_number, 0}, + {propertyIsEnumerableW, Error_propertyIsEnumerable, PROPF_METHOD}, + {toStringW, Error_toString, PROPF_METHOD} +}; + +static const builtin_info_t Error_info = { + JSCLASS_ERROR, + {NULL, Error_value, 0}, + sizeof(Error_props)/sizeof(*Error_props), + Error_props, + Error_destructor, + NULL +}; + +static const builtin_prop_t ErrorInst_props[] = { + {descriptionW, Error_description, 0}, + {hasOwnPropertyW, Error_hasOwnProperty, PROPF_METHOD}, + {isPrototypeOfW, Error_isPrototypeOf, PROPF_METHOD}, + {messageW, Error_message, 0}, + {numberW, Error_number, 0}, + {propertyIsEnumerableW, Error_propertyIsEnumerable, PROPF_METHOD} +}; + +static const builtin_info_t ErrorInst_info = { + JSCLASS_ERROR, + {NULL, Error_value, 0}, + sizeof(ErrorInst_props)/sizeof(*ErrorInst_props), + ErrorInst_props, + Error_destructor, + NULL +}; + +static HRESULT alloc_error(script_ctx_t *ctx, BOOL error_prototype, + DispatchEx *constr, ErrorInstance **ret) +{ + ErrorInstance *err; + DispatchEx *inherit; + HRESULT hres; + + err = heap_alloc_zero(sizeof(ErrorInstance)); + if(!err) + return E_OUTOFMEMORY; + + inherit = error_prototype ? ctx->object_constr : ctx->error_constr; + hres = init_dispex_from_constr(&err->dispex, ctx, + error_prototype ? &Error_info : &ErrorInst_info, + constr ? constr : inherit); + if(FAILED(hres)) { + heap_free(err); + return hres; + } + + *ret = err; + return S_OK; +} + +static HRESULT create_error(script_ctx_t *ctx, DispatchEx *constr, + const UINT *number, const WCHAR *msg, DispatchEx **ret) +{ + ErrorInstance *err; + HRESULT hres; + + hres = alloc_error(ctx, FALSE, constr, &err); + if(FAILED(hres)) + return hres; + + if(number) { + V_VT(&err->number) = VT_I4; + V_I4(&err->number) = *number; + } + + V_VT(&err->message) = VT_BSTR; + if(msg) V_BSTR(&err->message) = SysAllocString(msg); + else V_BSTR(&err->message) = SysAllocStringLen(NULL, 0); + + VariantCopy(&err->description, &err->message); + + if(!V_BSTR(&err->message)) { + heap_free(err); + return E_OUTOFMEMORY; + } + + *ret = &err->dispex; + return S_OK; +} + +static HRESULT error_constr(DispatchEx *dispex, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, DispatchEx *constr) { + DispatchEx *err; + VARIANT numv; + UINT num; + BSTR msg = NULL; + HRESULT hres; + + V_VT(&numv) = VT_NULL; + + if(arg_cnt(dp)) { + hres = to_number(dispex->ctx, get_arg(dp, 0), ei, &numv); + if(FAILED(hres) || (V_VT(&numv)==VT_R8 && isnan(V_R8(&numv)))) + hres = to_string(dispex->ctx, get_arg(dp, 0), ei, &msg); + else if(V_VT(&numv) == VT_I4) + num = V_I4(&numv); + else + num = V_R8(&numv); + + if(FAILED(hres)) + return hres; + } + + if(arg_cnt(dp)>1 && !msg) { + hres = to_string(dispex->ctx, get_arg(dp, 1), ei, &msg); + if(FAILED(hres)) + return hres; + } + + switch(flags) { + case INVOKE_FUNC: + case DISPATCH_CONSTRUCT: + if(V_VT(&numv) == VT_NULL) + hres = create_error(dispex->ctx, constr, NULL, msg, &err); + else + hres = create_error(dispex->ctx, constr, &num, msg, &err); + + if(FAILED(hres)) + return hres; + + if(retv) { + V_VT(retv) = VT_DISPATCH; + V_DISPATCH(retv) = (IDispatch*)_IDispatchEx_(err); + } + else + IDispatchEx_Release(_IDispatchEx_(err)); + + return S_OK; + + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } +} + +static HRESULT ErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + return error_constr(dispex, flags, dp, retv, ei, + dispex->ctx->error_constr); +} + +static HRESULT EvalErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + return error_constr(dispex, flags, dp, retv, ei, + dispex->ctx->eval_error_constr); +} + +static HRESULT RangeErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + return error_constr(dispex, flags, dp, retv, ei, + dispex->ctx->range_error_constr); +} + +static HRESULT ReferenceErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + return error_constr(dispex, flags, dp, retv, ei, + dispex->ctx->reference_error_constr); +} + +static HRESULT SyntaxErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + return error_constr(dispex, flags, dp, retv, ei, + dispex->ctx->syntax_error_constr); +} + +static HRESULT TypeErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + return error_constr(dispex, flags, dp, retv, ei, + dispex->ctx->type_error_constr); +} + +static HRESULT URIErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, + DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + return error_constr(dispex, flags, dp, retv, ei, + dispex->ctx->uri_error_constr); +} + +HRESULT init_error_constr(script_ctx_t *ctx) +{ + static const WCHAR nameW[] = {'n','a','m','e',0}; + static const WCHAR ErrorW[] = {'E','r','r','o','r',0}; + static const WCHAR EvalErrorW[] = {'E','v','a','l','E','r','r','o','r',0}; + static const WCHAR RangeErrorW[] = {'R','a','n','g','e','E','r','r','o','r',0}; + static const WCHAR ReferenceErrorW[] = {'R','e','f','e','r','e','n','c','e','E','r','r','o','r',0}; + static const WCHAR SyntaxErrorW[] = {'S','y','n','t','a','x','E','r','r','o','r',0}; + static const WCHAR TypeErrorW[] = {'T','y','p','e','E','r','r','o','r',0}; + static const WCHAR URIErrorW[] = {'U','R','I','E','r','r','o','r',0}; + static const WCHAR *names[] = {ErrorW, EvalErrorW, RangeErrorW, + ReferenceErrorW, SyntaxErrorW, TypeErrorW, URIErrorW}; + DispatchEx **constr_addr[] = {&ctx->error_constr, &ctx->eval_error_constr, + &ctx->range_error_constr, &ctx->reference_error_constr, + &ctx->syntax_error_constr, &ctx->type_error_constr, + &ctx->uri_error_constr}; + static builtin_invoke_t constr_val[] = {ErrorConstr_value, EvalErrorConstr_value, + RangeErrorConstr_value, ReferenceErrorConstr_value, SyntaxErrorConstr_value, + TypeErrorConstr_value, URIErrorConstr_value}; + + ErrorInstance *err; + INT i; + VARIANT v; + HRESULT hres; + + for(i=0; i<7; i++) { + hres = alloc_error(ctx, i==0, NULL, &err); + if(FAILED(hres)) + return hres; + + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = SysAllocString(names[i]); + if(!V_BSTR(&v)) { + IDispatchEx_Release(_IDispatchEx_(&err->dispex)); + return E_OUTOFMEMORY; + } + + hres = jsdisp_propput_name(&err->dispex, nameW, ctx->lcid, &v, NULL/*FIXME*/, NULL/*FIXME*/); + + if(SUCCEEDED(hres)) + hres = create_builtin_function(ctx, constr_val[i], NULL, + PROPF_CONSTR, &err->dispex, constr_addr[i]); + + IDispatchEx_Release(_IDispatchEx_(&err->dispex)); + VariantClear(&v); + if(FAILED(hres)) + return hres; + } + + return S_OK; +} + +static HRESULT throw_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str, DispatchEx *constr) +{ + WCHAR buf[1024], *pos = NULL; + DispatchEx *err; + HRESULT hres; + + buf[0] = '\0'; + LoadStringW(jscript_hinstance, id&0xFFFF, buf, sizeof(buf)/sizeof(WCHAR)); + + if(str) pos = strchrW(buf, '|'); + if(pos) { + int len = strlenW(str); + memmove(pos+len, pos+1, (strlenW(pos+1)+1)*sizeof(WCHAR)); + memcpy(pos, str, len*sizeof(WCHAR)); + } + + WARN("%s\n", debugstr_w(buf)); + + id |= JSCRIPT_ERROR; + hres = create_error(ctx, constr, &id, buf, &err); + if(FAILED(hres)) + return hres; + + if(!ei) + return id; + + V_VT(&ei->var) = VT_DISPATCH; + V_DISPATCH(&ei->var) = (IDispatch*)_IDispatchEx_(err); + + return id; +} + +HRESULT throw_eval_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) +{ + return throw_error(ctx, ei, id, str, ctx->eval_error_constr); +} + +HRESULT throw_range_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) +{ + return throw_error(ctx, ei, id, str, ctx->range_error_constr); +} + +HRESULT throw_reference_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) +{ + return throw_error(ctx, ei, id, str, ctx->reference_error_constr); +} + +HRESULT throw_syntax_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) +{ + return throw_error(ctx, ei, id, str, ctx->syntax_error_constr); +} + +HRESULT throw_type_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) +{ + return throw_error(ctx, ei, id, str, ctx->type_error_constr); +} + +HRESULT throw_uri_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) +{ + return throw_error(ctx, ei, id, str, ctx->uri_error_constr); +} diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index dac8d3e23b0..6ac668cf80a 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -272,10 +272,8 @@ static HRESULT Function_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISP TRACE("\n"); - if(!is_class(dispex, JSCLASS_FUNCTION)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_FUNCTION)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); function = (FunctionInstance*)dispex; diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 9428e6578e2..7d59e19c9f8 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -33,6 +33,13 @@ static const WCHAR InfinityW[] = {'I','n','f','i','n','i','t','y',0}; static const WCHAR ArrayW[] = {'A','r','r','a','y',0}; static const WCHAR BooleanW[] = {'B','o','o','l','e','a','n',0}; static const WCHAR DateW[] = {'D','a','t','e',0}; +static const WCHAR ErrorW[] = {'E','r','r','o','r',0}; +static const WCHAR EvalErrorW[] = {'E','v','a','l','E','r','r','o','r',0}; +static const WCHAR RangeErrorW[] = {'R','a','n','g','e','E','r','r','o','r',0}; +static const WCHAR ReferenceErrorW[] = {'R','e','f','e','r','e','n','c','e','E','r','r','o','r',0}; +static const WCHAR SyntaxErrorW[] = {'S','y','n','t','a','x','E','r','r','o','r',0}; +static const WCHAR TypeErrorW[] = {'T','y','p','e','E','r','r','o','r',0}; +static const WCHAR URIErrorW[] = {'U','R','I','E','r','r','o','r',0}; static const WCHAR FunctionW[] = {'F','u','n','c','t','i','o','n',0}; static const WCHAR NumberW[] = {'N','u','m','b','e','r',0}; static const WCHAR ObjectW[] = {'O','b','j','e','c','t',0}; @@ -165,6 +172,62 @@ static HRESULT JSGlobal_Date(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA return constructor_call(dispex->ctx->date_constr, lcid, flags, dp, retv, ei, sp); } +static HRESULT JSGlobal_Error(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + return constructor_call(dispex->ctx->error_constr, lcid, flags, dp, retv, ei, sp); +} + +static HRESULT JSGlobal_EvalError(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + return constructor_call(dispex->ctx->eval_error_constr, lcid, flags, dp, retv, ei, sp); +} + +static HRESULT JSGlobal_RangeError(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + return constructor_call(dispex->ctx->range_error_constr, lcid, flags, dp, retv, ei, sp); +} + +static HRESULT JSGlobal_ReferenceError(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + return constructor_call(dispex->ctx->reference_error_constr, lcid, flags, dp, retv, ei, sp); +} + +static HRESULT JSGlobal_SyntaxError(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + return constructor_call(dispex->ctx->syntax_error_constr, lcid, flags, dp, retv, ei, sp); +} + +static HRESULT JSGlobal_TypeError(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + return constructor_call(dispex->ctx->type_error_constr, lcid, flags, dp, retv, ei, sp); +} + +static HRESULT JSGlobal_URIError(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, + VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) +{ + TRACE("\n"); + + return constructor_call(dispex->ctx->uri_error_constr, lcid, flags, dp, retv, ei, sp); +} + static HRESULT JSGlobal_Function(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { @@ -267,7 +330,7 @@ static HRESULT JSGlobal_eval(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA hres = script_parse(dispex->ctx, V_BSTR(arg), NULL, &parser_ctx); if(FAILED(hres)) { WARN("parse (%s) failed: %08x\n", debugstr_w(V_BSTR(arg)), hres); - return hres; + return throw_syntax_error(dispex->ctx, ei, hres, NULL); } hres = exec_source(dispex->ctx->exec_ctx, parser_ctx, parser_ctx->source, ei, retv); @@ -541,6 +604,8 @@ static const builtin_prop_t JSGlobal_props[] = { {CollectGarbageW, JSGlobal_CollectGarbage, PROPF_METHOD}, {DateW, JSGlobal_Date, PROPF_CONSTR}, {EnumeratorW, JSGlobal_Enumerator, PROPF_METHOD}, + {ErrorW, JSGlobal_Error, PROPF_CONSTR}, + {EvalErrorW, JSGlobal_EvalError, PROPF_CONSTR}, {FunctionW, JSGlobal_Function, PROPF_CONSTR}, {_GetObjectW, JSGlobal_GetObject, PROPF_METHOD}, {InfinityW, JSGlobal_Infinity, 0}, @@ -548,12 +613,17 @@ static const builtin_prop_t JSGlobal_props[] = { {NaNW, JSGlobal_NaN, 0}, {NumberW, JSGlobal_Number, PROPF_CONSTR}, {ObjectW, JSGlobal_Object, PROPF_CONSTR}, + {RangeErrorW, JSGlobal_RangeError, PROPF_CONSTR}, + {ReferenceErrorW, JSGlobal_ReferenceError, PROPF_CONSTR}, {RegExpW, JSGlobal_RegExp, PROPF_CONSTR}, {ScriptEngineW, JSGlobal_ScriptEngine, PROPF_METHOD}, {ScriptEngineBuildVersionW, JSGlobal_ScriptEngineBuildVersion, PROPF_METHOD}, {ScriptEngineMajorVersionW, JSGlobal_ScriptEngineMajorVersion, PROPF_METHOD}, {ScriptEngineMinorVersionW, JSGlobal_ScriptEngineMinorVersion, PROPF_METHOD}, {StringW, JSGlobal_String, PROPF_CONSTR}, + {SyntaxErrorW, JSGlobal_SyntaxError, PROPF_CONSTR}, + {TypeErrorW, JSGlobal_TypeError, PROPF_CONSTR}, + {URIErrorW, JSGlobal_URIError, PROPF_CONSTR}, {VBArrayW, JSGlobal_VBArray, PROPF_METHOD}, {encodeURIW, JSGlobal_encodeURI, PROPF_METHOD}, {escapeW, JSGlobal_escape, PROPF_METHOD}, @@ -598,6 +668,10 @@ static HRESULT init_constructors(script_ctx_t *ctx, DispatchEx *object_prototype if(FAILED(hres)) return hres; + hres = init_error_constr(ctx); + if(FAILED(hres)) + return hres; + hres = create_number_constr(ctx, &ctx->number_constr); if(FAILED(hres)) return hres; diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 370b3bdccdd..70c9fea603a 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -28,9 +28,13 @@ #include "dispex.h" #include "activscp.h" +#include "resource.h" + #include "wine/unicode.h" #include "wine/list.h" +#define JSCRIPT_ERROR 0x800A0000 + typedef struct _script_ctx_t script_ctx_t; typedef struct _exec_ctx_t exec_ctx_t; typedef struct _dispex_prop_t dispex_prop_t; @@ -58,6 +62,8 @@ jsheap_t *jsheap_mark(jsheap_t*); typedef struct DispatchEx DispatchEx; +extern HINSTANCE jscript_hinstance; + #define PROPF_ARGMASK 0x00ff #define PROPF_METHOD 0x0100 #define PROPF_ENUM 0x0200 @@ -139,6 +145,13 @@ HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const builtin_inf DispatchEx*,DispatchEx**); HRESULT Function_value(DispatchEx*,LCID,WORD,DISPPARAMS*,VARIANT*,jsexcept_t*,IServiceProvider*); +HRESULT throw_eval_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); +HRESULT throw_range_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); +HRESULT throw_reference_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); +HRESULT throw_syntax_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); +HRESULT throw_type_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); +HRESULT throw_uri_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); + HRESULT create_object(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_math(script_ctx_t*,DispatchEx**); @@ -188,6 +201,13 @@ struct _script_ctx_t { DispatchEx *array_constr; DispatchEx *bool_constr; DispatchEx *date_constr; + DispatchEx *error_constr; + DispatchEx *eval_error_constr; + DispatchEx *range_error_constr; + DispatchEx *reference_error_constr; + DispatchEx *syntax_error_constr; + DispatchEx *type_error_constr; + DispatchEx *uri_error_constr; DispatchEx *number_constr; DispatchEx *object_constr; DispatchEx *regexp_constr; @@ -208,6 +228,7 @@ HRESULT create_object_prototype(script_ctx_t*,DispatchEx**); HRESULT create_array_constr(script_ctx_t*,DispatchEx**); HRESULT create_bool_constr(script_ctx_t*,DispatchEx**); HRESULT create_date_constr(script_ctx_t*,DispatchEx**); +HRESULT init_error_constr(script_ctx_t*); HRESULT create_number_constr(script_ctx_t*,DispatchEx**); HRESULT create_object_constr(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_regexp_constr(script_ctx_t*,DispatchEx**); diff --git a/programs/uninstaller/Lt.rc b/dlls/jscript/jscript_De.rc similarity index 51% copy from programs/uninstaller/Lt.rc copy to dlls/jscript/jscript_De.rc index 7cf0dc26486..2a265abfe8b 100644 --- a/programs/uninstaller/Lt.rc +++ b/dlls/jscript/jscript_De.rc @@ -1,7 +1,5 @@ /* - * Uninstaller (Lithuanian Resources) - * - * Copyright 2009 Aurimas Fišeras + * Copyright 2009 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,12 +18,20 @@ #include "resource.h" -/* UTF-8 */ #pragma code_page(65001) -LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL +LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE { - IDS_APPNAME, "Wine programų šalinimo programa" - IDS_UNINSTALLFAILED, "Nepavyko įvykdyti programos pašalinimo komandos '%s', greičiausiai dėl trūkstamo vykdomojo failo.\r\nAr norite pašalinti programos šalinimo įrašą iš registro?" +STRINGTABLE DISCARDABLE +{ + IDS_TO_PRIMITIVE "Fehler beim umwandeln des Objektes in einen Grundtyp" + IDS_INVALID_CALL_ARG "Ungültiger Funktionsaufruf oder Argument" + IDS_NO_PROPERTY "Das Objekt unterstützt diese Eigenschaft oder Methode nicht" + IDS_ARG_NOT_OPT "Argument nicht optional" + IDS_NOT_FUNC "Funktion erwarted" + IDS_NOT_DATE "'[Objekt]' ist kein Datums-Objekt" + IDS_NOT_NUM "Nummer erwartet" + IDS_UNDEFINED "'|' nicht definiert" + IDS_NOT_BOOL "Boolisches Objekt erwartet" + IDS_INVALID_LENGTH "Array-Größe muss eine endliche, positive Ganzzahl sein" } diff --git a/dlls/jscript/jscript_En.rc b/dlls/jscript/jscript_En.rc new file mode 100644 index 00000000000..b47e9517abc --- /dev/null +++ b/dlls/jscript/jscript_En.rc @@ -0,0 +1,40 @@ +/* + * Copyright 2009 Piotr Caban + * + * 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_ENGLISH, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +{ + IDS_TO_PRIMITIVE "Error converting object to primitive type" + IDS_INVALID_CALL_ARG "Invalid procedure call or argument" + IDS_NO_PROPERTY "Object doesn't support this property or method" + IDS_ARG_NOT_OPT "Argument not optional" + IDS_SYNTAX_ERROR "Syntax error" + IDS_SEMICOLON "Expected ';'" + IDS_LBRACKET "Expected '('" + IDS_RBRACKET "Expected ')'" + IDS_NOT_FUNC "Function expected" + IDS_NOT_DATE "'[object]' is not a date object" + IDS_NOT_NUM "Number expected" + IDS_ILLEGAL_ASSIGN "Illegal assignment" + IDS_UNDEFINED "'|' is undefined" + IDS_NOT_BOOL "Boolean object expected" + IDS_INVALID_LENGTH "Array length must be a finite positive integer" +} diff --git a/programs/uninstaller/Lt.rc b/dlls/jscript/jscript_Fr.rc similarity index 50% copy from programs/uninstaller/Lt.rc copy to dlls/jscript/jscript_Fr.rc index 7cf0dc26486..3d31d51ae41 100644 --- a/programs/uninstaller/Lt.rc +++ b/dlls/jscript/jscript_Fr.rc @@ -1,7 +1,7 @@ /* - * Uninstaller (Lithuanian Resources) + * French resources for jscript * - * Copyright 2009 Aurimas Fišeras + * Copyright 2009 Frédéric Delanoy * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -23,9 +23,18 @@ /* UTF-8 */ #pragma code_page(65001) -LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE { - IDS_APPNAME, "Wine programų šalinimo programa" - IDS_UNINSTALLFAILED, "Nepavyko įvykdyti programos pašalinimo komandos '%s', greičiausiai dėl trūkstamo vykdomojo failo.\r\nAr norite pašalinti programos šalinimo įrašą iš registro?" +STRINGTABLE DISCARDABLE +{ + IDS_TO_PRIMITIVE "Erreur lors de la conversion de l'objet vers un type primitif" + IDS_INVALID_CALL_ARG "Appel de procédure ou argument invalide" + IDS_NO_PROPERTY "Cet objet ne supporte pas cette propriété ou méthode" + IDS_ARG_NOT_OPT "Argument non optionnel" + IDS_NOT_FUNC "Fonction attendue" + IDS_NOT_DATE "« [objet] » n'est pas un objet de type date" + IDS_NOT_NUM "Nombre attendu" + IDS_UNDEFINED "« | » n'est pas défini" + IDS_NOT_BOOL "Booléen attendu" + IDS_INVALID_LENGTH "La longueur d'un tableau doit être un entier positif" } diff --git a/programs/uninstaller/Lt.rc b/dlls/jscript/jscript_Lt.rc similarity index 57% copy from programs/uninstaller/Lt.rc copy to dlls/jscript/jscript_Lt.rc index 7cf0dc26486..787fa6c9a4d 100644 --- a/programs/uninstaller/Lt.rc +++ b/dlls/jscript/jscript_Lt.rc @@ -1,6 +1,4 @@ /* - * Uninstaller (Lithuanian Resources) - * * Copyright 2009 Aurimas Fišeras * * This library is free software; you can redistribute it and/or @@ -25,7 +23,16 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE { - IDS_APPNAME, "Wine programų šalinimo programa" - IDS_UNINSTALLFAILED, "Nepavyko įvykdyti programos pašalinimo komandos '%s', greičiausiai dėl trūkstamo vykdomojo failo.\r\nAr norite pašalinti programos šalinimo įrašą iš registro?" +STRINGTABLE DISCARDABLE +{ + IDS_TO_PRIMITIVE "Klaida keičiant objektą į primityvų tipą" + IDS_INVALID_CALL_ARG "Netinkamas kreipinys į procedūrą ar argumentas" + IDS_NO_PROPERTY "Objektas nepalaiko šios savybės ar metodo" + IDS_ARG_NOT_OPT "Argumentas nėra neprivalomas" + IDS_NOT_FUNC "Tikėtasi funkcijos" + IDS_NOT_DATE "„[objektas]“ nėra datos objektas" + IDS_NOT_NUM "Tikėtasi skaičiaus" + IDS_UNDEFINED "„|“ yra neapibrėžtas" + IDS_NOT_BOOL "Tikėtasi loginio objekto" + IDS_INVALID_LENGTH "Masyvo dydis turi būti teigiamas sveikasis skaičius" } diff --git a/dlls/jscript/jscript_Nl.rc b/dlls/jscript/jscript_Nl.rc new file mode 100644 index 00000000000..71ba6b5517d --- /dev/null +++ b/dlls/jscript/jscript_Nl.rc @@ -0,0 +1,40 @@ +/* + * Copyright 2009 Paul Vriens + * + * 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_DUTCH, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +{ + IDS_TO_PRIMITIVE "Fout bij het omzetten van het object naar een primitief type" + IDS_INVALID_CALL_ARG "Ongeldige procedure-aanroep of argument" + IDS_NO_PROPERTY "Dit object ondersteunt deze eigenschap of methode niet" + IDS_ARG_NOT_OPT "Argument is niet optioneel" + IDS_SYNTAX_ERROR "Syntax fout" + IDS_SEMICOLON "';' verwacht" + IDS_LBRACKET "'(' verwacht" + IDS_RBRACKET "')' verwacht" + IDS_NOT_FUNC "Functie verwacht" + IDS_NOT_DATE "'[object]' is geen datum object" + IDS_NOT_NUM "Getal verwacht" + IDS_ILLEGAL_ASSIGN "Ongeldige toekenning" + IDS_UNDEFINED "'|' is ongedefinieerd" + IDS_NOT_BOOL "Boolean object verwacht" + IDS_INVALID_LENGTH "Array lengte moet een eindig, positief geheel getal zijn" +} diff --git a/dlls/jscript/jscript_main.c b/dlls/jscript/jscript_main.c index 37266e5773c..4f59ecbc11a 100644 --- a/dlls/jscript/jscript_main.c +++ b/dlls/jscript/jscript_main.c @@ -40,7 +40,7 @@ static const CLSID CLSID_JScriptEncode = DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); -static HINSTANCE jscript_hinstance; +HINSTANCE jscript_hinstance; static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) { diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c index d5ffa7fa168..10d4f51b074 100644 --- a/dlls/jscript/jsutils.c +++ b/dlls/jscript/jsutils.c @@ -211,7 +211,7 @@ HRESULT to_primitive(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, VARIANT *ret if(SUCCEEDED(hres)) { hres = jsdisp_call(jsdisp, id, ctx->lcid, DISPATCH_METHOD, &dp, ret, ei, NULL /*FIXME*/); if(FAILED(hres)) { - FIXME("throw TypeError\n"); + WARN("call error - forwarding exception\n"); jsdisp_release(jsdisp); return hres; } @@ -227,7 +227,7 @@ HRESULT to_primitive(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, VARIANT *ret if(SUCCEEDED(hres)) { hres = jsdisp_call(jsdisp, id, ctx->lcid, DISPATCH_METHOD, &dp, ret, ei, NULL /*FIXME*/); if(FAILED(hres)) { - FIXME("throw TypeError\n"); + WARN("call error - forwarding exception\n"); jsdisp_release(jsdisp); return hres; } @@ -241,8 +241,8 @@ HRESULT to_primitive(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, VARIANT *ret jsdisp_release(jsdisp); - FIXME("throw TypeError\n"); - return E_FAIL; + WARN("failed\n"); + return throw_type_error(ctx, ei, IDS_TO_PRIMITIVE, NULL); } default: FIXME("Unimplemented for vt %d\n", V_VT(v)); diff --git a/dlls/jscript/number.c b/dlls/jscript/number.c index 5399c91615a..0aeeab6386a 100644 --- a/dlls/jscript/number.c +++ b/dlls/jscript/number.c @@ -54,10 +54,8 @@ static HRESULT Number_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA TRACE("\n"); - if(!is_class(dispex, JSCLASS_NUMBER)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_NUMBER)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_NUM, NULL); number = (NumberInstance*)dispex; @@ -66,10 +64,8 @@ static HRESULT Number_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA if(FAILED(hres)) return hres; - if(radix<2 || radix>36) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(radix<2 || radix>36) + return throw_type_error(dispex->ctx, ei, IDS_INVALID_CALL_ARG, NULL); } if(V_VT(&number->num) == VT_I4) @@ -208,10 +204,8 @@ static HRESULT Number_valueOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR { TRACE("\n"); - if(!is_class(dispex, JSCLASS_NUMBER)) { - FIXME("throw TypeError\n"); - return E_FAIL; - } + if(!is_class(dispex, JSCLASS_NUMBER)) + return throw_type_error(dispex->ctx, ei, IDS_NOT_NUM, NULL); if(retv) { NumberInstance *number = (NumberInstance*)dispex; @@ -247,6 +241,8 @@ static HRESULT Number_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM NumberInstance *number = (NumberInstance*)dispex; switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); case DISPATCH_PROPERTYGET: *retv = number->num; break; diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index 8e0aad6f12f..737230ada85 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -120,6 +120,8 @@ static HRESULT Object_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM TRACE("\n"); switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); case DISPATCH_PROPERTYGET: V_VT(retv) = VT_BSTR; V_BSTR(retv) = SysAllocString(default_valueW); diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y index d47d40d1e58..a0ae471953f 100644 --- a/dlls/jscript/parser.y +++ b/dlls/jscript/parser.y @@ -25,6 +25,8 @@ #define YYPARSE_PARAM ctx static int parser_error(const char*); +static void set_error(parser_ctx_t*,UINT); +static BOOL explicit_error(parser_ctx_t*,void*,WCHAR); static BOOL allow_auto_semicolon(parser_ctx_t*); static void program_parsed(parser_ctx_t*,source_elements_t*); static source_elements_t *function_body_parsed(parser_ctx_t*,source_elements_t*); @@ -200,7 +202,7 @@ static source_elements_t *source_elements_add_statement(source_elements_t*,state %type Finally %type StatementList StatementList_opt %type FormalParameterList FormalParameterList_opt -%type Expression Expression_opt +%type Expression Expression_opt Expression_err %type ExpressionNoIn ExpressionNoIn_opt %type FunctionExpression %type AssignmentExpression AssignmentExpressionNoIn @@ -266,7 +268,7 @@ SourceElements /* ECMA-262 3rd Edition 13 */ FunctionExpression - : KFunction Identifier_opt '(' FormalParameterList_opt ')' '{' FunctionBody '}' + : KFunction Identifier_opt left_bracket FormalParameterList_opt right_bracket '{' FunctionBody '}' { $$ = new_function_expression(ctx, $2, $4, $7, $1, $8-$1+1); } KFunction @@ -379,24 +381,32 @@ ExpressionStatement /* ECMA-262 3rd Edition 12.5 */ IfStatement - : kIF '(' Expression ')' Statement kELSE Statement + : kIF left_bracket Expression_err right_bracket Statement kELSE Statement { $$ = new_if_statement(ctx, $3, $5, $7); } - | kIF '(' Expression ')' Statement %prec LOWER_THAN_ELSE + | kIF left_bracket Expression_err right_bracket Statement %prec LOWER_THAN_ELSE { $$ = new_if_statement(ctx, $3, $5, NULL); } /* ECMA-262 3rd Edition 12.6 */ IterationStatement - : kDO Statement kWHILE '(' Expression ')' semicolon_opt + : kDO Statement kWHILE left_bracket Expression_err right_bracket semicolon_opt { $$ = new_while_statement(ctx, TRUE, $5, $2); } - | kWHILE '(' Expression ')' Statement + | kWHILE left_bracket Expression_err right_bracket Statement { $$ = new_while_statement(ctx, FALSE, $3, $5); } - | kFOR '(' ExpressionNoIn_opt ';' Expression_opt ';' Expression_opt ')' Statement - { $$ = new_for_statement(ctx, NULL, $3, $5, $7, $9); } - | kFOR '(' kVAR VariableDeclarationListNoIn ';' Expression_opt ';' Expression_opt ')' Statement - { $$ = new_for_statement(ctx, $4, NULL, $6, $8, $10); } - | kFOR '(' LeftHandSideExpression kIN Expression ')' Statement + | kFOR left_bracket ExpressionNoIn_opt + { if(!explicit_error(ctx, $3, ';')) YYABORT; } + semicolon Expression_opt + { if(!explicit_error(ctx, $6, ';')) YYABORT; } + semicolon Expression_opt right_bracket Statement + { $$ = new_for_statement(ctx, NULL, $3, $6, $9, $11); } + | kFOR left_bracket kVAR VariableDeclarationListNoIn + { if(!explicit_error(ctx, $4, ';')) YYABORT; } + semicolon Expression_opt + { if(!explicit_error(ctx, $7, ';')) YYABORT; } + semicolon Expression_opt right_bracket Statement + { $$ = new_for_statement(ctx, $4, NULL, $7, $10, $12); } + | kFOR left_bracket LeftHandSideExpression kIN Expression_err right_bracket Statement { $$ = new_forin_statement(ctx, NULL, $3, $5, $7); } - | kFOR '(' kVAR VariableDeclarationNoIn kIN Expression ')' Statement + | kFOR left_bracket kVAR VariableDeclarationNoIn kIN Expression_err right_bracket Statement { $$ = new_forin_statement(ctx, $4, NULL, $6, $8); } /* ECMA-262 3rd Edition 12.7 */ @@ -416,7 +426,7 @@ ReturnStatement /* ECMA-262 3rd Edition 12.10 */ WithStatement - : kWITH '(' Expression ')' Statement + : kWITH left_bracket Expression right_bracket Statement { $$ = new_with_statement(ctx, $3, $5); } /* ECMA-262 3rd Edition 12.12 */ @@ -426,8 +436,8 @@ LabelledStatement /* ECMA-262 3rd Edition 12.11 */ SwitchStatement - : kSWITCH '(' Expression ')' CaseBlock - { $$ = new_switch_statement(ctx, $3, $5); } + : kSWITCH left_bracket Expression right_bracket CaseBlock + { $$ = new_switch_statement(ctx, $3, $5); } /* ECMA-262 3rd Edition 12.11 */ CaseBlock @@ -471,8 +481,8 @@ TryStatement /* ECMA-262 3rd Edition 12.14 */ Catch - : kCATCH '(' tIdentifier ')' Block - { $$ = new_catch_block(ctx, $3, $5); } + : kCATCH left_bracket tIdentifier right_bracket Block + { $$ = new_catch_block(ctx, $3, $5); } /* ECMA-262 3rd Edition 12.14 */ Finally @@ -483,6 +493,10 @@ Expression_opt : /* empty */ { $$ = NULL; } | Expression { $$ = $1; } +Expression_err + : Expression { $$ = $1; } + | error { set_error(ctx, IDS_SYNTAX_ERROR); YYABORT; } + /* ECMA-262 3rd Edition 11.14 */ Expression : AssignmentExpression { $$ = $1; } @@ -796,6 +810,18 @@ semicolon_opt : ';' | error { if(!allow_auto_semicolon(ctx)) {YYABORT;} } +left_bracket + : '(' + | error { set_error(ctx, IDS_LBRACKET); YYABORT; } + +right_bracket + : ')' + | error { set_error(ctx, IDS_RBRACKET); YYABORT; } + +semicolon + : ';' + | error { set_error(ctx, IDS_SEMICOLON); YYABORT; } + %% static BOOL allow_auto_semicolon(parser_ctx_t *ctx) @@ -1434,6 +1460,20 @@ static int parser_error(const char *str) return 0; } +static void set_error(parser_ctx_t *ctx, UINT error) +{ + ctx->hres = JSCRIPT_ERROR|error; +} + +static BOOL explicit_error(parser_ctx_t *ctx, void *obj, WCHAR next) +{ + if(obj || *(ctx->ptr-1)==next) return TRUE; + + set_error(ctx, IDS_SYNTAX_ERROR); + return FALSE; +} + + static expression_t *new_identifier_expression(parser_ctx_t *ctx, const WCHAR *identifier) { identifier_expression_t *ret = parser_alloc(ctx, sizeof(identifier_expression_t)); @@ -1568,7 +1608,7 @@ HRESULT script_parse(script_ctx_t *ctx, const WCHAR *code, const WCHAR *delimite return E_OUTOFMEMORY; parser_ctx->ref = 1; - parser_ctx->hres = E_FAIL; + parser_ctx->hres = JSCRIPT_ERROR|IDS_SYNTAX_ERROR; parser_ctx->is_html = delimiter && !strcmpiW(delimiter, html_tagW); parser_ctx->begin = parser_ctx->ptr = code; diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c index 9722919f722..a4d640ef860 100644 --- a/dlls/jscript/regexp.c +++ b/dlls/jscript/regexp.c @@ -3516,8 +3516,17 @@ static HRESULT RegExp_test(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS static HRESULT RegExp_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + TRACE("\n"); + + switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); + default: + FIXME("unimplemented flags %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; } static void RegExp_destructor(DispatchEx *dispex) diff --git a/dlls/jscript/resource.h b/dlls/jscript/resource.h new file mode 100644 index 00000000000..05039616176 --- /dev/null +++ b/dlls/jscript/resource.h @@ -0,0 +1,35 @@ +/* + * Copyright 2009 Piotr Caban + * + * 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 + +#define IDS_TO_PRIMITIVE 0x0001 +#define IDS_INVALID_CALL_ARG 0x0005 +#define IDS_NO_PROPERTY 0x01B6 +#define IDS_ARG_NOT_OPT 0x01c1 +#define IDS_SYNTAX_ERROR 0x03EA +#define IDS_SEMICOLON 0x03EC +#define IDS_LBRACKET 0x03ED +#define IDS_RBRACKET 0x03EE +#define IDS_NOT_FUNC 0x138A +#define IDS_NOT_DATE 0x138E +#define IDS_NOT_NUM 0x1389 +#define IDS_ILLEGAL_ASSIGN 0x1390 +#define IDS_UNDEFINED 0x1391 +#define IDS_NOT_BOOL 0x1392 +#define IDS_INVALID_LENGTH 0x13A5 diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index cf3c5be9f4b..6695bf893cb 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -592,7 +592,7 @@ static HRESULT String_match(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM DispatchEx *array; VARIANT var, *arg_var; DWORD length, match_cnt, i; - BSTR val_str; + BSTR val_str = NULL; HRESULT hres = S_OK; TRACE("\n"); @@ -1485,6 +1485,8 @@ static HRESULT String_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM TRACE("\n"); switch(flags) { + case INVOKE_FUNC: + return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL); case DISPATCH_PROPERTYGET: { BSTR str = SysAllocString(This->str); if(!str) diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index a80bd9f6d50..53b7f924e73 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1244,4 +1244,94 @@ ok(bool.toString() === "true", "bool.toString() = " + bool.toString()); ok(bool.valueOf() === Boolean(1), "bool.valueOf() = " + bool.valueOf()); ok(bool.toLocaleString() === bool.toString(), "bool.toLocaleString() = " + bool.toLocaleString()); +ok(Error.prototype !== TypeError.prototype, "Error.prototype === TypeError.prototype"); +ok(RangeError.prototype !== TypeError.prototype, "RangeError.prototype === TypeError.prototype"); +ok(Error.prototype.toLocaleString === Object.prototype.toLocaleString, + "Error.prototype.toLocaleString !== Object.prototype.toLocaleString"); +err = new Error(); +ok(err.valueOf === Object.prototype.valueOf, "err.valueOf !== Object.prototype.valueOf"); +ok(Error.prototype.name === "Error", "Error.prototype.name = " + Error.prototype.name); +ok(err.name === "Error", "err.name = " + err.name); +EvalError.prototype.message = "test"; +ok(err.toString !== Object.prototype.toString, "err.toString === Object.prototype.toString"); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +err = new EvalError(); +ok(EvalError.prototype.name === "EvalError", "EvalError.prototype.name = " + EvalError.prototype.name); +ok(err.name === "EvalError", "err.name = " + err.name); +ok(err.toString === Error.prototype.toString, "err.toString !== Error.prototype.toString"); +ok(err.message === "", "err.message != ''"); +err.message = date; +ok(err.message === date, "err.message != date"); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +ok(err.toString !== Object.prototype.toString, "err.toString === Object.prototype.toString"); +err = new RangeError(); +ok(RangeError.prototype.name === "RangeError", "RangeError.prototype.name = " + RangeError.prototype.name); +ok(err.name === "RangeError", "err.name = " + err.name); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +err = new ReferenceError(); +ok(ReferenceError.prototype.name === "ReferenceError", "ReferenceError.prototype.name = " + ReferenceError.prototype.name); +ok(err.name === "ReferenceError", "err.name = " + err.name); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +err = new SyntaxError(); +ok(SyntaxError.prototype.name === "SyntaxError", "SyntaxError.prototype.name = " + SyntaxError.prototype.name); +ok(err.name === "SyntaxError", "err.name = " + err.name); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +err = new TypeError(); +ok(TypeError.prototype.name === "TypeError", "TypeError.prototype.name = " + TypeError.prototype.name); +ok(err.name === "TypeError", "err.name = " + err.name); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +err = new URIError(); +ok(URIError.prototype.name === "URIError", "URIError.prototype.name = " + URIError.prototype.name); +ok(err.name === "URIError", "err.name = " + err.name); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +err = new Error("message"); +ok(err.message === "message", "err.message !== 'message'"); +ok(err.toString() === "[object Error]", "err.toString() = " + err.toString()); +err = new Error(123); +ok(err.number === 123, "err.number = " + err.number); +err = new Error(0, "message"); +ok(err.number === 0, "err.number = " + err.number); +ok(err.message === "message", "err.message = " + err.message); +ok(err.description === "message", "err.description = " + err.description); + +function exception_test(func, type, number) { + ret = ""; + num = ""; + try { + func(); + } catch(e) { + ret = e.name; + num = e.number; + } + ok(ret === type, "Exception test, ret = " + ret + ", expected " + type +". Executed function: " + func.toString()); + ok(num === number, "Exception test, num = " + num + ", expected " + number + ". Executed function: " + func.toString()); +} +exception_test(function() {arr.toString = Date.prototype.toString; arr.toString();}, "TypeError", -2146823282); +exception_test(function() {Array(-3);}, "RangeError", -2146823259); +exception_test(function() {arr.toString = Boolean.prototype.toString; arr.toString();}, "TypeError", -2146823278); +exception_test(function() {date.setTime();}, "TypeError", -2146827839); +exception_test(function() {arr.test();}, "TypeError", -2146827850); +exception_test(function() {arr.toString = Number.prototype.toString; arr.toString();}, "TypeError", -2146823287); +exception_test(function() {(new Number(3)).toString(1);}, "TypeError", -2146828283); +exception_test(function() {not_existing_variable.something();}, "TypeError", -2146823279); +exception_test(function() {arr.toString = Function.prototype.toString; arr.toString();}, "TypeError", -2146823286); +exception_test(function() {date();}, "TypeError", -2146823286); +exception_test(function() {arr();}, "TypeError", -2146823286); +exception_test(function() {eval("for(i=0;) {}");}, "SyntaxError", -2146827286); +exception_test(function() {eval("function {};");}, "SyntaxError", -2146827283); +exception_test(function() {eval("if");}, "SyntaxError", -2146827283); +exception_test(function() {eval("do i=0; while");}, "SyntaxError", -2146827283); +exception_test(function() {eval("while");}, "SyntaxError", -2146827283); +exception_test(function() {eval("for");}, "SyntaxError", -2146827283); +exception_test(function() {eval("with");}, "SyntaxError", -2146827283); +exception_test(function() {eval("switch");}, "SyntaxError", -2146827283); +exception_test(function() {eval("if(false");}, "SyntaxError", -2146827282); +exception_test(function() {eval("for(i=0; i<10; i++");}, "SyntaxError", -2146827282); +exception_test(function() {eval("while(true");}, "SyntaxError", -2146827282); +exception_test(function() {test = function() {}}, "ReferenceError", -2146823280); +exception_test(function() {eval("for(i=0")}, "SyntaxError", -2146827284); +exception_test(function() {eval("for(i=0;i<10")}, "SyntaxError", -2146827284); +exception_test(function() {eval("while(")}, "SyntaxError", -2146827286); +exception_test(function() {eval("if(")}, "SyntaxError", -2146827286); + reportSuccess(); diff --git a/dlls/kernel32/ne_module.c b/dlls/kernel32/ne_module.c index 4b45e7bb654..87a1a86737b 100644 --- a/dlls/kernel32/ne_module.c +++ b/dlls/kernel32/ne_module.c @@ -119,6 +119,15 @@ static inline void patch_code_segment( NE_MODULE *pModule ) /*********************************************************************** + * contains_path + */ +static inline int contains_path( LPCSTR name ) +{ + return ((*name && (name[1] == ':')) || strchr(name, '/') || strchr(name, '\\')); +} + + +/*********************************************************************** * NE_strcasecmp * * locale-independent case conversion for module lookups @@ -1674,6 +1683,8 @@ HINSTANCE16 WINAPI WinExec16( LPCSTR lpCmdLine, UINT16 nCmdShow ) int arglen; HINSTANCE16 ret; char buffer[MAX_PATH]; + LOADPARAMS16 params; + WORD showCmd[2]; if (*lpCmdLine == '"') /* has to be only one and only at beginning ! */ { @@ -1722,23 +1733,29 @@ HINSTANCE16 WINAPI WinExec16( LPCSTR lpCmdLine, UINT16 nCmdShow ) TRACE("name: '%s', cmdline: '%.*s'\n", name, cmdline[0], &cmdline[1]); - if (SearchPathA( NULL, name, ".exe", sizeof(buffer), buffer, NULL )) - { - LOADPARAMS16 params; - WORD showCmd[2]; - showCmd[0] = 2; - showCmd[1] = nCmdShow; + showCmd[0] = 2; + showCmd[1] = nCmdShow; - params.hEnvironment = 0; - params.cmdLine = MapLS( cmdline ); - params.showCmd = MapLS( showCmd ); - params.reserved = 0; + params.hEnvironment = 0; + params.cmdLine = MapLS( cmdline ); + params.showCmd = MapLS( showCmd ); + params.reserved = 0; + if (SearchPathA( NULL, name, ".exe", sizeof(buffer), buffer, NULL )) + { ret = LoadModule16( buffer, ¶ms ); - UnMapLS( params.cmdLine ); - UnMapLS( params.showCmd ); } - else ret = GetLastError(); + else if (!contains_path( name )) /* try 16-bit builtin */ + { + lstrcpynA( buffer, name, sizeof(buffer) ); + if (strlen( buffer ) < sizeof(buffer) - 4 && !strchr( buffer, '.' )) strcat( buffer, ".exe" ); + ret = LoadModule16( buffer, ¶ms ); + if (ret == ERROR_FILE_NOT_FOUND) ret = 21; /* it might be a 32-bit builtin too */ + } + else ret = ERROR_FILE_NOT_FOUND; + + UnMapLS( params.cmdLine ); + UnMapLS( params.showCmd ); HeapFree( GetProcessHeap(), 0, cmdline ); if (name != lpCmdLine) HeapFree( GetProcessHeap(), 0, name ); diff --git a/dlls/kernel32/nls/winerr_fra.mc b/dlls/kernel32/nls/winerr_fra.mc index c68146a08ce..7b3e6b655ce 100644 --- a/dlls/kernel32/nls/winerr_fra.mc +++ b/dlls/kernel32/nls/winerr_fra.mc @@ -3730,3 +3730,8 @@ SymbolicName=RPC_S_GRP_ELT_NOT_REMOVED Language=FRA RPC_S_GRP_ELT_NOT_REMOVED . +MessageId=2221 +SymbolicName=NERR_UserNotFound +Language=FRA +Nom d'utilisateur introuvable +. diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c index 0f4161c6ec3..9fcd0616708 100644 --- a/dlls/kernel32/volume.c +++ b/dlls/kernel32/volume.c @@ -1018,11 +1018,10 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize ) static const WCHAR prnW[] = {'P','R','N',0}; static const WCHAR comW[] = {'C','O','M',0}; static const WCHAR lptW[] = {'L','P','T',0}; - static const WCHAR rootW[] = {'A',':','\\',0}; static const WCHAR com0W[] = {'\\','?','?','\\','C','O','M','0',0}; static const WCHAR com1W[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','C','O','M','1',0,0}; static const WCHAR lpt1W[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','L','P','T','1',0,0}; - static const WCHAR driveW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','A',':',0}; + static const WCHAR dosdevW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\',0}; UNICODE_STRING nt_name; ANSI_STRING unix_name; @@ -1046,15 +1045,21 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize ) memcpy( name, devname + HIWORD(dosdev)/sizeof(WCHAR), LOWORD(dosdev) ); name[LOWORD(dosdev)/sizeof(WCHAR)] = 0; } - else if (devname[0] && devname[1] == ':' && !devname[2]) + else { - /* FIXME: should do this for all devices, not just drives */ NTSTATUS status; - WCHAR buffer[sizeof(driveW)/sizeof(WCHAR)]; + WCHAR *buffer; - memcpy( buffer, driveW, sizeof(driveW) ); - buffer[12] = devname[0]; - if ((status = read_nt_symlink( buffer, target, bufsize ))) + if (!(buffer = HeapAlloc( GetProcessHeap(), 0, sizeof(dosdevW) + strlenW(devname)*sizeof(WCHAR) ))) + { + SetLastError( ERROR_OUTOFMEMORY ); + return 0; + } + memcpy( buffer, dosdevW, sizeof(dosdevW) ); + strcatW( buffer, devname ); + status = read_nt_symlink( buffer, target, bufsize ); + HeapFree( GetProcessHeap(), 0, buffer ); + if (status) { SetLastError( RtlNtStatusToDosError(status) ); return 0; @@ -1062,11 +1067,8 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize ) ret = strlenW( target ) + 1; goto done; } - else - { - SetLastError( ERROR_BAD_PATHNAME ); - return 0; - } + + /* FIXME: should read NT symlink for all devices */ if (!(path = get_dos_device_path( name ))) return 0; link = read_symlink( path ); @@ -1125,6 +1127,8 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize ) } else /* return a list of all devices */ { + OBJECT_ATTRIBUTES attr; + HANDLE handle; WCHAR *p = target; int i; @@ -1134,6 +1138,8 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize ) return 0; } + /* FIXME: these should be NT symlinks too */ + memcpy( p, auxW, sizeof(auxW) ); p += sizeof(auxW) / sizeof(WCHAR); memcpy( p, nulW, sizeof(nulW) ); @@ -1180,30 +1186,36 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize ) } } - strcpyW( nt_buffer + 4, rootW ); - RtlInitUnicodeString( &nt_name, nt_buffer ); - - /* FIXME: should simply enumerate the DosDevices directory instead */ - for (i = 0; i < 26; i++) + RtlInitUnicodeString( &nt_name, dosdevW ); + nt_name.Length -= sizeof(WCHAR); /* without trailing slash */ + attr.Length = sizeof(attr); + attr.RootDirectory = 0; + attr.ObjectName = &nt_name; + attr.Attributes = OBJ_CASE_INSENSITIVE; + attr.SecurityDescriptor = NULL; + attr.SecurityQualityOfService = NULL; + status = NtOpenDirectoryObject( &handle, FILE_LIST_DIRECTORY, &attr ); + if (!status) { - WCHAR buffer[sizeof(driveW)/sizeof(WCHAR)], dummy[8]; - NTSTATUS status; + char data[1024]; + DIRECTORY_BASIC_INFORMATION *info = (DIRECTORY_BASIC_INFORMATION *)data; + ULONG ctx = 0, len; - memcpy( buffer, driveW, sizeof(driveW) ); - buffer[12] = 'A' + i; - status = read_nt_symlink( buffer, dummy, sizeof(dummy)/sizeof(WCHAR) ); - if (status == STATUS_SUCCESS || status == STATUS_BUFFER_TOO_SMALL) + while (!NtQueryDirectoryObject( handle, info, sizeof(data), 1, 0, &ctx, &len )) { - if (p + 3 >= target + bufsize) + if (p + info->ObjectName.Length/sizeof(WCHAR) + 1 >= target + bufsize) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); + NtClose( handle ); return 0; } - *p++ = 'A' + i; - *p++ = ':'; + memcpy( p, info->ObjectName.Buffer, info->ObjectName.Length ); + p += info->ObjectName.Length/sizeof(WCHAR); *p++ = 0; } + NtClose( handle ); } + *p++ = 0; /* terminating null */ return p - target; } diff --git a/dlls/localspl/spl_Ru.rc b/dlls/localspl/spl_Ru.rc index fb51446e146..085488d460d 100644 --- a/dlls/localspl/spl_Ru.rc +++ b/dlls/localspl/spl_Ru.rc @@ -20,10 +20,13 @@ #include "localspl_private.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE { - IDS_LOCALPORT "Ëîêàëüíûé ïîðò" - IDS_LOCALMONITOR "Ëîêàëüíûé ìîíèòîð" + IDS_LOCALPORT "Локальный порт" + IDS_LOCALMONITOR "Локальный монитор" } diff --git a/dlls/localui/ui_Lt.rc b/dlls/localui/ui_Lt.rc index 87997d0f75b..ff789e17fba 100644 --- a/dlls/localui/ui_Lt.rc +++ b/dlls/localui/ui_Lt.rc @@ -53,7 +53,7 @@ END STRINGTABLE DISCARDABLE { IDS_LOCALPORT "Vietinis prievadas" - IDS_INVALIDNAME "'%s' yra netinkamas prievado vardas" + IDS_INVALIDNAME "„%s“ yra netinkamas prievado vardas" IDS_PORTEXISTS "Prievadas %s jau egzistuoja" IDS_NOTHINGTOCONFIG "Šis prievadas neturi parinkčių konfigūravimui" } diff --git a/dlls/localui/ui_Ru.rc b/dlls/localui/ui_Ru.rc index 3402f37b000..04f87b68e70 100644 --- a/dlls/localui/ui_Ru.rc +++ b/dlls/localui/ui_Ru.rc @@ -20,37 +20,40 @@ #include "localui.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Äîáàâèòü ëîêàëüíûé ïîðò" +CAPTION "Добавить локальный порт" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Ââåäèòå &íàçâàíèå ëîêàëüíîãî ïîðòà:", -1, 7, 13, 194, 13, WS_VISIBLE + LTEXT "Введите &название локального порта:", -1, 7, 13, 194, 13, WS_VISIBLE EDITTEXT ADDPORT_EDIT, 6, 28, 174, 12, WS_VISIBLE | ES_AUTOHSCROLL DEFPUSHBUTTON "OK", IDOK, 199, 10, 40, 14, WS_VISIBLE - PUSHBUTTON "Îòìåíèòü", IDCANCEL, 199, 27, 40, 14, WS_VISIBLE + PUSHBUTTON "Отменить", IDCANCEL, 199, 27, 40, 14, WS_VISIBLE END LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Óñòàíîâêè ïàðàëëåëüíîãî ïîðòà" +CAPTION "Установки параллельного порта" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Òàéì-àóò (ñåêóíä)", LPTCONFIG_GROUP, 6, 6, 150, 35, BS_GROUPBOX - LTEXT "&Ïîïûòîê ïåðåñûëêè:", -1, 14, 22, 90, 13, WS_VISIBLE + GROUPBOX "Тайм-аут (секунд)", LPTCONFIG_GROUP, 6, 6, 150, 35, BS_GROUPBOX + LTEXT "&Попыток пересылки:", -1, 14, 22, 90, 13, WS_VISIBLE EDITTEXT LPTCONFIG_EDIT, 112, 20, 32, 13, WS_VISIBLE | ES_NUMBER DEFPUSHBUTTON "OK", IDOK, 164, 10, 50, 14, WS_VISIBLE - PUSHBUTTON "Îòìåíà", IDCANCEL, 164, 27, 50, 14, WS_VISIBLE + PUSHBUTTON "Отмена", IDCANCEL, 164, 27, 50, 14, WS_VISIBLE END STRINGTABLE DISCARDABLE { - IDS_LOCALPORT "Ëîêàëüíûé ïîðò" - IDS_INVALIDNAME "Íå ïðàâèëüíîå íàçâàíèå ïîðòà '%s'" - IDS_PORTEXISTS "Ïîðò '%s' óæå ñóùåñòâóåò" - IDS_NOTHINGTOCONFIG "Ýòîò ïîðò íå èìååò íàñòðîåê" + IDS_LOCALPORT "Локальный порт" + IDS_INVALIDNAME "Не правильное название порта '%s'" + IDS_PORTEXISTS "Порт '%s' уже существует" + IDS_NOTHINGTOCONFIG "Этот порт не имеет настроек" } diff --git a/dlls/mapi32/version.rc b/dlls/mapi32/version.rc index 0f955162b37..d3a620bd8fb 100644 --- a/dlls/mapi32/version.rc +++ b/dlls/mapi32/version.rc @@ -18,5 +18,9 @@ #define WINE_FILEDESCRIPTION_STR "Wine Messaging API" #define WINE_FILENAME_STR "mapi32.dll" +#define WINE_FILEVERSION 1,0,0,0 +#define WINE_FILEVERSION_STR "1.0.0.0" +#define WINE_PRODUCTVERSION 1,0,0,0 +#define WINE_PRODUCTVERSION_STR "1.0.0.0" #include "wine/wine_common_ver.rc" diff --git a/dlls/mountmgr.sys/device.c b/dlls/mountmgr.sys/device.c index 0467079e86b..03b1f893662 100644 --- a/dlls/mountmgr.sys/device.c +++ b/dlls/mountmgr.sys/device.c @@ -55,26 +55,49 @@ static const WCHAR drive_types[][8] = static const WCHAR drives_keyW[] = {'S','o','f','t','w','a','r','e','\\', 'W','i','n','e','\\','D','r','i','v','e','s',0}; -struct dos_drive +struct disk_device { - struct list entry; /* entry in drives list */ - char *udi; /* unique identifier for dynamic drives */ - int drive; /* drive letter (0 = A: etc.) */ enum device_type type; /* drive type */ - DEVICE_OBJECT *device; /* disk device allocated for this drive */ + DEVICE_OBJECT *dev_obj; /* disk device allocated for this volume */ UNICODE_STRING name; /* device name */ UNICODE_STRING symlink; /* device symlink if any */ STORAGE_DEVICE_NUMBER devnum; /* device number info */ - struct mount_point *dosdev; /* DosDevices mount point */ - struct mount_point *volume; /* Volume{xxx} mount point */ char *unix_device; /* unix device path */ char *unix_mount; /* unix mount point path */ }; +struct volume +{ + struct list entry; /* entry in volumes list */ + struct disk_device *device; /* disk device */ + char *udi; /* unique identifier for dynamic volumes */ + unsigned int ref; /* ref count */ + GUID guid; /* volume uuid */ + struct mount_point *mount; /* Volume{xxx} mount point */ +}; + +struct dos_drive +{ + struct list entry; /* entry in drives list */ + struct volume *volume; /* volume for this drive */ + int drive; /* drive letter (0 = A: etc.) */ + struct mount_point *mount; /* DosDevices mount point */ +}; + static struct list drives_list = LIST_INIT(drives_list); +static struct list volumes_list = LIST_INIT(volumes_list); static DRIVER_OBJECT *harddisk_driver; +static CRITICAL_SECTION device_section; +static CRITICAL_SECTION_DEBUG critsect_debug = +{ + 0, 0, &device_section, + { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": device_section") } +}; +static CRITICAL_SECTION device_section = { &critsect_debug, -1, 0, 0, 0, 0 }; + static char *get_dosdevices_path( char **drive ) { const char *config_dir = wine_get_config_dir(); @@ -98,6 +121,14 @@ static char *strdupA( const char *str ) return ret; } +static const GUID *get_default_uuid( int letter ) +{ + static GUID guid; + + guid.Data4[7] = 'A' + letter; + return &guid; +} + /* read a Unix symlink; returned buffer must be freed by caller */ static char *read_symlink( const char *path ) { @@ -127,6 +158,20 @@ static char *read_symlink( const char *path ) } } +/* update a symlink if it changed; return TRUE if updated */ +static void update_symlink( const char *path, const char *dest, const char *orig_dest ) +{ + if (dest && dest[0]) + { + if (!orig_dest || strcmp( orig_dest, dest )) + { + unlink( path ); + symlink( dest, path ); + } + } + else unlink( path ); +} + /* send notification about a change to a given drive */ static void send_notify( int drive, int code ) { @@ -142,8 +187,8 @@ static void send_notify( int drive, int code ) WM_DEVICECHANGE, code, (LPARAM)&info ); } -/* create the disk device for a given drive */ -static NTSTATUS create_disk_device( const char *udi, enum device_type type, struct dos_drive **drive_ret ) +/* create the disk device for a given volume */ +static NTSTATUS create_disk_device( enum device_type type, struct disk_device **device_ret ) { static const WCHAR harddiskvolW[] = {'\\','D','e','v','i','c','e', '\\','H','a','r','d','d','i','s','k','V','o','l','u','m','e','%','u',0}; @@ -158,7 +203,7 @@ static NTSTATUS create_disk_device( const char *udi, enum device_type type, stru const WCHAR *format = NULL; UNICODE_STRING name; DEVICE_OBJECT *dev_obj; - struct dos_drive *drive; + struct disk_device *device; switch(type) { @@ -188,43 +233,31 @@ static NTSTATUS create_disk_device( const char *udi, enum device_type type, stru { sprintfW( name.Buffer, format, i ); name.Length = strlenW(name.Buffer) * sizeof(WCHAR); - status = IoCreateDevice( harddisk_driver, sizeof(*drive), &name, 0, 0, FALSE, &dev_obj ); + status = IoCreateDevice( harddisk_driver, sizeof(*device), &name, 0, 0, FALSE, &dev_obj ); if (status != STATUS_OBJECT_NAME_COLLISION) break; } if (!status) { - drive = dev_obj->DeviceExtension; - drive->drive = -1; - drive->device = dev_obj; - drive->name = name; - drive->type = type; - drive->dosdev = NULL; - drive->volume = NULL; - drive->unix_device = NULL; - drive->unix_mount = NULL; - drive->symlink.Buffer = NULL; - if (udi) - { - if (!(drive->udi = HeapAlloc( GetProcessHeap(), 0, strlen(udi)+1 ))) - { - RtlFreeUnicodeString( &name ); - IoDeleteDevice( drive->device ); - return STATUS_NO_MEMORY; - } - strcpy( drive->udi, udi ); - } + device = dev_obj->DeviceExtension; + device->dev_obj = dev_obj; + device->name = name; + device->type = type; + device->unix_device = NULL; + device->unix_mount = NULL; + device->symlink.Buffer = NULL; + switch (type) { case DEVICE_FLOPPY: case DEVICE_RAMDISK: - drive->devnum.DeviceType = FILE_DEVICE_DISK; - drive->devnum.DeviceNumber = i; - drive->devnum.PartitionNumber = ~0u; + device->devnum.DeviceType = FILE_DEVICE_DISK; + device->devnum.DeviceNumber = i; + device->devnum.PartitionNumber = ~0u; break; case DEVICE_CDROM: - drive->devnum.DeviceType = FILE_DEVICE_CD_ROM; - drive->devnum.DeviceNumber = i; - drive->devnum.PartitionNumber = ~0u; + device->devnum.DeviceType = FILE_DEVICE_CD_ROM; + device->devnum.DeviceNumber = i; + device->devnum.PartitionNumber = ~0u; break; case DEVICE_UNKNOWN: case DEVICE_HARDDISK: @@ -237,21 +270,20 @@ static NTSTATUS create_disk_device( const char *udi, enum device_type type, stru { sprintfW( symlink.Buffer, physdriveW, i ); symlink.Length = strlenW(symlink.Buffer) * sizeof(WCHAR); - if (!IoCreateSymbolicLink( &symlink, &name )) drive->symlink = symlink; + if (!IoCreateSymbolicLink( &symlink, &name )) device->symlink = symlink; } - drive->devnum.DeviceType = FILE_DEVICE_DISK; - drive->devnum.DeviceNumber = i; - drive->devnum.PartitionNumber = 0; + device->devnum.DeviceType = FILE_DEVICE_DISK; + device->devnum.DeviceNumber = i; + device->devnum.PartitionNumber = 0; } break; case DEVICE_HARDDISK_VOL: - drive->devnum.DeviceType = FILE_DEVICE_DISK; - drive->devnum.DeviceNumber = 0; - drive->devnum.PartitionNumber = i; + device->devnum.DeviceType = FILE_DEVICE_DISK; + device->devnum.DeviceNumber = 0; + device->devnum.PartitionNumber = i; break; } - list_add_tail( &drives_list, &drive->entry ); - *drive_ret = drive; + *device_ret = device; TRACE( "created device %s\n", debugstr_w(name.Buffer) ); } else @@ -263,42 +295,220 @@ static NTSTATUS create_disk_device( const char *udi, enum device_type type, stru } /* delete the disk device for a given drive */ -static void delete_disk_device( struct dos_drive *drive ) +static void delete_disk_device( struct disk_device *device ) +{ + TRACE( "deleting device %s\n", debugstr_w(device->name.Buffer) ); + if (device->symlink.Buffer) + { + IoDeleteSymbolicLink( &device->symlink ); + RtlFreeUnicodeString( &device->symlink ); + } + RtlFreeHeap( GetProcessHeap(), 0, device->unix_device ); + RtlFreeHeap( GetProcessHeap(), 0, device->unix_mount ); + RtlFreeUnicodeString( &device->name ); + IoDeleteDevice( device->dev_obj ); +} + +/* grab another reference to a volume */ +static unsigned int grab_volume( struct volume *volume ) +{ + return ++volume->ref; +} + +/* release a volume and delete the corresponding disk device when refcount is 0 */ +static unsigned int release_volume( struct volume *volume ) +{ + unsigned int ret = --volume->ref; + + TRACE( "%s udi %s count now %u\n", debugstr_guid(&volume->guid), debugstr_a(volume->udi), ret ); + if (!ret) + { + assert( !volume->udi ); + list_remove( &volume->entry ); + if (volume->mount) delete_mount_point( volume->mount ); + delete_disk_device( volume->device ); + RtlFreeHeap( GetProcessHeap(), 0, volume ); + } + return ret; +} + +/* set the volume udi */ +static void set_volume_udi( struct volume *volume, const char *udi ) +{ + if (udi) + { + assert( !volume->udi ); + /* having a udi means the HAL side holds an extra reference */ + if ((volume->udi = strdupA( udi ))) grab_volume( volume ); + } + else if (volume->udi) + { + RtlFreeHeap( GetProcessHeap(), 0, volume->udi ); + volume->udi = NULL; + release_volume( volume ); + } +} + +/* create a disk volume */ +static NTSTATUS create_volume( const char *udi, enum device_type type, struct volume **volume_ret ) +{ + struct volume *volume; + NTSTATUS status; + + if (!(volume = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*volume) ))) + return STATUS_NO_MEMORY; + + if (!(status = create_disk_device( type, &volume->device ))) + { + if (udi) set_volume_udi( volume, udi ); + list_add_tail( &volumes_list, &volume->entry ); + *volume_ret = volume; + } + else RtlFreeHeap( GetProcessHeap(), 0, volume ); + + return status; +} + +/* create the disk device for a given volume */ +static NTSTATUS create_dos_device( struct volume *volume, const char *udi, int letter, + enum device_type type, struct dos_drive **drive_ret ) +{ + struct dos_drive *drive; + NTSTATUS status; + + if (!(drive = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*drive) ))) return STATUS_NO_MEMORY; + drive->drive = letter; + drive->mount = NULL; + + if (volume) + { + if (udi) set_volume_udi( volume, udi ); + drive->volume = volume; + status = STATUS_SUCCESS; + } + else status = create_volume( udi, type, &drive->volume ); + + if (status == STATUS_SUCCESS) + { + grab_volume( drive->volume ); + list_add_tail( &drives_list, &drive->entry ); + *drive_ret = drive; + } + else RtlFreeHeap( GetProcessHeap(), 0, drive ); + + return status; +} + +/* delete the disk device for a given drive */ +static void delete_dos_device( struct dos_drive *drive ) { - TRACE( "deleting device %s\n", debugstr_w(drive->name.Buffer) ); list_remove( &drive->entry ); - if (drive->dosdev) delete_mount_point( drive->dosdev ); - if (drive->volume) delete_mount_point( drive->volume ); - if (drive->symlink.Buffer) - { - IoDeleteSymbolicLink( &drive->symlink ); - RtlFreeUnicodeString( &drive->symlink ); - } - RtlFreeHeap( GetProcessHeap(), 0, drive->unix_device ); - RtlFreeHeap( GetProcessHeap(), 0, drive->unix_mount ); - RtlFreeHeap( GetProcessHeap(), 0, drive->udi ); - RtlFreeUnicodeString( &drive->name ); - IoDeleteDevice( drive->device ); + if (drive->mount) delete_mount_point( drive->mount ); + release_volume( drive->volume ); + RtlFreeHeap( GetProcessHeap(), 0, drive ); } -/* set or change the drive letter for an existing drive */ -static void set_drive_letter( struct dos_drive *drive, int letter ) +/* find a volume that matches the parameters */ +static struct volume *find_matching_volume( const char *udi, const char *device, + const char *mount_point, enum device_type type ) +{ + struct volume *volume; + struct disk_device *disk_device; + + LIST_FOR_EACH_ENTRY( volume, &volumes_list, struct volume, entry ) + { + /* when we have a udi we only match drives added manually */ + if (udi && volume->udi) continue; + /* and when we don't have a udi we only match dynamic drives */ + if (!udi && !volume->udi) continue; + + disk_device = volume->device; + if (disk_device->type != type) continue; + if (device && disk_device->unix_device && strcmp( device, disk_device->unix_device )) continue; + if (mount_point && disk_device->unix_mount && strcmp( mount_point, disk_device->unix_mount )) continue; + TRACE( "found matching volume %s for device %s mount %s type %u\n", + debugstr_guid(&volume->guid), debugstr_a(device), debugstr_a(mount_point), type ); + return volume; + } + return NULL; +} + +/* change the information for an existing volume */ +static NTSTATUS set_volume_info( struct volume *volume, struct dos_drive *drive, const char *device, + const char *mount_point, enum device_type type, const GUID *guid ) { void *id = NULL; unsigned int id_len = 0; + struct disk_device *disk_device = volume->device; + NTSTATUS status; - if (drive->drive == letter) return; - if (drive->dosdev) delete_mount_point( drive->dosdev ); - if (drive->volume) delete_mount_point( drive->volume ); - drive->drive = letter; - if (letter == -1) return; - if (drive->unix_mount) + if (type != disk_device->type) + { + if ((status = create_disk_device( type, &disk_device ))) return status; + if (volume->mount) + { + delete_mount_point( volume->mount ); + volume->mount = NULL; + } + if (drive && drive->mount) + { + delete_mount_point( drive->mount ); + drive->mount = NULL; + } + delete_disk_device( volume->device ); + volume->device = disk_device; + } + else + { + RtlFreeHeap( GetProcessHeap(), 0, disk_device->unix_device ); + RtlFreeHeap( GetProcessHeap(), 0, disk_device->unix_mount ); + } + disk_device->unix_device = strdupA( device ); + disk_device->unix_mount = strdupA( mount_point ); + + if (guid && memcmp( &volume->guid, guid, sizeof(volume->guid) )) { - id = drive->unix_mount; - id_len = strlen( drive->unix_mount ) + 1; + volume->guid = *guid; + if (volume->mount) + { + delete_mount_point( volume->mount ); + volume->mount = NULL; + } + } + + if (!volume->mount) + volume->mount = add_volume_mount_point( disk_device->dev_obj, &disk_device->name, &volume->guid ); + if (drive && !drive->mount) + drive->mount = add_dosdev_mount_point( disk_device->dev_obj, &disk_device->name, drive->drive ); + + if (disk_device->unix_mount) + { + id = disk_device->unix_mount; + id_len = strlen( disk_device->unix_mount ) + 1; + } + if (volume->mount) set_mount_point_id( volume->mount, id, id_len ); + if (drive && drive->mount) set_mount_point_id( drive->mount, id, id_len ); + + return STATUS_SUCCESS; +} + +/* change the drive letter or volume for an existing drive */ +static void set_drive_info( struct dos_drive *drive, int letter, struct volume *volume ) +{ + if (drive->drive != letter) + { + if (drive->mount) delete_mount_point( drive->mount ); + drive->mount = NULL; + drive->drive = letter; + } + if (drive->volume != volume) + { + if (drive->mount) delete_mount_point( drive->mount ); + drive->mount = NULL; + grab_volume( volume ); + release_volume( drive->volume ); + drive->volume = volume; } - drive->dosdev = add_dosdev_mount_point( drive->device, &drive->name, letter, id, id_len ); - drive->volume = add_volume_mount_point( drive->device, &drive->name, letter, id, id_len ); } static inline int is_valid_device( struct stat *st ) @@ -385,47 +595,12 @@ done: return drive; } -static BOOL set_unix_mount_point( struct dos_drive *drive, const char *mount_point ) -{ - char *path, *p; - BOOL modified = FALSE; - - if (!(path = get_dosdevices_path( &p ))) return FALSE; - p[0] = 'a' + drive->drive; - p[2] = 0; - - if (mount_point && mount_point[0]) - { - /* try to avoid unlinking if already set correctly */ - if (!drive->unix_mount || strcmp( drive->unix_mount, mount_point )) - { - unlink( path ); - symlink( mount_point, path ); - modified = TRUE; - } - RtlFreeHeap( GetProcessHeap(), 0, drive->unix_mount ); - drive->unix_mount = strdupA( mount_point ); - if (drive->dosdev) set_mount_point_id( drive->dosdev, mount_point, strlen(mount_point) + 1 ); - if (drive->volume) set_mount_point_id( drive->volume, mount_point, strlen(mount_point) + 1 ); - } - else - { - if (unlink( path ) != -1) modified = TRUE; - RtlFreeHeap( GetProcessHeap(), 0, drive->unix_mount ); - drive->unix_mount = NULL; - if (drive->dosdev) set_mount_point_id( drive->dosdev, NULL, 0 ); - if (drive->volume) set_mount_point_id( drive->volume, NULL, 0 ); - } - - HeapFree( GetProcessHeap(), 0, path ); - return modified; -} - /* create devices for mapped drives */ static void create_drive_devices(void) { char *path, *p, *link, *device; struct dos_drive *drive; + struct volume *volume; unsigned int i; HKEY drives_key; enum device_type drive_type; @@ -462,11 +637,12 @@ static void create_drive_devices(void) } } - if (!create_disk_device( NULL, drive_type, &drive )) + volume = find_matching_volume( NULL, device, link, drive_type ); + if (!create_dos_device( volume, NULL, i, drive_type, &drive )) { - drive->unix_mount = link; - drive->unix_device = device; - set_drive_letter( drive, i ); + /* don't reset uuid if we used an existing volume */ + const GUID *guid = volume ? NULL : get_default_uuid(i); + set_volume_info( drive->volume, drive, device, link, drive_type, guid ); } else { @@ -478,139 +654,217 @@ static void create_drive_devices(void) RtlFreeHeap( GetProcessHeap(), 0, path ); } +/* create a new disk volume */ +NTSTATUS add_volume( const char *udi, const char *device, const char *mount_point, + enum device_type type, const GUID *guid ) +{ + struct volume *volume; + NTSTATUS status = STATUS_SUCCESS; + + TRACE( "adding %s device %s mount %s type %u uuid %s\n", debugstr_a(udi), + debugstr_a(device), debugstr_a(mount_point), type, debugstr_guid(guid) ); + + EnterCriticalSection( &device_section ); + LIST_FOR_EACH_ENTRY( volume, &volumes_list, struct volume, entry ) + if (volume->udi && !strcmp( udi, volume->udi )) goto found; + + /* udi not found, search for a non-dynamic volume */ + if ((volume = find_matching_volume( udi, device, mount_point, type ))) set_volume_udi( volume, udi ); + else status = create_volume( udi, type, &volume ); + +found: + if (!status) status = set_volume_info( volume, NULL, device, mount_point, type, guid ); + LeaveCriticalSection( &device_section ); + return status; +} + +/* create a new disk volume */ +NTSTATUS remove_volume( const char *udi ) +{ + NTSTATUS status = STATUS_NO_SUCH_DEVICE; + struct volume *volume; + + EnterCriticalSection( &device_section ); + LIST_FOR_EACH_ENTRY( volume, &volumes_list, struct volume, entry ) + { + if (!volume->udi || strcmp( udi, volume->udi )) continue; + set_volume_udi( volume, NULL ); + status = STATUS_SUCCESS; + break; + } + LeaveCriticalSection( &device_section ); + return status; +} + + /* create a new dos drive */ NTSTATUS add_dos_device( int letter, const char *udi, const char *device, - const char *mount_point, enum device_type type ) + const char *mount_point, enum device_type type, const GUID *guid ) { + char *path, *p; + HKEY hkey; + NTSTATUS status = STATUS_SUCCESS; struct dos_drive *drive, *next; + struct volume *volume; + int notify = -1; + + if (!(path = get_dosdevices_path( &p ))) return STATUS_NO_MEMORY; + + EnterCriticalSection( &device_section ); + volume = find_matching_volume( udi, device, mount_point, type ); if (letter == -1) /* auto-assign a letter */ { letter = add_drive( device, type ); - if (letter == -1) return STATUS_OBJECT_NAME_COLLISION; + if (letter == -1) + { + status = STATUS_OBJECT_NAME_COLLISION; + goto done; + } + + LIST_FOR_EACH_ENTRY_SAFE( drive, next, &drives_list, struct dos_drive, entry ) + { + if (drive->volume->udi && !strcmp( udi, drive->volume->udi )) goto found; + if (drive->drive == letter) delete_dos_device( drive ); + } } else /* simply reset the device symlink */ { - char *path, *p; + LIST_FOR_EACH_ENTRY( drive, &drives_list, struct dos_drive, entry ) + if (drive->drive == letter) break; - if (!(path = get_dosdevices_path( &p ))) return STATUS_NO_MEMORY; *p = 'a' + letter; - unlink( path ); - if (device) symlink( device, path ); - } - - LIST_FOR_EACH_ENTRY_SAFE( drive, next, &drives_list, struct dos_drive, entry ) - { - if (udi && drive->udi && !strcmp( udi, drive->udi )) + if (&drive->entry == &drives_list) update_symlink( path, device, NULL ); + else { - if (type == drive->type) goto found; - delete_disk_device( drive ); - continue; + update_symlink( path, device, drive->volume->device->unix_device ); + delete_dos_device( drive ); } - if (drive->drive == letter) delete_disk_device( drive ); } - if (create_disk_device( udi, type, &drive )) return STATUS_NO_MEMORY; + if ((status = create_dos_device( volume, udi, letter, type, &drive ))) goto done; found: - RtlFreeHeap( GetProcessHeap(), 0, drive->unix_device ); - drive->unix_device = strdupA( device ); - set_drive_letter( drive, letter ); - set_unix_mount_point( drive, mount_point ); - - if (drive->drive != -1) - { - HKEY hkey; + if (!guid && !volume) guid = get_default_uuid( letter ); + if (!volume) volume = drive->volume; + set_drive_info( drive, letter, volume ); + p[0] = 'a' + drive->drive; + p[2] = 0; + update_symlink( path, mount_point, volume->device->unix_mount ); + set_volume_info( volume, drive, device, mount_point, type, guid ); - TRACE( "added device %c: udi %s for %s on %s type %u\n", - 'a' + drive->drive, wine_dbgstr_a(udi), wine_dbgstr_a(device), - wine_dbgstr_a(mount_point), type ); + TRACE( "added device %c: udi %s for %s on %s type %u\n", + 'a' + drive->drive, wine_dbgstr_a(udi), wine_dbgstr_a(device), + wine_dbgstr_a(mount_point), type ); - /* hack: force the drive type in the registry */ - if (!RegCreateKeyW( HKEY_LOCAL_MACHINE, drives_keyW, &hkey )) - { - const WCHAR *type_name = drive_types[type]; - WCHAR name[3] = {'a',':',0}; + /* hack: force the drive type in the registry */ + if (!RegCreateKeyW( HKEY_LOCAL_MACHINE, drives_keyW, &hkey )) + { + const WCHAR *type_name = drive_types[type]; + WCHAR name[3] = {'a',':',0}; + + name[0] += drive->drive; + if (!type_name[0] && type == DEVICE_HARDDISK) type_name = drive_types[DEVICE_FLOPPY]; + if (type_name[0]) + RegSetValueExW( hkey, name, 0, REG_SZ, (const BYTE *)type_name, + (strlenW(type_name) + 1) * sizeof(WCHAR) ); + else + RegDeleteValueW( hkey, name ); + RegCloseKey( hkey ); + } - name[0] += drive->drive; - if (!type_name[0] && type == DEVICE_HARDDISK) type_name = drive_types[DEVICE_FLOPPY]; - if (type_name[0]) - RegSetValueExW( hkey, name, 0, REG_SZ, (const BYTE *)type_name, - (strlenW(type_name) + 1) * sizeof(WCHAR) ); - else - RegDeleteValueW( hkey, name ); - RegCloseKey( hkey ); - } + if (udi) notify = drive->drive; - if (udi) send_notify( drive->drive, DBT_DEVICEARRIVAL ); - } - return STATUS_SUCCESS; +done: + LeaveCriticalSection( &device_section ); + RtlFreeHeap( GetProcessHeap(), 0, path ); + if (notify != -1) send_notify( notify, DBT_DEVICEARRIVAL ); + return status; } /* remove an existing dos drive, by letter or udi */ NTSTATUS remove_dos_device( int letter, const char *udi ) { + NTSTATUS status = STATUS_NO_SUCH_DEVICE; HKEY hkey; struct dos_drive *drive; + char *path, *p; + int notify = -1; + EnterCriticalSection( &device_section ); LIST_FOR_EACH_ENTRY( drive, &drives_list, struct dos_drive, entry ) { - if (letter != -1 && drive->drive != letter) continue; if (udi) { - if (!drive->udi) continue; - if (strcmp( udi, drive->udi )) continue; + if (!drive->volume->udi) continue; + if (strcmp( udi, drive->volume->udi )) continue; + set_volume_udi( drive->volume, NULL ); } + else if (drive->drive != letter) continue; - if (drive->drive != -1) + if ((path = get_dosdevices_path( &p ))) { - BOOL modified = set_unix_mount_point( drive, NULL ); - - /* clear the registry key too */ - if (!RegOpenKeyW( HKEY_LOCAL_MACHINE, drives_keyW, &hkey )) - { - WCHAR name[3] = {'a',':',0}; - name[0] += drive->drive; - RegDeleteValueW( hkey, name ); - RegCloseKey( hkey ); - } + p[0] = 'a' + drive->drive; + p[2] = 0; + unlink( path ); + RtlFreeHeap( GetProcessHeap(), 0, path ); + } - if (modified && udi) send_notify( drive->drive, DBT_DEVICEREMOVECOMPLETE ); + /* clear the registry key too */ + if (!RegOpenKeyW( HKEY_LOCAL_MACHINE, drives_keyW, &hkey )) + { + WCHAR name[3] = {'a',':',0}; + name[0] += drive->drive; + RegDeleteValueW( hkey, name ); + RegCloseKey( hkey ); } - delete_disk_device( drive ); - return STATUS_SUCCESS; + + if (udi && drive->volume->device->unix_mount) notify = drive->drive; + + delete_dos_device( drive ); + status = STATUS_SUCCESS; + break; } - return STATUS_NO_SUCH_DEVICE; + LeaveCriticalSection( &device_section ); + if (notify != -1) send_notify( notify, DBT_DEVICEREMOVECOMPLETE ); + return status; } /* query information about an existing dos drive, by letter or udi */ -NTSTATUS query_dos_device( int letter, enum device_type *type, - const char **device, const char **mount_point ) +NTSTATUS query_dos_device( int letter, enum device_type *type, char **device, char **mount_point ) { + NTSTATUS status = STATUS_NO_SUCH_DEVICE; struct dos_drive *drive; + struct disk_device *disk_device; + EnterCriticalSection( &device_section ); LIST_FOR_EACH_ENTRY( drive, &drives_list, struct dos_drive, entry ) { if (drive->drive != letter) continue; - if (type) *type = drive->type; - if (device) *device = drive->unix_device; - if (mount_point) *mount_point = drive->unix_mount; - return STATUS_SUCCESS; + disk_device = drive->volume->device; + if (type) *type = disk_device->type; + if (device) *device = strdupA( disk_device->unix_device ); + if (mount_point) *mount_point = strdupA( disk_device->unix_mount ); + status = STATUS_SUCCESS; + break; } - return STATUS_NO_SUCH_DEVICE; + LeaveCriticalSection( &device_section ); + return status; } /* handler for ioctls on the harddisk device */ static NTSTATUS WINAPI harddisk_ioctl( DEVICE_OBJECT *device, IRP *irp ) { IO_STACK_LOCATION *irpsp = irp->Tail.Overlay.s.u.CurrentStackLocation; - struct dos_drive *drive = device->DeviceExtension; + struct disk_device *dev = device->DeviceExtension; TRACE( "ioctl %x insize %u outsize %u\n", irpsp->Parameters.DeviceIoControl.IoControlCode, irpsp->Parameters.DeviceIoControl.InputBufferLength, irpsp->Parameters.DeviceIoControl.OutputBufferLength ); + EnterCriticalSection( &device_section ); + switch(irpsp->Parameters.DeviceIoControl.IoControlCode) { case IOCTL_DISK_GET_DRIVE_GEOMETRY: @@ -619,7 +873,7 @@ static NTSTATUS WINAPI harddisk_ioctl( DEVICE_OBJECT *device, IRP *irp ) DWORD len = min( sizeof(info), irpsp->Parameters.DeviceIoControl.OutputBufferLength ); info.Cylinders.QuadPart = 10000; - info.MediaType = (drive->devnum.DeviceType == FILE_DEVICE_DISK) ? FixedMedia : RemovableMedia; + info.MediaType = (dev->devnum.DeviceType == FILE_DEVICE_DISK) ? FixedMedia : RemovableMedia; info.TracksPerCylinder = 255; info.SectorsPerTrack = 63; info.BytesPerSector = 512; @@ -630,9 +884,9 @@ static NTSTATUS WINAPI harddisk_ioctl( DEVICE_OBJECT *device, IRP *irp ) } case IOCTL_STORAGE_GET_DEVICE_NUMBER: { - DWORD len = min( sizeof(drive->devnum), irpsp->Parameters.DeviceIoControl.OutputBufferLength ); + DWORD len = min( sizeof(dev->devnum), irpsp->Parameters.DeviceIoControl.OutputBufferLength ); - memcpy( irp->MdlAddress->StartVa, &drive->devnum, len ); + memcpy( irp->MdlAddress->StartVa, &dev->devnum, len ); irp->IoStatus.Information = len; irp->IoStatus.u.Status = STATUS_SUCCESS; break; @@ -645,19 +899,21 @@ static NTSTATUS WINAPI harddisk_ioctl( DEVICE_OBJECT *device, IRP *irp ) irp->IoStatus.u.Status = STATUS_NOT_SUPPORTED; break; } + + LeaveCriticalSection( &device_section ); return irp->IoStatus.u.Status; } /* driver entry point for the harddisk driver */ NTSTATUS WINAPI harddisk_driver_entry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) { - struct dos_drive *drive; + struct disk_device *device; harddisk_driver = driver; driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = harddisk_ioctl; /* create a harddisk0 device that isn't assigned to any drive */ - create_disk_device( "harddisk0 placeholder", DEVICE_HARDDISK, &drive ); + create_disk_device( DEVICE_HARDDISK, &device ); create_drive_devices(); diff --git a/dlls/mountmgr.sys/diskarb.c b/dlls/mountmgr.sys/diskarb.c index 3296d0420cd..0c188ff2e0c 100644 --- a/dlls/mountmgr.sys/diskarb.c +++ b/dlls/mountmgr.sys/diskarb.c @@ -42,13 +42,17 @@ static void appeared_callback( DADiskRef disk, void *context ) const void *ref; char device[64]; char mount_point[PATH_MAX]; + GUID guid, *guid_ptr = NULL; enum device_type type = DEVICE_UNKNOWN; if (!dict) return; - /* ignore non-removable devices */ - if (!(ref = CFDictionaryGetValue( dict, CFSTR("DAMediaRemovable") )) || - !CFBooleanGetValue( ref )) goto done; + if ((ref = CFDictionaryGetValue( dict, CFSTR("DAVolumeUUID") ))) + { + CFUUIDBytes bytes = CFUUIDGetUUIDBytes( ref ); + memcpy( &guid, &bytes, sizeof(guid) ); + guid_ptr = &guid; + } /* get device name */ if (!(ref = CFDictionaryGetValue( dict, CFSTR("DAMediaBSDName") ))) goto done; @@ -67,9 +71,14 @@ static void appeared_callback( DADiskRef disk, void *context ) type = DEVICE_CDROM; } - TRACE( "got mount notification for '%s' on '%s'\n", device, mount_point ); + TRACE( "got mount notification for '%s' on '%s' uuid %s\n", + device, mount_point, wine_dbgstr_guid(guid_ptr) ); + + if ((ref = CFDictionaryGetValue( dict, CFSTR("DAMediaRemovable") )) && CFBooleanGetValue( ref )) + add_dos_device( -1, device, device, mount_point, type, guid_ptr ); + else + if (guid_ptr) add_volume( device, device, mount_point, DEVICE_HARDDISK_VOL, guid_ptr ); - add_dos_device( -1, device, device, mount_point, type ); done: CFRelease( dict ); } @@ -87,10 +96,6 @@ static void disappeared_callback( DADiskRef disk, void *context ) if (!dict) return; - /* ignore non-removable devices */ - if (!(ref = CFDictionaryGetValue( dict, CFSTR("DAMediaRemovable") )) || - !CFBooleanGetValue( ref )) goto done; - /* get device name */ if (!(ref = CFDictionaryGetValue( dict, CFSTR("DAMediaBSDName") ))) goto done; strcpy( device, "/dev/r" ); @@ -98,7 +103,11 @@ static void disappeared_callback( DADiskRef disk, void *context ) TRACE( "got unmount notification for '%s'\n", device ); - remove_dos_device( -1, device ); + if ((ref = CFDictionaryGetValue( dict, CFSTR("DAMediaRemovable") )) && CFBooleanGetValue( ref )) + remove_dos_device( -1, device ); + else + remove_volume( device ); + done: CFRelease( dict ); } diff --git a/dlls/mountmgr.sys/hal.c b/dlls/mountmgr.sys/hal.c index 310b1443756..82a70e9bfae 100644 --- a/dlls/mountmgr.sys/hal.c +++ b/dlls/mountmgr.sys/hal.c @@ -28,6 +28,7 @@ #include #include "mountmgr.h" +#include "winnls.h" #include "excpt.h" #include "wine/library.h" @@ -105,6 +106,33 @@ static LONG WINAPI assert_fault(EXCEPTION_POINTERS *eptr) return EXCEPTION_CONTINUE_SEARCH; } +static GUID *parse_uuid( GUID *guid, const char *str ) +{ + /* standard uuid format */ + if (strlen(str) == 36) + { + UNICODE_STRING strW; + WCHAR buffer[39]; + + if (MultiByteToWideChar( CP_UNIXCP, 0, str, 36, buffer + 1, 36 )) + { + buffer[0] = '{'; + buffer[37] = '}'; + buffer[38] = 0; + RtlInitUnicodeString( &strW, buffer ); + if (!RtlGUIDFromString( &strW, guid )) return guid; + } + } + + /* check for xxxx-xxxx format (FAT serial number) */ + if (strlen(str) == 9 && str[4] == '-') + { + memset( guid, 0, sizeof(*guid) ); + if (sscanf( str, "%hx-%hx", &guid->Data2, &guid->Data3 ) == 2) return guid; + } + return NULL; +} + /* HAL callback for new device */ static void new_device( LibHalContext *ctx, const char *udi ) { @@ -113,6 +141,8 @@ static void new_device( LibHalContext *ctx, const char *udi ) char *mount_point = NULL; char *device = NULL; char *type = NULL; + char *uuid_str = NULL; + GUID guid, *guid_ptr = NULL; enum device_type drive_type; p_dbus_error_init( &error ); @@ -126,8 +156,10 @@ static void new_device( LibHalContext *ctx, const char *udi ) if (!(parent = p_libhal_device_get_property_string( ctx, udi, "info.parent", &error ))) goto done; - if (!p_libhal_device_get_property_bool( ctx, parent, "storage.removable", &error )) - goto done; + if (!(uuid_str = p_libhal_device_get_property_string( ctx, udi, "volume.uuid", &error ))) + p_dbus_error_free( &error ); /* ignore error */ + else + guid_ptr = parse_uuid( &guid, uuid_str ); if (!(type = p_libhal_device_get_property_string( ctx, parent, "storage.drive_type", &error ))) p_dbus_error_free( &error ); /* ignore error */ @@ -136,15 +168,19 @@ static void new_device( LibHalContext *ctx, const char *udi ) else if (type && !strcmp( type, "floppy" )) drive_type = DEVICE_FLOPPY; else drive_type = DEVICE_UNKNOWN; - add_dos_device( -1, udi, device, mount_point, drive_type ); - - /* add property watch for mount point */ - p_libhal_device_add_property_watch( ctx, udi, &error ); + if (p_libhal_device_get_property_bool( ctx, parent, "storage.removable", &error )) + { + add_dos_device( -1, udi, device, mount_point, drive_type, guid_ptr ); + /* add property watch for mount point */ + p_libhal_device_add_property_watch( ctx, udi, &error ); + } + else if (guid_ptr) add_volume( udi, device, mount_point, DEVICE_HARDDISK_VOL, guid_ptr ); done: if (type) p_libhal_free_string( type ); if (parent) p_libhal_free_string( parent ); if (device) p_libhal_free_string( device ); + if (uuid_str) p_libhal_free_string( uuid_str ); if (mount_point) p_libhal_free_string( mount_point ); p_dbus_error_free( &error ); } @@ -162,6 +198,7 @@ static void removed_device( LibHalContext *ctx, const char *udi ) p_libhal_device_remove_property_watch( ctx, udi, &error ); p_dbus_error_free( &error ); } + else remove_volume( udi ); } /* HAL callback for property changes */ diff --git a/dlls/mountmgr.sys/mountmgr.c b/dlls/mountmgr.sys/mountmgr.c index d2b15156355..a80d4924ebf 100644 --- a/dlls/mountmgr.sys/mountmgr.c +++ b/dlls/mountmgr.sys/mountmgr.c @@ -61,7 +61,7 @@ void set_mount_point_id( struct mount_point *mount, const void *id, unsigned int } static struct mount_point *add_mount_point( DEVICE_OBJECT *device, UNICODE_STRING *device_name, - const WCHAR *link, const void *id, unsigned int id_len ) + const WCHAR *link ) { struct mount_point *mount; WCHAR *str; @@ -83,7 +83,6 @@ static struct mount_point *add_mount_point( DEVICE_OBJECT *device, UNICODE_STRIN list_add_tail( &mount_points_list, &mount->entry ); IoCreateSymbolicLink( &mount->link, device_name ); - set_mount_point_id( mount, id, id_len ); TRACE( "created %s id %s for %s\n", debugstr_w(mount->link.Buffer), debugstr_a(mount->id), debugstr_w(mount->name.Buffer) ); @@ -91,33 +90,29 @@ static struct mount_point *add_mount_point( DEVICE_OBJECT *device, UNICODE_STRIN } /* create the DosDevices mount point symlink for a new device */ -struct mount_point *add_dosdev_mount_point( DEVICE_OBJECT *device, UNICODE_STRING *device_name, - int drive, const void *id, unsigned int id_len ) +struct mount_point *add_dosdev_mount_point( DEVICE_OBJECT *device, UNICODE_STRING *device_name, int drive ) { static const WCHAR driveW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','%','c',':',0}; WCHAR link[sizeof(driveW)]; sprintfW( link, driveW, 'A' + drive ); - return add_mount_point( device, device_name, link, id, id_len ); + return add_mount_point( device, device_name, link ); } /* create the Volume mount point symlink for a new device */ struct mount_point *add_volume_mount_point( DEVICE_OBJECT *device, UNICODE_STRING *device_name, - int drive, const void *id, unsigned int id_len ) + const GUID *guid ) { static const WCHAR volumeW[] = {'\\','?','?','\\','V','o','l','u','m','e','{', '%','0','8','x','-','%','0','4','x','-','%','0','4','x','-', '%','0','2','x','%','0','2','x','-','%','0','2','x','%','0','2','x', '%','0','2','x','%','0','2','x','%','0','2','x','%','0','2','x','}',0}; WCHAR link[sizeof(volumeW)]; - GUID guid; - - memset( &guid, 0, sizeof(guid) ); /* FIXME */ - guid.Data4[7] = 'A' + drive; - sprintfW( link, volumeW, guid.Data1, guid.Data2, guid.Data3, - guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], - guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); - return add_mount_point( device, device_name, link, id, id_len ); + + sprintfW( link, volumeW, guid->Data1, guid->Data2, guid->Data3, + guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], + guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); + return add_mount_point( device, device_name, link ); } /* delete the mount point symlinks when a device goes away */ @@ -266,7 +261,7 @@ static NTSTATUS define_unix_drive( const void *in_buff, SIZE_T insize ) case DRIVE_RAMDISK: type = DEVICE_RAMDISK; break; case DRIVE_FIXED: type = DEVICE_HARDDISK_VOL; break; } - return add_dos_device( letter - 'a', NULL, device, mount_point, type ); + return add_dos_device( letter - 'a', NULL, device, mount_point, type, NULL ); } else { @@ -281,7 +276,7 @@ static NTSTATUS query_unix_drive( const void *in_buff, SIZE_T insize, { const struct mountmgr_unix_drive *input = in_buff; struct mountmgr_unix_drive *output = out_buff; - const char *device, *mount_point; + char *device, *mount_point; int letter = tolowerW( input->letter ); NTSTATUS status; DWORD size, type = DEVICE_UNKNOWN; @@ -319,7 +314,8 @@ static NTSTATUS query_unix_drive( const void *in_buff, SIZE_T insize, output->type = type; iosb->Information = FIELD_OFFSET( struct mountmgr_unix_drive, type ) + sizeof(output->type); } - return STATUS_MORE_ENTRIES; + status = STATUS_MORE_ENTRIES; + goto done; } output->size = size; output->letter = letter; @@ -346,7 +342,10 @@ static NTSTATUS query_unix_drive( const void *in_buff, SIZE_T insize, letter, debugstr_a(device), debugstr_a(mount_point), type ); iosb->Information = ptr - (char *)output; - return STATUS_SUCCESS; +done: + RtlFreeHeap( GetProcessHeap(), 0, device ); + RtlFreeHeap( GetProcessHeap(), 0, mount_point ); + return status; } /* handler for ioctls on the mount manager device */ diff --git a/dlls/mountmgr.sys/mountmgr.h b/dlls/mountmgr.sys/mountmgr.h index e8f7d5d7c7c..3d57ba146ac 100644 --- a/dlls/mountmgr.sys/mountmgr.h +++ b/dlls/mountmgr.sys/mountmgr.h @@ -51,11 +51,13 @@ enum device_type DEVICE_RAMDISK }; +extern NTSTATUS add_volume( const char *udi, const char *device, const char *mount_point, + enum device_type type, const GUID *guid ); +extern NTSTATUS remove_volume( const char *udi ); extern NTSTATUS add_dos_device( int letter, const char *udi, const char *device, - const char *mount_point, enum device_type type ); + const char *mount_point, enum device_type type, const GUID *guid ); extern NTSTATUS remove_dos_device( int letter, const char *udi ); -extern NTSTATUS query_dos_device( int letter, enum device_type *type, - const char **device, const char **mount_point ); +extern NTSTATUS query_dos_device( int letter, enum device_type *type, char **device, char **mount_point ); extern NTSTATUS WINAPI harddisk_driver_entry( DRIVER_OBJECT *driver, UNICODE_STRING *path ); /* mount point functions */ @@ -63,8 +65,8 @@ extern NTSTATUS WINAPI harddisk_driver_entry( DRIVER_OBJECT *driver, UNICODE_STR struct mount_point; extern struct mount_point *add_dosdev_mount_point( DEVICE_OBJECT *device, UNICODE_STRING *device_name, - int drive, const void *id, unsigned int id_len ); + int drive ); extern struct mount_point *add_volume_mount_point( DEVICE_OBJECT *device, UNICODE_STRING *device_name, - int drive, const void *id, unsigned int id_len ); + const GUID *guid ); extern void delete_mount_point( struct mount_point *mount ); extern void set_mount_point_id( struct mount_point *mount, const void *id, unsigned int id_len ); diff --git a/dlls/mpr/mpr_Ru.rc b/dlls/mpr/mpr_Ru.rc index 5995b4910d6..3d17a0a93a5 100644 --- a/dlls/mpr/mpr_Ru.rc +++ b/dlls/mpr/mpr_Ru.rc @@ -20,29 +20,32 @@ #include "mprres.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE { - IDS_ENTIRENETWORK "Âñÿ ñåòü" + IDS_ENTIRENETWORK "Вся сеть" } IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ââåäèòå ñåòåâîé ïàðîëü" +CAPTION "Введите сетевой пароль" FONT 8, "MS Shell Dlg" { - LTEXT "Ââåäèòå âàøè èìÿ è ïàðîëü ïîëüçîâàòåëÿ:", IDC_EXPLAIN, 40, 6, 150, 15 - LTEXT "Ïðîêñè", -1, 40, 26, 50, 10 + LTEXT "Введите ваши имя и пароль пользователя:", IDC_EXPLAIN, 40, 6, 150, 15 + LTEXT "Прокси", -1, 40, 26, 50, 10 /* LTEXT "Realm", -1, 40, 46, 50, 10 */ - LTEXT "Èìÿ", -1, 40, 66, 50, 10 - LTEXT "Ïàðîëü", -1, 40, 86, 50, 10 + LTEXT "Имя", -1, 40, 66, 50, 10 + LTEXT "Пароль", -1, 40, 86, 50, 10 LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD - CHECKBOX "&Ñîõðàíèòü ýòîò ïàðîëü (íåáåçîïàñíî!)", IDC_SAVEPASSWORD, + CHECKBOX "&Сохранить этот пароль (небезопасно!)", IDC_SAVEPASSWORD, 80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "Îòìåíà", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP } diff --git a/dlls/msacm32/msacm_Ru.rc b/dlls/msacm32/msacm_Ru.rc index ea2a8893a53..a777034e00d 100644 --- a/dlls/msacm32/msacm_Ru.rc +++ b/dlls/msacm32/msacm_Ru.rc @@ -20,28 +20,31 @@ #include "wineacm.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Âûáîð çâóêà" +CAPTION "Выбор звука" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "&Èìÿ:", -1, 5, 5, 115, 8, NOT WS_GROUP + LTEXT "&Имя:", -1, 5, 5, 115, 8, NOT WS_GROUP COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Ñîõðàíèòü êàê...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 - PUSHBUTTON "&Óäàëèòü", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 + PUSHBUTTON "&Сохранить как...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 + PUSHBUTTON "&Удалить", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 - LTEXT "&Ôîðìàò:", -1, 5, 41, 44, 8, NOT WS_GROUP + LTEXT "&Формат:", -1, 5, 41, 44, 8, NOT WS_GROUP COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Ñâîéñòâà:", -1, 5, 59, 44, 8, NOT WS_GROUP + LTEXT "&Свойства:", -1, 5, 59, 44, 8, NOT WS_GROUP #if 0 COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, @@ -52,7 +55,7 @@ BEGIN CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP #endif DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14 - PUSHBUTTON "Îòìåíà", IDCANCEL, 92, 80, 40, 14 - PUSHBUTTON "&Ïîìîùü", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 + PUSHBUTTON "Отмена", IDCANCEL, 92, 80, 40, 14 + PUSHBUTTON "&Помощь", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 END diff --git a/dlls/mshtml/Ru.rc b/dlls/mshtml/Ru.rc index d6fbc2b50c8..7638d9b8e9d 100644 --- a/dlls/mshtml/Ru.rc +++ b/dlls/mshtml/Ru.rc @@ -18,39 +18,42 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE { - IDS_HTMLDISABLED " íàñòîÿùåå âðåìÿ îòîáðàæåíèå HTML âûêëþ÷åííî." - IDS_HTMLDOCUMENT "Äîêóìåíò HTML" - IDS_DOWNLOADING "Çàãðóçêà..." - IDS_INSTALLING "Óñòàíîâêà..." + IDS_HTMLDISABLED "В настоящее время отображение HTML выключенно." + IDS_HTMLDOCUMENT "Документ HTML" + IDS_DOWNLOADING "Загрузка..." + IDS_INSTALLING "Установка..." } ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 261, 85 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Óñòàíîâêà Wine Gecko" +CAPTION "Установка Wine Gecko" FONT 8, "MS Shell Dlg" { - LTEXT "Ýòà ïðîãðàììà ïûòàåòñÿ îòîáðàçèòü HTML ñòðàíèöó. Äëÿ å¸ îòîáðàæåíèÿ Wine íåîáõîäèìî " \ - "óñòàíîâèòü Gecko (Mozilla HTML engine). Íàæìèòå êíîïêó óñòàíîâèòü åñëè âû õîòèòå, ÷òî áû Wine " \ - "àâòîìàòè÷åñêè çàãðóçèë è óñòàíîâèë Gecko.", ID_DWL_STATUS, 10, 10, 240, 33, SS_LEFT - CONTROL "Ïðîãðåññ", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 46, 240, 12 - DEFPUSHBUTTON "&Óñòàíîâèòü", ID_DWL_INSTALL, 200, 63, 50, 15, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Îòìåíà", IDCANCEL, 140, 63, 50, 15, WS_GROUP | WS_TABSTOP + LTEXT "Эта программа пытается отобразить HTML страницу. Для её отображения Wine необходимо " \ + "установить Gecko (Mozilla HTML engine). Нажмите кнопку установить если вы хотите, что бы Wine " \ + "автоматически загрузил и установил Gecko.", ID_DWL_STATUS, 10, 10, 240, 33, SS_LEFT + CONTROL "Прогресс", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 46, 240, 12 + DEFPUSHBUTTON "&Установить", ID_DWL_INSTALL, 200, 63, 50, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Отмена", IDCANCEL, 140, 63, 50, 15, WS_GROUP | WS_TABSTOP } IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ññûëêà" +CAPTION "Ссылка" FONT 8, "MS Shell Dlg" { - GROUPBOX "Èíôîðìàöèÿ î ññûëêå", -1, 5, 5, 190, 55 - LTEXT "&Òèï:", -1, 10, 22, 20, 10 + GROUPBOX "Информация о ссылке", -1, 5, 5, 190, 55 + LTEXT "&Тип:", -1, 10, 22, 20, 10 COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS - LTEXT "&Àäðåñ:", -1, 10, 42, 20, 10 + LTEXT "&Адрес:", -1, 10, 42, 20, 10 EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP PUSHBUTTON "OK", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP } diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c index 305727629b3..548c50ca966 100644 --- a/dlls/mshtml/main.c +++ b/dlls/mshtml/main.c @@ -433,6 +433,8 @@ const char *debugstr_variant(const VARIANT *v) return wine_dbg_sprintf("{VT_DISPATCH: %p}", V_DISPATCH(v)); case VT_BOOL: return wine_dbg_sprintf("{VT_BOOL: %x}", V_BOOL(v)); + case VT_UINT: + return wine_dbg_sprintf("{VT_UINT: %u}", V_UINT(v)); default: return wine_dbg_sprintf("{vt %d}", V_VT(v)); } diff --git a/dlls/msrle32/msrle_En.rc b/dlls/msrle32/msrle_En.rc index becd9d936e4..e95f395a70e 100644 --- a/dlls/msrle32/msrle_En.rc +++ b/dlls/msrle32/msrle_En.rc @@ -1,7 +1,7 @@ /* * English resource file for MS-RLE * - * Copyright 2002 Michael Günnewig + * Copyright 2002 Michael Günnewig * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,11 +20,13 @@ #include "msrle_private.h" +#pragma code_page(65001) + LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE video codec" - IDS_ABOUT "Wine MS-RLE video codec\nCopyright 2002 by Michael Günnewig" + IDS_ABOUT "Wine MS-RLE video codec\nCopyright 2002 by Michael Günnewig" } diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index c4570286c0d..c7d931c2f42 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -1328,6 +1328,15 @@ NTSTATUS WINAPI NtPowerInformation( PowerCaps->DefaultLowLatencyWake = PowerSystemUnspecified; return STATUS_SUCCESS; } + case SystemExecutionState: { + PULONG ExecutionState = lpOutputBuffer; + FIXME("semi-stub: SystemExecutionState\n"); + if (lpInputBuffer != NULL) + return STATUS_INVALID_PARAMETER; + /* FIXME: The actual state should be the value set by SetThreadExecutionState which is not currently implemented. */ + *ExecutionState = ES_USER_PRESENT; + return STATUS_SUCCESS; + } default: /* FIXME: Needed by .NET Framework */ WARN("Unimplemented NtPowerInformation action: %d\n", InformationLevel); diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index 14359848a5e..44a25217128 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -1351,18 +1351,18 @@ static void test_CoGetContextToken(void) refs = IUnknown_AddRef((IUnknown *)token); ok(refs == 1, "Expected 1, got %u\n", refs); - refs = IUnknown_Release((IUnknown *)token); - ok(refs == 0, "Expected 0, got %u\n", refs); - hr = pCoGetObjectContext(&IID_IObjContext, (void **)&ctx); ok(hr == S_OK, "Expected S_OK, got 0x%08x\n", hr); todo_wine ok(ctx == (IObjContext *)token, "Expected interface pointers to be the same\n"); refs = IUnknown_AddRef((IUnknown *)ctx); - ok(refs == 2, "Expected 1, got %u\n", refs); + todo_wine ok(refs == 3, "Expected 3, got %u\n", refs); refs = IUnknown_Release((IUnknown *)ctx); - ok(refs == 1, "Expected 0, got %u\n", refs); + todo_wine ok(refs == 2, "Expected 2, got %u\n", refs); + + refs = IUnknown_Release((IUnknown *)token); + todo_wine ok(refs == 1, "Expected 1, got %u\n", refs); /* CoGetContextToken does not add a reference */ token = 0; @@ -1377,6 +1377,9 @@ static void test_CoGetContextToken(void) refs = IUnknown_Release((IUnknown *)ctx); ok(refs == 1, "Expected 0, got %u\n", refs); + refs = IUnknown_Release((IUnknown *)ctx); + ok(refs == 0, "Expected 0, got %u\n", refs); + CoUninitialize(); } diff --git a/dlls/oleacc/Makefile.in b/dlls/oleacc/Makefile.in index 3a2b0b7635a..1f961fa235c 100644 --- a/dlls/oleacc/Makefile.in +++ b/dlls/oleacc/Makefile.in @@ -16,7 +16,8 @@ RC_SRCS = \ oleacc_Ko.rc \ oleacc_Lt.rc \ oleacc_Nl.rc \ - oleacc_Pl.rc + oleacc_Pl.rc \ + oleacc_Pt.rc @MAKE_DLL_RULES@ diff --git a/dlls/oleacc/oleacc_Pt.rc b/dlls/oleacc/oleacc_Pt.rc new file mode 100644 index 00000000000..395324a4330 --- /dev/null +++ b/dlls/oleacc/oleacc_Pt.rc @@ -0,0 +1,94 @@ +/* + * Portuguese resources for oleacc + * + * Copyright 2009 Ricardo Filipe + * + * 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 "oleacc.h" + +#pragma code_page(65001) + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +STRINGTABLE DISCARDABLE +{ + 0 "objecto desconhecido" /* undocumented */ + ROLE_SYSTEM_TITLEBAR "barra de título" + ROLE_SYSTEM_MENUBAR "barra de menu" + ROLE_SYSTEM_SCROLLBAR "barra de scroll" + ROLE_SYSTEM_GRIP "grip" + ROLE_SYSTEM_SOUND "som" + ROLE_SYSTEM_CURSOR "cursor" + ROLE_SYSTEM_CARET "caret" + ROLE_SYSTEM_ALERT "alerta" + ROLE_SYSTEM_WINDOW "janela" + ROLE_SYSTEM_CLIENT "cliente" + ROLE_SYSTEM_MENUPOPUP "popup menu" + ROLE_SYSTEM_MENUITEM "item do menu" + ROLE_SYSTEM_TOOLTIP "dica" + ROLE_SYSTEM_APPLICATION "aplicação" + ROLE_SYSTEM_DOCUMENT "documento" + ROLE_SYSTEM_PANE "painel" + ROLE_SYSTEM_CHART "gráfico" + ROLE_SYSTEM_DIALOG "diálogo" + ROLE_SYSTEM_BORDER "margem" + ROLE_SYSTEM_GROUPING "agrupamento" + ROLE_SYSTEM_SEPARATOR "separador" + ROLE_SYSTEM_TOOLBAR "barra de ferramentas" + ROLE_SYSTEM_STATUSBAR "barra de estado" + ROLE_SYSTEM_TABLE "tabela" + ROLE_SYSTEM_COLUMNHEADER "cabeçalho da coluna" + ROLE_SYSTEM_ROWHEADER "cabeçalho da linha" + ROLE_SYSTEM_COLUMN "coluna" + ROLE_SYSTEM_ROW "linha" + ROLE_SYSTEM_CELL "célula" + ROLE_SYSTEM_LINK "ligação" + ROLE_SYSTEM_HELPBALLOON "balão de ajuda" + ROLE_SYSTEM_CHARACTER "caracter" + ROLE_SYSTEM_LIST "lista" + ROLE_SYSTEM_LISTITEM "item da lista" + ROLE_SYSTEM_OUTLINE "delinear" + ROLE_SYSTEM_OUTLINEITEM "item delinear" + ROLE_SYSTEM_PAGETAB "tab de página" + ROLE_SYSTEM_PROPERTYPAGE "página de propriedades" + ROLE_SYSTEM_INDICATOR "indicador" + ROLE_SYSTEM_GRAPHIC "gráfico" + ROLE_SYSTEM_STATICTEXT "texto estático" + ROLE_SYSTEM_TEXT "texto" + ROLE_SYSTEM_PUSHBUTTON "push button" + ROLE_SYSTEM_CHECKBUTTON "check button" + ROLE_SYSTEM_RADIOBUTTON "radio button" + ROLE_SYSTEM_COMBOBOX "combo box" + ROLE_SYSTEM_DROPLIST "drop down" + ROLE_SYSTEM_PROGRESSBAR "barra de progresso" + ROLE_SYSTEM_DIAL "dial" + ROLE_SYSTEM_HOTKEYFIELD "hot key field" + ROLE_SYSTEM_SLIDER "slider" + ROLE_SYSTEM_SPINBUTTON "spin box" + ROLE_SYSTEM_DIAGRAM "diagrama" + ROLE_SYSTEM_ANIMATION "animação" + ROLE_SYSTEM_EQUATION "equação" + ROLE_SYSTEM_BUTTONDROPDOWN "drop down button" + ROLE_SYSTEM_BUTTONMENU "menu button" + ROLE_SYSTEM_BUTTONDROPDOWNGRID "grid drop down button" + ROLE_SYSTEM_WHITESPACE "espaço em branco" + ROLE_SYSTEM_PAGETABLIST "page tab list" + ROLE_SYSTEM_CLOCK "relógio" + ROLE_SYSTEM_SPLITBUTTON "split button" + ROLE_SYSTEM_IPADDRESS "endereço IP" + ROLE_SYSTEM_OUTLINEBUTTON "outline button" +} diff --git a/dlls/oledlg/oledlg_Lt.rc b/dlls/oledlg/oledlg_Lt.rc index e8ac5f78dd1..961fd1d996f 100644 --- a/dlls/oledlg/oledlg_Lt.rc +++ b/dlls/oledlg/oledlg_Lt.rc @@ -52,7 +52,7 @@ END STRINGTABLE DISCARDABLE { - IDS_RESULTOBJDESC "Įterpia naują objektą '%s' į jūsų dokumentą" + IDS_RESULTOBJDESC "Įterpia naują objektą „%s“ į jūsų dokumentą" IDS_RESULTFILEOBJDESC "Įterpia failo turinį kaip objektą į jūsų dokumentą, kad galėtumėte jį aktyvuoti naudodami programą, kuri jį sukūrė." IDS_BROWSE "Parinkti" IDS_NOTOLEMOD "Panašu, kad failas nėra galiojantis OLE modulis. Nepavyko užregistruoti OLE valdiklio." diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index 14a72468ba9..1e18c101aa8 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -1345,7 +1345,8 @@ static void ME_RTFReadHook(RTF_Info *info) { case rtfBeginGroup: if (info->stackTop < maxStack) { - info->stack[info->stackTop].fmt = info->style->fmt; + info->stack[info->stackTop].style = info->style; + ME_AddRefStyle(info->style); info->stack[info->stackTop].codePage = info->codePage; info->stack[info->stackTop].unicodeLength = info->unicodeLength; } @@ -1354,7 +1355,6 @@ static void ME_RTFReadHook(RTF_Info *info) break; case rtfEndGroup: { - ME_Style *s; RTFFlushOutputBuffer(info); info->stackTop--; if (info->stackTop<=0) { @@ -1362,15 +1362,12 @@ static void ME_RTFReadHook(RTF_Info *info) return; } assert(info->stackTop >= 0); - if (info->styleChanged) - { - /* FIXME too slow ? how come ? */ - s = ME_ApplyStyle(info->style, &info->stack[info->stackTop].fmt); - ME_ReleaseStyle(info->style); - info->style = s; - info->codePage = info->stack[info->stackTop].codePage; - info->unicodeLength = info->stack[info->stackTop].unicodeLength; - } + + ME_ReleaseStyle(info->style); + info->style = info->stack[info->stackTop].style; + ME_AddRefStyle(info->style); + info->codePage = info->stack[info->stackTop].codePage; + info->unicodeLength = info->stack[info->stackTop].unicodeLength; break; } } @@ -3590,6 +3587,11 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, POINT *point = (POINT *)lParam; point->x = editor->horz_si.nPos; point->y = editor->vert_si.nPos; + /* 16-bit scaled value is returned as stored in scrollinfo */ + if (editor->horz_si.nMax > 0xffff) + point->x = MulDiv(point->x, 0xffff, editor->horz_si.nMax); + if (editor->vert_si.nMax > 0xffff) + point->y = MulDiv(point->y, 0xffff, editor->vert_si.nMax); return 1; } case EM_GETTEXTRANGE: @@ -4015,15 +4017,10 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, case SB_THUMBTRACK: case SB_THUMBPOSITION: { - SCROLLINFO sbi; - sbi.cbSize = sizeof(sbi); - sbi.fMask = SIF_TRACKPOS; - /* Try to get 32-bit track position value. */ - if (!GetScrollInfo(editor->hWnd, SB_HORZ, &sbi)) - /* GetScrollInfo failed, settle for 16-bit value in wParam. */ - sbi.nTrackPos = HIWORD(wParam); - - ME_HScrollAbs(editor, sbi.nTrackPos); + int pos = HIWORD(wParam); + if (editor->horz_si.nMax > 0xffff) + pos = MulDiv(pos, editor->horz_si.nMax, 0xffff); + ME_HScrollAbs(editor, pos); break; } } @@ -4067,15 +4064,10 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, case SB_THUMBTRACK: case SB_THUMBPOSITION: { - SCROLLINFO sbi; - sbi.cbSize = sizeof(sbi); - sbi.fMask = SIF_TRACKPOS; - /* Try to get 32-bit track position value. */ - if (!GetScrollInfo(editor->hWnd, SB_VERT, &sbi)) - /* GetScrollInfo failed, settle for 16-bit value in wParam. */ - sbi.nTrackPos = HIWORD(wParam); - - ME_VScrollAbs(editor, sbi.nTrackPos); + int pos = HIWORD(wParam); + if (editor->vert_si.nMax > 0xffff) + pos = MulDiv(pos, editor->vert_si.nMax, 0xffff); + ME_VScrollAbs(editor, pos); break; } } diff --git a/dlls/riched20/paint.c b/dlls/riched20/paint.c index 2c1c9b98c82..a5be178a023 100644 --- a/dlls/riched20/paint.c +++ b/dlls/riched20/paint.c @@ -1036,17 +1036,21 @@ void ME_ScrollAbs(ME_TextEditor *editor, int x, int y) if (editor->horz_si.nPos != x) { x = min(x, editor->horz_si.nMax); x = max(x, editor->horz_si.nMin); - ITextHost_TxSetScrollPos(editor->texthost, SB_HORZ, x, TRUE); scrollX = editor->horz_si.nPos - x; editor->horz_si.nPos = x; + if (editor->horz_si.nMax > 0xFFFF) /* scale to 16-bit value */ + x = MulDiv(x, 0xFFFF, editor->horz_si.nMax); + ITextHost_TxSetScrollPos(editor->texthost, SB_HORZ, x, TRUE); } if (editor->vert_si.nPos != y) { y = min(y, editor->vert_si.nMax - (int)editor->vert_si.nPage); y = max(y, editor->vert_si.nMin); - ITextHost_TxSetScrollPos(editor->texthost, SB_VERT, y, TRUE); scrollY = editor->vert_si.nPos - y; editor->vert_si.nPos = y; + if (editor->vert_si.nMax > 0xFFFF) /* scale to 16-bit value */ + y = MulDiv(y, 0xFFFF, editor->vert_si.nMax); + ITextHost_TxSetScrollPos(editor->texthost, SB_VERT, y, TRUE); } if (abs(scrollX) > editor->sizeWindow.cx || @@ -1170,6 +1174,12 @@ void ME_UpdateScrollBar(ME_TextEditor *editor) if ((bScrollBarWillBeVisible || bScrollBarWasVisible) && editor->styleFlags & WS_HSCROLL) { + if (si.nMax > 0xFFFF) + { + /* Native scales the scrollbar info to 16-bit external values. */ + si.nPos = MulDiv(si.nPos, 0xFFFF, si.nMax); + si.nMax = 0xFFFF; + } if (editor->hWnd) { SetScrollInfo(editor->hWnd, SB_HORZ, &si, TRUE); } else { @@ -1219,6 +1229,12 @@ void ME_UpdateScrollBar(ME_TextEditor *editor) if ((bScrollBarWillBeVisible || bScrollBarWasVisible) && editor->styleFlags & WS_VSCROLL) { + if (si.nMax > 0xFFFF) + { + /* Native scales the scrollbar info to 16-bit external values. */ + si.nPos = MulDiv(si.nPos, 0xFFFF, si.nMax); + si.nMax = 0xFFFF; + } if (editor->hWnd) { SetScrollInfo(editor->hWnd, SB_VERT, &si, TRUE); } else { @@ -1263,7 +1279,10 @@ void ME_EnsureVisible(ME_TextEditor *editor, ME_Cursor *pCursor) x = editor->horz_si.nPos; if (~editor->styleFlags & ES_AUTOVSCROLL) + { ME_HScrollAbs(editor, x); + return; + } } else { if (~editor->styleFlags & ES_AUTOVSCROLL) return; diff --git a/dlls/riched20/reader.c b/dlls/riched20/reader.c index 0462f71eb73..a589a8e0786 100644 --- a/dlls/riched20/reader.c +++ b/dlls/riched20/reader.c @@ -442,7 +442,11 @@ static void RTFUngetToken(RTF_Info *info) * increment the value to compensate for it being decremented * twice due to the RTFUngetToken. */ if(RTFCheckCM (info, rtfGroup, rtfEndGroup)) + { + info->stack[info->stackTop].style = info->style; + ME_AddRefStyle(info->style); info->stackTop++; + } } diff --git a/dlls/riched20/rtf.h b/dlls/riched20/rtf.h index 3277301b3a2..d8ac32396a8 100644 --- a/dlls/riched20/rtf.h +++ b/dlls/riched20/rtf.h @@ -1095,7 +1095,7 @@ typedef void (*RTFFuncPtr) (RTF_Info *); /* generic function pointer */ /* RTF parser stack element */ struct tagRTFState { - CHARFORMAT2W fmt; + ME_Style *style; int codePage; int unicodeLength; }; diff --git a/dlls/setupapi/Lt.rc b/dlls/setupapi/Lt.rc index 8872859f78e..ebee4acf130 100644 --- a/dlls/setupapi/Lt.rc +++ b/dlls/setupapi/Lt.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE { - IDS_PROMPTDISK "Reikalingas failas '%s' esantis %s" + IDS_PROMPTDISK "Reikalingas failas „%s“ esantis %s" IDS_UNKNOWN "Nežinomas" IDS_COPYFROM "Kopijuoti failus iš:" IDS_INFO "Įveskite kelią iki failo, o tada spauskite Gerai." diff --git a/dlls/shdoclc/Pt.rc b/dlls/shdoclc/Pt.rc index d0bd1b74fa4..737747304ff 100644 --- a/dlls/shdoclc/Pt.rc +++ b/dlls/shdoclc/Pt.rc @@ -192,8 +192,8 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES MENUITEM SEPARATOR - MENUITEM "I&niciar", IDM_DYNSRCPLAY - MENUITEM "&Parar", IDM_DYNSRCSTOP + MENUITEM "I&niciar", IDM_IMGARTPLAY + MENUITEM "&Parar", IDM_IMGARTSTOP MENUITEM "&Recomeçar", IDM_IMGARTREWIND MENUITEM SEPARATOR MENUITEM SEPARATOR diff --git a/dlls/shell32/control.c b/dlls/shell32/control.c index 88d6ead0d03..9b566b65ed2 100644 --- a/dlls/shell32/control.c +++ b/dlls/shell32/control.c @@ -59,6 +59,7 @@ CPlApplet* Control_UnloadApplet(CPlApplet* applet) if (applet->proc) applet->proc(applet->hWnd, CPL_EXIT, 0L, 0L); FreeLibrary(applet->hModule); next = applet->next; + HeapFree(GetProcessHeap(), 0, applet->cmd); HeapFree(GetProcessHeap(), 0, applet); return next; } @@ -95,6 +96,13 @@ CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel) applet = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, applet, sizeof(*applet) + (applet->count - 1) * sizeof(NEWCPLINFOW)); + if (!(applet->cmd = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(cmd)+1) * sizeof(WCHAR)))) { + WARN("Cannot allocate memory for applet path\n"); + goto theError; + } + + lstrcpyW(applet->cmd, cmd); + for (i = 0; i < applet->count; i++) { ZeroMemory(&newinfo, sizeof(newinfo)); newinfo.dwSize = sizeof(NEWCPLINFOA); @@ -426,6 +434,20 @@ static CPlItem* Control_GetCPlItem_From_ListView(CPanel *panel) return NULL; } +static void Control_StartApplet(HWND hWnd, CPlItem *item) +{ + WCHAR verbOpen[] = {'c','p','l','o','p','e','n',0}; + WCHAR format[] = {'@','%','d',0}; + WCHAR param[MAX_PATH]; + + /* execute the applet if item is valid */ + if (item) + { + wsprintfW(param, format, item->id); + ShellExecuteW(hWnd, verbOpen, item->applet->cmd, param, NULL, SW_SHOW); + } +} + static LRESULT WINAPI Control_WndProc(HWND hWnd, UINT wMsg, WPARAM lParam1, LPARAM lParam2) { @@ -484,13 +506,7 @@ static LRESULT WINAPI Control_WndProc(HWND hWnd, UINT wMsg, if ((LOWORD(lParam1) >= IDM_CPANEL_APPLET_BASE) && (LOWORD(lParam1) <= IDM_CPANEL_APPLET_BASE + panel->total_subprogs)) { - CPlItem *item = Control_GetCPlItem_From_MenuID(hWnd, LOWORD(lParam1)); - - /* execute the applet if item is valid */ - if (item) - item->applet->proc(item->applet->hWnd, CPL_DBLCLK, item->id, - item->applet->info[item->id].lData); - + Control_StartApplet(hWnd, Control_GetCPlItem_From_MenuID(hWnd, LOWORD(lParam1))); return 0; } @@ -511,13 +527,7 @@ static LRESULT WINAPI Control_WndProc(HWND hWnd, UINT wMsg, case NM_RETURN: case NM_DBLCLK: { - CPlItem *item = Control_GetCPlItem_From_ListView(panel); - - /* execute the applet if item is valid */ - if (item) - item->applet->proc(item->applet->hWnd, CPL_DBLCLK, - item->id, item->applet->info[item->id].lData); - + Control_StartApplet(hWnd, Control_GetCPlItem_From_ListView(panel)); return 0; } case LVN_ITEMCHANGED: @@ -772,6 +782,11 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) extraPmts = extraPmtsBuf; } + /* Now check if there had been a numerical value in the extra params */ + if ((extraPmts) && (*extraPmts == '@') && (sp == -1)) { + sp = atoiW(extraPmts + 1); + } + TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp); Control_LoadApplet(hWnd, buffer, panel); diff --git a/dlls/shell32/cpanel.h b/dlls/shell32/cpanel.h index 23ec5e538f2..6a1fa574e78 100644 --- a/dlls/shell32/cpanel.h +++ b/dlls/shell32/cpanel.h @@ -26,6 +26,7 @@ typedef struct CPlApplet { struct CPlApplet* next; /* linked list */ HWND hWnd; + LPWSTR cmd; /* path to applet */ unsigned count; /* number of subprograms */ HMODULE hModule; /* module of loaded applet */ APPLET_PROC proc; /* entry point address */ diff --git a/dlls/shell32/shell32_De.rc b/dlls/shell32/shell32_De.rc index 75980ecc737..828f56daa8e 100644 --- a/dlls/shell32/shell32_De.rc +++ b/dlls/shell32/shell32_De.rc @@ -276,9 +276,9 @@ STRINGTABLE IDS_PROGRAM_FILES_COMMON "Programme\\Gemeinsame Dateien" IDS_COMMON_DOCUMENTS "Dokumente" IDS_ADMINTOOLS "Startmenü\\Programme\\Verwaltung" - IDS_COMMON_MUSIC "Dokumente\\Eigene Musik" - IDS_COMMON_PICTURES "Dokumente\\Eigene Bilder" - IDS_COMMON_VIDEO "Dokumente\\Eigene Videos" + IDS_COMMON_MUSIC "Musik" + IDS_COMMON_PICTURES "Bilder" + IDS_COMMON_VIDEO "Videos" IDS_CDBURN_AREA "Lokale Einstellungen\\Anwendungsdaten\\Microsoft\\CD Burning" IDS_NEWFOLDER "Neuer Ordner" diff --git a/dlls/shell32/shell32_En.rc b/dlls/shell32/shell32_En.rc index b4dddc2c460..6d68083ef8b 100644 --- a/dlls/shell32/shell32_En.rc +++ b/dlls/shell32/shell32_En.rc @@ -274,9 +274,9 @@ STRINGTABLE IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" IDS_COMMON_DOCUMENTS "Documents" IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" - IDS_COMMON_MUSIC "Documents\\My Music" - IDS_COMMON_PICTURES "Documents\\My Pictures" - IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_COMMON_MUSIC "Music" + IDS_COMMON_PICTURES "Pictures" + IDS_COMMON_VIDEO "Videos" IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" IDS_NEWFOLDER "New Folder" diff --git a/dlls/shell32/shell32_Lt.rc b/dlls/shell32/shell32_Lt.rc index e71c5d0bb4a..132dcb3d5eb 100644 --- a/dlls/shell32/shell32_Lt.rc +++ b/dlls/shell32/shell32_Lt.rc @@ -227,16 +227,16 @@ STRINGTABLE IDS_CREATEFOLDER_CAPTION "Klaida kuriant naują aplanką" IDS_DELETEITEM_CAPTION "Patvirtinti failo šalinimą" IDS_DELETEFOLDER_CAPTION "Patvirtinti aplanko šalinimą" - IDS_DELETEITEM_TEXT "Ar tikrai norite pašalinti '%1'?" + IDS_DELETEITEM_TEXT "Ar tikrai norite pašalinti „%1“?" IDS_DELETEMULTIPLE_TEXT "Ar tikrai norite pašalinti šiuos %1 elementus?" IDS_DELETESELECTED_TEXT "Ar tikrai norite pašalinti išrinktus elementus?" - IDS_TRASHITEM_TEXT "Ar tikrai norite perkelti '%1' į šiukšlinę?" - IDS_TRASHFOLDER_TEXT "Ar tikrai norite perkelti '%1' ir jo turinį į šiukšlinę?" + IDS_TRASHITEM_TEXT "Ar tikrai norite perkelti „%1“ į šiukšlinę?" + IDS_TRASHFOLDER_TEXT "Ar tikrai norite perkelti „%1“ ir jo turinį į šiukšlinę?" IDS_TRASHMULTIPLE_TEXT "Ar tikrai norite perkelti šiuos %1 elementus į šiukšlinę?" - IDS_CANTTRASH_TEXT "Šis elementas '%1' negali būti perkeltas į šiukšlinę. Ar norite jį pašalinti vietoj šiukšlinės?" - IDS_OVERWRITEFILE_TEXT "Šis aplankas jau turi failą vardu '%1'.\n\nAr norite jį pakeisti?" + IDS_CANTTRASH_TEXT "Šis elementas „%1“ negali būti perkeltas į šiukšlinę. Ar norite jį pašalinti vietoj šiukšlinės?" + IDS_OVERWRITEFILE_TEXT "Šis aplankas jau turi failą vardu „%1“.\n\nAr norite jį pakeisti?" IDS_OVERWRITEFILE_CAPTION "Patvirtinti failo perrašymą" - IDS_OVERWRITEFOLDER_TEXT "Šis aplankas jau turi aplanką vardu '%1'.\n\n"\ + IDS_OVERWRITEFOLDER_TEXT "Šis aplankas jau turi aplanką vardu „%1“.\n\n"\ "Jei failai paskirties aplanke yra pavadinti tais pačiais vardais kaip ir failai\n"\ "išrinktame aplanke, tai jie bus pakeisti. Ar vis dar norite perkelti ar kopijuoti\n"\ "šį aplanką?" diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c index 44f0750570f..0f07a857b36 100644 --- a/dlls/shell32/shellpath.c +++ b/dlls/shell32/shellpath.c @@ -764,6 +764,7 @@ static const WCHAR Common_Administrative_ToolsW[] = {'C','o','m','m','o','n',' ' static const WCHAR Common_AppDataW[] = {'C','o','m','m','o','n',' ','A','p','p','D','a','t','a','\0'}; static const WCHAR Common_DesktopW[] = {'C','o','m','m','o','n',' ','D','e','s','k','t','o','p','\0'}; static const WCHAR Common_DocumentsW[] = {'C','o','m','m','o','n',' ','D','o','c','u','m','e','n','t','s','\0'}; +static const WCHAR Common_FavoritesW[] = {'C','o','m','m','o','n',' ','F','a','v','o','r','i','t','e','s','\0'}; static const WCHAR CommonFilesDirW[] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r','\0'}; static const WCHAR CommonMusicW[] = {'C','o','m','m','o','n','M','u','s','i','c','\0'}; static const WCHAR CommonPicturesW[] = {'C','o','m','m','o','n','P','i','c','t','u','r','e','s','\0'}; @@ -981,7 +982,7 @@ static const CSIDL_DATA CSIDL_Data[] = }, { /* 0x1f - CSIDL_COMMON_FAVORITES */ CSIDL_Type_AllUsers, - FavoritesW, + Common_FavoritesW, MAKEINTRESOURCEW(IDS_FAVORITES) }, { /* 0x20 - CSIDL_INTERNET_CACHE */ @@ -2041,6 +2042,10 @@ static HRESULT _SHRegisterCommonShellFolders(void) CSIDL_COMMON_APPDATA, CSIDL_COMMON_TEMPLATES, CSIDL_COMMON_DOCUMENTS, + CSIDL_COMMON_ADMINTOOLS, + CSIDL_COMMON_MUSIC, + CSIDL_COMMON_PICTURES, + CSIDL_COMMON_VIDEO, }; HRESULT hr; diff --git a/dlls/shell32/tests/shfldr_special.c b/dlls/shell32/tests/shfldr_special.c index 8c14e517d4b..06533ba8b95 100644 --- a/dlls/shell32/tests/shfldr_special.c +++ b/dlls/shell32/tests/shfldr_special.c @@ -46,7 +46,6 @@ static void test_parse_for_entire_network(void) LPITEMIDLIST pidl; DWORD attr = ~0; DWORD expected_attr; - DWORD alter_attr; hr = SHGetDesktopFolder(&psfDesktop); ok(hr == S_OK, "SHGetDesktopFolder failed with error 0x%x\n", hr); @@ -70,7 +69,9 @@ static void test_parse_for_entire_network(void) attr = ~0; hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, entire_network_path, &eaten, &pidl, &attr); - if (hr == HRESULT_FROM_WIN32(ERROR_BAD_NET_NAME) || hr == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER)) + if (hr == HRESULT_FROM_WIN32(ERROR_BAD_NET_NAME) || + hr == HRESULT_FROM_WIN32(ERROR_NO_NET_OR_BAD_PATH) || + hr == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER)) { win_skip("'EntireNetwork' is not available on Win9x, NT4 and Vista\n"); return; @@ -78,12 +79,12 @@ static void test_parse_for_entire_network(void) ok(hr == S_OK, "IShellFolder_ParseDisplayName failed with error 0x%x\n", hr); todo_wine ok(eaten == 0xdeadbeef, "eaten should not have been set to %u\n", eaten); - expected_attr = SFGAO_HASSUBFOLDER|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|SFGAO_STORAGEANCESTOR|SFGAO_HASPROPSHEET|SFGAO_CANLINK; - alter_attr = (expected_attr & (~SFGAO_STORAGEANCESTOR)) | SFGAO_STREAM; + expected_attr = SFGAO_HASSUBFOLDER|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|SFGAO_HASPROPSHEET|SFGAO_CANLINK; todo_wine - ok(attr == expected_attr || - attr == alter_attr, /* win2k */ - "attr should be 0x%x or 0x%x, not 0x%x\n", expected_attr, alter_attr, attr); + ok(attr == expected_attr || /* winme, nt4 */ + attr == (expected_attr | SFGAO_STREAM) || /* win2k */ + attr == (expected_attr | SFGAO_STORAGEANCESTOR), /* others */ + "attr should be 0x%x, not 0x%x\n", expected_attr, attr); ILFree(pidl); } diff --git a/dlls/shell32/tests/shlexec.c b/dlls/shell32/tests/shlexec.c index 6edc9263618..5f0776adc0b 100644 --- a/dlls/shell32/tests/shlexec.c +++ b/dlls/shell32/tests/shlexec.c @@ -864,8 +864,7 @@ static void test_find_executable(void) ok(rc == SE_ERR_NOASSOC /* >= win2000 */ || rc > 32 /* win98, nt4 */, "FindExecutable(NULL) returned %ld\n", rc); ok(strcmp(command, "your word") != 0, "FindExecutable(NULL) returned command=[%s]\n", command); - /* Win95 can't cope with double backslashes in FindExecutableA (tmpdir has a trailing backslash) */ - sprintf(filename, "%stest file.sfe", tmpdir); + sprintf(filename, "%s\\test file.sfe", tmpdir); rc=(INT_PTR)FindExecutableA(filename, NULL, command); ok(rc > 32, "FindExecutable(%s) returned %ld\n", filename, rc); /* Depending on the platform, command could be '%1' or 'test file.sfe' */ @@ -911,10 +910,6 @@ static void test_find_executable(void) test=filename_tests; while (test->basename) { - /* Win95 can't cope with double slashes/backslashes in FindExecutableA */ - if (tmpdir[strlen(tmpdir) - 1] == '\\') - tmpdir[strlen(tmpdir) - 1] = 0; - sprintf(filename, test->basename, tmpdir); if (strchr(filename, '/')) { @@ -1527,8 +1522,13 @@ static void init_test(void) "unable to find argv0!\n"); } - GetTempPathA(sizeof(tmpdir)/sizeof(*tmpdir), tmpdir); - assert(GetTempFileNameA(tmpdir, "wt", 0, child_file)!=0); + GetTempPathA(sizeof(filename), filename); + GetTempFileNameA(filename, "wt", 0, tmpdir); + DeleteFileA( tmpdir ); + rc = CreateDirectoryA( tmpdir, NULL ); + ok( rc, "failed to create %s err %u\n", tmpdir, GetLastError() ); + rc = GetTempFileNameA(tmpdir, "wt", 0, child_file); + assert(rc != 0); init_event(child_file); /* Set up the test files */ @@ -1608,6 +1608,7 @@ static void cleanup_test(void) testfile++; } DeleteFile(child_file); + RemoveDirectoryA(tmpdir); /* Delete the test association */ delete_test_association(".shlexec"); diff --git a/dlls/user32/button.c b/dlls/user32/button.c index a61a4e7b902..1681949172f 100644 --- a/dlls/user32/button.c +++ b/dlls/user32/button.c @@ -826,6 +826,9 @@ static void PB_Paint( HWND hwnd, HDC hDC, UINT action ) hOldBrush = SelectObject(hDC,GetSysColorBrush(COLOR_BTNFACE)); oldBkMode = SetBkMode(hDC, TRANSPARENT); + /* completely skip the drawing if only focus has changed */ + if (action == ODA_FOCUS) goto draw_focus; + if (get_button_type(style) == BS_DEFPUSHBUTTON) { Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom); @@ -869,7 +872,9 @@ static void PB_Paint( HWND hwnd, HDC hDC, UINT action ) SetTextColor( hDC, oldTxtColor ); - if (state & BUTTON_HASFOCUS) +draw_focus: + if ((action == ODA_FOCUS) || + ((action == ODA_DRAWENTIRE) && (state & BUTTON_HASFOCUS))) { InflateRect( &focus_rect, -1, -1 ); IntersectRect(&focus_rect, &focus_rect, &rc); diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c index bf30c97478d..19d6ab22656 100644 --- a/dlls/user32/defwnd.c +++ b/dlls/user32/defwnd.c @@ -216,7 +216,7 @@ static void DEFWND_Print( HWND hwnd, HDC hdc, ULONG uFlags) * Client area */ if ( uFlags & PRF_CLIENT) - SendMessageW(hwnd, WM_PRINTCLIENT, (WPARAM)hdc, PRF_CLIENT); + SendMessageW(hwnd, WM_PRINTCLIENT, (WPARAM)hdc, uFlags); } diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index ab473eab5b8..203340a3bef 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -147,6 +147,11 @@ typedef struct #define MENU_TOP_MARGIN 3 #define MENU_BOTTOM_MARGIN 2 +/* maximum allowed depth of any branch in the menu tree. + * This value is slightly larger than in windows (25) to + * stay on the safe side. */ +#define MAXMENUDEPTH 30 + /* (other menu->FocusedItem values give the position of the focused item) */ #define NO_SELECTED_ITEM 0xffff @@ -185,6 +190,8 @@ static LRESULT WINAPI PopupMenuWndProc( HWND hwnd, UINT message, WPARAM wParam, DWORD WINAPI DrawMenuBarTemp(HWND hwnd, HDC hDC, LPRECT lprect, HMENU hMenu, HFONT hFont); +static BOOL SetMenuItemInfo_common( MENUITEM *, const MENUITEMINFOW *, BOOL); + /********************************************************************* * menu class descriptor */ @@ -2048,92 +2055,6 @@ static void MENU_MoveSelection( HWND hwndOwner, HMENU hmenu, INT offset ) /********************************************************************** - * MENU_SetItemData - * - * Set an item's flags, id and text ptr. Called by InsertMenu() and - * ModifyMenu(). - */ -static BOOL MENU_SetItemData( MENUITEM *item, UINT flags, UINT_PTR id, - LPCWSTR str ) -{ - debug_print_menuitem("MENU_SetItemData from: ", item, ""); - TRACE("flags=%x str=%p\n", flags, str); - - if (IS_STRING_ITEM(flags)) - { - LPWSTR prevText = item->text; - if (!str) - { - flags |= MF_SEPARATOR; - item->text = NULL; - } - else - { - LPWSTR text; - /* Item beginning with a backspace is a help item */ - if (*str == '\b') - { - flags |= MF_HELP; - str++; - } - if (!(text = HeapAlloc( GetProcessHeap(), 0, (strlenW(str)+1) * sizeof(WCHAR) ))) - return FALSE; - strcpyW( text, str ); - item->text = text; - } - item->hbmpItem = NULL; - HeapFree( GetProcessHeap(), 0, prevText ); - } - else if(( flags & MFT_BITMAP)) { - item->hbmpItem = HBITMAP_32(LOWORD(str)); - /* setting bitmap clears text */ - HeapFree( GetProcessHeap(), 0, item->text ); - item->text = NULL; - } - - if (flags & MF_SEPARATOR) flags |= MF_GRAYED | MF_DISABLED; - - if (flags & MF_OWNERDRAW) - item->dwItemData = (DWORD_PTR)str; - else - item->dwItemData = 0; - - if ((item->fType & MF_POPUP) && (flags & MF_POPUP) && (item->hSubMenu != (HMENU)id) ) - DestroyMenu( item->hSubMenu ); /* ModifyMenu() spec */ - - if (flags & MF_POPUP) - { - POPUPMENU *menu = MENU_GetMenu((HMENU)id); - if (menu) menu->wFlags |= MF_POPUP; - else - { - item->wID = 0; - item->hSubMenu = 0; - item->fType = 0; - item->fState = 0; - return FALSE; - } - } - - item->wID = id; - if (flags & MF_POPUP) item->hSubMenu = (HMENU)id; - - if ((item->fType & MF_POPUP) && !(flags & MF_POPUP) ) - flags |= MF_POPUP; /* keep popup */ - - item->fType = flags & TYPE_MASK; - /* MFS_DEFAULT is not accepted. MF_HILITE is not listed as a valid flag - for ModifyMenu, but Windows accepts it */ - item->fState = flags & MENUITEMINFO_STATE_MASK & ~MFS_DEFAULT; - - /* Don't call SetRectEmpty here! */ - - debug_print_menuitem("MENU_SetItemData to : ", item, ""); - return TRUE; -} - - -/********************************************************************** * MENU_InsertItem * * Insert (allocate) a new item into a menu. @@ -2164,8 +2085,7 @@ static MENUITEM *MENU_InsertItem( HMENU hMenu, UINT pos, UINT flags ) * Note: XP treats only bitmap handles 1 - 6 as "magic" ones * regardless of their id. */ - while (pos > 0 && (menu->items[pos - 1].fType & MFT_BITMAP) && - (INT_PTR)menu->items[pos - 1].hbmpItem >= (INT_PTR)HBMMENU_SYSTEM && + while (pos > 0 && (INT_PTR)menu->items[pos - 1].hbmpItem >= (INT_PTR)HBMMENU_SYSTEM && (INT_PTR)menu->items[pos - 1].hbmpItem <= (INT_PTR)HBMMENU_MBAR_CLOSE_D) pos--; @@ -3827,6 +3747,49 @@ UINT WINAPI GetMenuItemID( HMENU hMenu, INT nPos ) } +/********************************************************************** + * MENU_mnu2mnuii + * + * Uses flags, id and text ptr, passed by InsertMenu() and + * ModifyMenu() to setup a MenuItemInfo structure. + */ +static void MENU_mnu2mnuii( UINT flags, UINT_PTR id, LPCWSTR str, + LPMENUITEMINFOW pmii) +{ + ZeroMemory( pmii, sizeof( MENUITEMINFOW)); + pmii->cbSize = sizeof( MENUITEMINFOW); + pmii->fMask = MIIM_STATE | MIIM_ID | MIIM_FTYPE; + /* setting bitmap clears text and vice versa */ + if( IS_STRING_ITEM(flags)) { + pmii->fMask |= MIIM_STRING | MIIM_BITMAP; + if( !str) + flags |= MF_SEPARATOR; + /* Item beginning with a backspace is a help item */ + /* FIXME: wrong place, this is only true in win16 */ + else if( *str == '\b') { + flags |= MF_HELP; + str++; + } + pmii->dwTypeData = (LPWSTR)str; + } else if( flags & MFT_BITMAP){ + pmii->fMask |= MIIM_BITMAP | MIIM_STRING; + pmii->hbmpItem = HBITMAP_32(LOWORD(str)); + } + if( flags & MF_OWNERDRAW){ + pmii->fMask |= MIIM_DATA; + pmii->dwItemData = (ULONG_PTR) str; + } + if( flags & MF_POPUP) { + pmii->fMask |= MIIM_SUBMENU; + pmii->hSubMenu = (HMENU)id; + } + if( flags & MF_SEPARATOR) flags |= MF_GRAYED | MF_DISABLED; + pmii->fState = flags & MENUITEMINFO_STATE_MASK & ~MFS_DEFAULT; + pmii->fType = flags & MENUITEMINFO_TYPE_MASK; + pmii->wID = (UINT)id; +} + + /******************************************************************* * InsertMenuW (USER32.@) */ @@ -3834,6 +3797,7 @@ BOOL WINAPI InsertMenuW( HMENU hMenu, UINT pos, UINT flags, UINT_PTR id, LPCWSTR str ) { MENUITEM *item; + MENUITEMINFOW mii; if (IS_STRING_ITEM(flags) && str) TRACE("hMenu %p, pos %d, flags %08x, id %04lx, str %s\n", @@ -3842,8 +3806,8 @@ BOOL WINAPI InsertMenuW( HMENU hMenu, UINT pos, UINT flags, hMenu, pos, flags, id, str ); if (!(item = MENU_InsertItem( hMenu, pos, flags ))) return FALSE; - - if (!(MENU_SetItemData( item, flags, id, str ))) + MENU_mnu2mnuii( flags, id, str, &mii); + if (!(SetMenuItemInfo_common( item, &mii, TRUE))) { RemoveMenu( hMenu, pos, flags ); return FALSE; @@ -3955,6 +3919,7 @@ BOOL WINAPI ModifyMenuW( HMENU hMenu, UINT pos, UINT flags, UINT_PTR id, LPCWSTR str ) { MENUITEM *item; + MENUITEMINFOW mii; if (IS_STRING_ITEM(flags)) TRACE("%p %d %04x %04lx %s\n", hMenu, pos, flags, id, debugstr_w(str) ); @@ -3963,7 +3928,8 @@ BOOL WINAPI ModifyMenuW( HMENU hMenu, UINT pos, UINT flags, if (!(item = MENU_FindItem( &hMenu, &pos, flags ))) return FALSE; MENU_GetMenu(hMenu)->Height = 0; /* force size recalculate */ - return MENU_SetItemData( item, flags, id, str ); + MENU_mnu2mnuii( flags, id, str, &mii); + return SetMenuItemInfo_common( item, &mii, TRUE); } @@ -4666,7 +4632,34 @@ static inline void set_menu_item_text( MENUITEM *menu, LPCWSTR text, BOOL unicod /********************************************************************** + * MENU_depth + * + * detect if there are loops in the menu tree (or the depth is too large) + */ +static int MENU_depth( POPUPMENU *pmenu, int depth) +{ + int i; + MENUITEM *item; + + depth++; + if( depth > MAXMENUDEPTH) return depth; + item = pmenu->items; + for( i = 0; i < pmenu->nItems && depth <= MAXMENUDEPTH; i++, item++){ + POPUPMENU *psubmenu = MENU_GetMenu( item->hSubMenu); + if( psubmenu){ + int bdepth = MENU_depth( psubmenu, depth); + if( bdepth > depth) depth = bdepth; + } + } + return depth; +} + + +/********************************************************************** * SetMenuItemInfo_common + * + * Note: does not support the MIIM_TYPE flag. Use the MIIM_FTYPE, + * MIIM_BITMAP and MIIM_STRING flags instead. */ static BOOL SetMenuItemInfo_common(MENUITEM * menu, @@ -4677,30 +4670,7 @@ static BOOL SetMenuItemInfo_common(MENUITEM * menu, debug_print_menuitem("SetMenuItemInfo_common from: ", menu, ""); - if (lpmii->fMask & MIIM_TYPE ) { - if( lpmii->fMask & ( MIIM_STRING | MIIM_FTYPE | MIIM_BITMAP)) { - WARN("invalid combination of fMask bits used\n"); - /* this does not happen on Win9x/ME */ - SetLastError( ERROR_INVALID_PARAMETER); - return FALSE; - } - - /* Remove the old type bits and replace them with the new ones */ - menu->fType &= ~MENUITEMINFO_TYPE_MASK; - menu->fType |= lpmii->fType & MENUITEMINFO_TYPE_MASK; - - if (IS_STRING_ITEM(menu->fType)) { - HeapFree(GetProcessHeap(), 0, menu->text); - set_menu_item_text( menu, lpmii->dwTypeData, unicode ); - } else if( (menu->fType) & MFT_BITMAP) - menu->hbmpItem = HBITMAP_32(LOWORD(lpmii->dwTypeData)); - } - if (lpmii->fMask & MIIM_FTYPE ) { - if(( lpmii->fType & MFT_BITMAP)) { - SetLastError( ERROR_INVALID_PARAMETER); - return FALSE; - } menu->fType &= ~MENUITEMINFO_TYPE_MASK; menu->fType |= lpmii->fType & MENUITEMINFO_TYPE_MASK; } @@ -4711,11 +4681,9 @@ static BOOL SetMenuItemInfo_common(MENUITEM * menu, } if (lpmii->fMask & MIIM_STATE) - { /* Other menu items having MFS_DEFAULT are not converted to normal items */ menu->fState = lpmii->fState & MENUITEMINFO_STATE_MASK; - } if (lpmii->fMask & MIIM_ID) menu->wID = lpmii->wID; @@ -4725,10 +4693,14 @@ static BOOL SetMenuItemInfo_common(MENUITEM * menu, if (menu->hSubMenu) { POPUPMENU *subMenu = MENU_GetMenu(menu->hSubMenu); if (subMenu) { + if( MENU_depth( subMenu, 0) > MAXMENUDEPTH) { + ERR( "Loop detected in menu hierarchy or maximum menu depth exceeded!\n"); + menu->hSubMenu = 0; + return FALSE; + } subMenu->wFlags |= MF_POPUP; menu->fType |= MF_POPUP; - } - else { + } else { SetLastError( ERROR_INVALID_PARAMETER); return FALSE; } @@ -4756,27 +4728,63 @@ static BOOL SetMenuItemInfo_common(MENUITEM * menu, } /********************************************************************** + * MENU_NormalizeMenuItemInfoStruct + * + * Helper for SetMenuItemInfo and InsertMenuItemInfo: + * check, copy and extend the MENUITEMINFO struct from the version that the application + * supplied to the version used by wine source. */ +static BOOL MENU_NormalizeMenuItemInfoStruct( const MENUITEMINFOW *pmii_in, + MENUITEMINFOW *pmii_out ) +{ + /* do we recognize the size? */ + if( pmii_in->cbSize != sizeof( MENUITEMINFOW) && + pmii_in->cbSize != sizeof( MENUITEMINFOW) - sizeof( pmii_in->hbmpItem)) { + SetLastError( ERROR_INVALID_PARAMETER); + return FALSE; + } + /* copy the fields that we have */ + memcpy( pmii_out, pmii_in, pmii_in->cbSize); + /* if the hbmpItem member is missing then extend */ + if( pmii_in->cbSize != sizeof( MENUITEMINFOW)) { + pmii_out->cbSize = sizeof( MENUITEMINFOW); + pmii_out->hbmpItem = NULL; + } + /* test for invalid bit combinations */ + if( (pmii_out->fMask & MIIM_TYPE && + pmii_out->fMask & (MIIM_STRING | MIIM_FTYPE | MIIM_BITMAP)) || + (pmii_out->fMask & MIIM_FTYPE && pmii_out->fType & MFT_BITMAP)) { + WARN("invalid combination of fMask bits used\n"); + /* this does not happen on Win9x/ME */ + SetLastError( ERROR_INVALID_PARAMETER); + return FALSE; + } + /* convert old style (MIIM_TYPE) to the new */ + if( pmii_out->fMask & MIIM_TYPE){ + pmii_out->fMask |= MIIM_FTYPE; + if( IS_STRING_ITEM(pmii_out->fType)){ + pmii_out->fMask |= MIIM_STRING; + } else if( (pmii_out->fType) & MFT_BITMAP){ + pmii_out->fMask |= MIIM_BITMAP; + pmii_out->hbmpItem = HBITMAP_32(LOWORD(pmii_out->dwTypeData)); + } + } + return TRUE; +} + +/********************************************************************** * SetMenuItemInfoA (USER32.@) */ BOOL WINAPI SetMenuItemInfoA(HMENU hmenu, UINT item, BOOL bypos, const MENUITEMINFOA *lpmii) { - MENUITEMINFOA mii; + MENUITEMINFOW mii; TRACE("hmenu %p, item %u, by pos %d, info %p\n", hmenu, item, bypos, lpmii); - if( lpmii->cbSize != sizeof( mii) && - lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) { - SetLastError( ERROR_INVALID_PARAMETER); - return FALSE; - } - memcpy( &mii, lpmii, lpmii->cbSize); - if( lpmii->cbSize != sizeof( mii)) { - mii.cbSize = sizeof( mii); - mii.hbmpItem = NULL; - } + if (!MENU_NormalizeMenuItemInfoStruct( (MENUITEMINFOW *)lpmii, &mii )) return FALSE; + return SetMenuItemInfo_common(MENU_FindItem(&hmenu, &item, bypos? MF_BYPOSITION : 0), - (const MENUITEMINFOW *)&mii, FALSE); + &mii, FALSE); } /********************************************************************** @@ -4789,16 +4797,7 @@ BOOL WINAPI SetMenuItemInfoW(HMENU hmenu, UINT item, BOOL bypos, TRACE("hmenu %p, item %u, by pos %d, info %p\n", hmenu, item, bypos, lpmii); - if( lpmii->cbSize != sizeof( mii) && - lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) { - SetLastError( ERROR_INVALID_PARAMETER); - return FALSE; - } - memcpy( &mii, lpmii, lpmii->cbSize); - if( lpmii->cbSize != sizeof( mii)) { - mii.cbSize = sizeof( mii); - mii.hbmpItem = NULL; - } + if (!MENU_NormalizeMenuItemInfoStruct( lpmii, &mii )) return FALSE; return SetMenuItemInfo_common(MENU_FindItem(&hmenu, &item, bypos? MF_BYPOSITION : 0), &mii, TRUE); } @@ -4901,23 +4900,14 @@ BOOL WINAPI InsertMenuItemA(HMENU hMenu, UINT uItem, BOOL bypos, const MENUITEMINFOA *lpmii) { MENUITEM *item; - MENUITEMINFOA mii; + MENUITEMINFOW mii; TRACE("hmenu %p, item %04x, by pos %d, info %p\n", hMenu, uItem, bypos, lpmii); - if( lpmii->cbSize != sizeof( mii) && - lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) { - SetLastError( ERROR_INVALID_PARAMETER); - return FALSE; - } - memcpy( &mii, lpmii, lpmii->cbSize); - if( lpmii->cbSize != sizeof( mii)) { - mii.cbSize = sizeof( mii); - mii.hbmpItem = NULL; - } + if (!MENU_NormalizeMenuItemInfoStruct( (MENUITEMINFOW *)lpmii, &mii )) return FALSE; item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 ); - return SetMenuItemInfo_common(item, (const MENUITEMINFOW *)&mii, FALSE); + return SetMenuItemInfo_common(item, &mii, FALSE); } @@ -4932,16 +4922,7 @@ BOOL WINAPI InsertMenuItemW(HMENU hMenu, UINT uItem, BOOL bypos, TRACE("hmenu %p, item %04x, by pos %d, info %p\n", hMenu, uItem, bypos, lpmii); - if( lpmii->cbSize != sizeof( mii) && - lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) { - SetLastError( ERROR_INVALID_PARAMETER); - return FALSE; - } - memcpy( &mii, lpmii, lpmii->cbSize); - if( lpmii->cbSize != sizeof( mii)) { - mii.cbSize = sizeof( mii); - mii.hbmpItem = NULL; - } + if (!MENU_NormalizeMenuItemInfoStruct( lpmii, &mii )) return FALSE; item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 ); return SetMenuItemInfo_common(item, &mii, TRUE); diff --git a/dlls/user32/tests/menu.c b/dlls/user32/tests/menu.c index 868fd9aa802..a1af9446a6d 100644 --- a/dlls/user32/tests/menu.c +++ b/dlls/user32/tests/menu.c @@ -2451,6 +2451,48 @@ static HMENU create_menu_from_data(const struct menu_data *item, INT item_count) return hmenu; } +/* use InsertMenuItem: does not set the MFT_BITMAP flag, + * and does not accept non-magic bitmaps with invalid + * bitmap handles */ +static HMENU create_menuitem_from_data(const struct menu_data *item, INT item_count) +{ + HMENU hmenu; + INT i; + BOOL ret; + MENUITEMINFO mii = { sizeof( MENUITEMINFO)}; + + hmenu = CreateMenu(); + assert(hmenu != 0); + + for (i = 0; i < item_count; i++) + { + SetLastError(0xdeadbeef); + + mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STATE; + mii.fType = 0; + if( item[i].type & MFT_BITMAP) + { + mii.fMask |= MIIM_BITMAP; + mii.hbmpItem = (HBITMAP)item[i].str; + } + else if( item[i].type & MFT_SEPARATOR) + mii.fType = MFT_SEPARATOR; + else + { + mii.fMask |= MIIM_STRING; + mii.dwTypeData = (LPSTR)item[i].str; + mii.cch = strlen( item[i].str); + } + mii.fState = 0; + if( item[i].type & MF_HELP) mii.fType |= MF_HELP; + mii.wID = item[i].id; + ret = InsertMenuItem( hmenu, -1, TRUE, &mii); + ok(ret, "%d: InsertMenuItem(%04x, %04x, %p) error %u\n", + i, item[i].type, item[i].id, item[i].str, GetLastError()); + } + return hmenu; +} + static void compare_menu_data(HMENU hmenu, const struct menu_data *item, INT item_count) { INT count, i; @@ -2479,14 +2521,12 @@ static void compare_menu_data(HMENU hmenu, const struct menu_data *item, INT ite "%u: expected fType %04x, got %04x\n", i, item[i].type, mii.fType); ok(mii.wID == item[i].id, "%u: expected wID %04x, got %04x\n", i, item[i].id, mii.wID); - if (item[i].type & (MF_BITMAP | MF_SEPARATOR)) - { + if (mii.hbmpItem || !item[i].str) /* For some reason Windows sets high word to not 0 for * not "magic" ids. */ ok(LOWORD(mii.hbmpItem) == LOWORD(item[i].str), "%u: expected hbmpItem %p, got %p\n", i, item[i].str, mii.hbmpItem); - } else { ok(mii.cch == strlen(item[i].str), @@ -2499,6 +2539,7 @@ static void compare_menu_data(HMENU hmenu, const struct menu_data *item, INT ite static void test_InsertMenu(void) { + HBITMAP hbm = CreateBitmap(1,1,1,1,NULL); /* Note: XP treats only bitmap handles 1 - 6 as "magic" ones * regardless of their id. */ @@ -2514,16 +2555,28 @@ static void test_InsertMenu(void) { MF_STRING|MF_HELP, 2, "Help" }, { MF_BITMAP|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(1) } }; - static const struct menu_data in2[] = + static const struct menu_data out1a[] = + { + { MF_STRING, 1, "File" }, + { MF_STRING|MF_HELP, 2, "Help" }, + { MF_HELP, SC_CLOSE, MAKEINTRESOURCE(1) } + }; + const struct menu_data in2[] = { { MF_STRING, 1, "File" }, - { MF_BITMAP|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(100) }, + { MF_BITMAP|MF_HELP, SC_CLOSE, (char*)hbm }, { MF_STRING|MF_HELP, 2, "Help" } }; - static const struct menu_data out2[] = + const struct menu_data out2[] = { { MF_STRING, 1, "File" }, - { MF_BITMAP|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(100) }, + { MF_BITMAP|MF_HELP, SC_CLOSE, (char*)hbm }, + { MF_STRING|MF_HELP, 2, "Help" } + }; + const struct menu_data out2a[] = + { + { MF_STRING, 1, "File" }, + { MF_HELP, SC_CLOSE, (char*)hbm }, { MF_STRING|MF_HELP, 2, "Help" } }; static const struct menu_data in3[] = @@ -2550,9 +2603,16 @@ static void test_InsertMenu(void) { MF_STRING|MF_HELP, 2, "Help" }, { MF_BITMAP|MF_HELP, 1, MAKEINTRESOURCE(1) } }; + static const struct menu_data out4a[] = + { + { MF_STRING, 1, "File" }, + { MF_STRING|MF_HELP, 2, "Help" }, + { MF_HELP, 1, MAKEINTRESOURCE(1) } + }; HMENU hmenu; #define create_menu(a) create_menu_from_data((a), sizeof(a)/sizeof((a)[0])) +#define create_menuitem(a) create_menuitem_from_data((a), sizeof(a)/sizeof((a)[0])) #define compare_menu(h, a) compare_menu_data((h), (a), sizeof(a)/sizeof((a)[0])) hmenu = create_menu(in1); @@ -2571,7 +2631,25 @@ static void test_InsertMenu(void) compare_menu(hmenu, out4); DestroyMenu(hmenu); + /* now using InsertMenuItemInfo */ + hmenu = create_menuitem(in1); + compare_menu(hmenu, out1a); + DestroyMenu(hmenu); + + hmenu = create_menuitem(in2); + compare_menu(hmenu, out2a); + DestroyMenu(hmenu); + + hmenu = create_menuitem(in3); + compare_menu(hmenu, out3); + DestroyMenu(hmenu); + + hmenu = create_menuitem(in4); + compare_menu(hmenu, out4a); + DestroyMenu(hmenu); + #undef create_menu +#undef create_menuitem #undef compare_menu } @@ -2940,6 +3018,7 @@ static void test_menu_maxdepth(void) int i; DWORD ret; + SetLastError(12345678); for( i = 0; i < NR_MENUS; i++) { hmenus[i] = CreatePopupMenu(); if( !hmenus[i]) break; @@ -2950,7 +3029,7 @@ static void test_menu_maxdepth(void) if( !ret) break; } trace("Maximum depth is %d\n", i); -todo_wine + ok( GetLastError() == 12345678, "unexpected error %d\n", GetLastError()); ok( i < NR_MENUS || broken( i == NR_MENUS), /* win98, NT */ "no ( or very large) limit on menu depth!\n"); @@ -2977,9 +3056,8 @@ static void test_menu_circref(void) ok( ret, "AppendMenu failed, error is %d\n", GetLastError()); /* now attempt to change the string of the first item of menu1 */ ret = ModifyMenuA( menu1, (UINT_PTR)menu2, MF_POPUP, (UINT_PTR)menu2, "menu 2"); -todo_wine ok( !ret || - broken( 0), /* win98, NT */ + broken( ret), /* win98, NT */ "ModifyMenu should have failed.\n"); if( !ret) { /* will probably stack fault if the ModifyMenu succeeded */ ret = GetMenuState( menu1, 123, 0); diff --git a/dlls/winealsa.drv/dsoutput.c b/dlls/winealsa.drv/dsoutput.c index 9c6d7fdb598..dd95ad03aa6 100644 --- a/dlls/winealsa.drv/dsoutput.c +++ b/dlls/winealsa.drv/dsoutput.c @@ -927,6 +927,13 @@ DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv) TRACE("driver created\n"); + /* the HAL isn't much better than the HEL if we can't do mmap() */ + if (!(WOutDev[wDevID].outcaps.dwSupport & WAVECAPS_DIRECTSOUND)) + { + WARN("MMAP not supported for this device, falling back to waveout, should be harmless\n"); + return MMSYSERR_NOTSUPPORTED; + } + *idrv = HeapAlloc(GetProcessHeap(),0,sizeof(IDsDriverImpl)); if (!*idrv) return MMSYSERR_NOMEM; diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 6b8204915e0..682624bd605 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -534,17 +534,15 @@ static void shader_arb_load_constants( IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) device; IWineD3DStateBlockImpl* stateBlock = deviceImpl->stateBlock; - const struct wined3d_gl_info *gl_info = &deviceImpl->adapter->gl_info; + const struct WineD3DContext *context = context_get_current(); + const struct wined3d_gl_info *gl_info = context->gl_info; if (useVertexShader) { IWineD3DBaseShaderImpl* vshader = (IWineD3DBaseShaderImpl*) stateBlock->vertexShader; /* Load DirectX 9 float constants for vertex shader */ - deviceImpl->highest_dirty_vs_const = shader_arb_load_constantsF( - vshader, gl_info, GL_VERTEX_PROGRAM_ARB, - deviceImpl->highest_dirty_vs_const, - stateBlock->vertexShaderConstantF, - deviceImpl->activeContext->vshader_const_dirty); + deviceImpl->highest_dirty_vs_const = shader_arb_load_constantsF(vshader, gl_info, GL_VERTEX_PROGRAM_ARB, + deviceImpl->highest_dirty_vs_const, stateBlock->vertexShaderConstantF, context->vshader_const_dirty); shader_arb_vs_local_constants(deviceImpl); } @@ -553,11 +551,8 @@ static void shader_arb_load_constants( IWineD3DBaseShaderImpl* pshader = (IWineD3DBaseShaderImpl*) stateBlock->pixelShader; /* Load DirectX 9 float constants for pixel shader */ - deviceImpl->highest_dirty_ps_const = shader_arb_load_constantsF( - pshader, gl_info, GL_FRAGMENT_PROGRAM_ARB, - deviceImpl->highest_dirty_ps_const, - stateBlock->pixelShaderConstantF, - deviceImpl->activeContext->pshader_const_dirty); + deviceImpl->highest_dirty_ps_const = shader_arb_load_constantsF(pshader, gl_info, GL_FRAGMENT_PROGRAM_ARB, + deviceImpl->highest_dirty_ps_const, stateBlock->pixelShaderConstantF, context->pshader_const_dirty); shader_arb_ps_local_constants(deviceImpl); } } @@ -565,22 +560,26 @@ static void shader_arb_load_constants( static void shader_arb_update_float_vertex_constants(IWineD3DDevice *iface, UINT start, UINT count) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; + struct WineD3DContext *context = context_get_current(); /* We don't want shader constant dirtification to be an O(contexts), so just dirtify the active * context. On a context switch the old context will be fully dirtified */ - memset(This->activeContext->vshader_const_dirty + start, 1, - sizeof(*This->activeContext->vshader_const_dirty) * count); + if (!context || ((IWineD3DSurfaceImpl *)context->surface)->resource.wineD3DDevice != This) return; + + memset(context->vshader_const_dirty + start, 1, sizeof(*context->vshader_const_dirty) * count); This->highest_dirty_vs_const = max(This->highest_dirty_vs_const, start + count); } static void shader_arb_update_float_pixel_constants(IWineD3DDevice *iface, UINT start, UINT count) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; + struct WineD3DContext *context = context_get_current(); /* We don't want shader constant dirtification to be an O(contexts), so just dirtify the active * context. On a context switch the old context will be fully dirtified */ - memset(This->activeContext->pshader_const_dirty + start, 1, - sizeof(*This->activeContext->pshader_const_dirty) * count); + if (!context || ((IWineD3DSurfaceImpl *)context->surface)->resource.wineD3DDevice != This) return; + + memset(context->pshader_const_dirty + start, 1, sizeof(*context->pshader_const_dirty) * count); This->highest_dirty_ps_const = max(This->highest_dirty_ps_const, start + count); } @@ -4216,7 +4215,8 @@ static inline void find_arb_vs_compile_args(IWineD3DVertexShaderImpl *shader, IW static void shader_arb_select(IWineD3DDevice *iface, BOOL usePS, BOOL useVS) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; struct shader_arb_priv *priv = This->shader_priv; - const struct wined3d_gl_info *gl_info = &This->adapter->gl_info; + struct WineD3DContext *context = context_get_current(); + const struct wined3d_gl_info *gl_info = context->gl_info; int i; /* Deal with pixel shaders first so the vertex shader arg function has the input signature ready */ @@ -4251,7 +4251,7 @@ static void shader_arb_select(IWineD3DDevice *iface, BOOL usePS, BOOL useVS) { This->highest_dirty_ps_const = max(This->highest_dirty_ps_const, 8); for(i = 0; i < 8; i++) { - This->activeContext->pshader_const_dirty[i] = 1; + context->pshader_const_dirty[i] = 1; } /* Also takes care of loading local constants */ shader_arb_load_constants(iface, TRUE, FALSE); @@ -4359,8 +4359,6 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) { IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)baseShader->baseShader.device; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); - if (shader_is_pshader_version(baseShader->baseShader.reg_maps.shader_version.type)) { IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *) iface; @@ -4369,6 +4367,9 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) { if(!shader_data) return; /* This can happen if a shader was never compiled */ ENTER_GL(); + + if(shader_data->num_gl_shaders) ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); + for(i = 0; i < shader_data->num_gl_shaders; i++) { GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId)); checkGLcall("GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId))"); @@ -4384,6 +4385,9 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) { if(!shader_data) return; /* This can happen if a shader was never compiled */ ENTER_GL(); + + if(shader_data->num_gl_shaders) ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); + for(i = 0; i < shader_data->num_gl_shaders; i++) { GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId)); checkGLcall("GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId))"); @@ -5168,7 +5172,7 @@ static void state_texfactor_arbfp(DWORD state, IWineD3DStateBlockImpl *statebloc if (use_ps(stateblock)) return; device = stateblock->wineD3DDevice; - device->activeContext->pshader_const_dirty[ARB_FFP_CONST_TFACTOR] = 1; + context->pshader_const_dirty[ARB_FFP_CONST_TFACTOR] = 1; device->highest_dirty_ps_const = max(device->highest_dirty_ps_const, ARB_FFP_CONST_TFACTOR + 1); } @@ -5189,7 +5193,7 @@ static void state_arb_specularenable(DWORD state, IWineD3DStateBlockImpl *stateb if (use_ps(stateblock)) return; device = stateblock->wineD3DDevice; - device->activeContext->pshader_const_dirty[ARB_FFP_CONST_SPECULAR_ENABLE] = 1; + context->pshader_const_dirty[ARB_FFP_CONST_SPECULAR_ENABLE] = 1; device->highest_dirty_ps_const = max(device->highest_dirty_ps_const, ARB_FFP_CONST_SPECULAR_ENABLE + 1); } @@ -5227,7 +5231,7 @@ static void set_bumpmat_arbfp(DWORD state, IWineD3DStateBlockImpl *stateblock, W return; } } else if(device->shader_backend == &arb_program_shader_backend) { - device->activeContext->pshader_const_dirty[ARB_FFP_CONST_BUMPMAT(stage)] = 1; + context->pshader_const_dirty[ARB_FFP_CONST_BUMPMAT(stage)] = 1; device->highest_dirty_ps_const = max(device->highest_dirty_ps_const, ARB_FFP_CONST_BUMPMAT(stage) + 1); } @@ -5262,7 +5266,7 @@ static void tex_bumpenvlum_arbfp(DWORD state, IWineD3DStateBlockImpl *stateblock return; } } else if(device->shader_backend == &arb_program_shader_backend) { - device->activeContext->pshader_const_dirty[ARB_FFP_CONST_LUMINANCE(stage)] = 1; + context->pshader_const_dirty[ARB_FFP_CONST_LUMINANCE(stage)] = 1; device->highest_dirty_ps_const = max(device->highest_dirty_ps_const, ARB_FFP_CONST_LUMINANCE(stage) + 1); } diff --git a/dlls/wined3d/basetexture.c b/dlls/wined3d/basetexture.c index 25a47b0a328..0e74fd110d2 100644 --- a/dlls/wined3d/basetexture.c +++ b/dlls/wined3d/basetexture.c @@ -63,7 +63,7 @@ void basetexture_unload(IWineD3DBaseTexture *iface) IWineD3DDeviceImpl *device = This->resource.wineD3DDevice; if(This->baseTexture.textureName) { - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); glDeleteTextures(1, &This->baseTexture.textureName); This->baseTexture.textureName = 0; @@ -71,7 +71,7 @@ void basetexture_unload(IWineD3DBaseTexture *iface) } if(This->baseTexture.srgbTextureName) { - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); glDeleteTextures(1, &This->baseTexture.srgbTextureName); This->baseTexture.srgbTextureName = 0; @@ -135,7 +135,7 @@ HRESULT basetexture_set_autogen_filter_type(IWineD3DBaseTexture *iface, WINED3DT * Or should we delay the applying until the texture is used for drawing? For now, apply * immediately. */ - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); glBindTexture(textureDimensions, This->baseTexture.textureName); checkGLcall("glBindTexture"); diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c index bd5ddbafd3c..157b218da57 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c @@ -603,7 +603,7 @@ static void STDMETHODCALLTYPE buffer_UnLoad(IWineD3DBuffer *iface) { IWineD3DDeviceImpl *device = This->resource.wineD3DDevice; - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); /* Download the buffer, but don't permanently enable double buffering */ if(!(This->flags & WINED3D_BUFFER_DOUBLEBUFFER)) @@ -690,7 +690,7 @@ static void STDMETHODCALLTYPE buffer_PreLoad(IWineD3DBuffer *iface) TRACE("iface %p\n", iface); - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); if (!This->buffer_object) { @@ -800,7 +800,7 @@ static void STDMETHODCALLTYPE buffer_PreLoad(IWineD3DBuffer *iface) if (!device->isInDraw) { - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); } ENTER_GL(); GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object)); @@ -950,7 +950,7 @@ static HRESULT STDMETHODCALLTYPE buffer_Map(IWineD3DBuffer *iface, UINT offset, IWineD3DDeviceImpl_MarkStateDirty(This->resource.wineD3DDevice, STATE_INDEXBUFFER); } - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object)); This->resource.allocatedMemory = GL_EXTCALL(glMapBufferARB(This->buffer_type_hint, GL_READ_WRITE_ARB)); @@ -1002,7 +1002,7 @@ static HRESULT STDMETHODCALLTYPE buffer_Unmap(IWineD3DBuffer *iface) IWineD3DDeviceImpl_MarkStateDirty(This->resource.wineD3DDevice, STATE_INDEXBUFFER); } - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object)); GL_EXTCALL(glUnmapBufferARB(This->buffer_type_hint)); diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 172cd6b01a5..413c1d62868 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -2,6 +2,7 @@ * Context and render target management in wined3d * * Copyright 2007-2008 Stefan Dösinger for CodeWeavers + * Copyright 2009 Henri Verbeet for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -29,17 +30,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d); #define GLINFO_LOCATION (*gl_info) -/* The last used device. - * - * If the application creates multiple devices and switches between them, ActivateContext has to - * change the opengl context. This flag allows to keep track which device is active - */ -static IWineD3DDeviceImpl *last_device; - -void context_set_last_device(IWineD3DDeviceImpl *device) -{ - last_device = device; -} +static DWORD wined3d_context_tls_idx; /* FBO helper functions */ @@ -461,65 +452,141 @@ static void context_apply_fbo_state(struct WineD3DContext *context) context_check_fbo_status(context); } +/* Context activation is done by the caller. */ +void context_alloc_occlusion_query(struct WineD3DContext *context, struct wined3d_occlusion_query *query) +{ + const struct wined3d_gl_info *gl_info = context->gl_info; + + if (context->free_occlusion_query_count) + { + query->id = context->free_occlusion_queries[--context->free_occlusion_query_count]; + } + else + { + if (GL_SUPPORT(ARB_OCCLUSION_QUERY)) + { + ENTER_GL(); + GL_EXTCALL(glGenQueriesARB(1, &query->id)); + checkGLcall("glGenQueriesARB"); + LEAVE_GL(); + + TRACE("Allocated occlusion query %u in context %p.\n", query->id, context); + } + else + { + WARN("Occlusion queries not supported, not allocating query id.\n"); + query->id = 0; + } + } + + query->context = context; + list_add_head(&context->occlusion_queries, &query->entry); +} + +void context_free_occlusion_query(struct wined3d_occlusion_query *query) +{ + struct WineD3DContext *context = query->context; + + list_remove(&query->entry); + query->context = NULL; + + if (context->free_occlusion_query_count >= context->free_occlusion_query_size - 1) + { + UINT new_size = context->free_occlusion_query_size << 1; + GLuint *new_data = HeapReAlloc(GetProcessHeap(), 0, context->free_occlusion_queries, + new_size * sizeof(*context->free_occlusion_queries)); + + if (!new_data) + { + ERR("Failed to grow free list, leaking query %u in context %p.\n", query->id, context); + return; + } + + context->free_occlusion_query_size = new_size; + context->free_occlusion_queries = new_data; + } + + context->free_occlusion_queries[context->free_occlusion_query_count++] = query->id; +} + +/* Context activation is done by the caller. */ +void context_alloc_event_query(struct WineD3DContext *context, struct wined3d_event_query *query) +{ + const struct wined3d_gl_info *gl_info = context->gl_info; + + if (context->free_event_query_count) + { + query->id = context->free_event_queries[--context->free_event_query_count]; + } + else + { + if (GL_SUPPORT(APPLE_FENCE)) + { + ENTER_GL(); + GL_EXTCALL(glGenFencesAPPLE(1, &query->id)); + checkGLcall("glGenFencesAPPLE"); + LEAVE_GL(); + + TRACE("Allocated event query %u in context %p.\n", query->id, context); + } + else if(GL_SUPPORT(NV_FENCE)) + { + ENTER_GL(); + GL_EXTCALL(glGenFencesNV(1, &query->id)); + checkGLcall("glGenFencesNV"); + LEAVE_GL(); + + TRACE("Allocated event query %u in context %p.\n", query->id, context); + } + else + { + WARN("Event queries not supported, not allocating query id.\n"); + query->id = 0; + } + } + + query->context = context; + list_add_head(&context->event_queries, &query->entry); +} + +void context_free_event_query(struct wined3d_event_query *query) +{ + struct WineD3DContext *context = query->context; + + list_remove(&query->entry); + query->context = NULL; + + if (context->free_event_query_count >= context->free_event_query_size - 1) + { + UINT new_size = context->free_event_query_size << 1; + GLuint *new_data = HeapReAlloc(GetProcessHeap(), 0, context->free_event_queries, + new_size * sizeof(*context->free_event_queries)); + + if (!new_data) + { + ERR("Failed to grow free list, leaking query %u in context %p.\n", query->id, context); + return; + } + + context->free_event_query_size = new_size; + context->free_event_queries = new_data; + } + + context->free_event_queries[context->free_event_query_count++] = query->id; +} + void context_resource_released(IWineD3DDevice *iface, IWineD3DResource *resource, WINED3DRESOURCETYPE type) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; UINT i; + if (!This->d3d_initialized) return; + switch(type) { case WINED3DRTYPE_SURFACE: { - if ((IWineD3DSurface *)resource == This->lastActiveRenderTarget) - { - IWineD3DSwapChainImpl *swapchain; - - TRACE("Last active render target destroyed.\n"); - - /* Find a replacement surface for the currently active back - * buffer. The context manager does not do NULL checks, so - * switch to a valid target as long as the currently set - * surface is still valid. Use the surface of the implicit - * swpchain. If that is the same as the destroyed surface the - * device is destroyed and the lastActiveRenderTarget member - * shouldn't matter. */ - swapchain = This->swapchains ? (IWineD3DSwapChainImpl *)This->swapchains[0] : NULL; - if (swapchain) - { - if (swapchain->backBuffer && swapchain->backBuffer[0] != (IWineD3DSurface *)resource) - { - TRACE("Activating primary back buffer.\n"); - ActivateContext(This, swapchain->backBuffer[0], CTXUSAGE_RESOURCELOAD); - } - else if (!swapchain->backBuffer && swapchain->frontBuffer != (IWineD3DSurface *)resource) - { - /* Single buffering environment */ - TRACE("Activating primary front buffer.\n"); - - ActivateContext(This, swapchain->frontBuffer, CTXUSAGE_RESOURCELOAD); - } - else - { - /* Implicit render target destroyed, that means the - * device is being destroyed whatever we set here, it - * shouldn't matter. */ - TRACE("Device is being destroyed, setting lastActiveRenderTarget to 0xdeadbabe.\n"); - - This->lastActiveRenderTarget = (IWineD3DSurface *) 0xdeadbabe; - } - } - else - { - WARN("Render target set, but swapchain does not exist!\n"); - - /* May happen during ddraw uninitialization. */ - This->lastActiveRenderTarget = (IWineD3DSurface *)0xdeadcafe; - } - } - else if (This->d3d_initialized) - { - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); - } + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); for (i = 0; i < This->numContexts; ++i) { @@ -558,6 +625,151 @@ void context_resource_released(IWineD3DDevice *iface, IWineD3DResource *resource } } +static void context_destroy_gl_resources(struct WineD3DContext *context) +{ + const struct wined3d_gl_info *gl_info = context->gl_info; + struct wined3d_occlusion_query *occlusion_query; + struct wined3d_event_query *event_query; + struct fbo_entry *entry, *entry2; + BOOL has_glctx; + + has_glctx = pwglMakeCurrent(context->hdc, context->glCtx); + if (!has_glctx) WARN("Failed to activate context. Window already destroyed?\n"); + + ENTER_GL(); + + LIST_FOR_EACH_ENTRY(occlusion_query, &context->occlusion_queries, struct wined3d_occlusion_query, entry) + { + if (has_glctx && GL_SUPPORT(ARB_OCCLUSION_QUERY)) GL_EXTCALL(glDeleteQueriesARB(1, &occlusion_query->id)); + occlusion_query->context = NULL; + } + + LIST_FOR_EACH_ENTRY(event_query, &context->event_queries, struct wined3d_event_query, entry) + { + if (has_glctx) + { + if (GL_SUPPORT(APPLE_FENCE)) GL_EXTCALL(glDeleteFencesAPPLE(1, &event_query->id)); + else if (GL_SUPPORT(NV_FENCE)) GL_EXTCALL(glDeleteFencesNV(1, &event_query->id)); + } + event_query->context = NULL; + } + + LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context->fbo_list, struct fbo_entry, entry) { + if (!has_glctx) entry->id = 0; + context_destroy_fbo_entry(context, entry); + } + if (has_glctx) + { + if (context->src_fbo) + { + TRACE("Destroy src FBO %d\n", context->src_fbo); + context_destroy_fbo(context, &context->src_fbo); + } + if (context->dst_fbo) + { + TRACE("Destroy dst FBO %d\n", context->dst_fbo); + context_destroy_fbo(context, &context->dst_fbo); + } + if (context->dummy_arbfp_prog) + { + GL_EXTCALL(glDeleteProgramsARB(1, &context->dummy_arbfp_prog)); + } + + GL_EXTCALL(glDeleteQueriesARB(context->free_occlusion_query_count, context->free_occlusion_queries)); + + if (GL_SUPPORT(APPLE_FENCE)) + GL_EXTCALL(glDeleteFencesAPPLE(context->free_event_query_count, context->free_event_queries)); + else if (GL_SUPPORT(NV_FENCE)) + GL_EXTCALL(glDeleteFencesNV(context->free_event_query_count, context->free_event_queries)); + + checkGLcall("context cleanup"); + } + + LEAVE_GL(); + + HeapFree(GetProcessHeap(), 0, context->free_occlusion_queries); + HeapFree(GetProcessHeap(), 0, context->free_event_queries); + + if (!pwglMakeCurrent(NULL, NULL)) + { + ERR("Failed to disable GL context.\n"); + } + + if (context->isPBuffer) + { + GL_EXTCALL(wglReleasePbufferDCARB(context->pbuffer, context->hdc)); + GL_EXTCALL(wglDestroyPbufferARB(context->pbuffer)); + } + else + { + ReleaseDC(context->win_handle, context->hdc); + } + + pwglDeleteContext(context->glCtx); +} + +DWORD context_get_tls_idx(void) +{ + return wined3d_context_tls_idx; +} + +void context_set_tls_idx(DWORD idx) +{ + wined3d_context_tls_idx = idx; +} + +struct WineD3DContext *context_get_current(void) +{ + return TlsGetValue(wined3d_context_tls_idx); +} + +BOOL context_set_current(struct WineD3DContext *ctx) +{ + struct WineD3DContext *old = context_get_current(); + + if (old == ctx) + { + TRACE("Already using D3D context %p.\n", ctx); + return TRUE; + } + + if (old) + { + if (old->destroyed) + { + TRACE("Switching away from destroyed context %p.\n", old); + context_destroy_gl_resources(old); + HeapFree(GetProcessHeap(), 0, old); + } + else + { + old->current = 0; + } + } + + if (ctx) + { + TRACE("Switching to D3D context %p, GL context %p, device context %p.\n", ctx, ctx->glCtx, ctx->hdc); + if (!pwglMakeCurrent(ctx->hdc, ctx->glCtx)) + { + ERR("Failed to make GL context %p current on device context %p.\n", ctx->glCtx, ctx->hdc); + return FALSE; + } + ctx->current = 1; + } + else + { + TRACE("Clearing current D3D context.\n"); + if (!pwglMakeCurrent(NULL, NULL)) + { + ERR("Failed to clear current GL context.\n"); + return FALSE; + } + } + + return TlsSetValue(wined3d_context_tls_idx, ctx); +} + /***************************************************************************** * Context_MarkStateDirty * @@ -952,7 +1164,7 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar /* If we still don't have a pixel format, something is very wrong as ChoosePixelFormat barely fails */ if(!iPixelFormat) { ERR("Can't find a suitable iPixelFormat\n"); - return FALSE; + return NULL; } DescribePixelFormat(hdc, iPixelFormat, sizeof(pfd), &pfd); @@ -971,7 +1183,7 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar if(!res) { ERR("wglSetPixelFormatWINE failed on HDC=%p for iPixelFormat=%d\n", hdc, iPixelFormat); - return FALSE; + return NULL; } } else if(oldPixelFormat) { /* OpenGL doesn't allow pixel format adjustments. Print an error and continue using the old format. @@ -979,7 +1191,7 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar ERR("HDC=%p is already set to iPixelFormat=%d and OpenGL doesn't allow changes!\n", hdc, oldPixelFormat); } else { ERR("SetPixelFormat failed on HDC=%p for iPixelFormat=%d\n", hdc, iPixelFormat); - return FALSE; + return NULL; } } } @@ -1019,6 +1231,7 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar } ret->gl_info = &This->adapter->gl_info; ret->surface = (IWineD3DSurface *) target; + ret->current_rt = (IWineD3DSurface *)target; ret->isPBuffer = create_pbuffer; ret->tid = GetCurrentThreadId(); if(This->shader_backend->shader_dirtifyable_constants((IWineD3DDevice *) This)) { @@ -1033,12 +1246,27 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar sizeof(*ret->pshader_const_dirty) * GL_LIMITS(pshader_constantsF)); } + ret->free_occlusion_query_size = 4; + ret->free_occlusion_queries = HeapAlloc(GetProcessHeap(), 0, + ret->free_occlusion_query_size * sizeof(*ret->free_occlusion_queries)); + if (!ret->free_occlusion_queries) goto out; + + list_init(&ret->occlusion_queries); + + ret->free_event_query_size = 4; + ret->free_event_queries = HeapAlloc(GetProcessHeap(), 0, + ret->free_event_query_size * sizeof(*ret->free_event_queries)); + if (!ret->free_event_queries) goto out; + + list_init(&ret->event_queries); + TRACE("Successfully created new context %p\n", ret); list_init(&ret->fbo_list); /* Set up the context defaults */ - if(pwglMakeCurrent(hdc, ctx) == FALSE) { + if (!context_set_current(ret)) + { ERR("Cannot activate context to set up defaults\n"); goto out; } @@ -1122,12 +1350,19 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar } LEAVE_GL(); - context_set_last_device(This); This->frag_pipe->enable_extension((IWineD3DDevice *) This, TRUE); return ret; out: + if (ret) + { + HeapFree(GetProcessHeap(), 0, ret->free_event_queries); + HeapFree(GetProcessHeap(), 0, ret->free_occlusion_queries); + HeapFree(GetProcessHeap(), 0, ret->pshader_const_dirty); + HeapFree(GetProcessHeap(), 0, ret->vshader_const_dirty); + HeapFree(GetProcessHeap(), 0, ret); + } return NULL; } @@ -1156,7 +1391,6 @@ static void RemoveContextFromArray(IWineD3DDeviceImpl *This, WineD3DContext *con { if (This->contexts[i] == context) { - HeapFree(GetProcessHeap(), 0, context); found = TRUE; break; } @@ -1202,66 +1436,32 @@ static void RemoveContextFromArray(IWineD3DDeviceImpl *This, WineD3DContext *con * context: Context to destroy * *****************************************************************************/ -void DestroyContext(IWineD3DDeviceImpl *This, WineD3DContext *context) { - const struct wined3d_gl_info *gl_info = context->gl_info; - struct fbo_entry *entry, *entry2; - BOOL has_glctx; +void DestroyContext(IWineD3DDeviceImpl *This, WineD3DContext *context) +{ + BOOL destroy; TRACE("Destroying ctx %p\n", context); - /* The correct GL context needs to be active to cleanup the GL resources below */ - has_glctx = pwglMakeCurrent(context->hdc, context->glCtx); - context_set_last_device(NULL); - - if (!has_glctx) WARN("Failed to activate context. Window already destroyed?\n"); - - ENTER_GL(); - - LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context->fbo_list, struct fbo_entry, entry) { - if (!has_glctx) entry->id = 0; - context_destroy_fbo_entry(context, entry); - } - if (has_glctx) + if (context->tid == GetCurrentThreadId() || !context->current) { - if (context->src_fbo) - { - TRACE("Destroy src FBO %d\n", context->src_fbo); - context_destroy_fbo(context, &context->src_fbo); - } - if (context->dst_fbo) - { - TRACE("Destroy dst FBO %d\n", context->dst_fbo); - context_destroy_fbo(context, &context->dst_fbo); - } - if (context->dummy_arbfp_prog) + context_destroy_gl_resources(context); + destroy = TRUE; + + if (!context_set_current(NULL)) { - GL_EXTCALL(glDeleteProgramsARB(1, &context->dummy_arbfp_prog)); + ERR("Failed to clear current D3D context.\n"); } } - - LEAVE_GL(); - - if (This->activeContext == context) - { - This->activeContext = NULL; - TRACE("Destroying the active context.\n"); - } - - /* Cleanup the GL context */ - if (!pwglMakeCurrent(NULL, NULL)) + else { - ERR("Failed to disable GL context.\n"); + context->destroyed = 1; + destroy = FALSE; } - if(context->isPBuffer) { - GL_EXTCALL(wglReleasePbufferDCARB(context->pbuffer, context->hdc)); - GL_EXTCALL(wglDestroyPbufferARB(context->pbuffer)); - } else ReleaseDC(context->win_handle, context->hdc); - pwglDeleteContext(context->glCtx); - HeapFree(GetProcessHeap(), 0, context->vshader_const_dirty); HeapFree(GetProcessHeap(), 0, context->pshader_const_dirty); RemoveContextFromArray(This, context); + if (destroy) HeapFree(GetProcessHeap(), 0, context); } /* GL locking is done by the caller */ @@ -1513,25 +1713,34 @@ static WineD3DContext *findThreadContextForSwapChain(IWineD3DSwapChain *swapchai static inline WineD3DContext *FindContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, DWORD tid) { IWineD3DSwapChain *swapchain = NULL; BOOL readTexture = wined3d_settings.offscreen_rendering_mode != ORM_FBO && This->render_offscreen; - WineD3DContext *context = This->activeContext; + struct WineD3DContext *current_context = context_get_current(); BOOL oldRenderOffscreen = This->render_offscreen; - const struct GlPixelFormatDesc *old = ((IWineD3DSurfaceImpl *)This->lastActiveRenderTarget)->resource.format_desc; - const struct GlPixelFormatDesc *new = ((IWineD3DSurfaceImpl *)target)->resource.format_desc; const struct StateEntry *StateTable = This->StateTable; + const struct GlPixelFormatDesc *old, *new; + struct WineD3DContext *context; - /* To compensate the lack of format switching with some offscreen rendering methods and on onscreen buffers - * the alpha blend state changes with different render target formats - */ - if (old->format != new->format) + if (current_context && current_context->destroyed) current_context = NULL; + + if (!target) { - /* Disable blending when the alpha mask has changed and when a format doesn't support blending */ - if ((old->alpha_mask && !new->alpha_mask) || (!old->alpha_mask && new->alpha_mask) - || !(new->Flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING)) + if (current_context + && ((IWineD3DSurfaceImpl *)current_context->surface)->resource.wineD3DDevice == This) { - Context_MarkStateDirty(context, STATE_RENDER(WINED3DRS_ALPHABLENDENABLE), StateTable); + target = current_context->current_rt; + } + else + { + IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)This->swapchains[0]; + if (swapchain->backBuffer) target = swapchain->backBuffer[0]; + else target = swapchain->frontBuffer; } } + if (current_context && current_context->current_rt == target) + { + return current_context; + } + if (SUCCEEDED(IWineD3DSurface_GetContainer(target, &IID_IWineD3DSwapChain, (void **)&swapchain))) { TRACE("Rendering onscreen\n"); @@ -1549,92 +1758,90 @@ static inline WineD3DContext *FindContext(IWineD3DDeviceImpl *This, IWineD3DSurf } } IWineD3DSwapChain_Release(swapchain); - - if(oldRenderOffscreen) { - Context_MarkStateDirty(context, WINED3DTS_PROJECTION, StateTable); - Context_MarkStateDirty(context, STATE_VDECL, StateTable); - Context_MarkStateDirty(context, STATE_VIEWPORT, StateTable); - Context_MarkStateDirty(context, STATE_SCISSORRECT, StateTable); - Context_MarkStateDirty(context, STATE_FRONTFACE, StateTable); - } - - } else { + } + else + { TRACE("Rendering offscreen\n"); This->render_offscreen = TRUE; - switch(wined3d_settings.offscreen_rendering_mode) { - case ORM_FBO: - /* FBOs do not need a different context. Stay with whatever context is active at the moment */ - if(This->activeContext && tid == This->lastThread) { - context = This->activeContext; - } else { - /* This may happen if the app jumps straight into offscreen rendering - * Start using the context of the primary swapchain. tid == 0 is no problem - * for findThreadContextForSwapChain. - * - * Can also happen on thread switches - in that case findThreadContextForSwapChain - * is perfect to call. - */ - context = findThreadContextForSwapChain(This->swapchains[0], tid); - } - break; - - case ORM_PBUFFER: +retry: + if (wined3d_settings.offscreen_rendering_mode == ORM_PBUFFER) + { + IWineD3DSurfaceImpl *targetimpl = (IWineD3DSurfaceImpl *)target; + if (!This->pbufferContext + || This->pbufferWidth < targetimpl->currentDesc.Width + || This->pbufferHeight < targetimpl->currentDesc.Height) { - IWineD3DSurfaceImpl *targetimpl = (IWineD3DSurfaceImpl *) target; - if(This->pbufferContext == NULL || - This->pbufferWidth < targetimpl->currentDesc.Width || - This->pbufferHeight < targetimpl->currentDesc.Height) { - if(This->pbufferContext) { - DestroyContext(This, This->pbufferContext); - } - - /* The display is irrelevant here, the window is 0. But CreateContext needs a valid X connection. - * Create the context on the same server as the primary swapchain. The primary swapchain is exists at this point. - */ - This->pbufferContext = CreateContext(This, targetimpl, - ((IWineD3DSwapChainImpl *) This->swapchains[0])->context[0]->win_handle, - TRUE /* pbuffer */, &((IWineD3DSwapChainImpl *)This->swapchains[0])->presentParms); - This->pbufferWidth = targetimpl->currentDesc.Width; - This->pbufferHeight = targetimpl->currentDesc.Height; - } - - if(This->pbufferContext) { - if(This->pbufferContext->tid != 0 && This->pbufferContext->tid != tid) { - FIXME("The PBuffr context is only supported for one thread for now!\n"); - } - This->pbufferContext->tid = tid; - context = This->pbufferContext; - break; - } else { - ERR("Failed to create a buffer context and drawable, falling back to back buffer offscreen rendering\n"); - wined3d_settings.offscreen_rendering_mode = ORM_BACKBUFFER; - } + if (This->pbufferContext) DestroyContext(This, This->pbufferContext); + + /* The display is irrelevant here, the window is 0. But + * CreateContext needs a valid X connection. Create the context + * on the same server as the primary swapchain. The primary + * swapchain is exists at this point. */ + This->pbufferContext = CreateContext(This, targetimpl, + ((IWineD3DSwapChainImpl *)This->swapchains[0])->context[0]->win_handle, + TRUE /* pbuffer */, &((IWineD3DSwapChainImpl *)This->swapchains[0])->presentParms); + This->pbufferWidth = targetimpl->currentDesc.Width; + This->pbufferHeight = targetimpl->currentDesc.Height; } - case ORM_BACKBUFFER: - /* Stay with the currently active context for back buffer rendering */ - if(This->activeContext && tid == This->lastThread) { - context = This->activeContext; - } else { - /* This may happen if the app jumps straight into offscreen rendering - * Start using the context of the primary swapchain. tid == 0 is no problem - * for findThreadContextForSwapChain. - * - * Can also happen on thread switches - in that case findThreadContextForSwapChain - * is perfect to call. - */ - context = findThreadContextForSwapChain(This->swapchains[0], tid); + if (This->pbufferContext) + { + if (This->pbufferContext->tid && This->pbufferContext->tid != tid) + { + FIXME("The PBuffer context is only supported for one thread for now!\n"); } - break; + This->pbufferContext->tid = tid; + context = This->pbufferContext; + } + else + { + ERR("Failed to create a buffer context and drawable, falling back to back buffer offscreen rendering.\n"); + wined3d_settings.offscreen_rendering_mode = ORM_BACKBUFFER; + goto retry; + } + } + else + { + /* Stay with the currently active context. */ + if (current_context + && ((IWineD3DSurfaceImpl *)current_context->surface)->resource.wineD3DDevice == This) + { + context = current_context; + } + else + { + /* This may happen if the app jumps straight into offscreen rendering + * Start using the context of the primary swapchain. tid == 0 is no problem + * for findThreadContextForSwapChain. + * + * Can also happen on thread switches - in that case findThreadContextForSwapChain + * is perfect to call. */ + context = findThreadContextForSwapChain(This->swapchains[0], tid); + } } + } - if(!oldRenderOffscreen) { - Context_MarkStateDirty(context, WINED3DTS_PROJECTION, StateTable); - Context_MarkStateDirty(context, STATE_VDECL, StateTable); - Context_MarkStateDirty(context, STATE_VIEWPORT, StateTable); - Context_MarkStateDirty(context, STATE_SCISSORRECT, StateTable); - Context_MarkStateDirty(context, STATE_FRONTFACE, StateTable); + if (This->render_offscreen != oldRenderOffscreen) + { + Context_MarkStateDirty(context, WINED3DTS_PROJECTION, StateTable); + Context_MarkStateDirty(context, STATE_VDECL, StateTable); + Context_MarkStateDirty(context, STATE_VIEWPORT, StateTable); + Context_MarkStateDirty(context, STATE_SCISSORRECT, StateTable); + Context_MarkStateDirty(context, STATE_FRONTFACE, StateTable); + } + + /* To compensate the lack of format switching with some offscreen rendering methods and on onscreen buffers + * the alpha blend state changes with different render target formats. */ + old = ((IWineD3DSurfaceImpl *)context->current_rt)->resource.format_desc; + new = ((IWineD3DSurfaceImpl *)target)->resource.format_desc; + if (old->format != new->format) + { + /* Disable blending when the alpha mask has changed and when a format doesn't support blending. */ + if ((old->alpha_mask && !new->alpha_mask) || (!old->alpha_mask && new->alpha_mask) + || !(new->Flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING)) + { + Context_MarkStateDirty(context, STATE_RENDER(WINED3DRS_ALPHABLENDENABLE), StateTable); } } @@ -1664,7 +1871,8 @@ static inline WineD3DContext *FindContext(IWineD3DDeviceImpl *This, IWineD3DSurf * After that, the outer ActivateContext(which calls PreLoad) can activate the new * target for the new thread */ - if (readTexture && This->lastActiveRenderTarget != target) { + if (readTexture && context->current_rt != target) + { BOOL oldInDraw = This->isInDraw; /* PreLoad requires a context to load the texture, thus it will call ActivateContext. @@ -1676,33 +1884,39 @@ static inline WineD3DContext *FindContext(IWineD3DDeviceImpl *This, IWineD3DSurf /* Do that before switching the context: * Read the back buffer of the old drawable into the destination texture */ - if (((IWineD3DSurfaceImpl *)This->lastActiveRenderTarget)->texture_name_srgb) + if (((IWineD3DSurfaceImpl *)context->current_rt)->texture_name_srgb) { - surface_internal_preload(This->lastActiveRenderTarget, SRGB_BOTH); + surface_internal_preload(context->current_rt, SRGB_BOTH); } else { - surface_internal_preload(This->lastActiveRenderTarget, SRGB_RGB); + surface_internal_preload(context->current_rt, SRGB_RGB); } /* Assume that the drawable will be modified by some other things now */ - IWineD3DSurface_ModifyLocation(This->lastActiveRenderTarget, SFLAG_INDRAWABLE, FALSE); + IWineD3DSurface_ModifyLocation(context->current_rt, SFLAG_INDRAWABLE, FALSE); This->isInDraw = oldInDraw; } + context->draw_buffer_dirty = TRUE; + context->current_rt = target; + return context; } /* Context activation is done by the caller. */ -static void apply_draw_buffer(IWineD3DDeviceImpl *This, IWineD3DSurface *target, BOOL blit) +static void context_apply_draw_buffer(struct WineD3DContext *context, BOOL blit) { - const struct wined3d_gl_info *gl_info = This->activeContext->gl_info; + const struct wined3d_gl_info *gl_info = context->gl_info; + IWineD3DSurface *rt = context->current_rt; IWineD3DSwapChain *swapchain; + IWineD3DDeviceImpl *device; - if (SUCCEEDED(IWineD3DSurface_GetContainer(target, &IID_IWineD3DSwapChain, (void **)&swapchain))) + device = ((IWineD3DSurfaceImpl *)rt)->resource.wineD3DDevice; + if (SUCCEEDED(IWineD3DSurface_GetContainer(rt, &IID_IWineD3DSwapChain, (void **)&swapchain))) { IWineD3DSwapChain_Release((IUnknown *)swapchain); ENTER_GL(); - glDrawBuffer(surface_get_gl_buffer(target, swapchain)); + glDrawBuffer(surface_get_gl_buffer(rt, swapchain)); checkGLcall("glDrawBuffers()"); LEAVE_GL(); } @@ -1715,12 +1929,12 @@ static void apply_draw_buffer(IWineD3DDeviceImpl *This, IWineD3DSurface *target, { if (GL_SUPPORT(ARB_DRAW_BUFFERS)) { - GL_EXTCALL(glDrawBuffersARB(GL_LIMITS(buffers), This->draw_buffers)); + GL_EXTCALL(glDrawBuffersARB(GL_LIMITS(buffers), device->draw_buffers)); checkGLcall("glDrawBuffers()"); } else { - glDrawBuffer(This->draw_buffers[0]); + glDrawBuffer(device->draw_buffers[0]); checkGLcall("glDrawBuffer()"); } } else { @@ -1730,7 +1944,7 @@ static void apply_draw_buffer(IWineD3DDeviceImpl *This, IWineD3DSurface *target, } else { - glDrawBuffer(This->offscreenBuffer); + glDrawBuffer(device->offscreenBuffer); checkGLcall("glDrawBuffer()"); } LEAVE_GL(); @@ -1750,7 +1964,9 @@ static void apply_draw_buffer(IWineD3DDeviceImpl *This, IWineD3DSurface *target, * usage: Prepares the context for blitting, drawing or other actions * *****************************************************************************/ -void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextUsage usage) { +struct WineD3DContext *ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, enum ContextUsage usage) +{ + struct WineD3DContext *current_context = context_get_current(); DWORD tid = GetCurrentThreadId(); DWORD i, dirtyState, idx; BYTE shift; @@ -1759,48 +1975,29 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU const struct wined3d_gl_info *gl_info; TRACE("(%p): Selecting context for render target %p, thread %d\n", This, target, tid); - if(This->lastActiveRenderTarget != target || tid != This->lastThread) { - context = FindContext(This, target, tid); - context->draw_buffer_dirty = TRUE; - This->lastActiveRenderTarget = target; - This->lastThread = tid; - } else { - /* Stick to the old context */ - context = This->activeContext; - } + + context = FindContext(This, target, tid); gl_info = context->gl_info; /* Activate the opengl context */ - if(last_device != This || context != This->activeContext) { - BOOL ret; - - /* Prevent an unneeded context switch as those are expensive */ - if(context->glCtx && (context->glCtx == pwglGetCurrentContext())) { - TRACE("Already using gl context %p\n", context->glCtx); - } - else { - TRACE("Switching gl ctx to %p, hdc=%p ctx=%p\n", context, context->hdc, context->glCtx); + if (context != current_context) + { + if (!context_set_current(context)) ERR("Failed to activate the new context.\n"); + else This->frag_pipe->enable_extension((IWineD3DDevice *)This, !context->last_was_blit); - ret = pwglMakeCurrent(context->hdc, context->glCtx); - if(ret == FALSE) { - ERR("Failed to activate the new context\n"); - } else if(!context->last_was_blit) { - This->frag_pipe->enable_extension((IWineD3DDevice *) This, TRUE); - } else { - This->frag_pipe->enable_extension((IWineD3DDevice *) This, FALSE); - } - } - if(This->activeContext->vshader_const_dirty) { - memset(This->activeContext->vshader_const_dirty, 1, - sizeof(*This->activeContext->vshader_const_dirty) * GL_LIMITS(vshader_constantsF)); + if (context->vshader_const_dirty) + { + memset(context->vshader_const_dirty, 1, + sizeof(*context->vshader_const_dirty) * GL_LIMITS(vshader_constantsF)); + This->highest_dirty_vs_const = GL_LIMITS(vshader_constantsF); } - if(This->activeContext->pshader_const_dirty) { - memset(This->activeContext->pshader_const_dirty, 1, - sizeof(*This->activeContext->pshader_const_dirty) * GL_LIMITS(pshader_constantsF)); + if (context->pshader_const_dirty) + { + memset(context->pshader_const_dirty, 1, + sizeof(*context->pshader_const_dirty) * GL_LIMITS(pshader_constantsF)); + This->highest_dirty_ps_const = GL_LIMITS(pshader_constantsF); } - This->activeContext = context; - context_set_last_device(This); } switch (usage) { @@ -1812,7 +2009,7 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU LEAVE_GL(); } if (context->draw_buffer_dirty) { - apply_draw_buffer(This, target, FALSE); + context_apply_draw_buffer(context, FALSE); context->draw_buffer_dirty = FALSE; } break; @@ -1834,7 +2031,7 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU context->draw_buffer_dirty = TRUE; } if (context->draw_buffer_dirty) { - apply_draw_buffer(This, target, TRUE); + context_apply_draw_buffer(context, TRUE); if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) { context->draw_buffer_dirty = FALSE; } @@ -1902,8 +2099,6 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU default: FIXME("Unexpected context usage requested\n"); } -} -WineD3DContext *getActiveContext(void) { - return last_device->activeContext; + return context; } diff --git a/dlls/wined3d/cubetexture.c b/dlls/wined3d/cubetexture.c index 4a4ce1969a4..afba1e84ea3 100644 --- a/dlls/wined3d/cubetexture.c +++ b/dlls/wined3d/cubetexture.c @@ -66,7 +66,7 @@ static void cubetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3 { /* No danger of recursive calls, ActivateContext sets isInDraw to true * when loading offscreen render targets into their texture. */ - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); } if (This->resource.format_desc->format == WINED3DFMT_P8 diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index a1ed4dc1e7a..e62934c5056 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1191,32 +1191,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateQuery(IWineD3DDevice *iface, WINE /* allocated the 'extended' data based on the type of query requested */ switch(Type){ case WINED3DQUERYTYPE_OCCLUSION: - object->extendedData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WineQueryOcclusionData)); - ((WineQueryOcclusionData *)(object->extendedData))->ctx = This->activeContext; - - if(GL_SUPPORT(ARB_OCCLUSION_QUERY)) { - TRACE("(%p) Allocating data for an occlusion query\n", This); + object->extendedData = HeapAlloc(GetProcessHeap(), 0, sizeof(struct wined3d_occlusion_query)); + ((struct wined3d_occlusion_query *)object->extendedData)->context = NULL; + break; - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); - ENTER_GL(); - GL_EXTCALL(glGenQueriesARB(1, &((WineQueryOcclusionData *)(object->extendedData))->queryId)); - LEAVE_GL(); - break; - } case WINED3DQUERYTYPE_EVENT: - object->extendedData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WineQueryEventData)); - ((WineQueryEventData *)(object->extendedData))->ctx = This->activeContext; - - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); - ENTER_GL(); - if(GL_SUPPORT(APPLE_FENCE)) { - GL_EXTCALL(glGenFencesAPPLE(1, &((WineQueryEventData *)(object->extendedData))->fenceId)); - checkGLcall("glGenFencesAPPLE"); - } else if(GL_SUPPORT(NV_FENCE)) { - GL_EXTCALL(glGenFencesNV(1, &((WineQueryEventData *)(object->extendedData))->fenceId)); - checkGLcall("glGenFencesNV"); - } - LEAVE_GL(); + object->extendedData = HeapAlloc(GetProcessHeap(), 0, sizeof(struct wined3d_event_query)); + ((struct wined3d_event_query *)object->extendedData)->context = NULL; break; case WINED3DQUERYTYPE_VCACHE: @@ -2158,16 +2139,12 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Init3D(IWineD3DDevice *iface, if(swapchain->backBuffer && swapchain->backBuffer[0]) { TRACE("Setting rendertarget to %p\n", swapchain->backBuffer); This->render_targets[0] = swapchain->backBuffer[0]; - This->lastActiveRenderTarget = swapchain->backBuffer[0]; } else { TRACE("Setting rendertarget to %p\n", swapchain->frontBuffer); This->render_targets[0] = swapchain->frontBuffer; - This->lastActiveRenderTarget = swapchain->frontBuffer; } IWineD3DSurface_AddRef(This->render_targets[0]); - This->activeContext = swapchain->context[0]; - This->lastThread = GetCurrentThreadId(); /* Depth Stencil support */ This->stencilBufferTarget = This->auto_depth_stencil_buffer; @@ -2213,7 +2190,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Init3D(IWineD3DDevice *iface, case ORM_BACKBUFFER: { - if(This->activeContext->aux_buffers > 0) { + if (context_get_current()->aux_buffers > 0) + { TRACE("Using auxilliary buffer for offscreen rendering\n"); This->offscreenBuffer = GL_AUX0; } else { @@ -2318,7 +2296,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface, D3DCB_D /* I don't think that the interface guarantees that the device is destroyed from the same thread * it was created. Thus make sure a context is active for the glDelete* calls */ - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); if(This->logo_surface) IWineD3DSurface_Release(This->logo_surface); @@ -4400,7 +4378,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ProcessVertices(IWineD3DDevice *iface, } /* Need any context to write to the vbo. */ - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); /* ProcessVertices reads from vertex buffers, which have to be assigned. DrawPrimitive and DrawPrimitiveUP * control the streamIsUP flag, thus restore it afterwards. @@ -4866,7 +4844,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_EndScene(IWineD3DDevice *iface) { return WINED3DERR_INVALIDCALL; } - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); /* We only have to do this if we need to read the, swapbuffers performs a flush for us */ glFlush(); /* No checkGLcall here to avoid locking the lock just for checking a call that hardly ever @@ -4910,6 +4888,7 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa UINT drawable_width, drawable_height; IWineD3DSurfaceImpl *depth_stencil = (IWineD3DSurfaceImpl *) This->stencilBufferTarget; IWineD3DSwapChainImpl *swapchain = NULL; + struct WineD3DContext *context; /* When we're clearing parts of the drawable, make sure that the target surface is well up to date in the * drawable. After the clear we'll mark the drawable up to date, so we have to make sure that this is true @@ -4945,9 +4924,10 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa } } - target->get_drawable_size(target, &drawable_width, &drawable_height); + context = ActivateContext(This, (IWineD3DSurface *)target, CTXUSAGE_CLEAR); + + target->get_drawable_size(context, &drawable_width, &drawable_height); - ActivateContext(This, (IWineD3DSurface *) target, CTXUSAGE_CLEAR); ENTER_GL(); /* Only set the values up once, as they are not changing */ @@ -4968,19 +4948,19 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa if (vp->X != 0 || vp->Y != 0 || vp->Width < depth_stencil->currentDesc.Width || vp->Height < depth_stencil->currentDesc.Height) { - surface_load_ds_location(This->stencilBufferTarget, location); + surface_load_ds_location(This->stencilBufferTarget, context, location); } else if (This->stateBlock->renderState[WINED3DRS_SCISSORTESTENABLE] && ( This->stateBlock->scissorRect.left > 0 || This->stateBlock->scissorRect.top > 0 || This->stateBlock->scissorRect.right < depth_stencil->currentDesc.Width || This->stateBlock->scissorRect.bottom < depth_stencil->currentDesc.Height)) { - surface_load_ds_location(This->stencilBufferTarget, location); + surface_load_ds_location(This->stencilBufferTarget, context, location); } else if (Count > 0 && pRects && ( pRects[0].x1 > 0 || pRects[0].y1 > 0 || pRects[0].x2 < depth_stencil->currentDesc.Width || pRects[0].y2 < depth_stencil->currentDesc.Height)) { - surface_load_ds_location(This->stencilBufferTarget, location); + surface_load_ds_location(This->stencilBufferTarget, context, location); } } @@ -5065,7 +5045,7 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa /* Dirtify the target surface for now. If the surface is locked regularly, and an up to date sysmem copy exists, * it is most likely more efficient to perform a clear on the sysmem copy too instead of downloading it */ - IWineD3DSurface_ModifyLocation(This->lastActiveRenderTarget, SFLAG_INDRAWABLE, TRUE); + IWineD3DSurface_ModifyLocation((IWineD3DSurface *)target, SFLAG_INDRAWABLE, TRUE); } if (Flags & WINED3DCLEAR_ZBUFFER) { /* Note that WINED3DCLEAR_ZBUFFER implies a depth stencil exists on the device */ @@ -5795,7 +5775,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_UpdateSurface(IWineD3DDevice *iface, IWineD3DSurface_GetDesc(pDestinationSurface, &winedesc); } - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB)); @@ -6031,6 +6011,7 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface, const WINED3DRECT *rect, const float color[4]) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; + struct WineD3DContext *context; IWineD3DSwapChain *swapchain; swapchain = get_swapchain(surface); @@ -6039,20 +6020,20 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface, TRACE("Surface %p is onscreen\n", surface); - ActivateContext(This, surface, CTXUSAGE_RESOURCELOAD); + context = ActivateContext(This, surface, CTXUSAGE_RESOURCELOAD); ENTER_GL(); - context_bind_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, NULL); + context_bind_fbo(context, GL_FRAMEBUFFER_EXT, NULL); buffer = surface_get_gl_buffer(surface, swapchain); glDrawBuffer(buffer); checkGLcall("glDrawBuffer()"); } else { TRACE("Surface %p is offscreen\n", surface); - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + context = ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); - context_bind_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, &This->activeContext->dst_fbo); - context_attach_surface_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, 0, surface); - context_attach_depth_stencil_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, NULL, FALSE); + context_bind_fbo(context, GL_FRAMEBUFFER_EXT, &context->dst_fbo); + context_attach_surface_fbo(context, GL_FRAMEBUFFER_EXT, 0, surface); + context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER_EXT, NULL, FALSE); } if (rect) { @@ -6080,12 +6061,6 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface, glClear(GL_COLOR_BUFFER_BIT); checkGLcall("glClear"); - if (This->activeContext->current_fbo) { - context_bind_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, &This->activeContext->current_fbo->id); - } else { - context_bind_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, NULL); - } - if (swapchain && surface == ((IWineD3DSwapChainImpl *)swapchain)->frontBuffer && ((IWineD3DSwapChainImpl *)swapchain)->backBuffer) { glDrawBuffer(GL_BACK); @@ -6415,6 +6390,7 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; GLbitfield mask = GL_COLOR_BUFFER_BIT; /* TODO: Support blitting depth/stencil surfaces */ IWineD3DSwapChain *src_swapchain, *dst_swapchain; + struct WineD3DContext *context; GLenum gl_filter; POINT offset = {0, 0}; @@ -6440,9 +6416,9 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED src_swapchain = get_swapchain(src_surface); dst_swapchain = get_swapchain(dst_surface); - if (src_swapchain) ActivateContext(This, src_surface, CTXUSAGE_RESOURCELOAD); - else if (dst_swapchain) ActivateContext(This, dst_surface, CTXUSAGE_RESOURCELOAD); - else ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + if (src_swapchain) context = ActivateContext(This, src_surface, CTXUSAGE_RESOURCELOAD); + else if (dst_swapchain) context = ActivateContext(This, dst_surface, CTXUSAGE_RESOURCELOAD); + else context = ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); if (src_swapchain) { GLenum buffer = surface_get_gl_buffer(src_surface, src_swapchain); @@ -6467,17 +6443,17 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED } ENTER_GL(); - context_bind_fbo(This->activeContext, GL_READ_FRAMEBUFFER_EXT, NULL); + context_bind_fbo(context, GL_READ_FRAMEBUFFER_EXT, NULL); glReadBuffer(buffer); checkGLcall("glReadBuffer()"); } else { TRACE("Source surface %p is offscreen\n", src_surface); ENTER_GL(); - context_bind_fbo(This->activeContext, GL_READ_FRAMEBUFFER_EXT, &This->activeContext->src_fbo); - context_attach_surface_fbo(This->activeContext, GL_READ_FRAMEBUFFER_EXT, 0, src_surface); + context_bind_fbo(context, GL_READ_FRAMEBUFFER_EXT, &context->src_fbo); + context_attach_surface_fbo(context, GL_READ_FRAMEBUFFER_EXT, 0, src_surface); glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); checkGLcall("glReadBuffer()"); - context_attach_depth_stencil_fbo(This->activeContext, GL_READ_FRAMEBUFFER_EXT, NULL, FALSE); + context_attach_depth_stencil_fbo(context, GL_READ_FRAMEBUFFER_EXT, NULL, FALSE); } LEAVE_GL(); @@ -6506,18 +6482,18 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED } ENTER_GL(); - context_bind_fbo(This->activeContext, GL_DRAW_FRAMEBUFFER_EXT, NULL); + context_bind_fbo(context, GL_DRAW_FRAMEBUFFER_EXT, NULL); glDrawBuffer(buffer); checkGLcall("glDrawBuffer()"); } else { TRACE("Destination surface %p is offscreen\n", dst_surface); ENTER_GL(); - context_bind_fbo(This->activeContext, GL_DRAW_FRAMEBUFFER_EXT, &This->activeContext->dst_fbo); - context_attach_surface_fbo(This->activeContext, GL_DRAW_FRAMEBUFFER_EXT, 0, dst_surface); + context_bind_fbo(context, GL_DRAW_FRAMEBUFFER_EXT, &context->dst_fbo); + context_attach_surface_fbo(context, GL_DRAW_FRAMEBUFFER_EXT, 0, dst_surface); glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); checkGLcall("glDrawBuffer()"); - context_attach_depth_stencil_fbo(This->activeContext, GL_DRAW_FRAMEBUFFER_EXT, NULL, FALSE); + context_attach_depth_stencil_fbo(context, GL_DRAW_FRAMEBUFFER_EXT, NULL, FALSE); } glDisable(GL_SCISSOR_TEST); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_RENDER(WINED3DRS_SCISSORTESTENABLE)); @@ -6534,12 +6510,6 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED IWineD3DSurface_ModifyLocation(dst_surface, SFLAG_INDRAWABLE, TRUE); - if (This->activeContext->current_fbo) { - context_bind_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, &This->activeContext->current_fbo->id); - } else { - context_bind_fbo(This->activeContext, GL_FRAMEBUFFER_EXT, NULL); - } - /* If we switched from GL_BACK to GL_FRONT above, we need to switch back here */ if (dst_swapchain && dst_surface == ((IWineD3DSwapChainImpl *)dst_swapchain)->frontBuffer && ((IWineD3DSwapChainImpl *)dst_swapchain)->backBuffer) { @@ -6623,8 +6593,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetDepthStencilSurface(IWineD3DDevice * || ((IWineD3DSurfaceImpl *)This->stencilBufferTarget)->Flags & SFLAG_DISCARD) { surface_modify_ds_location(This->stencilBufferTarget, SFLAG_DS_DISCARDED); } else { - ActivateContext(This, This->render_targets[0], CTXUSAGE_RESOURCELOAD); - surface_load_ds_location(This->stencilBufferTarget, SFLAG_DS_OFFSCREEN); + struct WineD3DContext *context = ActivateContext(This, This->render_targets[0], CTXUSAGE_RESOURCELOAD); + surface_load_ds_location(This->stencilBufferTarget, context, SFLAG_DS_OFFSCREEN); surface_modify_ds_location(This->stencilBufferTarget, SFLAG_DS_OFFSCREEN); } } @@ -6658,7 +6628,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetCursorProperties(IWineD3DDevice* i /* some basic validation checks */ if(This->cursorTexture) { - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); glDeleteTextures(1, &This->cursorTexture); LEAVE_GL(); @@ -6717,7 +6687,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetCursorProperties(IWineD3DDevice* i memcpy(&mem[width * bpp * i], &bits[rect.Pitch * i], width * bpp); IWineD3DSurface_UnlockRect(pCursorBitmap); - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); @@ -6918,7 +6888,7 @@ static void updateSurfaceDesc(IWineD3DSurfaceImpl *surface, const WINED3DPRESENT if (surface->texture_name) { - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); glDeleteTextures(1, &surface->texture_name); LEAVE_GL(); @@ -6983,7 +6953,7 @@ void delete_opengl_contexts(IWineD3DDevice *iface, IWineD3DSwapChain *swapchain_ UINT i; IWineD3DBaseShaderImpl *shader; - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(This, NULL, CTXUSAGE_RESOURCELOAD); IWineD3DDevice_EnumResources(iface, reset_unload_resources, NULL); LIST_FOR_EACH_ENTRY(shader, &This->shaders, IWineD3DBaseShaderImpl, baseShader.shader_list_entry) { @@ -7019,7 +6989,6 @@ void delete_opengl_contexts(IWineD3DDevice *iface, IWineD3DSwapChain *swapchain_ while(This->numContexts) { DestroyContext(This, This->contexts[0]); } - This->activeContext = NULL; HeapFree(GetProcessHeap(), 0, swapchain->context); swapchain->context = NULL; swapchain->num_contexts = 0; @@ -7041,7 +7010,6 @@ HRESULT create_primary_opengl_context(IWineD3DDevice *iface, IWineD3DSwapChain * swapchain->context[0] = CreateContext(This, target, swapchain->win_handle, FALSE, &swapchain->presentParms); swapchain->num_contexts = 1; - This->activeContext = swapchain->context[0]; create_dummy_textures(This); @@ -7728,28 +7696,29 @@ void IWineD3DDeviceImpl_MarkStateDirty(IWineD3DDeviceImpl *This, DWORD state) { } } -void get_drawable_size_pbuffer(IWineD3DSurfaceImpl *This, UINT *width, UINT *height) { - IWineD3DDeviceImpl *dev = This->resource.wineD3DDevice; - /* The drawable size of a pbuffer render target is the current pbuffer size - */ - *width = dev->pbufferWidth; - *height = dev->pbufferHeight; +void get_drawable_size_pbuffer(struct WineD3DContext *context, UINT *width, UINT *height) +{ + IWineD3DDeviceImpl *device = ((IWineD3DSurfaceImpl *)context->current_rt)->resource.wineD3DDevice; + /* The drawable size of a pbuffer render target is the current pbuffer size. */ + *width = device->pbufferWidth; + *height = device->pbufferHeight; } -void get_drawable_size_fbo(IWineD3DSurfaceImpl *This, UINT *width, UINT *height) { - /* The drawable size of a fbo target is the opengl texture size, which is the power of two size - */ - *width = This->pow2Width; - *height = This->pow2Height; +void get_drawable_size_fbo(struct WineD3DContext *context, UINT *width, UINT *height) +{ + IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)context->current_rt; + /* The drawable size of a fbo target is the opengl texture size, which is the power of two size. */ + *width = surface->pow2Width; + *height = surface->pow2Height; } -void get_drawable_size_backbuffer(IWineD3DSurfaceImpl *This, UINT *width, UINT *height) { - IWineD3DDeviceImpl *dev = This->resource.wineD3DDevice; +void get_drawable_size_backbuffer(struct WineD3DContext *context, UINT *width, UINT *height) +{ + IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)context->surface; /* The drawable size of a backbuffer / aux buffer offscreen target is the size of the * current context's drawable, which is the size of the back buffer of the swapchain * the active context belongs to. The back buffer of the swapchain is stored as the - * surface the context belongs to. - */ - *width = ((IWineD3DSurfaceImpl *) dev->activeContext->surface)->currentDesc.Width; - *height = ((IWineD3DSurfaceImpl *) dev->activeContext->surface)->currentDesc.Height; + * surface the context belongs to. */ + *width = surface->currentDesc.Width; + *height = surface->currentDesc.Height; } diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 3036bfc63f0..e6fb1c73d5c 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -274,12 +274,16 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx) } /* Make it the current GL context. */ + if (!context_set_current(NULL)) + { + ERR_(d3d_caps)("Failed to clear current D3D context.\n"); + } + if (!pwglMakeCurrent(ctx->dc, ctx->gl_ctx)) { ERR_(d3d_caps)("Failed to make fake GL context current.\n"); goto fail; } - context_set_last_device(NULL); return TRUE; diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index c183328ee68..57f4227e0bc 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -73,6 +73,7 @@ static void drawStridedFast(IWineD3DDevice *iface, GLenum primitive_type, static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_stream_info *si, UINT NumVertexes, GLenum glPrimType, const void *idxData, UINT idxSize, UINT minIndex, UINT startIdx) { + struct WineD3DContext *context = context_get_current(); unsigned int textureNo = 0; const WORD *pIdxBufS = NULL; const DWORD *pIdxBufL = NULL; @@ -122,7 +123,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_stream_i element = &si->elements[WINED3D_FFP_DIFFUSE]; if (element->data) diffuse = element->data + streamOffset[element->stream_idx]; else glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - num_untracked_materials = This->activeContext->num_untracked_materials; + num_untracked_materials = context->num_untracked_materials; if (num_untracked_materials && element->format_desc->format != WINED3DFMT_A8R8G8B8) FIXME("Implement diffuse color tracking from %s\n", debug_d3dformat(element->format_desc->format)); @@ -261,7 +262,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_stream_i for (i = 0; i < num_untracked_materials; ++i) { - glMaterialfv(GL_FRONT_AND_BACK, This->activeContext->untracked_materials[i], color); + glMaterialfv(GL_FRONT_AND_BACK, context->untracked_materials[i], color); } } } @@ -558,6 +559,7 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT numberOfVertice IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; IWineD3DSurfaceImpl *target; + struct WineD3DContext *context; unsigned int i; if (!index_count) return; @@ -579,7 +581,7 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT numberOfVertice /* Signals other modules that a drawing is in progress and the stateblock finalized */ This->isInDraw = TRUE; - ActivateContext(This, This->render_targets[0], CTXUSAGE_DRAWPRIM); + context = ActivateContext(This, This->render_targets[0], CTXUSAGE_DRAWPRIM); if (This->stencilBufferTarget) { /* Note that this depends on the ActivateContext call above to set @@ -590,7 +592,7 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT numberOfVertice DWORD location = This->render_offscreen ? SFLAG_DS_OFFSCREEN : SFLAG_DS_ONSCREEN; if (This->stateBlock->renderState[WINED3DRS_ZWRITEENABLE] || This->stateBlock->renderState[WINED3DRS_ZENABLE]) - surface_load_ds_location(This->stencilBufferTarget, location); + surface_load_ds_location(This->stencilBufferTarget, context, location); if (This->stateBlock->renderState[WINED3DRS_ZWRITEENABLE]) surface_modify_ds_location(This->stencilBufferTarget, location); } @@ -607,7 +609,7 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT numberOfVertice if (!use_vs(This->stateBlock)) { - if (!This->strided_streams.position_transformed && This->activeContext->num_untracked_materials + if (!This->strided_streams.position_transformed && context->num_untracked_materials && This->stateBlock->renderState[WINED3DRS_LIGHTING]) { static BOOL warned; @@ -619,7 +621,8 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT numberOfVertice } emulation = TRUE; } - else if(This->activeContext->fog_coord && This->stateBlock->renderState[WINED3DRS_FOGENABLE]) { + else if (context->fog_coord && This->stateBlock->renderState[WINED3DRS_FOGENABLE]) + { /* Either write a pipeline replacement shader or convert the specular alpha from unsigned byte * to a float in the vertex buffer */ @@ -759,7 +762,7 @@ HRESULT tesselate_rectpatch(IWineD3DDeviceImpl *This, /* Simply activate the context for blitting. This disables all the things we don't want and * takes care of dirtifying. Dirtifying is preferred over pushing / popping, since drawing the * patch (as opposed to normal draws) will most likely need different changes anyway. */ - ActivateContext(This, This->lastActiveRenderTarget, CTXUSAGE_BLIT); + ActivateContext(This, NULL, CTXUSAGE_BLIT); /* First, locate the position data. This is provided in a vertex buffer in the stateblock. * Beware of vbos diff --git a/dlls/wined3d/gl_compat.c b/dlls/wined3d/gl_compat.c index dbd496b5aae..30d34086e1b 100644 --- a/dlls/wined3d/gl_compat.c +++ b/dlls/wined3d/gl_compat.c @@ -147,7 +147,7 @@ static void WINE_GLAPI wine_glGetDoublev(GLenum pname, GLdouble* params) { static void (WINE_GLAPI *old_fogcoord_glEnable) (GLenum cap) = NULL; static void WINE_GLAPI wine_glEnable(GLenum cap) { if(cap == GL_FOG) { - WineD3DContext *ctx = getActiveContext(); + struct WineD3DContext *ctx = context_get_current(); ctx->fog_enabled = 1; if(ctx->gl_fog_source != GL_FRAGMENT_DEPTH_EXT) return; } @@ -157,7 +157,7 @@ static void WINE_GLAPI wine_glEnable(GLenum cap) { static void (WINE_GLAPI *old_fogcoord_glDisable) (GLenum cap) = NULL; static void WINE_GLAPI wine_glDisable(GLenum cap) { if(cap == GL_FOG) { - WineD3DContext *ctx = getActiveContext(); + struct WineD3DContext *ctx = context_get_current(); ctx->fog_enabled = 0; if(ctx->gl_fog_source != GL_FRAGMENT_DEPTH_EXT) return; } @@ -166,8 +166,9 @@ static void WINE_GLAPI wine_glDisable(GLenum cap) { static void (WINE_GLAPI *old_fogcoord_glFogi) (GLenum pname, GLint param) = NULL; static void WINE_GLAPI wine_glFogi(GLenum pname, GLint param) { + struct WineD3DContext *ctx = context_get_current(); + if(pname == GL_FOG_COORDINATE_SOURCE_EXT) { - WineD3DContext *ctx = getActiveContext(); ctx->gl_fog_source = param; if(param == GL_FRAGMENT_DEPTH_EXT) { if(ctx->fog_enabled) old_fogcoord_glEnable(GL_FOG); @@ -177,9 +178,9 @@ static void WINE_GLAPI wine_glFogi(GLenum pname, GLint param) { } } else { if(pname == GL_FOG_START) { - getActiveContext()->fogstart = param; + ctx->fogstart = param; } else if(pname == GL_FOG_END) { - getActiveContext()->fogend = param; + ctx->fogend = param; } old_fogcoord_glFogi(pname, param); } @@ -187,8 +188,8 @@ static void WINE_GLAPI wine_glFogi(GLenum pname, GLint param) { static void (WINE_GLAPI *old_fogcoord_glFogiv) (GLenum pname, const GLint *param) = NULL; static void WINE_GLAPI wine_glFogiv(GLenum pname, const GLint *param) { + struct WineD3DContext *ctx = context_get_current(); if(pname == GL_FOG_COORDINATE_SOURCE_EXT) { - WineD3DContext *ctx = getActiveContext(); ctx->gl_fog_source = *param; if(*param == GL_FRAGMENT_DEPTH_EXT) { if(ctx->fog_enabled) old_fogcoord_glEnable(GL_FOG); @@ -198,9 +199,9 @@ static void WINE_GLAPI wine_glFogiv(GLenum pname, const GLint *param) { } } else { if(pname == GL_FOG_START) { - getActiveContext()->fogstart = *param; + ctx->fogstart = *param; } else if(pname == GL_FOG_END) { - getActiveContext()->fogend = *param; + ctx->fogend = *param; } old_fogcoord_glFogiv(pname, param); } @@ -208,8 +209,8 @@ static void WINE_GLAPI wine_glFogiv(GLenum pname, const GLint *param) { static void (WINE_GLAPI *old_fogcoord_glFogf) (GLenum pname, GLfloat param) = NULL; static void WINE_GLAPI wine_glFogf(GLenum pname, GLfloat param) { + struct WineD3DContext *ctx = context_get_current(); if(pname == GL_FOG_COORDINATE_SOURCE_EXT) { - WineD3DContext *ctx = getActiveContext(); ctx->gl_fog_source = (GLint) param; if(param == GL_FRAGMENT_DEPTH_EXT) { if(ctx->fog_enabled) old_fogcoord_glEnable(GL_FOG); @@ -219,9 +220,9 @@ static void WINE_GLAPI wine_glFogf(GLenum pname, GLfloat param) { } } else { if(pname == GL_FOG_START) { - getActiveContext()->fogstart = param; + ctx->fogstart = param; } else if(pname == GL_FOG_END) { - getActiveContext()->fogend = param; + ctx->fogend = param; } old_fogcoord_glFogf(pname, param); } @@ -229,8 +230,8 @@ static void WINE_GLAPI wine_glFogf(GLenum pname, GLfloat param) { static void (WINE_GLAPI *old_fogcoord_glFogfv) (GLenum pname, const GLfloat *param) = NULL; static void WINE_GLAPI wine_glFogfv(GLenum pname, const GLfloat *param) { + struct WineD3DContext *ctx = context_get_current(); if(pname == GL_FOG_COORDINATE_SOURCE_EXT) { - WineD3DContext *ctx = getActiveContext(); ctx->gl_fog_source = (GLint) *param; if(*param == GL_FRAGMENT_DEPTH_EXT) { if(ctx->fog_enabled) old_fogcoord_glEnable(GL_FOG); @@ -240,15 +241,14 @@ static void WINE_GLAPI wine_glFogfv(GLenum pname, const GLfloat *param) { } } else { if(pname == GL_FOG_COLOR) { - WineD3DContext *ctx = getActiveContext(); ctx->fogcolor[0] = param[0]; ctx->fogcolor[1] = param[1]; ctx->fogcolor[2] = param[2]; ctx->fogcolor[3] = param[3]; } else if(pname == GL_FOG_START) { - getActiveContext()->fogstart = *param; + ctx->fogstart = *param; } else if(pname == GL_FOG_END) { - getActiveContext()->fogend = *param; + ctx->fogend = *param; } old_fogcoord_glFogfv(pname, param); } @@ -269,7 +269,7 @@ static void (WINE_GLAPI *old_fogcoord_glFogCoordfvEXT) (const GLfloat *f) = NULL static void (WINE_GLAPI *old_fogcoord_glFogCoorddvEXT) (const GLdouble *f) = NULL; static void WINE_GLAPI wine_glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { - WineD3DContext *ctx = getActiveContext(); + struct WineD3DContext *ctx = context_get_current(); if(ctx->gl_fog_source == GL_FOG_COORDINATE_EXT && ctx->fog_enabled) { GLfloat c[4] = {ctx->color[0], ctx->color[1], ctx->color[2], ctx->color[3]}; GLfloat i; @@ -298,8 +298,8 @@ static void WINE_GLAPI wine_glVertex3fv(const GLfloat *pos) { wine_glVertex4f(pos[0], pos[1], pos[2], 1.0f); } -static void wine_glColor4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a) { - WineD3DContext *ctx = getActiveContext(); +static void WINE_GLAPI wine_glColor4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a) { + struct WineD3DContext *ctx = context_get_current(); ctx->color[0] = r; ctx->color[1] = g; ctx->color[2] = b; @@ -307,36 +307,36 @@ static void wine_glColor4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a) { old_fogcoord_glColor4f(r, g, b, a); } -static void wine_glColor4fv(const GLfloat *c) { +static void WINE_GLAPI wine_glColor4fv(const GLfloat *c) { wine_glColor4f(c[0], c[1], c[2], c[3]); } -static void wine_glColor3f(GLfloat r, GLfloat g, GLfloat b) { +static void WINE_GLAPI wine_glColor3f(GLfloat r, GLfloat g, GLfloat b) { wine_glColor4f(r, g, b, 1.0f); } -static void wine_glColor3fv(const GLfloat *c) { +static void WINE_GLAPI wine_glColor3fv(const GLfloat *c) { wine_glColor4f(c[0], c[1], c[2], 1.0f); } -static void wine_glColor4ub(GLubyte r, GLubyte g, GLubyte b, GLubyte a) { +static void WINE_GLAPI wine_glColor4ub(GLubyte r, GLubyte g, GLubyte b, GLubyte a) { wine_glColor4f(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f); } /* In D3D the fog coord is a UBYTE, so there's no problem with using the single * precision function */ -static void wine_glFogCoordfEXT(GLfloat f) { - WineD3DContext *ctx = getActiveContext(); +static void WINE_GLAPI wine_glFogCoordfEXT(GLfloat f) { + struct WineD3DContext *ctx = context_get_current(); ctx->fog_coord_value = f; } -static void wine_glFogCoorddEXT(GLdouble f) { +static void WINE_GLAPI wine_glFogCoorddEXT(GLdouble f) { wine_glFogCoordfEXT(f); } -static void wine_glFogCoordfvEXT(const GLfloat *f) { +static void WINE_GLAPI wine_glFogCoordfvEXT(const GLfloat *f) { wine_glFogCoordfEXT(*f); } -static void wine_glFogCoorddvEXT(const GLdouble *f) { +static void WINE_GLAPI wine_glFogCoorddvEXT(const GLdouble *f) { wine_glFogCoordfEXT(*f); } diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 018961672dc..95649ecb4a5 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -4331,8 +4331,6 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) { */ char pshader = shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type); - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); - if(pshader) { struct glsl_pshader_private *shader_data; ps = (IWineD3DPixelShaderImpl *) This; @@ -4344,6 +4342,8 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) { return; } + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); + if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->pshader == iface) { ENTER_GL(); @@ -4361,6 +4361,8 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) { return; } + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); + if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->vshader == iface) { ENTER_GL(); diff --git a/dlls/wined3d/query.c b/dlls/wined3d/query.c index 6627223930c..0f395bca458 100644 --- a/dlls/wined3d/query.c +++ b/dlls/wined3d/query.c @@ -68,51 +68,15 @@ static ULONG WINAPI IWineD3DQueryImpl_Release(IWineD3DQuery *iface) { * context, and (still) leaking the actual query. */ if (This->type == WINED3DQUERYTYPE_EVENT) { - WineQueryEventData *query_data = (WineQueryEventData *)This->extendedData; + struct wined3d_event_query *query = This->extendedData; - if (query_data->ctx->tid != GetCurrentThreadId()) - { - FIXME("Query was created in a different thread, skipping deletion.\n"); - } - else - { - ActivateContext(This->wineD3DDevice, query_data->ctx->surface, CTXUSAGE_RESOURCELOAD); - - ENTER_GL(); - - if (GL_SUPPORT(APPLE_FENCE)) - { - GL_EXTCALL(glDeleteFencesAPPLE(1, &query_data->fenceId)); - checkGLcall("glDeleteFencesAPPLE"); - } - else if (GL_SUPPORT(NV_FENCE)) - { - GL_EXTCALL(glDeleteFencesNV(1, &query_data->fenceId)); - checkGLcall("glDeleteFencesNV"); - } - - LEAVE_GL(); - } + if (query->context) context_free_event_query(query); } - else if (This->type == WINED3DQUERYTYPE_OCCLUSION && GL_SUPPORT(ARB_OCCLUSION_QUERY)) + else if (This->type == WINED3DQUERYTYPE_OCCLUSION) { - WineQueryOcclusionData *query_data = (WineQueryOcclusionData *)This->extendedData; - - if (query_data->ctx->tid != GetCurrentThreadId()) - { - FIXME("Query was created in a different thread, skipping deletion.\n"); - } - else - { - ActivateContext(This->wineD3DDevice, query_data->ctx->surface, CTXUSAGE_RESOURCELOAD); + struct wined3d_occlusion_query *query = This->extendedData; - ENTER_GL(); - - GL_EXTCALL(glDeleteQueriesARB(1, &query_data->queryId)); - checkGLcall("glDeleteQueriesARB"); - - LEAVE_GL(); - } + if (query->context) context_free_occlusion_query(query); } HeapFree(GetProcessHeap(), 0, This->extendedData); @@ -306,7 +270,7 @@ static HRESULT WINAPI IWineD3DQueryImpl_GetData(IWineD3DQuery* iface, void* pDa static HRESULT WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface, void* pData, DWORD dwSize, DWORD dwGetDataFlags) { IWineD3DQueryImpl *This = (IWineD3DQueryImpl *) iface; - WineQueryOcclusionData *query_data = (WineQueryOcclusionData *)This->extendedData; + struct wined3d_occlusion_query *query = This->extendedData; DWORD* data = pData; GLuint available; GLuint samples; @@ -314,6 +278,8 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface, TRACE("(%p) : type D3DQUERY_OCCLUSION, pData %p, dwSize %#x, dwGetDataFlags %#x\n", This, pData, dwSize, dwGetDataFlags); + if (!query->context) This->state = QUERY_CREATED; + if (This->state == QUERY_CREATED) { /* D3D allows GetData on a new query, OpenGL doesn't. So just invent the data ourselves */ @@ -336,18 +302,18 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface, return S_OK; } - if (query_data->ctx->tid != GetCurrentThreadId()) + if (query->context->tid != GetCurrentThreadId()) { FIXME("%p Wrong thread, returning 1.\n", This); *data = 1; return S_OK; } - ActivateContext(This->wineD3DDevice, query_data->ctx->surface, CTXUSAGE_RESOURCELOAD); + ActivateContext(This->wineD3DDevice, query->context->current_rt, CTXUSAGE_RESOURCELOAD); ENTER_GL(); - GL_EXTCALL(glGetQueryObjectuivARB(query_data->queryId, GL_QUERY_RESULT_AVAILABLE_ARB, &available)); + GL_EXTCALL(glGetQueryObjectuivARB(query->id, GL_QUERY_RESULT_AVAILABLE_ARB, &available)); checkGLcall("glGetQueryObjectuivARB(GL_QUERY_RESULT_AVAILABLE)"); TRACE("(%p) : available %d.\n", This, available); @@ -355,7 +321,7 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface, { if (data) { - GL_EXTCALL(glGetQueryObjectuivARB(query_data->queryId, GL_QUERY_RESULT_ARB, &samples)); + GL_EXTCALL(glGetQueryObjectuivARB(query->id, GL_QUERY_RESULT_ARB, &samples)); checkGLcall("glGetQueryObjectuivARB(GL_QUERY_RESULT)"); TRACE("(%p) : Returning %d samples.\n", This, samples); *data = samples; @@ -374,14 +340,14 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface, static HRESULT WINAPI IWineD3DEventQueryImpl_GetData(IWineD3DQuery* iface, void* pData, DWORD dwSize, DWORD dwGetDataFlags) { IWineD3DQueryImpl *This = (IWineD3DQueryImpl *) iface; + struct wined3d_event_query *query = This->extendedData; BOOL* data = pData; - WineQueryEventData *query_data = (WineQueryEventData *)This->extendedData; TRACE("(%p) : type D3DQUERY_EVENT, pData %p, dwSize %#x, dwGetDataFlags %#x\n", This, pData, dwSize, dwGetDataFlags); if (!pData || !dwSize) return S_OK; - if (query_data->ctx->tid != GetCurrentThreadId()) + if (query->context->tid != GetCurrentThreadId()) { /* See comment in IWineD3DQuery::Issue, event query codeblock */ FIXME("Wrong thread, reporting GPU idle.\n"); @@ -390,18 +356,18 @@ static HRESULT WINAPI IWineD3DEventQueryImpl_GetData(IWineD3DQuery* iface, void return S_OK; } - ActivateContext(This->wineD3DDevice, query_data->ctx->surface, CTXUSAGE_RESOURCELOAD); + ActivateContext(This->wineD3DDevice, query->context->current_rt, CTXUSAGE_RESOURCELOAD); ENTER_GL(); if (GL_SUPPORT(APPLE_FENCE)) { - *data = GL_EXTCALL(glTestFenceAPPLE(query_data->fenceId)); + *data = GL_EXTCALL(glTestFenceAPPLE(query->id)); checkGLcall("glTestFenceAPPLE"); } else if (GL_SUPPORT(NV_FENCE)) { - *data = GL_EXTCALL(glTestFenceNV(query_data->fenceId)); + *data = GL_EXTCALL(glTestFenceNV(query->id)); checkGLcall("glTestFenceNV"); } else @@ -490,39 +456,45 @@ static HRESULT WINAPI IWineD3DEventQueryImpl_Issue(IWineD3DQuery* iface, DWORD TRACE("(%p) : dwIssueFlags %#x, type D3DQUERY_EVENT\n", This, dwIssueFlags); if (dwIssueFlags & WINED3DISSUE_END) { - WineQueryEventData *query_data = (WineQueryEventData *)This->extendedData; + struct wined3d_event_query *query = This->extendedData; + struct WineD3DContext *context; - if (query_data->ctx->tid != GetCurrentThreadId()) - { - /* GL fences can be used only from the context that created them, - * so if a different context is active, don't bother setting the query. The penalty - * of a context switch is most likely higher than the gain of a correct query result - * - * If the query is used from a different thread, don't bother creating a multithread - * context - there's no point in doing that as the query would be unusable anyway - */ - WARN("Query context not active\n"); - } - else + if (query->context) { - ActivateContext(This->wineD3DDevice, query_data->ctx->surface, CTXUSAGE_RESOURCELOAD); - - ENTER_GL(); - - if (GL_SUPPORT(APPLE_FENCE)) + if (query->context->tid != GetCurrentThreadId()) { - GL_EXTCALL(glSetFenceAPPLE(query_data->fenceId)); - checkGLcall("glSetFenceAPPLE"); + context_free_event_query(query); + context = ActivateContext(This->wineD3DDevice, NULL, CTXUSAGE_RESOURCELOAD); + context_alloc_event_query(context, query); } - else if (GL_SUPPORT(NV_FENCE)) + else { - GL_EXTCALL(glSetFenceNV(query_data->fenceId, GL_ALL_COMPLETED_NV)); - checkGLcall("glSetFenceNV"); + ActivateContext(This->wineD3DDevice, query->context->current_rt, CTXUSAGE_RESOURCELOAD); } + } + else + { + context = ActivateContext(This->wineD3DDevice, NULL, CTXUSAGE_RESOURCELOAD); + context_alloc_event_query(context, query); + } - LEAVE_GL(); + ENTER_GL(); + + if (GL_SUPPORT(APPLE_FENCE)) + { + GL_EXTCALL(glSetFenceAPPLE(query->id)); + checkGLcall("glSetFenceAPPLE"); + } + else if (GL_SUPPORT(NV_FENCE)) + { + GL_EXTCALL(glSetFenceNV(query->id, GL_ALL_COMPLETED_NV)); + checkGLcall("glSetFenceNV"); } - } else if(dwIssueFlags & WINED3DISSUE_BEGIN) { + + LEAVE_GL(); + } + else if(dwIssueFlags & WINED3DISSUE_BEGIN) + { /* Started implicitly at device creation */ ERR("Event query issued with START flag - what to do?\n"); } @@ -541,38 +513,65 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_Issue(IWineD3DQuery* iface, D if (GL_SUPPORT(ARB_OCCLUSION_QUERY)) { - WineQueryOcclusionData *query_data = (WineQueryOcclusionData *)This->extendedData; + struct wined3d_occlusion_query *query = This->extendedData; + struct WineD3DContext *context; - if (query_data->ctx->tid != GetCurrentThreadId()) + /* This is allowed according to msdn and our tests. Reset the query and restart */ + if (dwIssueFlags & WINED3DISSUE_BEGIN) { - FIXME("Not the owning context, can't start query.\n"); - } - else - { - ActivateContext(This->wineD3DDevice, query_data->ctx->surface, CTXUSAGE_RESOURCELOAD); + if (This->state == QUERY_BUILDING) + { + if (query->context->tid != GetCurrentThreadId()) + { + FIXME("Wrong thread, can't restart query.\n"); - ENTER_GL(); - /* This is allowed according to msdn and our tests. Reset the query and restart */ - if (dwIssueFlags & WINED3DISSUE_BEGIN) { - if(This->state == QUERY_BUILDING) { + context_free_occlusion_query(query); + context = ActivateContext(This->wineD3DDevice, NULL, CTXUSAGE_RESOURCELOAD); + context_alloc_occlusion_query(context, query); + } + else + { + ActivateContext(This->wineD3DDevice, query->context->current_rt, CTXUSAGE_RESOURCELOAD); + + ENTER_GL(); GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB)); checkGLcall("glEndQuery()"); + LEAVE_GL(); } - - GL_EXTCALL(glBeginQueryARB(GL_SAMPLES_PASSED_ARB, query_data->queryId)); - checkGLcall("glBeginQuery()"); } - if (dwIssueFlags & WINED3DISSUE_END) { - /* Msdn says _END on a non-building occlusion query returns an error, but - * our tests show that it returns OK. But OpenGL doesn't like it, so avoid - * generating an error - */ - if(This->state == QUERY_BUILDING) { + else + { + if (query->context) context_free_occlusion_query(query); + context = ActivateContext(This->wineD3DDevice, NULL, CTXUSAGE_RESOURCELOAD); + context_alloc_occlusion_query(context, query); + } + + ENTER_GL(); + GL_EXTCALL(glBeginQueryARB(GL_SAMPLES_PASSED_ARB, query->id)); + checkGLcall("glBeginQuery()"); + LEAVE_GL(); + } + if (dwIssueFlags & WINED3DISSUE_END) { + /* Msdn says _END on a non-building occlusion query returns an error, but + * our tests show that it returns OK. But OpenGL doesn't like it, so avoid + * generating an error + */ + if (This->state == QUERY_BUILDING) + { + if (query->context->tid != GetCurrentThreadId()) + { + FIXME("Wrong thread, can't end query.\n"); + } + else + { + ActivateContext(This->wineD3DDevice, query->context->current_rt, CTXUSAGE_RESOURCELOAD); + + ENTER_GL(); GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB)); checkGLcall("glEndQuery()"); + LEAVE_GL(); } } - LEAVE_GL(); } } else { FIXME("(%p) : Occlusion queries not supported\n", This); diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c index 8686232ccf1..4e7a69ea33f 100644 --- a/dlls/wined3d/shader_sm4.c +++ b/dlls/wined3d/shader_sm4.c @@ -52,6 +52,7 @@ enum wined3d_sm4_opcode WINED3D_SM4_OP_DP3 = 0x10, WINED3D_SM4_OP_DP4 = 0x11, WINED3D_SM4_OP_EXP = 0x19, + WINED3D_SM4_OP_LOG = 0x2f, WINED3D_SM4_OP_MOV = 0x36, WINED3D_SM4_OP_MUL = 0x38, WINED3D_SM4_OP_RET = 0x3e, @@ -102,6 +103,7 @@ static const struct wined3d_sm4_opcode_info opcode_table[] = {WINED3D_SM4_OP_DP3, WINED3DSIH_DP3, 1, 2}, {WINED3D_SM4_OP_DP4, WINED3DSIH_DP4, 1, 2}, {WINED3D_SM4_OP_EXP, WINED3DSIH_EXP, 1, 1}, + {WINED3D_SM4_OP_LOG, WINED3DSIH_LOG, 1, 1}, {WINED3D_SM4_OP_MOV, WINED3DSIH_MOV, 1, 1}, {WINED3D_SM4_OP_MUL, WINED3DSIH_MUL, 1, 2}, {WINED3D_SM4_OP_RET, WINED3DSIH_RET, 0, 0}, diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index e4de1cf761f..44c0c064b81 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -4532,7 +4532,7 @@ static void viewport_miscpart(DWORD state, IWineD3DStateBlockImpl *stateblock, W stateblock->viewport.Width, stateblock->viewport.Height); } else { target = (IWineD3DSurfaceImpl *) stateblock->wineD3DDevice->render_targets[0]; - target->get_drawable_size(target, &width, &height); + target->get_drawable_size(context, &width, &height); glViewport(stateblock->viewport.X, (height - (stateblock->viewport.Y + stateblock->viewport.Height)), @@ -4674,7 +4674,7 @@ static void scissorrect(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D UINT width; IWineD3DSurfaceImpl *target = (IWineD3DSurfaceImpl *) stateblock->wineD3DDevice->render_targets[0]; - target->get_drawable_size(target, &width, &height); + target->get_drawable_size(context, &width, &height); /* Warning: glScissor uses window coordinates, not viewport coordinates, so our viewport correction does not apply * Warning2: Even in windowed mode the coords are relative to the window, not the screen */ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 0122e1ef07c..843247dc5ab 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -49,7 +49,7 @@ static void surface_cleanup(IWineD3DSurfaceImpl *This) * target, Uninit3D() will activate a context before doing anything. */ if (device->render_targets && device->render_targets[0]) { - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); } ENTER_GL(); @@ -784,7 +784,7 @@ void surface_internal_preload(IWineD3DSurface *iface, enum WINED3DSRGB srgb) TRACE("(%p) : About to load surface\n", This); if(!device->isInDraw) { - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); } if (This->resource.format_desc->format == WINED3DFMT_P8 @@ -870,7 +870,7 @@ static void WINAPI IWineD3DSurfaceImpl_UnLoad(IWineD3DSurface *iface) { IWineD3DSurface_ModifyLocation(iface, SFLAG_INSRGBTEX, FALSE); This->Flags &= ~(SFLAG_ALLOCATED | SFLAG_SRGBALLOCATED); - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); /* Destroy PBOs, but load them into real sysmem before */ if(This->Flags & SFLAG_PBO) { @@ -1247,7 +1247,7 @@ static void surface_prepare_system_memory(IWineD3DSurfaceImpl *This) { GLenum error; IWineD3DDeviceImpl *device = This->resource.wineD3DDevice; - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); GL_EXTCALL(glGenBuffersARB(1, &This->pbo)); @@ -1343,7 +1343,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED lock_end: if(This->Flags & SFLAG_PBO) { - ActivateContext(myDevice, myDevice->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(myDevice, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, This->pbo)); checkGLcall("glBindBufferARB"); @@ -1503,7 +1503,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_UnlockRect(IWineD3DSurface *iface) { if (This->Flags & SFLAG_PBO) { TRACE("Freeing PBO memory\n"); - ActivateContext(myDevice, myDevice->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(myDevice, NULL, CTXUSAGE_RESOURCELOAD); ENTER_GL(); GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, This->pbo)); GL_EXTCALL(glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB)); @@ -2645,7 +2645,7 @@ static void WINAPI IWineD3DSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL name = srgb ? &This->texture_name_srgb : &This->texture_name; if(!device->isInDraw) { - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); } ENTER_GL(); @@ -3140,13 +3140,14 @@ static inline void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *This, IWine float left, right, top, bottom; /* Texture coordinates */ UINT fbwidth = Src->currentDesc.Width; UINT fbheight = Src->currentDesc.Height; + struct WineD3DContext *context; GLenum drawBuffer = GL_BACK; GLenum texture_target; BOOL noBackBufferBackup; TRACE("Using hwstretch blit\n"); /* Activate the Proper context for reading from the source surface, set it up for blitting */ - ActivateContext(myDevice, SrcSurface, CTXUSAGE_BLIT); + context = ActivateContext(myDevice, SrcSurface, CTXUSAGE_BLIT); surface_internal_preload((IWineD3DSurface *) This, SRGB_RGB); noBackBufferBackup = !swapchain && wined3d_settings.offscreen_rendering_mode == ORM_FBO; @@ -3160,10 +3161,13 @@ static inline void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *This, IWine /* Try to use an aux buffer for drawing the rectangle. This way it doesn't need restoring. * This way we don't have to wait for the 2nd readback to finish to leave this function. */ - if(myDevice->activeContext->aux_buffers >= 2) { + if (context->aux_buffers >= 2) + { /* Got more than one aux buffer? Use the 2nd aux buffer */ drawBuffer = GL_AUX1; - } else if((swapchain || myDevice->offscreenBuffer == GL_BACK) && myDevice->activeContext->aux_buffers >= 1) { + } + else if ((swapchain || myDevice->offscreenBuffer == GL_BACK) && context->aux_buffers >= 1) + { /* Only one aux buffer, but it isn't used (Onscreen rendering, or non-aux orm)? Use it! */ drawBuffer = GL_AUX0; } @@ -4097,7 +4101,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_RealizePalette(IWineD3DSurface *iface) IWineD3DSurface_ModifyLocation(iface, SFLAG_INDRAWABLE, FALSE); /* Re-upload the palette */ - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); d3dfmt_p8_upload_palette(iface, convert); } else { if(!(This->Flags & SFLAG_INSYSMEM)) { @@ -4370,7 +4374,8 @@ void surface_modify_ds_location(IWineD3DSurface *iface, DWORD location) { } /* Context activation is done by the caller. */ -void surface_load_ds_location(IWineD3DSurface *iface, DWORD location) { +void surface_load_ds_location(IWineD3DSurface *iface, struct WineD3DContext *context, DWORD location) +{ IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface; IWineD3DDeviceImpl *device = This->resource.wineD3DDevice; @@ -4404,7 +4409,7 @@ void surface_load_ds_location(IWineD3DSurface *iface, DWORD location) { /* Note that we use depth_blt here as well, rather than glCopyTexImage2D * directly on the FBO texture. That's because we need to flip. */ - context_bind_fbo(device->activeContext, GL_FRAMEBUFFER_EXT, NULL); + context_bind_fbo(context, GL_FRAMEBUFFER_EXT, NULL); if (This->texture_target == GL_TEXTURE_RECTANGLE_ARB) { glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_binding); @@ -4439,20 +4444,17 @@ void surface_load_ds_location(IWineD3DSurface *iface, DWORD location) { device->depth_blt_rb_h = This->currentDesc.Height; } - context_bind_fbo(device->activeContext, GL_FRAMEBUFFER_EXT, &device->activeContext->dst_fbo); + context_bind_fbo(context, GL_FRAMEBUFFER_EXT, &context->dst_fbo); GL_EXTCALL(glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, device->depth_blt_rb)); checkGLcall("glFramebufferRenderbufferEXT"); - context_attach_depth_stencil_fbo(device->activeContext, GL_FRAMEBUFFER_EXT, iface, FALSE); + context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER_EXT, iface, FALSE); /* Do the actual blit */ surface_depth_blt(This, device->depth_blt_texture, This->currentDesc.Width, This->currentDesc.Height, bind_target); checkGLcall("depth_blt"); - if (device->activeContext->current_fbo) { - context_bind_fbo(device->activeContext, GL_FRAMEBUFFER_EXT, &device->activeContext->current_fbo->id); - } else { - context_bind_fbo(device->activeContext, GL_FRAMEBUFFER_EXT, NULL); - } + if (context->current_fbo) context_bind_fbo(context, GL_FRAMEBUFFER_EXT, &context->current_fbo->id); + else context_bind_fbo(context, GL_FRAMEBUFFER_EXT, NULL); LEAVE_GL(); } else { @@ -4464,14 +4466,12 @@ void surface_load_ds_location(IWineD3DSurface *iface, DWORD location) { ENTER_GL(); - context_bind_fbo(device->activeContext, GL_FRAMEBUFFER_EXT, NULL); + context_bind_fbo(context, GL_FRAMEBUFFER_EXT, NULL); surface_depth_blt(This, This->texture_name, This->currentDesc.Width, This->currentDesc.Height, This->texture_target); checkGLcall("depth_blt"); - if (device->activeContext->current_fbo) { - context_bind_fbo(device->activeContext, GL_FRAMEBUFFER_EXT, &device->activeContext->current_fbo->id); - } + if (context->current_fbo) context_bind_fbo(context, GL_FRAMEBUFFER_EXT, &context->current_fbo->id); LEAVE_GL(); } else { @@ -4788,7 +4788,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D /* Download the surface to system memory */ if(This->Flags & (SFLAG_INTEXTURE | SFLAG_INSRGBTEX)) { - if(!device->isInDraw) ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + if (!device->isInDraw) ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); surface_bind_and_dirtify(This, !(This->Flags & SFLAG_INTEXTURE)); surface_download_data(This); @@ -4820,7 +4820,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D * but it isn't set (yet) in all cases it is getting called. */ if((convert != NO_CONVERSION) && (This->Flags & SFLAG_PBO)) { TRACE("Removing the pbo attached to surface %p\n", This); - if (!device->isInDraw) ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + if (!device->isInDraw) ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); surface_remove_pbo(This); } @@ -4872,7 +4872,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D } } - if(!device->isInDraw) ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + if (!device->isInDraw) ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); surface_bind_and_dirtify(This, srgb); if(This->CKeyFlags & WINEDDSD_CKSRCBLT) { diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index 27770ca90df..0994c6d8a69 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -66,22 +66,6 @@ static void WINAPI IWineD3DSwapChainImpl_Destroy(IWineD3DSwapChain *iface, D3DCB for (i = 0; i < This->num_contexts; ++i) { - if (This->context[i] == This->wineD3DDevice->activeContext) - { - IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)This->wineD3DDevice->swapchains[0]; - - /* Avoid destroying the currently active context for non-implicit swapchains. */ - if (This != swapchain) - { - TRACE("Would destroy currently active context %p on a non-implicit swapchain.\n", This->context[i]); - - if (swapchain->backBuffer) - ActivateContext(This->wineD3DDevice, swapchain->backBuffer[0], CTXUSAGE_RESOURCELOAD); - else - ActivateContext(This->wineD3DDevice, swapchain->frontBuffer, CTXUSAGE_RESOURCELOAD); - } - } - DestroyContext(This->wineD3DDevice, This->context[i]); } /* Restore the screen resolution if we rendered in fullscreen @@ -418,10 +402,11 @@ WineD3DContext *IWineD3DSwapChainImpl_CreateContextForThread(IWineD3DSwapChain * return ctx; } -void get_drawable_size_swapchain(IWineD3DSurfaceImpl *This, UINT *width, UINT *height) { +void get_drawable_size_swapchain(struct WineD3DContext *context, UINT *width, UINT *height) +{ + IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)context->surface; /* The drawable size of an onscreen drawable is the surface size. - * (Actually: The window size, but the surface is created in window size) - */ - *width = This->currentDesc.Width; - *height = This->currentDesc.Height; + * (Actually: The window size, but the surface is created in window size) */ + *width = surface->currentDesc.Width; + *height = surface->currentDesc.Height; } diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 7bc8d7bcaa7..ab0544948eb 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -63,7 +63,7 @@ static void texture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRG { /* ActivateContext sets isInDraw to TRUE when loading a pbuffer into a texture, * thus no danger of recursive calls. */ - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); } if (This->resource.format_desc->format == WINED3DFMT_P8 diff --git a/dlls/wined3d/volumetexture.c b/dlls/wined3d/volumetexture.c index 374a75f9169..a847f87623b 100644 --- a/dlls/wined3d/volumetexture.c +++ b/dlls/wined3d/volumetexture.c @@ -41,7 +41,7 @@ static void volumetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINE if (!device->isInDraw) { - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ActivateContext(device, NULL, CTXUSAGE_RESOURCELOAD); } else if (GL_SUPPORT(EXT_TEXTURE_SRGB) && This->baseTexture.bindCount > 0) { diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c index f996aecdfcf..045eea0082b 100644 --- a/dlls/wined3d/wined3d_main.c +++ b/dlls/wined3d/wined3d_main.c @@ -97,6 +97,7 @@ static void CDECL wined3d_do_nothing(void) static BOOL wined3d_init(HINSTANCE hInstDLL) { + DWORD wined3d_context_tls_idx; HMODULE mod; char buffer[MAX_PATH+10]; DWORD size = sizeof(buffer); @@ -105,6 +106,15 @@ static BOOL wined3d_init(HINSTANCE hInstDLL) DWORD len, tmpvalue; WNDCLASSA wc; + wined3d_context_tls_idx = TlsAlloc(); + if (wined3d_context_tls_idx == TLS_OUT_OF_INDEXES) + { + DWORD err = GetLastError(); + ERR("Failed to allocate context TLS index, err %#x.\n", err); + return FALSE; + } + context_set_tls_idx(wined3d_context_tls_idx); + /* We need our own window class for a fake window which we use to retrieve GL capabilities */ /* We might need CS_OWNDC in the future if we notice strange things on Windows. * Various articles/posts about OpenGL problems on Windows recommend this. */ @@ -122,6 +132,11 @@ static BOOL wined3d_init(HINSTANCE hInstDLL) if (!RegisterClassA(&wc)) { ERR("Failed to register window class 'WineD3D_OpenGL'!\n"); + if (!TlsFree(wined3d_context_tls_idx)) + { + DWORD err = GetLastError(); + ERR("Failed to free context TLS index, err %#x.\n", err); + } return FALSE; } @@ -322,6 +337,14 @@ static BOOL wined3d_init(HINSTANCE hInstDLL) static BOOL wined3d_destroy(HINSTANCE hInstDLL) { + DWORD wined3d_context_tls_idx = context_get_tls_idx(); + + if (!TlsFree(wined3d_context_tls_idx)) + { + DWORD err = GetLastError(); + ERR("Failed to free context TLS index, err %#x.\n", err); + } + HeapFree(GetProcessHeap(), 0, wined3d_settings.logo); UnregisterClassA(WINED3D_OPENGL_WINDOW_CLASS_NAME, hInstDLL); @@ -341,6 +364,15 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) case DLL_PROCESS_DETACH: return wined3d_destroy(hInstDLL); + case DLL_THREAD_DETACH: + { + if (!context_set_current(NULL)) + { + ERR("Failed to clear current context.\n"); + } + return TRUE; + } + default: return TRUE; } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 5d61c6af4ab..00f311dd648 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1188,6 +1188,20 @@ enum fogsource { #define WINED3D_MAX_FBO_ENTRIES 64 +struct wined3d_occlusion_query +{ + struct list entry; + GLuint id; + struct WineD3DContext *context; +}; + +struct wined3d_event_query +{ + struct list entry; + GLuint id; + struct WineD3DContext *context; +}; + /* The new context manager that should deal with onscreen and offscreen rendering */ struct WineD3DContext { @@ -1203,6 +1217,7 @@ struct WineD3DContext DWORD isStateDirty[STATE_HIGHEST/32 + 1]; /* Bitmap to find out quickly if a state is dirty */ IWineD3DSurface *surface; + IWineD3DSurface *current_rt; DWORD tid; /* Thread ID which owns this context at the moment */ /* Stores some information about the context state for optimization */ @@ -1218,7 +1233,9 @@ struct WineD3DContext WORD isPBuffer : 1; WORD fog_enabled : 1; WORD num_untracked_materials : 2; /* Max value 2 */ - WORD padding : 3; + WORD current : 1; + WORD destroyed : 1; + WORD padding : 1; BYTE texShaderBumpMap; /* MAX_TEXTURES, 8 */ BYTE lastWasPow2Texture; /* MAX_TEXTURES, 8 */ DWORD numbered_array_mask; @@ -1245,6 +1262,17 @@ struct WineD3DContext GLuint fbo_read_binding; GLuint fbo_draw_binding; + /* Queries */ + GLuint *free_occlusion_queries; + UINT free_occlusion_query_size; + UINT free_occlusion_query_count; + struct list occlusion_queries; + + GLuint *free_event_queries; + UINT free_event_query_size; + UINT free_event_query_count; + struct list event_queries; + /* Extension emulation */ GLint gl_fog_source; GLfloat fog_coord_value; @@ -1259,17 +1287,23 @@ typedef enum ContextUsage { CTXUSAGE_CLEAR = 4, /* Drawable and states are set up for clearing */ } ContextUsage; -void ActivateContext(IWineD3DDeviceImpl *device, IWineD3DSurface *target, ContextUsage usage); -WineD3DContext *getActiveContext(void); +struct WineD3DContext *ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, enum ContextUsage usage); WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *target, HWND win, BOOL create_pbuffer, const WINED3DPRESENT_PARAMETERS *pPresentParms); void DestroyContext(IWineD3DDeviceImpl *This, WineD3DContext *context); +void context_alloc_event_query(struct WineD3DContext *context, struct wined3d_event_query *query); +void context_alloc_occlusion_query(struct WineD3DContext *context, struct wined3d_occlusion_query *query); void context_resource_released(IWineD3DDevice *iface, IWineD3DResource *resource, WINED3DRESOURCETYPE type); void context_bind_fbo(struct WineD3DContext *context, GLenum target, GLuint *fbo); void context_attach_depth_stencil_fbo(struct WineD3DContext *context, GLenum fbo_target, IWineD3DSurface *depth_stencil, BOOL use_render_buffer); void context_attach_surface_fbo(const struct WineD3DContext *context, GLenum fbo_target, DWORD idx, IWineD3DSurface *surface); -void context_set_last_device(IWineD3DDeviceImpl *device); +void context_free_event_query(struct wined3d_event_query *query); +void context_free_occlusion_query(struct wined3d_occlusion_query *query); +struct WineD3DContext *context_get_current(void); +DWORD context_get_tls_idx(void); +BOOL context_set_current(struct WineD3DContext *ctx); +void context_set_tls_idx(DWORD idx); void delete_opengl_contexts(IWineD3DDevice *iface, IWineD3DSwapChain *swapchain); HRESULT create_primary_opengl_context(IWineD3DDevice *iface, IWineD3DSwapChain *swapchain); @@ -1534,10 +1568,6 @@ struct IWineD3DDeviceImpl IWineD3DSurface *auto_depth_stencil_buffer; IWineD3DSurface *stencilBufferTarget; - /* Caches to avoid unneeded context changes */ - IWineD3DSurface *lastActiveRenderTarget; - IWineD3DSwapChain *lastActiveSwapChain; - /* palettes texture management */ UINT NumberOfPalettes; PALETTEENTRY **palettes; @@ -1586,8 +1616,6 @@ struct IWineD3DDeviceImpl /* Context management */ WineD3DContext **contexts; /* Dynamic array containing pointers to context structures */ - WineD3DContext *activeContext; - DWORD lastThread; UINT numContexts; WineD3DContext *pbufferContext; /* The context that has a pbuffer as drawable */ DWORD pbufferWidth, pbufferHeight; /* Size of the buffer drawable */ @@ -1928,7 +1956,7 @@ struct IWineD3DSurfaceImpl UINT pow2Height; /* A method to retrieve the drawable size. Not in the Vtable to make it changeable */ - void (*get_drawable_size)(IWineD3DSurfaceImpl *This, UINT *width, UINT *height); + void (*get_drawable_size)(struct WineD3DContext *context, UINT *width, UINT *height); /* Oversized texture */ RECT glRect; @@ -2022,10 +2050,10 @@ HRESULT WINAPI IWineD3DBaseSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED3DL void WINAPI IWineD3DBaseSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL srgb); const void *WINAPI IWineD3DBaseSurfaceImpl_GetData(IWineD3DSurface *iface); -void get_drawable_size_swapchain(IWineD3DSurfaceImpl *This, UINT *width, UINT *height); -void get_drawable_size_backbuffer(IWineD3DSurfaceImpl *This, UINT *width, UINT *height); -void get_drawable_size_pbuffer(IWineD3DSurfaceImpl *This, UINT *width, UINT *height); -void get_drawable_size_fbo(IWineD3DSurfaceImpl *This, UINT *width, UINT *height); +void get_drawable_size_swapchain(struct WineD3DContext *context, UINT *width, UINT *height); +void get_drawable_size_backbuffer(struct WineD3DContext *context, UINT *width, UINT *height); +void get_drawable_size_pbuffer(struct WineD3DContext *context, UINT *width, UINT *height); +void get_drawable_size_fbo(struct WineD3DContext *context, UINT *width, UINT *height); void flip_surface(IWineD3DSurfaceImpl *front, IWineD3DSurfaceImpl *back); @@ -2349,17 +2377,6 @@ extern const IWineD3DQueryVtbl IWineD3DQuery_Vtbl; extern const IWineD3DQueryVtbl IWineD3DEventQuery_Vtbl; extern const IWineD3DQueryVtbl IWineD3DOcclusionQuery_Vtbl; -/* Datastructures for IWineD3DQueryImpl.extendedData */ -typedef struct WineQueryOcclusionData { - GLuint queryId; - WineD3DContext *ctx; -} WineQueryOcclusionData; - -typedef struct WineQueryEventData { - GLuint fenceId; - WineD3DContext *ctx; -} WineQueryEventData; - /* IWineD3DBuffer */ /* TODO: Add tests and support for FLOAT16_4 POSITIONT, D3DCOLOR position, other @@ -2515,7 +2532,7 @@ void state_fog_fragpart(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D void surface_add_dirty_rect(IWineD3DSurface *iface, const RECT *dirty_rect); GLenum surface_get_gl_buffer(IWineD3DSurface *iface, IWineD3DSwapChain *swapchain); -void surface_load_ds_location(IWineD3DSurface *iface, DWORD location); +void surface_load_ds_location(IWineD3DSurface *iface, struct WineD3DContext *context, DWORD location); void surface_modify_ds_location(IWineD3DSurface *iface, DWORD location); void surface_set_compatible_renderbuffer(IWineD3DSurface *iface, unsigned int width, unsigned int height); void surface_set_texture_name(IWineD3DSurface *iface, GLuint name, BOOL srgb_name); diff --git a/dlls/winex11.drv/bitblt.c b/dlls/winex11.drv/bitblt.c index 79078aefab2..119ac5bd13c 100644 --- a/dlls/winex11.drv/bitblt.c +++ b/dlls/winex11.drv/bitblt.c @@ -1438,8 +1438,7 @@ static BOOL BITBLT_InternalStretchBlt( X11DRV_PDEVICE *physDevDst, INT xDst, INT wine_tsx11_unlock(); if(!X11DRV_XRender_GetSrcAreaStretch( physDevSrc, physDevDst, pixmaps[SRC], tmpGC, - xSrc, ySrc, widthSrc, heightSrc, - xDst, yDst, widthDst, heightDst, + widthSrc, heightSrc, widthDst, heightDst, &visRectSrc, &visRectDst)) { if (fStretch) diff --git a/dlls/winex11.drv/bitmap.c b/dlls/winex11.drv/bitmap.c index 4fb3ef03c78..a28835213de 100644 --- a/dlls/winex11.drv/bitmap.c +++ b/dlls/winex11.drv/bitmap.c @@ -31,20 +31,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(x11drv); /* GCs used for B&W and color bitmap operations */ -GC BITMAP_monoGC = 0, BITMAP_colorGC = 0; +static GC bitmap_gc[32]; X_PHYSBITMAP BITMAP_stock_phys_bitmap = { 0 }; /* phys bitmap for the default stock bitmap */ static XContext bitmap_context; /* X context to associate a phys bitmap to a handle */ GC get_bitmap_gc(int depth) { - switch(depth) - { - case 1: - return BITMAP_monoGC; - default: - return BITMAP_colorGC; - } + if(depth < 1 || depth > 32) + return 0; + + return bitmap_gc[depth-1]; } /*********************************************************************** @@ -52,28 +49,38 @@ GC get_bitmap_gc(int depth) */ void X11DRV_BITMAP_Init(void) { + int depth_count, index, i; + int *depth_list; Pixmap tmpPixmap; - /* Create the necessary GCs */ - wine_tsx11_lock(); bitmap_context = XUniqueContext(); BITMAP_stock_phys_bitmap.pixmap_depth = 1; BITMAP_stock_phys_bitmap.pixmap = XCreatePixmap( gdi_display, root_window, 1, 1, 1 ); - BITMAP_monoGC = XCreateGC( gdi_display, BITMAP_stock_phys_bitmap.pixmap, 0, NULL ); - XSetGraphicsExposures( gdi_display, BITMAP_monoGC, False ); - XSetSubwindowMode( gdi_display, BITMAP_monoGC, IncludeInferiors ); - - if (screen_depth != 1) + bitmap_gc[0] = XCreateGC( gdi_display, BITMAP_stock_phys_bitmap.pixmap, 0, NULL ); + XSetGraphicsExposures( gdi_display, bitmap_gc[0], False ); + XSetSubwindowMode( gdi_display, bitmap_gc[0], IncludeInferiors ); + + /* Create a GC for all available depths. GCs at depths other than 1-bit/screen_depth are for use + * in combination with XRender which allows us to create dibsections at more depths. + */ + depth_list = XListDepths(gdi_display, DefaultScreen(gdi_display), &depth_count); + for (i = 0; i < depth_count; i++) { - if ((tmpPixmap = XCreatePixmap( gdi_display, root_window, 1, 1, screen_depth ))) + index = depth_list[i] - 1; + if (bitmap_gc[index]) continue; + if ((tmpPixmap = XCreatePixmap( gdi_display, root_window, 1, 1, depth_list[i]))) { - BITMAP_colorGC = XCreateGC( gdi_display, tmpPixmap, 0, NULL ); - XSetGraphicsExposures( gdi_display, BITMAP_colorGC, False ); - XSetSubwindowMode( gdi_display, BITMAP_colorGC, IncludeInferiors ); + if ((bitmap_gc[index] = XCreateGC( gdi_display, tmpPixmap, 0, NULL ))) + { + XSetGraphicsExposures( gdi_display, bitmap_gc[index], False ); + XSetSubwindowMode( gdi_display, bitmap_gc[index], IncludeInferiors ); + } XFreePixmap( gdi_display, tmpPixmap ); } } + XFree( depth_list ); + wine_tsx11_unlock(); } diff --git a/dlls/winex11.drv/brush.c b/dlls/winex11.drv/brush.c index 3368bbfa8d9..c94e04eabc8 100644 --- a/dlls/winex11.drv/brush.c +++ b/dlls/winex11.drv/brush.c @@ -114,7 +114,7 @@ static Pixmap BRUSH_DitherColor( COLORREF color, int depth) if (!ditherImage) { - ditherImage = X11DRV_DIB_CreateXImage( MATRIX_SIZE, MATRIX_SIZE, screen_depth ); + ditherImage = X11DRV_DIB_CreateXImage( MATRIX_SIZE, MATRIX_SIZE, depth ); if (!ditherImage) { ERR("Could not create dither image\n"); @@ -144,7 +144,7 @@ static Pixmap BRUSH_DitherColor( COLORREF color, int depth) prevColor = color; } - pixmap = XCreatePixmap( gdi_display, root_window, MATRIX_SIZE, MATRIX_SIZE, screen_depth ); + pixmap = XCreatePixmap( gdi_display, root_window, MATRIX_SIZE, MATRIX_SIZE, depth ); XPutImage( gdi_display, pixmap, gc, ditherImage, 0, 0, 0, 0, MATRIX_SIZE, MATRIX_SIZE ); wine_tsx11_unlock(); diff --git a/dlls/winex11.drv/graphics.c b/dlls/winex11.drv/graphics.c index abdd505554d..7a64022fc4c 100644 --- a/dlls/winex11.drv/graphics.c +++ b/dlls/winex11.drv/graphics.c @@ -233,7 +233,7 @@ BOOL X11DRV_SetupGCForPatBlt( X11DRV_PDEVICE *physDev, GC gc, BOOL fMapColors ) register int x, y; XImage *image; wine_tsx11_lock(); - pixmap = XCreatePixmap( gdi_display, root_window, 8, 8, screen_depth ); + pixmap = XCreatePixmap( gdi_display, root_window, 8, 8, physDev->depth ); image = XGetImage( gdi_display, physDev->brush.pixmap, 0, 0, 8, 8, AllPlanes, ZPixmap ); for (y = 0; y < 8; y++) diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 10af1832a0d..1a7a634f43e 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -269,9 +269,7 @@ extern BOOL X11DRV_XRender_ExtTextOut(X11DRV_PDEVICE *physDev, INT x, INT y, UIN UINT count, const INT *lpDx); BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst, Pixmap pixmap, GC gc, - INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, - INT xDst, INT yDst, INT widthDst, INT heightDst, RECT *visRectSrc, RECT *visRectDst); extern void X11DRV_XRender_UpdateDrawable(X11DRV_PDEVICE *physDev); diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index 6d290ba5caa..072cd25d031 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -1733,6 +1733,41 @@ static void set_xrender_transformation(Picture src_pict, float xscale, float ysc #endif } +/* Helper function for (stretched) blitting using xrender */ +static void xrender_blit(Picture src_pict, Picture mask_pict, Picture dst_pict, int x_src, int y_src, float xscale, float yscale, int width, int height) +{ + /* Further down a transformation matrix is used for stretching and mirroring the source data. + * xscale/yscale contain the scaling factors for the width and height. In case of mirroring + * we also need a x- and y-offset because without the pixels will be in the wrong quadrant of the x-y plane. + */ + int x_offset = (xscale<0) ? width : 0; + int y_offset = (yscale<0) ? height : 0; + + /* When we need to scale we perform scaling and source_x / source_y translation using a transformation matrix. + * This is needed because XRender is inaccurate in combination with scaled source coordinates passed to XRenderComposite. + * In all other cases we do use XRenderComposite for translation as it is faster than using a transformation matrix. */ + if(xscale != 1.0 || yscale != 1.0) + { + /* When we are using a mask, 'src_pict' contains a 1x1 picture for tiling, the actual source data is in mask_pict */ + if(mask_pict) + set_xrender_transformation(mask_pict, xscale, yscale, x_offset, y_offset); + else + set_xrender_transformation(src_pict, xscale, yscale, x_src + x_offset, y_src + y_offset); + + pXRenderComposite(gdi_display, PictOpSrc, src_pict, mask_pict, dst_pict, 0, 0, 0, 0, 0, 0, width, height); + } + else + { + /* When we are using a mask, 'src_pict' contains a 1x1 picture for tiling, the actual source data is in mask_pict */ + if(mask_pict) + set_xrender_transformation(mask_pict, 1, 1, 0, 0); + else + set_xrender_transformation(src_pict, 1, 1, 0, 0); + + pXRenderComposite(gdi_display, PictOpSrc, src_pict, mask_pict, dst_pict, x_src, y_src, 0, 0, 0, 0, width, height); + } +} + /****************************************************************************** * AlphaBlend (x11drv.@) */ @@ -1933,34 +1968,28 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst, Pixmap pixmap, GC gc, - INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, - INT xDst, INT yDst, INT widthDst, INT heightDst, RECT *visRectSrc, RECT *visRectDst ) { BOOL stretch = (widthSrc != widthDst) || (heightSrc != heightDst); int width = visRectDst->right - visRectDst->left; int height = visRectDst->bottom - visRectDst->top; + int x_src = physDevSrc->dc_rect.left + visRectSrc->left; + int y_src = physDevSrc->dc_rect.top + visRectSrc->top; WineXRenderFormat *src_format = get_xrender_format_from_pdevice(physDevSrc); WineXRenderFormat *dst_format = get_xrender_format_from_pdevice(physDevDst); Picture src_pict=0, dst_pict=0, mask_pict=0; - /* Further down a transformation matrix is used for stretching and mirroring the source data. - * xscale/yscale contain the scaling factors for the width and height. In case of mirroring - * we also need a x- and y-offset because without the pixels will be in the wrong quadrant of the x-y plane. - */ double xscale = widthSrc/(double)widthDst; double yscale = heightSrc/(double)heightDst; - int xoffset = (xscale<0) ? width : 0; - int yoffset = (yscale<0) ? height : 0; XRenderPictureAttributes pa; pa.subwindow_mode = IncludeInferiors; pa.repeat = RepeatNone; - TRACE("src depth=%d widthSrc=%d heightSrc=%d xSrc=%d ySrc=%d\n", physDevSrc->depth, widthSrc, heightSrc, xSrc, ySrc); - TRACE("dst depth=%d widthDst=%d heightDst=%d xDst=%d yDst=%d\n", physDevDst->depth, widthDst, heightDst, xDst, yDst); + TRACE("src depth=%d widthSrc=%d heightSrc=%d xSrc=%d ySrc=%d\n", physDevSrc->depth, widthSrc, heightSrc, x_src, y_src); + TRACE("dst depth=%d widthDst=%d heightDst=%d\n", physDevDst->depth, widthDst, heightDst); if(!X11DRV_XRender_Installed) { @@ -1981,10 +2010,7 @@ BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE { TRACE("Source and destination depth match and no stretching needed falling back to XCopyArea\n"); wine_tsx11_lock(); - XCopyArea( gdi_display, physDevSrc->drawable, pixmap, gc, - physDevSrc->dc_rect.left + visRectSrc->left, - physDevSrc->dc_rect.top + visRectSrc->top, - width, height, 0, 0); + XCopyArea( gdi_display, physDevSrc->drawable, pixmap, gc, x_src, y_src, width, height, 0, 0); wine_tsx11_unlock(); return TRUE; } @@ -1998,7 +2024,6 @@ BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE /* We use the source drawable as a mask */ wine_tsx11_lock(); mask_pict = pXRenderCreatePicture(gdi_display, physDevSrc->drawable, src_format->pict_format, CPSubwindowMode|CPRepeat, &pa); - set_xrender_transformation(mask_pict, xscale, yscale, xoffset, yoffset); /* Use backgroundPixel as the foreground color */ src_pict = get_tile_pict(dst_format, physDevDst->backgroundPixel); @@ -2007,12 +2032,7 @@ BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE dst_pict = pXRenderCreatePicture(gdi_display, pixmap, dst_format->pict_format, CPSubwindowMode|CPRepeat, &pa); pXRenderFillRectangle(gdi_display, PictOpSrc, dst_pict, &col, 0, 0, width, height); - /* Notice that the source coordinates have to be relative to the transformated source picture */ - pXRenderComposite(gdi_display, PictOpSrc, src_pict, mask_pict, dst_pict, - (physDevSrc->dc_rect.left + visRectSrc->left)/xscale, - (physDevSrc->dc_rect.top + visRectSrc->top)/yscale, - 0, 0, 0, 0, - width, height); + xrender_blit(src_pict, mask_pict, dst_pict, x_src, y_src, xscale, yscale, width, height); if(dst_pict) pXRenderFreePicture(gdi_display, dst_pict); if(mask_pict) pXRenderFreePicture(gdi_display, mask_pict); @@ -2024,18 +2044,12 @@ BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE src_pict = pXRenderCreatePicture(gdi_display, physDevSrc->drawable, src_format->pict_format, CPSubwindowMode|CPRepeat, &pa); - set_xrender_transformation(src_pict, xscale, yscale, xoffset, yoffset); dst_pict = pXRenderCreatePicture(gdi_display, pixmap, dst_format->pict_format, CPSubwindowMode|CPRepeat, &pa); - /* Notice that the source coordinates have to be relative to the transformated source picture */ - pXRenderComposite(gdi_display, PictOpSrc, src_pict, mask_pict, dst_pict, - (physDevSrc->dc_rect.left + visRectSrc->left)/xscale, - (physDevSrc->dc_rect.top + visRectSrc->top)/yscale, - 0, 0, 0, 0, - width, height); + xrender_blit(src_pict, 0, dst_pict, x_src, y_src, xscale, yscale, width, height); if(src_pict) pXRenderFreePicture(gdi_display, src_pict); if(dst_pict) pXRenderFreePicture(gdi_display, dst_pict); diff --git a/dlls/winhttp/net.c b/dlls/winhttp/net.c index 181ff02f3a4..ed4d4b90e37 100644 --- a/dlls/winhttp/net.c +++ b/dlls/winhttp/net.c @@ -58,9 +58,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(winhttp); -#define DEFAULT_SEND_TIMEOUT 30 -#define DEFAULT_RECEIVE_TIMEOUT 30 - #ifndef HAVE_GETADDRINFO /* critical section to protect non-reentrant gethostbyname() */ @@ -100,8 +97,6 @@ MAKE_FUNCPTR( SSL_write ); MAKE_FUNCPTR( SSL_read ); MAKE_FUNCPTR( SSL_get_verify_result ); MAKE_FUNCPTR( SSL_get_peer_certificate ); -MAKE_FUNCPTR( SSL_CTX_get_timeout ); -MAKE_FUNCPTR( SSL_CTX_set_timeout ); MAKE_FUNCPTR( SSL_CTX_set_default_verify_paths ); MAKE_FUNCPTR( BIO_new_fp ); @@ -218,8 +213,6 @@ BOOL netconn_init( netconn_t *conn, BOOL secure ) LOAD_FUNCPTR( SSL_read ); LOAD_FUNCPTR( SSL_get_verify_result ); LOAD_FUNCPTR( SSL_get_peer_certificate ); - LOAD_FUNCPTR( SSL_CTX_get_timeout ); - LOAD_FUNCPTR( SSL_CTX_set_timeout ); LOAD_FUNCPTR( SSL_CTX_set_default_verify_paths ); #undef LOAD_FUNCPTR @@ -294,15 +287,44 @@ BOOL netconn_close( netconn_t *conn ) return TRUE; } -BOOL netconn_connect( netconn_t *conn, const struct sockaddr *sockaddr, unsigned int addr_len ) +BOOL netconn_connect( netconn_t *conn, const struct sockaddr *sockaddr, unsigned int addr_len, int timeout ) { - if (connect( conn->socket, sockaddr, addr_len ) == -1) + BOOL ret = FALSE; + int res = 0, state; + + if (timeout > 0) { - WARN("unable to connect to host (%s)\n", strerror(errno)); - set_last_error( sock_get_error( errno ) ); - return FALSE; + state = 1; + ioctlsocket( conn->socket, FIONBIO, &state ); } - return TRUE; + if (connect( conn->socket, sockaddr, addr_len ) < 0) + { + res = sock_get_error( errno ); + if (res == WSAEWOULDBLOCK || res == WSAEINPROGRESS) + { + struct pollfd pfd; + + pfd.fd = conn->socket; + pfd.events = POLLOUT; + if (poll( &pfd, 1, timeout ) > 0) + ret = TRUE; + else + res = sock_get_error( errno ); + } + } + else + ret = TRUE; + if (timeout > 0) + { + state = 0; + ioctlsocket( conn->socket, FIONBIO, &state ); + } + if (!ret) + { + WARN("unable to connect to host (%d)\n", res); + set_last_error( res ); + } + return ret; } BOOL netconn_secure_connect( netconn_t *conn ) @@ -482,11 +504,6 @@ BOOL netconn_get_next_line( netconn_t *conn, char *buffer, DWORD *buflen ) if (conn->secure) { #ifdef SONAME_LIBSSL - long timeout; - - timeout = pSSL_CTX_get_timeout( ctx ); - pSSL_CTX_set_timeout( ctx, DEFAULT_RECEIVE_TIMEOUT ); - while (recvd < *buflen) { int dummy; @@ -502,7 +519,6 @@ BOOL netconn_get_next_line( netconn_t *conn, char *buffer, DWORD *buflen ) } if (buffer[recvd] != '\r') recvd++; } - pSSL_CTX_set_timeout( ctx, timeout ); if (ret) { buffer[recvd++] = 0; @@ -519,9 +535,16 @@ BOOL netconn_get_next_line( netconn_t *conn, char *buffer, DWORD *buflen ) pfd.events = POLLIN; while (recvd < *buflen) { - if (poll( &pfd, 1, DEFAULT_RECEIVE_TIMEOUT * 1000 ) > 0) + int timeout, res; + struct timeval tv; + socklen_t len = sizeof(tv); + + if ((res = getsockopt( conn->socket, SOL_SOCKET, SO_RCVTIMEO, (void*)&tv, &len ) != -1)) + timeout = tv.tv_sec * 1000 + tv.tv_usec / 1000; + else + timeout = -1; + if (poll( &pfd, 1, timeout ) > 0) { - int res; if ((res = recv( conn->socket, &buffer[recvd], 1, 0 )) <= 0) { if (res == -1) set_last_error( sock_get_error( errno ) ); diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index 5704417a49c..0efada470d5 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -765,6 +765,7 @@ static LPWSTR concatenate_string_list( LPCWSTR *list, int len ) len++; str = heap_alloc( len * sizeof(WCHAR) ); + if (!str) return NULL; *str = 0; for( t = list; *t ; t++ ) @@ -789,6 +790,7 @@ static LPWSTR build_header_request_string( request_t *request, LPCWSTR verb, /* allocate space for an array of all the string pointers to be added */ len = (request->num_headers) * 4 + 10; req = heap_alloc( len * sizeof(LPCWSTR) ); + if (!req) return NULL; /* add the verb, path and HTTP version string */ n = 0; @@ -820,6 +822,7 @@ static LPWSTR build_header_request_string( request_t *request, LPCWSTR verb, req[n] = NULL; requestString = concatenate_string_list( req, 4 ); heap_free( req ); + if (!requestString) return NULL; /* * Set (header) termination string for request @@ -920,7 +923,9 @@ static BOOL open_connection( request_t *request ) heap_free( addressW ); return FALSE; } - if (!netconn_connect( &request->netconn, (struct sockaddr *)&connect->sockaddr, slen )) + netconn_set_timeout( &request->netconn, TRUE, request->send_timeout ); + netconn_set_timeout( &request->netconn, FALSE, request->recv_timeout ); + if (!netconn_connect( &request->netconn, (struct sockaddr *)&connect->sockaddr, slen, request->connect_timeout )) { netconn_close( &request->netconn ); heap_free( addressW ); diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c index e1a2b4bd1a7..7bc61a97552 100644 --- a/dlls/winhttp/session.c +++ b/dlls/winhttp/session.c @@ -33,6 +33,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(winhttp); +#define DEFAULT_CONNECT_TIMEOUT 60000 +#define DEFAULT_SEND_TIMEOUT 30000 +#define DEFAULT_RECEIVE_TIMEOUT 30000 + void set_last_error( DWORD error ) { /* FIXME */ @@ -291,6 +295,7 @@ static BOOL should_bypass_proxy(session_t *session, LPCWSTR server) LPCWSTR ptr; BOOL ret = FALSE; + if (!session->proxy_bypass) return FALSE; ptr = session->proxy_bypass; do { LPCWSTR tmp = ptr; @@ -632,6 +637,9 @@ HINTERNET WINAPI WinHttpOpenRequest( HINTERNET hconnect, LPCWSTR verb, LPCWSTR o list_add_head( &connect->hdr.children, &request->hdr.entry ); if (!netconn_init( &request->netconn, request->hdr.flags & WINHTTP_FLAG_SECURE )) goto end; + request->connect_timeout = DEFAULT_CONNECT_TIMEOUT; + request->send_timeout = DEFAULT_SEND_TIMEOUT; + request->recv_timeout = DEFAULT_RECEIVE_TIMEOUT; if (!verb || !verb[0]) verb = getW; if (!(request->verb = strdupW( verb ))) goto end; @@ -850,7 +858,7 @@ BOOL WINAPI WinHttpGetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info ) { LONG l; HKEY key; - BOOL direct = TRUE; + BOOL got_from_reg = FALSE, direct = TRUE; char *envproxy; TRACE("%p\n", info); @@ -880,16 +888,16 @@ BOOL WINAPI WinHttpGetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info ) if (hdr->flags & WINHTTP_PROXY_TYPE_PROXY) { BOOL sane = FALSE; + LPWSTR proxy = NULL; + LPWSTR proxy_bypass = NULL; /* Sanity-check length of proxy string */ if ((BYTE *)len - buf + *len <= size) { sane = TRUE; - info->lpszProxy = GlobalAlloc( 0, - (*len + 1) * sizeof(WCHAR) ); - if (info->lpszProxy) - copy_char_to_wchar_sz( (BYTE *)(len + 1), - *len, (LPWSTR)info->lpszProxy ); + proxy = GlobalAlloc( 0, (*len + 1) * sizeof(WCHAR) ); + if (proxy) + copy_char_to_wchar_sz( (BYTE *)(len + 1), *len, proxy ); len = (DWORD *)((BYTE *)(len + 1) + *len); } if (sane) @@ -897,21 +905,22 @@ BOOL WINAPI WinHttpGetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info ) /* Sanity-check length of proxy bypass string */ if ((BYTE *)len - buf + *len <= size) { - info->lpszProxyBypass = GlobalAlloc( 0, - (*len + 1) * sizeof(WCHAR) ); - if (info->lpszProxyBypass) - copy_char_to_wchar_sz( (BYTE *)(len + 1), - *len, (LPWSTR)info->lpszProxyBypass ); + proxy_bypass = GlobalAlloc( 0, (*len + 1) * sizeof(WCHAR) ); + if (proxy_bypass) + copy_char_to_wchar_sz( (BYTE *)(len + 1), *len, proxy_bypass ); } else { sane = FALSE; - GlobalFree( (LPWSTR)info->lpszProxy ); - info->lpszProxy = NULL; + GlobalFree( proxy ); + proxy = NULL; } } + info->lpszProxy = proxy; + info->lpszProxyBypass = proxy_bypass; if (sane) { + got_from_reg = TRUE; direct = FALSE; info->dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY; @@ -926,21 +935,46 @@ BOOL WINAPI WinHttpGetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info ) } RegCloseKey( key ); } - else if ((envproxy = getenv( "http_proxy" ))) + if (!got_from_reg && (envproxy = getenv( "http_proxy" ))) { - WCHAR *envproxyW; - int len; + char *colon, *http_proxy; - len = MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, NULL, 0 ); - if ((envproxyW = GlobalAlloc( 0, len * sizeof(WCHAR)))) + if ((colon = strchr( envproxy, ':' ))) + { + if (*(colon + 1) == '/' && *(colon + 2) == '/') + { + static const char http[] = "http://"; + + /* It's a scheme, check that it's http */ + if (!strncmp( envproxy, http, strlen( http ) )) + http_proxy = envproxy + strlen( http ); + else + { + WARN("unsupported scheme in $http_proxy: %s\n", envproxy); + http_proxy = NULL; + } + } + else + http_proxy = envproxy; + } + else + http_proxy = envproxy; + if (http_proxy) { - MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, envproxyW, len ); - direct = FALSE; - info->dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY; - info->lpszProxy = envproxyW; - info->lpszProxyBypass = NULL; - TRACE("http proxy (from environment) = %s\n", - debugstr_w(info->lpszProxy)); + WCHAR *http_proxyW; + int len; + + len = MultiByteToWideChar( CP_UNIXCP, 0, http_proxy, -1, NULL, 0 ); + if ((http_proxyW = GlobalAlloc( 0, len * sizeof(WCHAR)))) + { + MultiByteToWideChar( CP_UNIXCP, 0, http_proxy, -1, http_proxyW, len ); + direct = FALSE; + info->dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY; + info->lpszProxy = http_proxyW; + info->lpszProxyBypass = NULL; + TRACE("http proxy (from environment) = %s\n", + debugstr_w(info->lpszProxy)); + } } } if (direct) @@ -1135,7 +1169,8 @@ BOOL WINAPI WinHttpSetTimeouts( HINTERNET handle, int resolve, int connect, int return FALSE; } - FIXME("resolve and connect timeout not supported\n"); + if (resolve > 0) + FIXME("resolve timeout (%d) not supported\n", resolve); if (!(request = (request_t *)grab_object( handle ))) { @@ -1150,11 +1185,19 @@ BOOL WINAPI WinHttpSetTimeouts( HINTERNET handle, int resolve, int connect, int return FALSE; } + request->connect_timeout = connect; + if (send < 0) send = 0; - if (netconn_set_timeout( &request->netconn, TRUE, send )) ret = FALSE; + request->send_timeout = send; if (receive < 0) receive = 0; - if (netconn_set_timeout( &request->netconn, FALSE, receive )) ret = FALSE; + request->recv_timeout = receive; + + if (netconn_connected( &request->netconn )) + { + if (netconn_set_timeout( &request->netconn, TRUE, send )) ret = FALSE; + if (netconn_set_timeout( &request->netconn, FALSE, receive )) ret = FALSE; + } release_object( &request->hdr ); return ret; diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c index bce91fea4dd..67ac5042009 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -867,7 +867,10 @@ static void set_default_proxy_reg_value( BYTE *buf, DWORD len, DWORD type ) KEY_WRITE, NULL, &key, NULL ); if (!l) { - RegSetValueExW( key, WinHttpSettings, 0, type, buf, len ); + if (len) + RegSetValueExW( key, WinHttpSettings, 0, type, buf, len ); + else + RegDeleteValueW( key, WinHttpSettings ); RegCloseKey( key ); } } @@ -939,7 +942,8 @@ static void test_set_default_proxy_config(void) info.lpszProxy = wideString; SetLastError(0xdeadbeef); ret = WinHttpSetDefaultProxyConfiguration(&info); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, + ok((!ret && GetLastError() == ERROR_INVALID_PARAMETER) || + broken(ret), /* Earlier winhttp versions on W2K/XP */ "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); info.lpszProxy = normalString; diff --git a/dlls/winhttp/winhttp_private.h b/dlls/winhttp/winhttp_private.h index 2431d7ce9c9..83df0c0643e 100644 --- a/dlls/winhttp/winhttp_private.h +++ b/dlls/winhttp/winhttp_private.h @@ -139,6 +139,9 @@ typedef struct LPWSTR version; LPWSTR raw_headers; netconn_t netconn; + int connect_timeout; + int send_timeout; + int recv_timeout; LPWSTR status_text; DWORD content_length; /* total number of bytes to be read (per chunk) */ DWORD content_read; /* bytes read so far */ @@ -204,7 +207,7 @@ void send_callback( object_header_t *, DWORD, LPVOID, DWORD ); void close_connection( request_t * ); BOOL netconn_close( netconn_t * ); -BOOL netconn_connect( netconn_t *, const struct sockaddr *, unsigned int ); +BOOL netconn_connect( netconn_t *, const struct sockaddr *, unsigned int, int ); BOOL netconn_connected( netconn_t * ); BOOL netconn_create( netconn_t *, int, int, int ); BOOL netconn_get_next_line( netconn_t *, char *, DWORD * ); diff --git a/dlls/wininet/cookie.c b/dlls/wininet/cookie.c index c9bcad09a76..30e0b99ee92 100644 --- a/dlls/wininet/cookie.c +++ b/dlls/wininet/cookie.c @@ -95,17 +95,8 @@ static cookie *COOKIE_addCookie(cookie_domain *domain, LPCWSTR name, LPCWSTR dat newCookie->lpCookieName = NULL; newCookie->lpCookieData = NULL; newCookie->expiry = expiry; - - if (name) - { - newCookie->lpCookieName = HeapAlloc(GetProcessHeap(), 0, (strlenW(name) + 1)*sizeof(WCHAR)); - lstrcpyW(newCookie->lpCookieName, name); - } - if (data) - { - newCookie->lpCookieData = HeapAlloc(GetProcessHeap(), 0, (strlenW(data) + 1)*sizeof(WCHAR)); - lstrcpyW(newCookie->lpCookieData, data); - } + newCookie->lpCookieName = heap_strdupW(name); + newCookie->lpCookieData = heap_strdupW(data); TRACE("added cookie %p (data is %s)\n", newCookie, debugstr_w(data) ); @@ -160,17 +151,8 @@ static cookie_domain *COOKIE_addDomain(LPCWSTR domain, LPCWSTR path) list_init(&newDomain->cookie_list); newDomain->lpCookieDomain = NULL; newDomain->lpCookiePath = NULL; - - if (domain) - { - newDomain->lpCookieDomain = HeapAlloc(GetProcessHeap(), 0, (strlenW(domain) + 1)*sizeof(WCHAR)); - strcpyW(newDomain->lpCookieDomain, domain); - } - if (path) - { - newDomain->lpCookiePath = HeapAlloc(GetProcessHeap(), 0, (strlenW(path) + 1)*sizeof(WCHAR)); - lstrcpyW(newDomain->lpCookiePath, path); - } + newDomain->lpCookieDomain = heap_strdupW(domain); + newDomain->lpCookiePath = heap_strdupW(path); list_add_tail(&domain_list, &newDomain->entry); @@ -398,27 +380,16 @@ BOOL WINAPI InternetGetCookieA(LPCSTR lpszUrl, LPCSTR lpszCookieName, LPSTR lpCookieData, LPDWORD lpdwSize) { DWORD len; - LPWSTR szCookieData = NULL, szUrl = NULL, szCookieName = NULL; + LPWSTR szCookieData = NULL, url, name; BOOL r; TRACE("(%s,%s,%p)\n", debugstr_a(lpszUrl), debugstr_a(lpszCookieName), lpCookieData); - if( lpszUrl ) - { - len = MultiByteToWideChar( CP_ACP, 0, lpszUrl, -1, NULL, 0 ); - szUrl = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, lpszUrl, -1, szUrl, len ); - } - - if( lpszCookieName ) - { - len = MultiByteToWideChar( CP_ACP, 0, lpszCookieName, -1, NULL, 0 ); - szCookieName = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, lpszCookieName, -1, szCookieName, len ); - } + url = heap_strdupAtoW(lpszUrl); + name = heap_strdupAtoW(lpszCookieName); - r = InternetGetCookieW( szUrl, szCookieName, NULL, &len ); + r = InternetGetCookieW( url, name, NULL, &len ); if( r ) { szCookieData = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); @@ -428,7 +399,7 @@ BOOL WINAPI InternetGetCookieA(LPCSTR lpszUrl, LPCSTR lpszCookieName, } else { - r = InternetGetCookieW( szUrl, szCookieName, szCookieData, &len ); + r = InternetGetCookieW( url, name, szCookieData, &len ); *lpdwSize = WideCharToMultiByte( CP_ACP, 0, szCookieData, len, lpCookieData, *lpdwSize, NULL, NULL ); @@ -436,8 +407,8 @@ BOOL WINAPI InternetGetCookieA(LPCSTR lpszUrl, LPCSTR lpszCookieName, } HeapFree( GetProcessHeap(), 0, szCookieData ); - HeapFree( GetProcessHeap(), 0, szCookieName ); - HeapFree( GetProcessHeap(), 0, szUrl ); + HeapFree( GetProcessHeap(), 0, name ); + HeapFree( GetProcessHeap(), 0, url ); return r; } @@ -452,14 +423,13 @@ static BOOL set_cookie(LPCWSTR domain, LPCWSTR path, LPCWSTR cookie_name, LPCWST FILETIME expiry; BOOL expired = FALSE; - value = data = HeapAlloc(GetProcessHeap(), 0, (strlenW(cookie_data) + 1) * sizeof(WCHAR)); - if (data == NULL) + value = data = heap_strdupW(cookie_data); + if (!data) { ERR("could not allocate %zu bytes for the cookie data buffer\n", (strlenW(cookie_data) + 1) * sizeof(WCHAR)); return FALSE; } - strcpyW(data,cookie_data); memset(&expiry,0,sizeof(expiry)); /* lots of information can be parsed out of the cookie value */ @@ -605,21 +575,19 @@ BOOL WINAPI InternetSetCookieW(LPCWSTR lpszUrl, LPCWSTR lpszCookieName, if (!lpszCookieName) { - unsigned int len; WCHAR *cookie, *data; - len = strlenW(lpCookieData); - if (!(cookie = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR)))) + cookie = heap_strdupW(lpCookieData); + if (!cookie) { SetLastError(ERROR_OUTOFMEMORY); return FALSE; } - strcpyW(cookie, lpCookieData); /* some apps (or is it us??) try to add a cookie with no cookie name, but * the cookie data in the form of name[=data]. */ - if (!(data = strchrW(cookie, '='))) data = cookie + len; + if (!(data = strchrW(cookie, '='))) data = cookie + strlenW(cookie); else *data++ = 0; ret = set_cookie(hostName, path, cookie, data); @@ -644,39 +612,21 @@ BOOL WINAPI InternetSetCookieW(LPCWSTR lpszUrl, LPCWSTR lpszCookieName, BOOL WINAPI InternetSetCookieA(LPCSTR lpszUrl, LPCSTR lpszCookieName, LPCSTR lpCookieData) { - DWORD len; - LPWSTR szCookieData = NULL, szUrl = NULL, szCookieName = NULL; + LPWSTR data, url, name; BOOL r; TRACE("(%s,%s,%s)\n", debugstr_a(lpszUrl), debugstr_a(lpszCookieName), debugstr_a(lpCookieData)); - if( lpszUrl ) - { - len = MultiByteToWideChar( CP_ACP, 0, lpszUrl, -1, NULL, 0 ); - szUrl = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, lpszUrl, -1, szUrl, len ); - } + url = heap_strdupAtoW(lpszUrl); + name = heap_strdupAtoW(lpszCookieName); + data = heap_strdupAtoW(lpCookieData); - if( lpszCookieName ) - { - len = MultiByteToWideChar( CP_ACP, 0, lpszCookieName, -1, NULL, 0 ); - szCookieName = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, lpszCookieName, -1, szCookieName, len ); - } + r = InternetSetCookieW( url, name, data ); - if( lpCookieData ) - { - len = MultiByteToWideChar( CP_ACP, 0, lpCookieData, -1, NULL, 0 ); - szCookieData = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, lpCookieData, -1, szCookieData, len ); - } - - r = InternetSetCookieW( szUrl, szCookieName, szCookieData ); - - HeapFree( GetProcessHeap(), 0, szCookieData ); - HeapFree( GetProcessHeap(), 0, szCookieName ); - HeapFree( GetProcessHeap(), 0, szUrl ); + HeapFree( GetProcessHeap(), 0, data ); + HeapFree( GetProcessHeap(), 0, name ); + HeapFree( GetProcessHeap(), 0, url ); return r; } diff --git a/dlls/wininet/dialogs.c b/dlls/wininet/dialogs.c index c1502ce62ef..d66e7e354cb 100644 --- a/dlls/wininet/dialogs.c +++ b/dlls/wininet/dialogs.c @@ -65,19 +65,20 @@ static BOOL WININET_GetProxyServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) http_request_t *lpwhr; http_session_t *lpwhs = NULL; appinfo_t *hIC = NULL; + BOOL ret = FALSE; LPWSTR p; lpwhr = (http_request_t*) WININET_GetObject( hRequest ); if (NULL == lpwhr) - return FALSE; + goto done; lpwhs = lpwhr->lpHttpSession; if (NULL == lpwhs) - return FALSE; + goto done; hIC = lpwhs->lpAppInfo; if (NULL == hIC) - return FALSE; + goto done; lstrcpynW(szBuf, hIC->lpszProxy, sz); @@ -86,7 +87,39 @@ static BOOL WININET_GetProxyServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) if (p) *p = 0; - return TRUE; + ret = TRUE; + +done: + WININET_Release( &lpwhr->hdr ); + return ret; +} + +/*********************************************************************** + * WININET_GetServer + * + * Determine the name of the web server + */ +static BOOL WININET_GetServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) +{ + http_request_t *lpwhr; + http_session_t *lpwhs = NULL; + BOOL ret = FALSE; + + lpwhr = (http_request_t*) WININET_GetObject( hRequest ); + if (NULL == lpwhr) + goto done; + + lpwhs = lpwhr->lpHttpSession; + if (NULL == lpwhs) + goto done; + + lstrcpynW(szBuf, lpwhs->lpszHostName, sz); + + ret = TRUE; + +done: + WININET_Release( &lpwhr->hdr ); + return ret; } /*********************************************************************** @@ -94,16 +127,20 @@ static BOOL WININET_GetProxyServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) * * Determine the name of the (basic) Authentication realm */ -static BOOL WININET_GetAuthRealm( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) +static BOOL WININET_GetAuthRealm( HINTERNET hRequest, LPWSTR szBuf, DWORD sz, BOOL proxy ) { LPWSTR p, q; - DWORD index; + DWORD index, query; static const WCHAR szRealm[] = { 'r','e','a','l','m','=',0 }; - /* extract the Realm from the proxy response and show it */ + if (proxy) + query = HTTP_QUERY_PROXY_AUTHENTICATE; + else + query = HTTP_QUERY_WWW_AUTHENTICATE; + + /* extract the Realm from the response and show it */ index = 0; - if( !HttpQueryInfoW( hRequest, HTTP_QUERY_PROXY_AUTHENTICATE, - szBuf, &sz, &index) ) + if( !HttpQueryInfoW( hRequest, query, szBuf, &sz, &index) ) return FALSE; /* @@ -113,11 +150,10 @@ static BOOL WININET_GetAuthRealm( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) p = strchrW( szBuf, ' ' ); if( !p || strncmpW( p+1, szRealm, strlenW(szRealm) ) ) { - ERR("proxy response wrong? (%s)\n", debugstr_w(szBuf)); + ERR("response wrong? (%s)\n", debugstr_w(szBuf)); return FALSE; } - /* remove quotes */ p += 7; if( *p == '"' ) @@ -198,44 +234,62 @@ static BOOL WININET_GetSetPassword( HWND hdlg, LPCWSTR szServer, } /*********************************************************************** - * WININET_SetProxyAuthorization + * WININET_SetAuthorization */ -static BOOL WININET_SetProxyAuthorization( HINTERNET hRequest, - LPWSTR username, LPWSTR password ) +static BOOL WININET_SetAuthorization( HINTERNET hRequest, LPWSTR username, + LPWSTR password, BOOL proxy ) { http_request_t *lpwhr; http_session_t *lpwhs; - appinfo_t *hIC; - LPWSTR p; + BOOL ret = FALSE; + LPWSTR p, q; lpwhr = (http_request_t*) WININET_GetObject( hRequest ); if( !lpwhr ) - return FALSE; - + return FALSE; + lpwhs = lpwhr->lpHttpSession; if (NULL == lpwhs || lpwhs->hdr.htype != WH_HHTTPSESSION) { INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE); - return FALSE; + goto done; } - hIC = lpwhs->lpAppInfo; - - p = HeapAlloc( GetProcessHeap(), 0, (strlenW( username ) + 1)*sizeof(WCHAR) ); + p = heap_strdupW(username); if( !p ) - return FALSE; - - lstrcpyW( p, username ); - hIC->lpszProxyUsername = p; + goto done; - p = HeapAlloc( GetProcessHeap(), 0, (strlenW( password ) + 1)*sizeof(WCHAR) ); - if( !p ) - return FALSE; - - lstrcpyW( p, password ); - hIC->lpszProxyPassword = p; + q = heap_strdupW(password); + if( !q ) + { + HeapFree(GetProcessHeap(), 0, username); + goto done; + } - return TRUE; + if (proxy) + { + appinfo_t *hIC = lpwhs->lpAppInfo; + + HeapFree(GetProcessHeap(), 0, hIC->lpszProxyUsername); + hIC->lpszProxyUsername = p; + + HeapFree(GetProcessHeap(), 0, hIC->lpszProxyPassword); + hIC->lpszProxyPassword = q; + } + else + { + HeapFree(GetProcessHeap(), 0, lpwhs->lpszUserName); + lpwhs->lpszUserName = p; + + HeapFree(GetProcessHeap(), 0, lpwhs->lpszPassword); + lpwhs->lpszPassword = q; + } + + ret = TRUE; + +done: + WININET_Release( &lpwhr->hdr ); + return ret; } /*********************************************************************** @@ -258,7 +312,7 @@ static INT_PTR WINAPI WININET_ProxyPasswordDialog( /* extract the Realm from the proxy response and show it */ if( WININET_GetAuthRealm( params->hRequest, - szRealm, sizeof szRealm/sizeof(WCHAR)) ) + szRealm, sizeof szRealm/sizeof(WCHAR), TRUE ) ) { hitem = GetDlgItem( hdlg, IDC_REALM ); SetWindowTextW( hitem, szRealm ); @@ -301,13 +355,97 @@ static INT_PTR WINAPI WININET_ProxyPasswordDialog( if( hitem && SendMessageW( hitem, BM_GETSTATE, 0, 0 ) && WININET_GetAuthRealm( params->hRequest, - szRealm, sizeof szRealm/sizeof(WCHAR)) && + szRealm, sizeof szRealm/sizeof(WCHAR), TRUE ) && WININET_GetProxyServer( params->hRequest, szServer, sizeof szServer/sizeof(WCHAR)) ) { WININET_GetSetPassword( hdlg, szServer, szRealm, TRUE ); } - WININET_SetProxyAuthorization( params->hRequest, username, password ); + WININET_SetAuthorization( params->hRequest, username, password, TRUE ); + + EndDialog( hdlg, ERROR_INTERNET_FORCE_RETRY ); + return TRUE; + } + if( wParam == IDCANCEL ) + { + EndDialog( hdlg, 0 ); + return TRUE; + } + break; + } + return FALSE; +} + +/*********************************************************************** + * WININET_PasswordDialog + */ +static INT_PTR WINAPI WININET_PasswordDialog( + HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) +{ + HWND hitem; + struct WININET_ErrorDlgParams *params; + WCHAR szRealm[0x80], szServer[0x80]; + + if( uMsg == WM_INITDIALOG ) + { + TRACE("WM_INITDIALOG (%08lx)\n", lParam); + + /* save the parameter list */ + params = (struct WININET_ErrorDlgParams*) lParam; + SetWindowLongPtrW( hdlg, GWLP_USERDATA, lParam ); + + /* extract the Realm from the response and show it */ + if( WININET_GetAuthRealm( params->hRequest, + szRealm, sizeof szRealm/sizeof(WCHAR), FALSE ) ) + { + hitem = GetDlgItem( hdlg, IDC_REALM ); + SetWindowTextW( hitem, szRealm ); + } + + /* extract the name of the server */ + if( WININET_GetServer( params->hRequest, + szServer, sizeof szServer/sizeof(WCHAR)) ) + { + hitem = GetDlgItem( hdlg, IDC_SERVER ); + SetWindowTextW( hitem, szServer ); + } + + WININET_GetSetPassword( hdlg, szServer, szRealm, FALSE ); + + return TRUE; + } + + params = (struct WININET_ErrorDlgParams*) + GetWindowLongPtrW( hdlg, GWLP_USERDATA ); + + switch( uMsg ) + { + case WM_COMMAND: + if( wParam == IDOK ) + { + WCHAR username[0x20], password[0x20]; + + username[0] = 0; + hitem = GetDlgItem( hdlg, IDC_USERNAME ); + if( hitem ) + GetWindowTextW( hitem, username, sizeof username/sizeof(WCHAR) ); + + password[0] = 0; + hitem = GetDlgItem( hdlg, IDC_PASSWORD ); + if( hitem ) + GetWindowTextW( hitem, password, sizeof password/sizeof(WCHAR) ); + + hitem = GetDlgItem( hdlg, IDC_SAVEPASSWORD ); + if( hitem && + SendMessageW( hitem, BM_GETSTATE, 0, 0 ) && + WININET_GetAuthRealm( params->hRequest, + szRealm, sizeof szRealm/sizeof(WCHAR), FALSE ) && + WININET_GetServer( params->hRequest, + szServer, sizeof szServer/sizeof(WCHAR)) ) + { + WININET_GetSetPassword( hdlg, szServer, szRealm, TRUE ); + } + WININET_SetAuthorization( params->hRequest, username, password, FALSE ); EndDialog( hdlg, ERROR_INTERNET_FORCE_RETRY ); return TRUE; @@ -366,17 +504,23 @@ DWORD WINAPI InternetErrorDlg(HWND hWnd, HINTERNET hRequest, switch( dwError ) { case ERROR_SUCCESS: - if( !(dwFlags & FLAGS_ERROR_UI_FILTER_FOR_ERRORS ) ) + case ERROR_INTERNET_INCORRECT_PASSWORD: + if( !dwError && !(dwFlags & FLAGS_ERROR_UI_FILTER_FOR_ERRORS ) ) return 0; - dwStatus = WININET_GetConnectionStatus( hRequest ); - if( HTTP_STATUS_PROXY_AUTH_REQ != dwStatus ) - return ERROR_SUCCESS; - return DialogBoxParamW( hwininet, MAKEINTRESOURCEW( IDD_PROXYDLG ), - hWnd, WININET_ProxyPasswordDialog, (LPARAM) ¶ms ); - case ERROR_INTERNET_INCORRECT_PASSWORD: - return DialogBoxParamW( hwininet, MAKEINTRESOURCEW( IDD_PROXYDLG ), - hWnd, WININET_ProxyPasswordDialog, (LPARAM) ¶ms ); + dwStatus = WININET_GetConnectionStatus( hRequest ); + switch (dwStatus) + { + case HTTP_STATUS_PROXY_AUTH_REQ: + return DialogBoxParamW( hwininet, MAKEINTRESOURCEW( IDD_PROXYDLG ), + hWnd, WININET_ProxyPasswordDialog, (LPARAM) ¶ms ); + case HTTP_STATUS_DENIED: + return DialogBoxParamW( hwininet, MAKEINTRESOURCEW( IDD_AUTHDLG ), + hWnd, WININET_PasswordDialog, (LPARAM) ¶ms ); + default: + WARN("unhandled status %u\n", dwStatus); + return 0; + } case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: case ERROR_INTERNET_INVALID_CA: diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index b4f79248128..693a44fa297 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -79,6 +79,7 @@ static const WCHAR szProxy_Authorization[] = { 'P','r','o','x','y','-','A','u',' static const WCHAR szStatus[] = { 'S','t','a','t','u','s',0 }; static const WCHAR szKeepAlive[] = {'K','e','e','p','-','A','l','i','v','e',0}; static const WCHAR szGET[] = { 'G','E','T', 0 }; +static const WCHAR szHEAD[] = { 'H','E','A','D', 0 }; static const WCHAR szCrLf[] = {'\r','\n', 0}; static const WCHAR szAccept[] = { 'A','c','c','e','p','t',0 }; @@ -909,9 +910,11 @@ static BOOL HTTP_HttpEndRequestW(http_request_t *lpwhr, DWORD dwFlags, DWORD_PTR dwBufferSize=sizeof(szNewLocation); if (HTTP_HttpQueryInfoW(lpwhr, HTTP_QUERY_LOCATION, szNewLocation, &dwBufferSize, NULL)) { - /* redirects are always GETs */ - HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb); - lpwhr->lpszVerb = heap_strdupW(szGET); + if (strcmpW(lpwhr->lpszVerb, szGET) && strcmpW(lpwhr->lpszVerb, szHEAD)) + { + HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb); + lpwhr->lpszVerb = heap_strdupW(szGET); + } HTTP_DrainContent(lpwhr); if ((new_url = HTTP_GetRedirectURL( lpwhr, szNewLocation ))) { @@ -2526,6 +2529,7 @@ static void HTTP_DrainContent(http_request_t *req) NETCON_close(&req->netConnection); return; } + if (!strcmpW(req->lpszVerb, szHEAD)) return; do { @@ -3790,10 +3794,11 @@ BOOL WINAPI HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders, if ((dwStatusCode==HTTP_STATUS_REDIRECT || dwStatusCode==HTTP_STATUS_MOVED) && HTTP_HttpQueryInfoW(lpwhr,HTTP_QUERY_LOCATION,szNewLocation,&dwBufferSize,NULL)) { - /* redirects are always GETs */ - HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb); - lpwhr->lpszVerb = heap_strdupW(szGET); - + if (strcmpW(lpwhr->lpszVerb, szGET) && strcmpW(lpwhr->lpszVerb, szHEAD)) + { + HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb); + lpwhr->lpszVerb = heap_strdupW(szGET); + } HTTP_DrainContent(lpwhr); if ((new_url = HTTP_GetRedirectURL( lpwhr, szNewLocation ))) { diff --git a/dlls/wininet/resource.h b/dlls/wininet/resource.h index 6cabaa0e35a..279c1123db8 100644 --- a/dlls/wininet/resource.h +++ b/dlls/wininet/resource.h @@ -21,6 +21,7 @@ #include #include +#define IDD_AUTHDLG 0x399 #define IDD_PROXYDLG 0x400 #define IDC_PROXY 0x401 @@ -28,5 +29,6 @@ #define IDC_USERNAME 0x403 #define IDC_PASSWORD 0x404 #define IDC_SAVEPASSWORD 0x405 +#define IDC_SERVER 0x406 #define IDS_LANCONNECTION 0x500 diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c index 418f508f650..0b29a6e9a7b 100644 --- a/dlls/wininet/urlcache.c +++ b/dlls/wininet/urlcache.c @@ -465,7 +465,6 @@ static void URLCacheContainer_CloseIndex(URLCACHECONTAINER * pContainer) static BOOL URLCacheContainers_AddContainer(LPCWSTR cache_prefix, LPCWSTR path, LPWSTR mutex_name) { URLCACHECONTAINER * pContainer = HeapAlloc(GetProcessHeap(), 0, sizeof(URLCACHECONTAINER)); - int path_len = strlenW(path); int cache_prefix_len = strlenW(cache_prefix); if (!pContainer) @@ -476,15 +475,13 @@ static BOOL URLCacheContainers_AddContainer(LPCWSTR cache_prefix, LPCWSTR path, pContainer->hMapping = NULL; pContainer->file_size = 0; - pContainer->path = HeapAlloc(GetProcessHeap(), 0, (path_len + 1) * sizeof(WCHAR)); + pContainer->path = heap_strdupW(path); if (!pContainer->path) { HeapFree(GetProcessHeap(), 0, pContainer); return FALSE; } - memcpy(pContainer->path, path, (path_len + 1) * sizeof(WCHAR)); - pContainer->cache_prefix = HeapAlloc(GetProcessHeap(), 0, (cache_prefix_len + 1) * sizeof(WCHAR)); if (!pContainer->cache_prefix) { @@ -593,6 +590,9 @@ static DWORD URLCacheContainers_FindContainerW(LPCWSTR lpwszUrl, URLCACHECONTAIN TRACE("searching for prefix for URL: %s\n", debugstr_w(lpwszUrl)); + if(!lpwszUrl) + return ERROR_INVALID_PARAMETER; + LIST_FOR_EACH_ENTRY(pContainer, &UrlContainers, URLCACHECONTAINER, entry) { int prefix_len = strlenW(pContainer->cache_prefix); @@ -609,17 +609,15 @@ static DWORD URLCacheContainers_FindContainerW(LPCWSTR lpwszUrl, URLCACHECONTAIN static DWORD URLCacheContainers_FindContainerA(LPCSTR lpszUrl, URLCACHECONTAINER ** ppContainer) { + LPWSTR url = NULL; DWORD ret; - LPWSTR lpwszUrl; - int url_len = MultiByteToWideChar(CP_ACP, 0, lpszUrl, -1, NULL, 0); - if (url_len && (lpwszUrl = HeapAlloc(GetProcessHeap(), 0, url_len * sizeof(WCHAR)))) - { - MultiByteToWideChar(CP_ACP, 0, lpszUrl, -1, lpwszUrl, url_len); - ret = URLCacheContainers_FindContainerW(lpwszUrl, ppContainer); - HeapFree(GetProcessHeap(), 0, lpwszUrl); - return ret; - } - return GetLastError(); + + if (lpszUrl && !(url = heap_strdupAtoW(lpszUrl))) + return ERROR_OUTOFMEMORY; + + ret = URLCacheContainers_FindContainerW(url, ppContainer); + HeapFree(GetProcessHeap(), 0, url); + return ret; } static BOOL URLCacheContainers_Enum(LPCWSTR lpwszSearchPattern, DWORD dwIndex, URLCACHECONTAINER ** ppContainer) @@ -1241,17 +1239,15 @@ static BOOL URLCache_FindHash(LPCURLCACHE_HEADER pHeader, LPCSTR lpszUrl, struct static BOOL URLCache_FindHashW(LPCURLCACHE_HEADER pHeader, LPCWSTR lpszUrl, struct _HASH_ENTRY ** ppHashEntry) { LPSTR urlA; - int url_len; BOOL ret; - url_len = WideCharToMultiByte(CP_ACP, 0, lpszUrl, -1, NULL, 0, NULL, NULL); - urlA = HeapAlloc(GetProcessHeap(), 0, url_len * sizeof(CHAR)); + urlA = heap_strdupWtoA(lpszUrl); if (!urlA) { SetLastError(ERROR_OUTOFMEMORY); return FALSE; } - WideCharToMultiByte(CP_ACP, 0, lpszUrl, -1, urlA, url_len, NULL, NULL); + ret = URLCache_FindHash(pHeader, urlA, ppHashEntry); HeapFree(GetProcessHeap(), 0, urlA); return ret; @@ -2143,21 +2139,16 @@ BOOL WINAPI CreateUrlCacheEntryA( IN DWORD dwReserved ) { - DWORD len; WCHAR *url_name; WCHAR *file_extension; WCHAR file_name[MAX_PATH]; BOOL bSuccess = FALSE; DWORD dwError = 0; - if ((len = MultiByteToWideChar(CP_ACP, 0, lpszUrlName, -1, NULL, 0)) != 0 && - (url_name = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR))) != 0) + if (lpszUrlName && (url_name = heap_strdupAtoW(lpszUrlName))) { - MultiByteToWideChar(CP_ACP, 0, lpszUrlName, -1, url_name, len); - if ((len = MultiByteToWideChar(CP_ACP, 0, lpszFileExtension, -1, NULL, 0)) != 0 && - (file_extension = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR))) != 0) + if (lpszFileExtension && (file_extension = heap_strdupAtoW(lpszFileExtension))) { - MultiByteToWideChar(CP_ACP, 0, lpszFileExtension, -1, file_extension, len); if (CreateUrlCacheEntryW(url_name, dwExpectedFileSize, file_extension, file_name, dwReserved)) { if (WideCharToMultiByte(CP_ACP, 0, file_name, -1, lpszFileName, MAX_PATH, NULL, NULL) < MAX_PATH) @@ -2444,25 +2435,17 @@ static BOOL CommitUrlCacheEntryInternal( if (!(pHeader = URLCacheContainer_LockIndex(pContainer))) return FALSE; - len = WideCharToMultiByte(CP_ACP, 0, lpszUrlName, -1, NULL, 0, NULL, NULL); - lpszUrlNameA = HeapAlloc(GetProcessHeap(), 0, len * sizeof(char)); + lpszUrlNameA = heap_strdupWtoA(lpszUrlName); if (!lpszUrlNameA) { error = GetLastError(); goto cleanup; } - WideCharToMultiByte(CP_ACP, 0, lpszUrlName, -1, lpszUrlNameA, len, NULL, NULL); - if (lpszFileExtension) + if (lpszFileExtension && !(lpszFileExtensionA = heap_strdupWtoA(lpszFileExtension))) { - len = WideCharToMultiByte(CP_ACP, 0, lpszFileExtension, -1, NULL, 0, NULL, NULL); - lpszFileExtensionA = HeapAlloc(GetProcessHeap(), 0, len * sizeof(char)); - if (!lpszFileExtensionA) - { - error = GetLastError(); - goto cleanup; - } - WideCharToMultiByte(CP_ACP, 0, lpszFileExtension, -1, lpszFileExtensionA, len, NULL, NULL); + error = GetLastError(); + goto cleanup; } if (URLCache_FindHash(pHeader, lpszUrlNameA, &pHashEntry)) @@ -2619,7 +2602,6 @@ BOOL WINAPI CommitUrlCacheEntryA( IN LPCSTR lpszOriginalUrl ) { - DWORD len; WCHAR *url_name = NULL; WCHAR *local_file_name = NULL; WCHAR *original_url = NULL; @@ -2635,35 +2617,27 @@ BOOL WINAPI CommitUrlCacheEntryA( debugstr_a(lpszFileExtension), debugstr_a(lpszOriginalUrl)); - len = MultiByteToWideChar(CP_ACP, 0, lpszUrlName, -1, NULL, 0); - url_name = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + url_name = heap_strdupAtoW(lpszUrlName); if (!url_name) goto cleanup; - MultiByteToWideChar(CP_ACP, 0, lpszUrlName, -1, url_name, len); if (lpszLocalFileName) { - len = MultiByteToWideChar(CP_ACP, 0, lpszLocalFileName, -1, NULL, 0); - local_file_name = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + local_file_name = heap_strdupAtoW(lpszLocalFileName); if (!local_file_name) goto cleanup; - MultiByteToWideChar(CP_ACP, 0, lpszLocalFileName, -1, local_file_name, len); } if (lpszFileExtension) { - len = MultiByteToWideChar(CP_ACP, 0, lpszFileExtension, -1, NULL, 0); - file_extension = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + file_extension = heap_strdupAtoW(lpszFileExtension); if (!file_extension) goto cleanup; - MultiByteToWideChar(CP_ACP, 0, lpszFileExtension, -1, file_extension, len); } if (lpszOriginalUrl) { - len = MultiByteToWideChar(CP_ACP, 0, lpszOriginalUrl, -1, NULL, 0); - original_url = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + original_url = heap_strdupAtoW(lpszOriginalUrl); if (!original_url) goto cleanup; - MultiByteToWideChar(CP_ACP, 0, lpszOriginalUrl, -1, original_url, len); } bSuccess = CommitUrlCacheEntryInternal(url_name, local_file_name, ExpireTime, LastModifiedTime, @@ -2709,12 +2683,8 @@ BOOL WINAPI CommitUrlCacheEntryW( debugstr_w(lpszFileExtension), debugstr_w(lpszOriginalUrl)); - if (!lpHeaderInfo || - ((len = WideCharToMultiByte(CP_ACP, 0, lpHeaderInfo, -1, NULL, 0, NULL, NULL)) != 0 && - (header_info = HeapAlloc(GetProcessHeap(), 0, sizeof(CHAR) * len)) != 0)) + if (!lpHeaderInfo || (header_info = heap_strdupWtoA(lpHeaderInfo))) { - if (header_info) - WideCharToMultiByte(CP_ACP, 0, lpHeaderInfo, -1, header_info, len, NULL, NULL); if (CommitUrlCacheEntryInternal(lpszUrlName, lpszLocalFileName, ExpireTime, LastModifiedTime, CacheEntryType, (LPBYTE)header_info, len, lpszFileExtension, lpszOriginalUrl)) { @@ -2937,19 +2907,16 @@ BOOL WINAPI DeleteUrlCacheEntryW(LPCWSTR lpszUrlName) struct _HASH_ENTRY * pHashEntry; CACHEFILE_ENTRY * pEntry; LPSTR urlA; - int url_len; DWORD error; TRACE("(%s)\n", debugstr_w(lpszUrlName)); - url_len = WideCharToMultiByte(CP_ACP, 0, lpszUrlName, -1, NULL, 0, NULL, NULL); - urlA = HeapAlloc(GetProcessHeap(), 0, url_len * sizeof(CHAR)); + urlA = heap_strdupWtoA(lpszUrlName); if (!urlA) { SetLastError(ERROR_OUTOFMEMORY); return FALSE; } - WideCharToMultiByte(CP_ACP, 0, lpszUrlName, -1, urlA, url_len, NULL, NULL); error = URLCacheContainers_FindContainerW(lpszUrlName, &pContainer); if (error != ERROR_SUCCESS) @@ -3130,14 +3097,12 @@ INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryA(LPCSTR lpszUrlSearchPattern, pEntryHandle->dwMagic = URLCACHE_FIND_ENTRY_HANDLE_MAGIC; if (lpszUrlSearchPattern) { - int len = MultiByteToWideChar(CP_ACP, 0, lpszUrlSearchPattern, -1, NULL, 0); - pEntryHandle->lpszUrlSearchPattern = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + pEntryHandle->lpszUrlSearchPattern = heap_strdupAtoW(lpszUrlSearchPattern); if (!pEntryHandle->lpszUrlSearchPattern) { HeapFree(GetProcessHeap(), 0, pEntryHandle); return NULL; } - MultiByteToWideChar(CP_ACP, 0, lpszUrlSearchPattern, -1, pEntryHandle->lpszUrlSearchPattern, len); } else pEntryHandle->lpszUrlSearchPattern = NULL; @@ -3171,14 +3136,12 @@ INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryW(LPCWSTR lpszUrlSearchPattern, pEntryHandle->dwMagic = URLCACHE_FIND_ENTRY_HANDLE_MAGIC; if (lpszUrlSearchPattern) { - int len = strlenW(lpszUrlSearchPattern); - pEntryHandle->lpszUrlSearchPattern = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR)); + pEntryHandle->lpszUrlSearchPattern = heap_strdupW(lpszUrlSearchPattern); if (!pEntryHandle->lpszUrlSearchPattern) { HeapFree(GetProcessHeap(), 0, pEntryHandle); return NULL; } - memcpy(pEntryHandle->lpszUrlSearchPattern, lpszUrlSearchPattern, (len + 1) * sizeof(WCHAR)); } else pEntryHandle->lpszUrlSearchPattern = NULL; diff --git a/dlls/wininet/wininet_De.rc b/dlls/wininet/wininet_De.rc index 47665891bbc..f602a97a97d 100644 --- a/dlls/wininet/wininet_De.rc +++ b/dlls/wininet/wininet_De.rc @@ -1,5 +1,6 @@ /* * Copyright 2004 Henning Gerhardt + * Copyright 2009 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -29,8 +30,8 @@ FONT 8, "MS Shell Dlg" { LTEXT "Geben Sie Benutzernamen und Kennwort ein:", -1, 40, 6, 150, 15 LTEXT "Proxy", -1, 40, 26, 50, 10 - LTEXT "Realm", -1, 40, 46, 50, 10 - LTEXT "Ben&utzername", -1, 40, 66, 50, 10 + LTEXT "Bereich", -1, 40, 46, 50, 10 + LTEXT "Ben&utzer", -1, 40, 66, 50, 10 LTEXT "Kenn&wort", -1, 40, 86, 50, 10 LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 @@ -42,6 +43,26 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Abbrechen", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP } +IDD_AUTHDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Benutzeranmeldung" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Geben Sie Benutzernamen und Kennwort ein:", -1, 40, 6, 150, 15 + LTEXT "Server", -1, 40, 26, 50, 10 + LTEXT "Bereich", -1, 40, 46, 50, 10 + LTEXT "Benutzer", -1, 40, 66, 50, 10 + LTEXT "Kennwort", -1, 40, 86, 50, 10 + LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 + LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP + EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD + CHECKBOX "Dieses &Kennwort speichern (unsicher)", IDC_SAVEPASSWORD, + 80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Abbrechen", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP +} + STRINGTABLE DISCARDABLE { IDS_LANCONNECTION "LAN Verbindung" diff --git a/dlls/wininet/wininet_En.rc b/dlls/wininet/wininet_En.rc index b0450af63ba..d22d249f1cd 100644 --- a/dlls/wininet/wininet_En.rc +++ b/dlls/wininet/wininet_En.rc @@ -40,6 +40,26 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Cancel", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP } +IDD_AUTHDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Authentication Required" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Please enter your username and password:", -1, 40, 6, 150, 15 + LTEXT "Server", -1, 40, 26, 50, 10 + LTEXT "Realm", -1, 40, 46, 50, 10 + LTEXT "User", -1, 40, 66, 50, 10 + LTEXT "Password", -1, 40, 86, 50, 10 + LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 + LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP + EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD + CHECKBOX "&Save this password (insecure)", IDC_SAVEPASSWORD, + 80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP +} + STRINGTABLE DISCARDABLE { IDS_LANCONNECTION "LAN Connection" diff --git a/dlls/wininet/wininet_Fr.rc b/dlls/wininet/wininet_Fr.rc index e12aa6db884..74ee208a7ee 100644 --- a/dlls/wininet/wininet_Fr.rc +++ b/dlls/wininet/wininet_Fr.rc @@ -49,6 +49,26 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Annuler", IDCANCEL, 147, 128, 56, 14, WS_GROUP | WS_TABSTOP } +IDD_AUTHDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 218, 150 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Authentification requise" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Entrez votre nom d'utilisateur et votre mot de passe :", -1, 10, 8, 173, 12 + LTEXT "Serveur", -1, 10, 28, 50, 17 + LTEXT "Domaine", -1, 10, 50, 50, 10 + LTEXT "Utilisateur", -1, 10, 71, 50, 10 + LTEXT "Mot de passe", -1, 10, 90, 50, 10 + LTEXT "" IDC_SERVER, 58, 28, 150, 14, 0 + LTEXT "" IDC_REALM, 58, 48, 150, 14, 0 + EDITTEXT IDC_USERNAME, 58, 68, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP + EDITTEXT IDC_PASSWORD, 58, 88, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD + CHECKBOX "&Enregistrer ce mot de passe (risqué)", IDC_SAVEPASSWORD, + 58, 108, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 87, 128, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Annuler", IDCANCEL, 147, 128, 56, 14, WS_GROUP | WS_TABSTOP +} + STRINGTABLE DISCARDABLE { IDS_LANCONNECTION "Connexion réseau local (LAN)" diff --git a/dlls/wininet/wininet_Lt.rc b/dlls/wininet/wininet_Lt.rc index 6cb176c296e..cd4bf482e35 100644 --- a/dlls/wininet/wininet_Lt.rc +++ b/dlls/wininet/wininet_Lt.rc @@ -43,6 +43,26 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Atsisakyti", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP } +IDD_AUTHDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Reikalingas tapatumo nustatymas" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Įveskite savo naudotojo vardą ir slaptažodį:", -1, 40, 6, 150, 15 + LTEXT "Serveris", -1, 40, 26, 50, 10 + LTEXT "Sritis", -1, 40, 46, 50, 10 + LTEXT "Naudotojas", -1, 40, 66, 50, 10 + LTEXT "Slaptažodis", -1, 40, 86, 50, 10 + LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 + LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP + EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD + CHECKBOX "Į&rašyti šį slaptažodį (nesaugu)", IDC_SAVEPASSWORD, + 80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Gerai", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Atsisakyti", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP +} + STRINGTABLE DISCARDABLE { IDS_LANCONNECTION "Vietinio tinklo ryšys" diff --git a/dlls/wininet/wininet_Nl.rc b/dlls/wininet/wininet_Nl.rc index 017bce3f34b..f0e891c7e19 100644 --- a/dlls/wininet/wininet_Nl.rc +++ b/dlls/wininet/wininet_Nl.rc @@ -42,6 +42,26 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Annuleren", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP } +IDD_AUTHDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Authenticatie vereist" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Voer uw gebruikersnaam en wachtwoord in:", -1, 40, 6, 150, 15 + LTEXT "Server", -1, 40, 26, 50, 10 + LTEXT "Realm", -1, 40, 46, 50, 10 + LTEXT "Gebruikersnaam", -1, 40, 66, 50, 10 + LTEXT "Wachtwoord", -1, 40, 86, 50, 10 + LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 + LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP + EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD + CHECKBOX "&Wachtwoord opslaan (onveilig)", IDC_SAVEPASSWORD, + 80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Annuleren", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP +} + STRINGTABLE DISCARDABLE { IDS_LANCONNECTION "LAN Verbinding" diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 96be7ca4c01..2eb58377735 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -2406,25 +2406,11 @@ int WINAPI WS_ioctlsocket(SOCKET s, LONG cmd, WS_u_long *argp) SetLastError(WSAEINVAL); return SOCKET_ERROR; } - fd = get_sock_fd( s, 0, NULL ); - if (fd != -1) - { - int ret; - if (*argp) - { - _enable_event(SOCKET2HANDLE(s), 0, FD_WINE_NONBLOCKING, 0); - ret = fcntl( fd, F_SETFL, O_NONBLOCK ); - } - else - { - _enable_event(SOCKET2HANDLE(s), 0, 0, FD_WINE_NONBLOCKING); - ret = fcntl( fd, F_SETFL, 0 ); - } - release_sock_fd( s, fd ); - if (!ret) return 0; - SetLastError((errno == EBADF) ? WSAENOTSOCK : wsaErrno()); - } - return SOCKET_ERROR; + if (*argp) + _enable_event(SOCKET2HANDLE(s), 0, FD_WINE_NONBLOCKING, 0); + else + _enable_event(SOCKET2HANDLE(s), 0, 0, FD_WINE_NONBLOCKING); + return 0; case WS_SIOCATMARK: newcmd=SIOCATMARK; @@ -5007,7 +4993,7 @@ INT WINAPI WSAAddressToStringW( LPSOCKADDR sockaddr, DWORD len, LPDWORD lenstr ) { INT ret; - DWORD size, sizew; + DWORD size; WCHAR buffer[54]; /* 32 digits + 7':' + '[' + '%" + 5 digits + ']:' + 5 digits + '\0' */ CHAR bufAddr[54]; @@ -5018,8 +5004,7 @@ INT WINAPI WSAAddressToStringW( LPSOCKADDR sockaddr, DWORD len, if (ret) return ret; - sizew = sizeof( buffer ); - MultiByteToWideChar( CP_ACP, 0, bufAddr, size, buffer, sizew ); + MultiByteToWideChar( CP_ACP, 0, bufAddr, size, buffer, sizeof( buffer )/sizeof(WCHAR)); if (*lenstr < size) { diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index b1db361d076..b1b85fe350a 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -2774,6 +2774,23 @@ static void test_AcceptEx(void) &bytesReturned, &overlapped); ok(bret == FALSE && WSAGetLastError() == ERROR_IO_PENDING, "AcceptEx returned %d + errno %d\n", bret, WSAGetLastError()); + bret = pAcceptEx(listener, acceptor, buffer, 0, + sizeof(struct sockaddr_in) + 16, sizeof(struct sockaddr_in) + 16, + &bytesReturned, &overlapped); + ok((bret == FALSE && WSAGetLastError() == WSAEINVAL) || broken(bret == FALSE && WSAGetLastError() == ERROR_IO_PENDING) /* NT4 */, + "AcceptEx on already pending socket returned %d + errno %d\n", bret, WSAGetLastError()); + if (bret == FALSE && WSAGetLastError() == ERROR_IO_PENDING) { + /* We need to cancel this call, otherwise things fail */ + bret = CancelIo((HANDLE) listener); + ok(bret, "Failed to cancel failed test. Bailing...\n"); + if (!bret) return; + + bret = pAcceptEx(listener, acceptor, buffer, 0, + sizeof(struct sockaddr_in) + 16, sizeof(struct sockaddr_in) + 16, + &bytesReturned, &overlapped); + ok(bret == FALSE && WSAGetLastError() == ERROR_IO_PENDING, "AcceptEx returned %d + errno %d\n", bret, WSAGetLastError()); + } + iret = connect(connector, (struct sockaddr*)&bindAddress, sizeof(bindAddress)); ok(iret == 0, "connecting to accepting socket failed, error %d\n", WSAGetLastError()); @@ -2857,8 +2874,7 @@ static void test_AcceptEx(void) /* Connect socket #1 */ iret = connect(connector, (struct sockaddr*)&bindAddress, sizeof(bindAddress)); - ok(iret == 0 || - (iret == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK), "connecting to accepting socket failed, error %d\n", WSAGetLastError()); + ok(iret == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK, "connecting to accepting socket failed, error %d\n", WSAGetLastError()); FD_ZERO ( &fds_accept ); FD_ZERO ( &fds_send ); @@ -2872,15 +2888,17 @@ static void test_AcceptEx(void) for (i = 0; i < 4000; ++i) { - wsa_ok ( ( select ( 0, &fds_accept, &fds_send, NULL, &timeout ) ), SOCKET_ERROR !=, - "select_server (%x): select() failed: %d\n" ); + fd_set fds_openaccept = fds_accept, fds_opensend = fds_send; + + wsa_ok ( ( select ( 0, &fds_openaccept, &fds_opensend, NULL, &timeout ) ), SOCKET_ERROR !=, + "acceptex test(%d): could not select on socket, errno %d\n" ); /* check for incoming requests */ - if ( FD_ISSET ( listener, &fds_accept ) ) { + if ( FD_ISSET ( listener, &fds_openaccept ) ) { got++; if (got == 1) { SOCKET tmp = WSAAccept(listener, NULL, NULL, (LPCONDITIONPROC) AlwaysDeferConditionFunc, 0); - ok(tmp == INVALID_SOCKET && WSAGetLastError() == WSATRY_AGAIN, "Failed to defer connection\n"); + ok(tmp == INVALID_SOCKET && WSAGetLastError() == WSATRY_AGAIN, "Failed to defer connection, %d\n", WSAGetLastError()); bret = pAcceptEx(listener, acceptor, buffer, 0, sizeof(struct sockaddr_in) + 16, sizeof(struct sockaddr_in) + 16, &bytesReturned, &overlapped); @@ -2896,14 +2914,14 @@ static void test_AcceptEx(void) ok(FALSE, "Got more than 2 connections?\n"); } } - if ( conn1 && FD_ISSET ( connector2, &fds_send ) ) { + if ( conn1 && FD_ISSET ( connector2, &fds_opensend ) ) { /* Send data on second socket, and stop */ send(connector2, "2", 1, 0); FD_CLR ( connector2, &fds_send ); break; } - if ( FD_ISSET ( connector, &fds_send ) ) { + if ( FD_ISSET ( connector, &fds_opensend ) ) { /* Once #1 is connected, allow #2 to connect */ conn1 = 1; @@ -2911,13 +2929,13 @@ static void test_AcceptEx(void) FD_CLR ( connector, &fds_send ); iret = connect(connector2, (struct sockaddr*)&bindAddress, sizeof(bindAddress)); - ok(iret == 0 || - (iret == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK), "connecting to accepting socket failed, error %d\n", WSAGetLastError()); + ok(iret == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK, "connecting to accepting socket failed, error %d\n", WSAGetLastError()); FD_SET ( connector2, &fds_send ); } } - ok (got == 2, "Did not get both connections\n"); + ok (got == 2 || broken(got == 1) /* NT4 */, + "Did not get both connections, got %d\n", got); dwret = WaitForSingleObject(overlapped.hEvent, 0); ok(dwret == WAIT_OBJECT_0, "Waiting for accept event failed with %d + errno %d\n", dwret, GetLastError()); @@ -2928,7 +2946,7 @@ static void test_AcceptEx(void) set_blocking(acceptor, TRUE); iret = recv( acceptor, buffer, 2, 0); - ok(iret == 1, "Failed to get data, %d\n", iret); + ok(iret == 1, "Failed to get data, %d, errno: %d\n", iret, WSAGetLastError()); ok(buffer[0] == '1', "The wrong first client was accepted by acceptex: %c != 1\n", buffer[0]); @@ -2937,6 +2955,10 @@ static void test_AcceptEx(void) closesocket(acceptor); acceptor = INVALID_SOCKET; + /* clean up in case of failures */ + while ((acceptor = accept(listener, NULL, NULL)) != INVALID_SOCKET) + closesocket(acceptor); + /* Disconnect during receive? */ acceptor = socket(AF_INET, SOCK_STREAM, 0); @@ -2967,6 +2989,25 @@ static void test_AcceptEx(void) ok(bret, "GetOverlappedResult failed, error %d\n", GetLastError()); ok(bytesReturned == 0, "bytesReturned isn't supposed to be %d\n", bytesReturned); + acceptor = socket(AF_INET, SOCK_STREAM, 0); + if (acceptor == INVALID_SOCKET) { + skip("could not create acceptor socket, error %d\n", WSAGetLastError()); + goto end; + } + bret = pAcceptEx(listener, acceptor, buffer, sizeof(buffer) - 2*(sizeof(struct sockaddr_in) + 16), + sizeof(struct sockaddr_in) + 16, sizeof(struct sockaddr_in) + 16, + &bytesReturned, &overlapped); + ok(bret == FALSE && WSAGetLastError() == ERROR_IO_PENDING, "AcceptEx returned %d + errno %d\n", bret, WSAGetLastError()); + + closesocket(listener); + listener = INVALID_SOCKET; + + dwret = WaitForSingleObject(overlapped.hEvent, 1000); + ok(dwret == WAIT_OBJECT_0, "Waiting for accept event failed with %d + errno %d\n", dwret, GetLastError()); + + bret = GetOverlappedResult((HANDLE)listener, &overlapped, &bytesReturned, FALSE); + ok(!bret && GetLastError() == ERROR_OPERATION_ABORTED, "GetOverlappedResult failed, error %d\n", GetLastError()); + end: if (overlapped.hEvent) WSACloseEvent(overlapped.hEvent); diff --git a/include/Makefile.in b/include/Makefile.in index 71a20ac879d..aee348f5414 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -106,6 +106,7 @@ SRCDIR_INCLUDES = \ basetsd.h \ basetyps.h \ bcrypt.h \ + binres.idl \ bitsmsg.h \ cderr.h \ cfgmgr32.h \ @@ -120,6 +121,7 @@ SRCDIR_INCLUDES = \ corerror.h \ corhdr.h \ cpl.h \ + crtrow.idl \ cryptdlg.h \ cryptuiapi.h \ custcntl.h \ @@ -148,6 +150,9 @@ SRCDIR_INCLUDES = \ d3dx9mesh.h \ d3dx9shader.h \ d3dx9tex.h \ + dbccmd.idl \ + dbcses.idl \ + dbdsad.idl \ dbghelp.h \ dbinit.idl \ dbprop.idl \ @@ -362,6 +367,7 @@ SRCDIR_INCLUDES = \ oleauto.h \ olectl.h \ oledlg.h \ + opnrst.idl \ pdh.h \ pdhmsg.h \ pktdef.h \ @@ -397,6 +403,7 @@ SRCDIR_INCLUDES = \ secext.h \ security.h \ sensapi.h \ + sesprp.idl \ setupapi.h \ sfc.h \ shdispid.h \ diff --git a/include/binres.idl b/include/binres.idl new file mode 100644 index 00000000000..3797c028820 --- /dev/null +++ b/include/binres.idl @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2009 Huw Davies + * + * 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 + */ + +[ + object, + uuid(0c733ab1-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface IBindResource : IUnknown +{ + [local] + HRESULT Bind([in] IUnknown *pUnkOuter, + [in] LPCOLESTR pwszURL, + [in] DBBINDURLFLAG dwBindURLFlags, + [in] REFGUID rguid, + [in] REFIID riid, + [in] IAuthenticate *pAuthenticate, + [in, out, unique] DBIMPLICITSESSION *pImplSession, + [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, + [out, iid_is(riid)] IUnknown **ppUnk); + + [call_as(Bind)] + HRESULT RemoteBind([in] IUnknown *pUnkOuter, + [in] LPCOLESTR pwszURL, + [in] DBBINDURLFLAG dwBindURLFlags, + [in] REFGUID rguid, + [in] REFIID riid, + [in] IAuthenticate *pAuthenticate, + [in] IUnknown *pSessionUnkOuter, + [in, unique] IID *piid, + [in, out, unique, iid_is(piid)] IUnknown **ppSession, + [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, + [out, iid_is(riid)] IUnknown **ppUnk); +} diff --git a/include/crtrow.idl b/include/crtrow.idl new file mode 100644 index 00000000000..da26a72d5d9 --- /dev/null +++ b/include/crtrow.idl @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2009 Huw Davies + * + * 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 + */ + +[ + object, + uuid(0c733ab2-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface ICreateRow : IUnknown +{ + [local] + HRESULT CreateRow([in, unique] IUnknown *pUnkOuter, + [in] LPCOLESTR pwszURL, + [in] DBBINDURLFLAG dwBindURLFlags, + [in] REFGUID rguid, + [in] REFIID riid, + [in, unique] IAuthenticate *pAuthenticate, + [in, out, unique] DBIMPLICITSESSION *pImplSession, + [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, + [out, /*annotation("__deref_opt_out_opt")*/] LPOLESTR *ppwszNewURL, + [out, iid_is(riid)] IUnknown **ppUnk); + + [call_as(CreateRow)] + HRESULT RemoteCreateRow([in] IUnknown *pUnkOuter, + [in] LPCOLESTR pwszURL, + [in] DBBINDURLFLAG dwBindURLFlags, + [in] REFGUID rguid, + [in] REFIID riid, + [in] IAuthenticate *pAuthenticate, + [in] IUnknown *pSessionUnkOuter, + [in, unique] IID *piid, + [in, out, unique, iid_is(piid)] IUnknown **ppSession, + [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, + [in, out, unique] LPOLESTR *ppwszNewURL, + [out, iid_is(riid)] IUnknown **ppUnk); +} diff --git a/dlls/localspl/spl_Ru.rc b/include/dbccmd.idl similarity index 54% copy from dlls/localspl/spl_Ru.rc copy to include/dbccmd.idl index fb51446e146..28763d202fc 100644 --- a/dlls/localspl/spl_Ru.rc +++ b/include/dbccmd.idl @@ -1,7 +1,5 @@ /* - * Russian resources for localspl - * - * Copyright 2008 Vitaliy Margolen + * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,12 +16,21 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "localspl_private.h" - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -STRINGTABLE DISCARDABLE +[ + object, + uuid(0c733a1d-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface IDBCreateCommand : IUnknown { - IDS_LOCALPORT "Ëîêàëüíûé ïîðò" - IDS_LOCALMONITOR "Ëîêàëüíûé ìîíèòîð" + [local] + HRESULT CreateCommand([in] IUnknown *pUnkOuter, + [in] REFIID riid, + [out, iid_is(riid)] IUnknown **ppCommand); + + [call_as(CreateCommand)] + HRESULT RemoteCreateCommand([in] IUnknown *pUnkOuter, + [in] REFIID riid, + [out, iid_is(riid)] IUnknown **ppCommand, + [out] IErrorInfo **ppErrorInfoRem); } diff --git a/dlls/localspl/spl_Ru.rc b/include/dbcses.idl similarity index 54% copy from dlls/localspl/spl_Ru.rc copy to include/dbcses.idl index fb51446e146..54418159472 100644 --- a/dlls/localspl/spl_Ru.rc +++ b/include/dbcses.idl @@ -1,7 +1,5 @@ /* - * Russian resources for localspl - * - * Copyright 2008 Vitaliy Margolen + * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,12 +16,21 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "localspl_private.h" - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -STRINGTABLE DISCARDABLE +[ + object, + uuid(0c733a5d-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface IDBCreateSession : IUnknown { - IDS_LOCALPORT "Ëîêàëüíûé ïîðò" - IDS_LOCALMONITOR "Ëîêàëüíûé ìîíèòîð" + [local] + HRESULT CreateSession([in] IUnknown *pUnkOuter, + [in] REFIID riid, + [out, iid_is(riid)] IUnknown **ppDBSession); + + [call_as(CreateSession)] + HRESULT RemoteCreateSession([in] IUnknown *pUnkOuter, + [in] REFIID riid, + [out, iid_is(riid)] IUnknown **ppDBSession, + [out] IErrorInfo **ppErrorInfoRem); } diff --git a/include/dbdsad.idl b/include/dbdsad.idl new file mode 100644 index 00000000000..1fb8c9f53f0 --- /dev/null +++ b/include/dbdsad.idl @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2009 Huw Davies + * + * 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 + */ + +[ + object, + uuid(0c733a7a-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface IDBDataSourceAdmin : IUnknown +{ + [local] + HRESULT CreateDataSource([in] ULONG cPropertySets, + [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[], + [in] IUnknown *pUnkOuter, + [in] REFIID riid, + [out, iid_is(riid)] IUnknown **ppDBSession); + + [call_as(CreateDataSource)] + HRESULT RemoteCreateDataSource([in] ULONG cPropertySets, + [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, + [in] IUnknown *pUnkOuter, + [in] REFIID riid, + [in, out, unique, iid_is(riid)] IUnknown **ppDBSession, + [in] ULONG cTotalProps, + [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, + [out] IErrorInfo **ppErrorInfoRem); + + [local] + HRESULT DestroyDataSource(); + + [call_as(DestroyDataSource)] + HRESULT RemoteDestroyDataSource([out] IErrorInfo **ppErrorInfoRem); + + [local] + HRESULT GetCreationProperties([in] ULONG cPropertyIDSets, + [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], + [in, out] ULONG *pcPropertyInfoSets, + [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, + [out, /*annotation("__deref_out_z_opt")*/] OLECHAR **ppDescBuffer); + + [call_as(GetCreationProperties)] + HRESULT RemoteGetCreationProperties([in] ULONG cPropertyIDSets, + [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, + [in, out] ULONG *pcPropertyInfoSets, + [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, + [in, out] DBCOUNTITEM *pcOffsets, + [out, size_is(,(ULONG)*pcOffsets)] DBBYTEOFFSET **prgDescOffsets, + [in, out] ULONG *pcbDescBuffer, + [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer, + [out] IErrorInfo **ppErrorInfoRem); + + [local] + HRESULT ModifyDataSource([in] ULONG cPropertySets, + [in, size_is(cPropertySets)] DBPROPSET rgPropertySets[]); + + [call_as(ModifyDataSource)] + HRESULT RemoteModifyDataSource([in] ULONG cPropertySets, + [in, size_is(cPropertySets)] DBPROPSET *rgPropertySets, + [out] IErrorInfo **ppErrorInfoRem); +} diff --git a/include/dbprop.idl b/include/dbprop.idl index 5ed5301385f..77ceab01c94 100644 --- a/include/dbprop.idl +++ b/include/dbprop.idl @@ -30,7 +30,7 @@ interface IDBProperties : IUnknown { [call_as(GetProperties)] HRESULT RemoteGetProperties( [in] ULONG cPropertyIDSets, - [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], + [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, [in, out] ULONG *pcPropertySets, [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets, [out] IErrorInfo **ppErrorInfoRem); @@ -39,17 +39,18 @@ interface IDBProperties : IUnknown { [in] ULONG cPropertyIDSets, [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], [in, out] ULONG *pcPropertyInfoSets, - [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets); + [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, + [out, /*annotation("__deref_out_z_opt")*/] OLECHAR **ppDescBuffer); [call_as(GetPropertyInfo)] HRESULT RemoteGetPropertyInfo( [in] ULONG cPropertyIDSets, - [in,size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, + [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, [in, out] ULONG *pcPropertyInfoSets, [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, [in, out] ULONG *pcOffsets, [out, size_is(,*pcOffsets)] DBBYTEOFFSET **prgDescOffsets, [in, out] ULONG *pcbDescBuffer, - [out, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer, + [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT SetProperties( @@ -58,7 +59,7 @@ interface IDBProperties : IUnknown { [call_as(SetProperties)] HRESULT RemoteSetProperties( [in] ULONG cPropertySets, - [in, out, size_is(cPropertySets)] DBPROPSET *rgPropertySets, + [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, [in] ULONG cTotalProps, [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem); diff --git a/include/dbs.idl b/include/dbs.idl index 19c2997b3ab..9909c9d3ba1 100644 --- a/include/dbs.idl +++ b/include/dbs.idl @@ -99,3 +99,13 @@ typedef struct tagDBPROPINFOSET { ULONG cPropertyInfos; GUID guidPropertySet; } DBPROPINFOSET; + +typedef DWORD DBBINDURLFLAG; +typedef DWORD DBBINDURLSTATUS; + +typedef struct tagDBIMPLICITSESSION +{ + IUnknown *pUnkOuter; + IID *piid; + IUnknown *pSession; +} DBIMPLICITSESSION; diff --git a/include/msctf.idl b/include/msctf.idl index b9890f2a94b..bcd2587d833 100644 --- a/include/msctf.idl +++ b/include/msctf.idl @@ -33,9 +33,16 @@ cpp_quote("HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim);") cpp_quote("HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim);") cpp_quote("HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr);") +cpp_quote("EXTERN_C const GUID GUID_PROP_TEXTOWNER;") +cpp_quote("DEFINE_GUID(GUID_PROP_ATTRIBUTE,0x34b45670,0x7526,0x11d2,0xa1,0x47,0x00,0x10,0x5a,0x27,0x99,0xb5);") +cpp_quote("EXTERN_C const GUID GUID_PROP_LANGID;") +cpp_quote("EXTERN_C const GUID GUID_PROP_READING;") +cpp_quote("EXTERN_C const GUID GUID_PROP_COMPOSING;") + cpp_quote("EXTERN_C const CLSID CLSID_TF_ThreadMgr;") cpp_quote("EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles;") cpp_quote("EXTERN_C const CLSID CLSID_TF_CategoryMgr;") +cpp_quote("DEFINE_GUID(CLSID_TF_DisplayAttributeMgr,0x3ce74de4,0x53d3,0x4d74,0x8b,0x83,0x43,0x1b,0x38,0x28,0xba,0x53);") /* GUIDs for Compartments */ cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_DISABLED;") @@ -150,6 +157,17 @@ interface ITfThreadMgr: IUnknown [out] ITfCompartmentMgr **ppCompMgr); }; +[ + object, + uuid(d7540241-f9a1-4364-befc-dbcd2c4395b7), + pointer_default(unique) +] +interface ITfCompositionView : IUnknown +{ + HRESULT GetOwnerClsid([out] CLSID *pclsid); + + HRESULT GetRange([out] ITfRange **ppRange); +} [ object, @@ -401,6 +419,109 @@ interface ITfInputProcessorProfiles : IUnknown [in] HKL hKL); }; +typedef [uuid(c4cc07f1-80cc-4a7b-bc54-98512782cbe3)] +enum { + TF_LS_NONE = 0, + TF_LS_SOLID = 1, + TF_LS_DOT = 2, + TF_LS_DASH = 3, + TF_LS_SQUIGGLE = 4 +} TF_DA_LINESTYLE; + +typedef [uuid(d9b92e21-084a-401b-9c64-1e6dad91a1ab)] +enum { + TF_CT_NONE = 0, + TF_CT_SYSCOLOR = 1, + TF_CT_COLORREF = 2 +} TF_DA_COLORTYPE; + +typedef [uuid(90d0cb5e-6520-4a0f-b47c-c39bd955f0d6)] +struct TF_DA_COLOR { + TF_DA_COLORTYPE type; + [switch_type(TF_DA_COLORTYPE), switch_is(type)] + union { + [case(TF_CT_SYSCOLOR)] int nIndex; + [case(TF_CT_COLORREF)] COLORREF cr; + }; +} TF_DA_COLOR; + +typedef [uuid(33d2fe4b-6c24-4f67-8d75-3bc1819e4126)] +enum { + TF_ATTR_INPUT = 0, + TF_ATTR_TARGET_CONVERTED = 1, + TF_ATTR_CONVERTED = 2, + TF_ATTR_TARGET_NOTCONVERTED = 3, + TF_ATTR_INPUT_ERROR = 4, + TF_ATTR_FIXEDCONVERTED = 5, + TF_ATTR_OTHER = -1 +} TF_DA_ATTR_INFO; + +typedef [uuid(1bf1c305-419b-4182-a4d2-9bfadc3f021f)] +struct TF_DISPLAYATTRIBUTE { + TF_DA_COLOR crText; + TF_DA_COLOR crBk; + TF_DA_LINESTYLE lsStyle; + BOOL fBoldLine; + TF_DA_COLOR crLine; + TF_DA_ATTR_INFO bAttr; +} TF_DISPLAYATTRIBUTE; + +[ + object, + uuid(70528852-2f26-4aea-8c96-215150578932), + pointer_default(unique) +] +interface ITfDisplayAttributeInfo : IUnknown +{ + HRESULT GetGUID([out] GUID *pguid); + + HRESULT GetDescription([out] BSTR *pbstrDesc); + + HRESULT GetAttributeInfo([out] TF_DISPLAYATTRIBUTE *pda); + + HRESULT SetAttributeInfo([in] const TF_DISPLAYATTRIBUTE *pda); + + HRESULT Reset(); +} + +[ + object, + uuid(7cef04d7-cb75-4e80-a7ab-5f5bc7d332de), + pointer_default(unique) +] +interface IEnumTfDisplayAttributeInfo : IUnknown +{ + HRESULT Clone([out] IEnumTfDisplayAttributeInfo **ppEnum); + + HRESULT Next( + [in] ULONG ulCount, + [out, size_is(ulCount), length_is(*pcFetched)] ITfDisplayAttributeInfo **rgInfo, + [out] ULONG *pcFetched); + + HRESULT Reset(); + + HRESULT Skip([in] ULONG ulCount); +} + +[ + object, + local, + uuid(8ded7393-5db1-475c-9e71-a39111b0ff67), + pointer_default(unique) +] +interface ITfDisplayAttributeMgr : IUnknown +{ + HRESULT OnUpdateInfo(); + + HRESULT EnumDisplayAttributeInfo([out] IEnumTfDisplayAttributeInfo **ppEnum); + + HRESULT GetDisplayAttributeInfo( + [in] REFGUID guid, + [out] ITfDisplayAttributeInfo **ppInfo, + [out] CLSID *pclsidOwner); + +} + [ object, local, @@ -886,6 +1007,20 @@ interface ITfRange : IUnknown [ object, + uuid(057a6296-029b-4154-b79a-0d461d4ea94c), + pointer_default(unique) +] +interface ITfRangeACP : ITfRange +{ + HRESULT GetExtent([out] LONG *pacpAnchor, + [out] LONG *pcch); + + HRESULT SetExtent([in] LONG acpAnchor, + [in] LONG cch); +} + +[ + object, uuid(55ce16ba-3014-41c1-9ceb-fade1446ac6c), pointer_default(unique) ] @@ -910,6 +1045,203 @@ interface ITfInsertAtSelection : IUnknown }; [ + object, + uuid(6834b120-88cb-11d2-bf45-00105a2799b5), + pointer_default(unique) +] +interface ITfPropertyStore : IUnknown +{ + const DWORD TF_TU_CORRECTION = 0x1; + + HRESULT GetType([out] GUID *pguid); + + HRESULT GetDataType([out] DWORD *pdwReserved); + + HRESULT GetData([out] VARIANT *pvarValue); + + HRESULT OnTextUpdated( + [in] DWORD dwFlags, + [in] ITfRange *pRangeNew, + [out] BOOL *pfAccept); + + HRESULT Shrink( + [in] ITfRange *pRangeNew, + [out] BOOL *pfFree); + + HRESULT Divide( + [in] ITfRange *pRangeThis, + [in] ITfRange *pRangeNew, + [out] ITfPropertyStore **ppPropStore); + + HRESULT Clone( + [out] ITfPropertyStore **pPropStore); + + HRESULT GetPropertyRangeCreator( + [out] CLSID *pclsid); + + HRESULT Serialize( + [in] IStream *pStream, + [out] ULONG *pcb); +} + +[ + object, + uuid(f99d3f40-8e32-11d2-bf46-00105a2799b5), + pointer_default(unique) +] +interface IEnumTfRanges : IUnknown +{ + HRESULT Clone([out] IEnumTfRanges **ppEnum); + + HRESULT Next( + [in] ULONG ulCount, + [out, size_is(ulCount), length_is(*pcFetched)] ITfRange **ppRange, + [out] ULONG *pcFetched); + + HRESULT Reset(); + + HRESULT Skip(ULONG ulCount); +} + +[ + object, + uuid(5efd22Ba-7838-46cb-88e2-cadb14124f8f), + pointer_default(unique) +] +interface IEnumITfCompositionView : IUnknown +{ + HRESULT Clone([out] IEnumITfCompositionView **ppEnum); + + HRESULT Next( + [in] ULONG ulCount, + [out, size_is(ulCount), length_is(*pcFetched)] ITfCompositionView **rgCompositionView, + [out] ULONG *pcFetched); + + HRESULT Reset(); + + HRESULT Skip([in] ULONG ulCount); +} + +[ + object, + uuid(20168d64-5a8f-4a5a-b7bd-cfa29f4D0fd9), + pointer_default(unique) +] +interface ITfComposition : IUnknown +{ + HRESULT GetRange([out] ITfRange **ppRange); + + HRESULT ShiftStart( + [in] TfEditCookie ecWrite, + [in] ITfRange *pNewStart); + + HRESULT ShiftEnd( + [in] TfEditCookie ecWrite, + [in] ITfRange *pNewEnd); + + HRESULT EndComposition([in] TfEditCookie ecWrite); +} + +[ + object, + uuid(a781718c-579a-4b15-a280-32b8577acc5e), + pointer_default(unique) +] +interface ITfCompositionSink : IUnknown +{ + HRESULT OnCompositionTerminated( + [in] TfEditCookie ecWrite, + [in] ITfComposition *pComposition); +} + +[ + object, + uuid(d40C8aae-aC92-4fc7-9a11-0ee0e23aa39b), + pointer_default(unique) +] +interface ITfContextComposition : IUnknown +{ + HRESULT StartComposition( + [in] TfEditCookie ecWrite, + [in] ITfRange *pCompositionRange, + [in] ITfCompositionSink *pSink, + [out] ITfComposition **ppComposition); + + HRESULT EnumCompositions([out] IEnumITfCompositionView **ppEnum); + + HRESULT FindComposition( + [in] TfEditCookie ecRead, + [in] ITfRange *pTestRange, + [out] IEnumITfCompositionView **ppEnum); + + HRESULT TakeOwnership( + [in] TfEditCookie ecWrite, + [in] ITfCompositionView *pComposition, + [in] ITfCompositionSink *pSink, + [out] ITfComposition **ppComposition); +} + +[ + object, + uuid(86462810-593b-4916-9764-19c08e9ce110), + pointer_default(unique) +] +interface ITfContextOwnerCompositionServices : ITfContextComposition +{ + HRESULT TerminateComposition([in] ITfCompositionView *pComposition); +} + +[ + object, + uuid(17d49a3d-f8b8-4b2f-b254-52319dd64c53), + pointer_default(unique) +] +interface ITfReadOnlyProperty : IUnknown +{ + HRESULT GetType([out] GUID *pguid); + + HRESULT EnumRanges( + [in] TfEditCookie ec, + [out] IEnumTfRanges **ppEnum, + [in] ITfRange *pTargetRange); + + HRESULT GetValue( + [in] TfEditCookie ec, + [in] ITfRange *pRange, + [out] VARIANT *pvarValue); + + HRESULT GetContext([out] ITfContext **ppContext); +} + +[ + object, + uuid(e2449660-9542-11d2-bf46-00105a2799b5), + pointer_default(unique) +] +interface ITfProperty : ITfReadOnlyProperty +{ + HRESULT FindRange( + [in] TfEditCookie ec, + [in] ITfRange *pRange, + [out] ITfRange **ppRange, + [in] TfAnchor aPos); + + HRESULT SetValueStore( + [in] TfEditCookie ec, + [in] ITfRange *pRange, + [in] ITfPropertyStore *pPropStore); + + HRESULT SetValue( + [in] TfEditCookie ec, + [in] ITfRange *pRange, + [in] const VARIANT *pvarValue); + + HRESULT Clear( + [in] TfEditCookie ec, + [in] ITfRange *pRange); +} + +[ object, uuid(bb08f7a9-607a-4384-8623-056892b64371), pointer_default(unique) diff --git a/include/oledb.idl b/include/oledb.idl index dd6b2181307..31e2111420d 100644 --- a/include/oledb.idl +++ b/include/oledb.idl @@ -20,9 +20,19 @@ import "wtypes.idl"; import "oaidl.idl"; import "ocidl.idl"; import "propidl.idl"; +import "urlmon.idl"; typedef ULONG DBBYTEOFFSET; +typedef ULONG DBCOUNTITEM; -#include "dbinit.idl" #include "dbs.idl" + +#include "dbccmd.idl" +#include "dbcses.idl" #include "dbprop.idl" +#include "dbinit.idl" +#include "dbdsad.idl" +#include "sesprp.idl" +#include "opnrst.idl" +#include "binres.idl" +#include "crtrow.idl" diff --git a/include/opnrst.idl b/include/opnrst.idl new file mode 100644 index 00000000000..07c23805fc9 --- /dev/null +++ b/include/opnrst.idl @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2009 Huw Davies + * + * 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 + */ + +[ + object, + uuid(0c733a69-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface IOpenRowset : IUnknown +{ + [local] + HRESULT OpenRowset([in] IUnknown *pUnkOuter, + [in, unique] DBID *pTableID, + [in, unique] DBID *pIndexID, + [in] REFIID riid, + [in] ULONG cPropertySets, + [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[], + [out, iid_is(riid)] IUnknown **ppRowset); + + [call_as(OpenRowset)] + HRESULT RemoteOpenRowset([in] IUnknown *pUnkOuter, + [in, unique] DBID *pTableID, + [in, unique] DBID *pIndexID, + [in] REFIID riid, + [in] ULONG cPropertySets, + [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, + [in, out, unique, iid_is(riid)] IUnknown **ppRowset, + [in] ULONG cTotalProps, + [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, + [out] IErrorInfo **ppErrorInfoRem); + +} diff --git a/include/sesprp.idl b/include/sesprp.idl new file mode 100644 index 00000000000..11e63912a17 --- /dev/null +++ b/include/sesprp.idl @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2009 Huw Davies + * + * 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 + */ + +[ + object, + uuid(0c733a85-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface ISessionProperties : IUnknown +{ + [local] + HRESULT GetProperties([in] ULONG cPropertyIDSets, + [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], + [in, out] ULONG *pcPropertySets, + [out, size_is(,*pcPropertySets)] const DBPROPSET **prgPropertySets); + + [call_as(GetProperties)] + HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets, + [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, + [in, out] ULONG *pcPropertySets, + [out, size_is(,*pcPropertySets)] const DBPROPSET **prgPropertySets, + [out] IErrorInfo **ppErrorInfoRem); + + + [local] + HRESULT SetProperties([in] ULONG cPropertySets, + [in, out, unique, size_is(cPropertySets)] DBPROPSET rgPropertySets[]); + + [call_as(SetProperties)] + HRESULT RemoteSetProperties([in] ULONG cPropertySets, + [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, + [in] ULONG cTotalProps, + [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, + [out] IErrorInfo **ppErrorInfoRem); + +} diff --git a/include/textstor.idl b/include/textstor.idl index 2e79e3c9bea..25f7749477b 100644 --- a/include/textstor.idl +++ b/include/textstor.idl @@ -20,8 +20,19 @@ import "oaidl.idl"; #endif -cpp_quote("#define TS_E_READONLY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)") +cpp_quote("#define TS_E_INVALIDPOS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200)") cpp_quote("#define TS_E_NOLOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)") +cpp_quote("#define TS_E_NOOBJECT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202)") +cpp_quote("#define TS_E_NOSERVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0203)") +cpp_quote("#define TS_E_NOINTERFACE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0204)") +cpp_quote("#define TS_E_NOSELECTION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0205)") +cpp_quote("#define TS_E_NOLAYOUT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0206)") +cpp_quote("#define TS_E_INVALIDPOINT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0207)") +cpp_quote("#define TS_E_SYNCHRONOUS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)") +cpp_quote("#define TS_E_READONLY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)") +cpp_quote("#define TS_E_FORMAT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x020a)") + +cpp_quote("#define TS_S_ASYNC MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)") const ULONG TS_DEFAULT_SELECTION = ~0u; @@ -50,6 +61,9 @@ const WCHAR TS_CHAR_EMBEDDED = 0xfffc; const WCHAR TS_CHAR_REGION = 0x0000; const WCHAR TS_CHAR_REPLACEMENT = 0xfffd; +const DWORD TS_IAS_NOQUERY = 0x1; +const DWORD TS_IAS_QUERYONLY = 0x2; + typedef [uuid(05fcf85b-5e9c-4c3e-ab71-29471d4f38e7)] enum { TS_AE_NONE, TS_AE_START, TS_AE_END } TsActiveSelEnd; typedef [uuid(033b0df0-f193-4170-b47b-141afc247878)] enum { TS_RT_PLAIN, TS_RT_HIDDEN, TS_RT_OPAQUE } TsRunType; typedef [uuid(ef3457d9-8446-49a7-a9e6-b50d9d5f3fd9)] GUID TS_ATTRID; diff --git a/include/wingdi.h b/include/wingdi.h index a6cdd640979..0e5d5e6b507 100644 --- a/include/wingdi.h +++ b/include/wingdi.h @@ -1775,14 +1775,14 @@ typedef struct tagEXTLOGPEN /* Device-independent bitmaps */ -typedef struct { +typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD, *LPRGBQUAD; -typedef struct { +typedef struct tagRGBTRIPLE { BYTE rgbtBlue; BYTE rgbtGreen; BYTE rgbtRed; diff --git a/libs/wine/wctomb.c b/libs/wine/wctomb.c index 966e6af693b..3b081d45653 100644 --- a/libs/wine/wctomb.c +++ b/libs/wine/wctomb.c @@ -69,9 +69,9 @@ WCHAR compose( const WCHAR *str ) static inline int is_valid_sbcs_mapping( const struct sbcs_table *table, int flags, WCHAR wch, unsigned char ch ) { - if (flags & WC_NO_BEST_FIT_CHARS) return (table->cp2uni[ch] == wch); - if (ch != (unsigned char)table->info.def_char) return 1; - return (wch == table->info.def_unicode_char); + if ((flags & WC_NO_BEST_FIT_CHARS) || ch == (unsigned char)table->info.def_char) + return (table->cp2uni[ch] == wch); + return 1; } /* query necessary dst length for src string */ @@ -262,8 +262,7 @@ static int wcstombs_sbcs_slow( const struct sbcs_table *table, int flags, static inline int is_valid_dbcs_mapping( const struct dbcs_table *table, int flags, WCHAR wch, unsigned short ch ) { - if (ch == table->info.def_char && wch != table->info.def_unicode_char) return 0; - if (flags & WC_NO_BEST_FIT_CHARS) + if ((flags & WC_NO_BEST_FIT_CHARS) || ch == table->info.def_char) { /* check if char maps back to the same Unicode value */ if (ch & 0xff00) diff --git a/programs/clock/It.rc b/programs/clock/It.rc index 91970b3d1e4..8f5976803ba 100644 --- a/programs/clock/It.rc +++ b/programs/clock/It.rc @@ -30,7 +30,7 @@ MAIN_MENU MENU MENUITEM "Ana&logico", IDM_ANALOG MENUITEM "Digi&tale", IDM_DIGITAL MENUITEM SEPARATOR - MENUITEM "&Font...", IDM_FONT + MENUITEM "&Carattere...", IDM_FONT MENUITEM SEPARATOR MENUITEM "&Nascondi la barra del titolo", IDM_NOTITLE MENUITEM SEPARATOR diff --git a/programs/clock/Ru.rc b/programs/clock/Ru.rc index df5b4897c67..71bd67fdf54 100644 --- a/programs/clock/Ru.rc +++ b/programs/clock/Ru.rc @@ -20,29 +20,34 @@ #include "clock_res.h" -MAIN_MENU MENU LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +MAIN_MENU MENU { - POPUP "&Ñâîéñòâà" { - MENUITEM "&Àíàëîâûå", IDM_ANALOG - MENUITEM "&Öèôðîâûå", IDM_DIGITAL + POPUP "&Свойства" { + MENUITEM "&Аналовые", IDM_ANALOG + MENUITEM "&Цифровые", IDM_DIGITAL MENUITEM SEPARATOR - MENUITEM "&Øðèôò...", IDM_FONT + MENUITEM "&Шрифт...", IDM_FONT MENUITEM SEPARATOR - MENUITEM "&Áåç çàãîëîâêà", IDM_NOTITLE + MENUITEM "&Без заголовка", IDM_NOTITLE MENUITEM SEPARATOR - MENUITEM "&Ñåêóíäû", IDM_SECONDS - MENUITEM "&Äàòà", IDM_DATE + MENUITEM "&Секунды", IDM_SECONDS + MENUITEM "&Дата", IDM_DATE MENUITEM SEPARATOR - MENUITEM "&Ïîâåðõ âñåõ", IDM_ONTOP + MENUITEM "&Поверх всех", IDM_ONTOP } - POPUP "&Ñâåäåíèÿ" { - MENUITEM "&Ëèöåíçèÿ...", IDM_LICENSE - MENUITEM "&ÁÅÇ ÃÀÐÀÍÒÈÉ...", IDM_NOWARRANTY - MENUITEM "&Î ïðîãðàììå...", IDM_ABOUT + POPUP "&Сведения" { + MENUITEM "&Лицензия...", IDM_LICENSE + MENUITEM "&БЕЗ ГАРАНТИЙ...", IDM_NOWARRANTY + MENUITEM "&О программе...", IDM_ABOUT } } -STRINGTABLE DISCARDABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +STRINGTABLE DISCARDABLE { -IDS_CLOCK, "×àñû" +IDS_CLOCK, "Часы" } diff --git a/programs/cmdlgtst/Ru.rc b/programs/cmdlgtst/Ru.rc index e3d7c2b6116..b80661a0c66 100644 --- a/programs/cmdlgtst/Ru.rc +++ b/programs/cmdlgtst/Ru.rc @@ -20,59 +20,62 @@ #include "cmdlgtst.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT CmdlgtstMenu MENU { - POPUP "&Ôàéë" + POPUP "&Файл" { - MENUITEM "Â&ûõîä", CM_U_EXIT + MENUITEM "В&ыход", CM_U_EXIT } - POPUP "&Äèàëîãè ñommdlg" + POPUP "&Диалоги сommdlg" { - MENUITEM "&Îòêðûòü", CM_U_OPEN - MENUITEM "&Ñîõðàíèòü", CM_U_SAVE + MENUITEM "&Открыть", CM_U_OPEN + MENUITEM "&Сохранить", CM_U_SAVE MENUITEM SEPARATOR - MENUITEM "&Öâåò", CM_U_COLOR - MENUITEM "&Øðèôò", CM_U_FONT + MENUITEM "&Цвет", CM_U_COLOR + MENUITEM "&Шрифт", CM_U_FONT MENUITEM SEPARATOR - MENUITEM "Íàéòè &òåêñò", CM_U_FIND - MENUITEM "&Çàìåíèòü òåêñò", CM_U_REPLACE + MENUITEM "Найти &текст", CM_U_FIND + MENUITEM "&Заменить текст", CM_U_REPLACE MENUITEM SEPARATOR - MENUITEM "&Ïå÷àòàòü", CM_U_PRINT - MENUITEM "Ïàðàìåòðû &ñòðàíèöû", CM_U_PAGESETUP + MENUITEM "&Печатать", CM_U_PRINT + MENUITEM "Параметры &страницы", CM_U_PAGESETUP } - POPUP "Ô&ëàãè äèàëîãîâ" + POPUP "Ф&лаги диалогов" { - MENUITEM "&Ôàéë", CM_F_FILE + MENUITEM "&Файл", CM_F_FILE MENUITEM SEPARATOR - MENUITEM "&Öâåò", CM_F_COLOR - MENUITEM "&Øðèôò", CM_F_FONT + MENUITEM "&Цвет", CM_F_COLOR + MENUITEM "&Шрифт", CM_F_FONT MENUITEM SEPARATOR - MENUITEM "&Íàéòè/çàìåíèòü", CM_F_FINDREPLACE + MENUITEM "&Найти/заменить", CM_F_FINDREPLACE MENUITEM SEPARATOR - MENUITEM "&Ïå÷àòàòü", CM_F_PRINT - MENUITEM "Ïàðàìåòðû &ñòðàíèöû", CM_F_PAGESETUP + MENUITEM "&Печатать", CM_F_PRINT + MENUITEM "Параметры &страницы", CM_F_PAGESETUP } - POPUP "&Ñïðàâêà" + POPUP "&Справка" { - MENUITEM "&Èñïîëüçîâàíèå", CM_H_USAGE - MENUITEM "&Î ïðîãðàììå", CM_H_ABOUT + MENUITEM "&Использование", CM_H_USAGE + MENUITEM "&О программе", CM_H_ABOUT } } Color_Flags_Dialog DIALOG 11, 20, 207, 107 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION -CAPTION "Ôëàãè äèàëîãà âûáîðà öâåòà" +CAPTION "Флаги диалога выбора цвета" FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îòìåíà", IDCANCEL, 148, 24, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ñïðàâêà", CM_R_HELP, 148, 42, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 148, 24, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Справка", CM_R_HELP, 148, 42, 50, 14, WS_GROUP | WS_TABSTOP CHECKBOX "CC_ENABLEHOOK", I_CC_ENABLEHOOK, 12, 12, 122, 10, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "CC_ENABLETEMPLATE", I_CC_ENABLETEMPLATE, 12, 24, 122, 10, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "CC_ENABLETEMPLATEHANDLE", I_CC_ENABLETEMPLATEHANDLE, 12, 36, 122, 10, BS_AUTOCHECKBOX | WS_TABSTOP @@ -84,12 +87,12 @@ FONT 8, "MS Shell Dlg" Font_Flags_Dialog DIALOG 9, 20, 207, 313 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION -CAPTION "Ôëàãè äèàëîãà âûáîðà øðèôòà" +CAPTION "Флаги диалога выбора шрифта" FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14 - PUSHBUTTON "Îòìåíà", IDCANCEL, 148, 24, 50, 14 - PUSHBUTTON "Ñïðàâêà", CM_R_HELP, 148, 42, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 148, 24, 50, 14 + PUSHBUTTON "Справка", CM_R_HELP, 148, 42, 50, 14 CHECKBOX "CF_APPLY", I_CF_APPLY, 12, 12, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "CF_ANSIONLY", I_CF_ANSIONLY, 12, 24, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "CF_BOTH", I_CF_BOTH, 12, 36, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP @@ -118,12 +121,12 @@ FONT 8, "MS Shell Dlg" Find_Flags_Dialog DIALOG 8, 24, 207, 306 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION -CAPTION "Ôëàãè äèàëîãîâ íàéòè/çàìåíèòü" +CAPTION "Флаги диалогов найти/заменить" FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14 - PUSHBUTTON "Îòìåíà", IDCANCEL, 148, 24, 50, 14 - PUSHBUTTON "Ñïðàâêà", IDHELP, 148, 42, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 148, 24, 50, 14 + PUSHBUTTON "Справка", IDHELP, 148, 42, 50, 14 CHECKBOX "FR_DIALOGTERM", I_FR_DIALOGTERM, 24, 12, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "FR_DOWN", I_FR_DOWN, 24, 24, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "FR_ENABLEHOOK", I_FR_ENABLEHOOK, 24, 36, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP @@ -146,17 +149,17 @@ FONT 8, "MS Shell Dlg" CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 12, 168, 11, 13 CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 12, 180, 11, 13 CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 24, 228, 11, 13 - CONTROL "Òàê îòìå÷åíû ôëàãè, êîòîðûå óñòàíîâëåíû ñèñòåìîé è îáÿçàíû áûòü ñáðîøåíû ïîëüçîâàòåëåì.", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 48, 228, 98, 36 + CONTROL "Так отмечены флаги, которые установлены системой и обязаны быть сброшены пользователем.", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 48, 228, 98, 36 } Print_Flags_Dialog DIALOG 4, 17, 239, 287 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ôëàãè äèàëîãîâ ïå÷àòü/íàñòðîéêà ïå÷àòè" +CAPTION "Флаги диалогов печать/настройка печати" FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 180, 6, 50, 14 - PUSHBUTTON "Îòìåíà", IDCANCEL, 180, 24, 50, 14 - PUSHBUTTON "Ñïðàâêà", CM_R_HELP, 180, 42, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 180, 24, 50, 14 + PUSHBUTTON "Справка", CM_R_HELP, 180, 42, 50, 14 CHECKBOX "PD_ALLPAGES", I_PD_ALLPAGES, 12, 12, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "PD_COLLATE", I_PD_COLLATE, 12, 24, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "PD_DISABLEPRINTTOFILE", I_PD_DISABLEPRINTTOFILE, 12, 36, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP @@ -187,7 +190,7 @@ CAPTION " " FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 180, 6, 50, 14 - PUSHBUTTON "Îòìåíà", IDCANCEL, 180, 24, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 180, 24, 50, 14 CHECKBOX "PSD_DEFAULTMINMARGINS", I_PSD_DEFAULTMINMARGINS, 12, 12, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "PSD_DISABLEMARGINS", I_PSD_DISABLEMARGINS, 12, 24, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "PSD_DISABLEORIENTATION", I_PSD_DISABLEORIENTATION, 12, 36, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP @@ -211,12 +214,12 @@ FONT 8, "MS Shell Dlg" File_Flags_Dialog DIALOG 6, 15, 207, 227 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ôëàãè äèàëîãîâ îòêðûòü/ñîõðàíèòü ôàéë" +CAPTION "Флаги диалогов открыть/сохранить файл" FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14 - PUSHBUTTON "Îòìåíà", IDCANCEL, 148, 24, 50, 14 - PUSHBUTTON "Ñïðàâêà", CM_R_HELP, 148, 42, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 148, 24, 50, 14 + PUSHBUTTON "Справка", CM_R_HELP, 148, 42, 50, 14 CHECKBOX "OFN_ALLOWMULTISELECT", I_OFN_ALLOWMULTISELECT, 12, 12, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "OFN_CREATEPROMPT", I_OFN_CREATEPROMPT, 12, 24, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "OFN_ENABLEHOOK", I_OFN_ENABLEHOOK, 12, 36, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP @@ -238,59 +241,59 @@ FONT 8, "MS Shell Dlg" AboutDialog DIALOG 6, 15, 194, 119 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Î ïðîãðàììå" +CAPTION "О программе" FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 72, 96, 50, 14 LTEXT "Common Dialog Test Jig Exerciser, version 1.20", -1, 13, 36, 168, 12 - LTEXT "(c) 1999-2000, Eric Williams. Ðàñïðîñòðàíÿåòñÿ ïî ëèöåíçèè WINE. Íå ñêëàäèðóéòå êîä...ðàñïðîñòðàíÿéòå åãî!", -1, 18, 60, 157, 24 + LTEXT "(c) 1999-2000, Eric Williams. Распространяется по лицензии WINE. Не складируйте код...распространяйте его!", -1, 18, 60, 157, 24 ICON "AboutIcon", -1, 84, 12, 18, 20 } UsageDialog DIALOG 183, 22, 190, 300 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Èñïîëüçîâàíèå" +CAPTION "Использование" FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 70, 276, 50, 14 LTEXT "Common Dialog Test Jig Exerciser, version 1.20", -1, 13, 48, 168, 12 - LTEXT "Ýòà óòèëà òåñòèðóåò COMMDLG äëÿ Wine.", -1, 12, 72, 168, 12 - LTEXT "Ôëàãè çàäàþòñÿ â ìåíþ 'Ôëàãè äèàëîãîâ'.", -1, 12, 96, 168, 12 - LTEXT "Äèàëîã âûáîðà öâåòà ìåíÿåò öâåò ôîíà.", -1, 12, 120, 168, 12 - LTEXT "Äèàëîã âûáîðà øðèôòà ìåíÿåò âñå øðèôòû è öâåòà øðèôòîâ, åñëè ôëàã CF_EFFECTS óñòàíîâëåí.", -1, 12, 144, 168, 24 - LTEXT "Âåðõíèé ëåâûé óãîë ðàáî÷åé îáëàñòè ïðèëîæåíèÿ ïîêàçûâàåò ïîëíîå èìÿ ôàéëà è çàãîëîâîê ïîñëåäíåãî óñïåøíîãî çàâåðøåíèÿ äèàëîãîâ îòêðûòèÿ èëè ñîõðàíåíèÿ ôàéëà.", -1, 12, 180, 168, 24 - LTEXT "(c) 1999-2000, Eric Williams. Ðàñïðîñòðàíÿåòñÿ ïî ëèöåíçèè WINE. Íå ñêëàäèðóéòå êîä...ðàñïðîñòðàíÿéòå åãî!", -1, 12, 228, 168, 36 + LTEXT "Эта утила тестирует COMMDLG для Wine.", -1, 12, 72, 168, 12 + LTEXT "Флаги задаются в меню 'Флаги диалогов'.", -1, 12, 96, 168, 12 + LTEXT "Диалог выбора цвета меняет цвет фона.", -1, 12, 120, 168, 12 + LTEXT "Диалог выбора шрифта меняет все шрифты и цвета шрифтов, если флаг CF_EFFECTS установлен.", -1, 12, 144, 168, 24 + LTEXT "Верхний левый угол рабочей области приложения показывает полное имя файла и заголовок последнего успешного завершения диалогов открытия или сохранения файла.", -1, 12, 180, 168, 24 + LTEXT "(c) 1999-2000, Eric Williams. Распространяется по лицензии WINE. Не складируйте код...распространяйте его!", -1, 12, 228, 168, 36 ICON "AboutIcon", -1, 86, 12, 18, 20 CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 12, 216, 168, 2 } PAGESETUPDLGORD_CSTM DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "óÏÂÓÔ×ÅÎÎÙÊ ÄÉÁÌÏÇ" +CAPTION "Собственный диалог" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", rct1, "Static", SS_WHITERECT, 80, 8, 80, 80 CONTROL "", rct2, "Static", SS_GRAYRECT, 160, 12, 4, 80 CONTROL "", rct3, "Static", SS_GRAYRECT, 84, 88, 80, 4 - GROUPBOX "Áóìàãà è ïðèíòåð", grp2, 8, 96, 224, 56, BS_GROUPBOX - LTEXT "&Áóìàãà:", stc2, 16, 112, 36, 8 + GROUPBOX "Бумага и принтер", grp2, 8, 96, 224, 56, BS_GROUPBOX + LTEXT "&Бумага:", stc2, 16, 112, 36, 8 COMBOBOX cmb2, 64, 110, 80, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL COMBOBOX cmb1, 150, 110, 80, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL - LTEXT "Ïîäà÷à:", stc3, 16, 132, 36, 8 + LTEXT "Подача:", stc3, 16, 132, 36, 8 COMBOBOX cmb3, 64, 130, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL -GROUPBOX "Îðèåíòàöèÿ", grp1, 8, 156, 64, 56, BS_GROUPBOX -AUTORADIOBUTTON "Ê&íèæíàÿ", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON -AUTORADIOBUTTON "Àëü&áîìíàÿ", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON -GROUPBOX "Ïîëÿ", grp4, 80, 156, 152, 56, BS_GROUPBOX -LTEXT "&Ñëåâà:", stc15, 88, 172, 21, 8 +GROUPBOX "Ориентация", grp1, 8, 156, 64, 56, BS_GROUPBOX +AUTORADIOBUTTON "К&нижная", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON +AUTORADIOBUTTON "Аль&бомная", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON +GROUPBOX "Поля", grp4, 80, 156, 152, 56, BS_GROUPBOX +LTEXT "&Слева:", stc15, 88, 172, 21, 8 EDITTEXT edt4, 111, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER -LTEXT "Ñâå&ðõó:", stc16, 159, 172, 27, 8 +LTEXT "Све&рху:", stc16, 159, 172, 27, 8 EDITTEXT edt6, 187, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER -LTEXT "Ñ&ïðàâà:", stc17, 88, 192, 21, 8 +LTEXT "С&права:", stc17, 88, 192, 21, 8 EDITTEXT edt5, 111, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER -LTEXT "Ñíè&çó:", stc18, 159, 192, 23, 8 +LTEXT "Сни&зу:", stc18, 159, 192, 23, 8 EDITTEXT edt7, 187, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER DEFPUSHBUTTON "OK", IDOK, 71, 220, 50, 14, BS_PUSHBUTTON -PUSHBUTTON "Îòìåíà", IDCANCEL, 126, 220, 50, 14 -PUSHBUTTON "&Ïðèíòåð...", psh3, 184, 220, 48, 14 +PUSHBUTTON "Отмена", IDCANCEL, 126, 220, 50, 14 +PUSHBUTTON "&Принтер...", psh3, 184, 220, 48, 14 END diff --git a/programs/net/Ru.rc b/programs/net/Ru.rc index a59394b8fdd..bf4cd65a0b9 100644 --- a/programs/net/Ru.rc +++ b/programs/net/Ru.rc @@ -21,26 +21,29 @@ #include "resources.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE { - STRING_USAGE, "Èñïîëüçîâàíèå:\n\nNET [ HELP | START | STOP | USE ]\n" - STRING_START_USAGE, "Óêàæèòå çàïóñêàåìóþ ñëóæáó.\n" - STRING_STOP_USAGE, "Óêàæèòå îñòàíàâëèâàåìóþ ñëóæáó.\n" - STRING_STOP_DEP, "Îñòàíîâêà çàâèñèìîé ñëóæáû: %s\n" - STRING_CANT_STOP, "Íåâîçìîæíî îñòàíîâèòü ñëóæáó %s\n" - STRING_NO_SCM, "Íåâîçìîæíî ïîëó÷èòü äîñòóï ê äèñïåò÷åðó ñëóæá.\n" - STRING_NO_SVCHANDLE, "Íåâîçìîæíî ïîëó÷èòü äîñòóï ê ñëóæáå.\n" - STRING_START_SVC, "Çàïóñê ñëóæáû %s.\n" - STRING_START_SVC_SUCCESS, "Ñëóæáà %s óñïåøíî çàïóùåíà.\n" - STRING_START_SVC_FAIL, "Îøèáêà ïðè çàïóñêå ñëóæáû %s.\n" - STRING_STOP_SVC, "Îñòàíîâêà ñëóæáû %s.\n" - STRING_STOP_SVC_SUCCESS, "Ñëóæáà %s óñïåøíî îñòàíîâëåíà.\n" - STRING_STOP_SVC_FAIL, "Îøèáêà ïðè îñòàíîâêå ñëóæáû %s.\n" - STRING_HELP_USAGE, "Èñïîëüçîâàíèå:\n\nNET HELP êîìàíäà\n -èëè-\nNET êîìàíäà /HELP\n\n"\ - " Äîñòóïíûå êîìàíäû:\n NET HELP NET START NET STOP NET USE\n" - STRING_NO_ENTRIES, "Ñïèñîê ïóñò.\n" - STRING_USE_HEADER, "\nÑòàòóñ Ëîêàëüíûé Óäàë¸ííûé\n---------------------------------------------------------------\n" - STRING_USE_ENTRY, "%s %S %S Îòêðûòûõ ðåñóðñîâ: %lu\n" + STRING_USAGE, "Использование:\n\nNET [ HELP | START | STOP | USE ]\n" + STRING_START_USAGE, "Укажите запускаемую службу.\n" + STRING_STOP_USAGE, "Укажите останавливаемую службу.\n" + STRING_STOP_DEP, "Остановка зависимой службы: %s\n" + STRING_CANT_STOP, "Невозможно остановить службу %s\n" + STRING_NO_SCM, "Невозможно получить доступ к диспетчеру служб.\n" + STRING_NO_SVCHANDLE, "Невозможно получить доступ к службе.\n" + STRING_START_SVC, "Запуск службы %s.\n" + STRING_START_SVC_SUCCESS, "Служба %s успешно запущена.\n" + STRING_START_SVC_FAIL, "Ошибка при запуске службы %s.\n" + STRING_STOP_SVC, "Остановка службы %s.\n" + STRING_STOP_SVC_SUCCESS, "Служба %s успешно остановлена.\n" + STRING_STOP_SVC_FAIL, "Ошибка при остановке службы %s.\n" + STRING_HELP_USAGE, "Использование:\n\nNET HELP команда\n -или-\nNET команда /HELP\n\n"\ + " Доступные команды:\n NET HELP NET START NET STOP NET USE\n" + STRING_NO_ENTRIES, "Список пуст.\n" + STRING_USE_HEADER, "\nСтатус Локальный Удалённый\n---------------------------------------------------------------\n" + STRING_USE_ENTRY, "%s %S %S Открытых ресурсов: %lu\n" } diff --git a/programs/notepad/En.rc b/programs/notepad/En.rc index 15439b1069e..d9ea7cd238a 100644 --- a/programs/notepad/En.rc +++ b/programs/notepad/En.rc @@ -116,14 +116,14 @@ STRING_UNTITLED, "Untitled" STRING_ALL_FILES, "All files (*.*)" STRING_TEXT_FILES_TXT, "Text files (*.txt)" -STRING_TOOLARGE, "File '%s' is too large for notepad.\n \ +STRING_TOOLARGE, "File '%s' is too large for notepad.\n\ Please use a different editor." -STRING_NOTEXT, "You didn't enter any text. \ +STRING_NOTEXT, "You didn't enter any text.\ \nPlease type something and try again" -STRING_DOESNOTEXIST, "File '%s' does not exist\n\n \ -Do you want to create a new file ?" -STRING_NOTSAVED, "File '%s' has been modified\n\n \ -Would you like to save the changes ?" +STRING_DOESNOTEXIST, "File '%s' does not exist.\n\n\ +Do you want to create a new file?" +STRING_NOTSAVED, "File '%s' has been modified.\n\n\ +Would you like to save the changes?" STRING_NOTFOUND, "'%s' could not be found." STRING_OUT_OF_MEMORY, "Not enough memory to complete this \ task.\nClose one or more applications to increase the amount of free memory." diff --git a/programs/notepad/Fr.rc b/programs/notepad/Fr.rc index 3ec42623ab9..77b3c3c90ce 100644 --- a/programs/notepad/Fr.rc +++ b/programs/notepad/Fr.rc @@ -124,9 +124,9 @@ STRING_TOOLARGE, "Le fichier « %s » est trop gr Veuillez utiliser un autre éditeur." STRING_NOTEXT, "Vous n'avez pas entré de texte. \ Veuillez taper quelque chose et recommencer" -STRING_DOESNOTEXIST, "Le fichier « %s »\nn'existe pas.\n\n\ +STRING_DOESNOTEXIST, "Le fichier « %s » n'existe pas.\n\n\ Voulez-vous créer un nouveau fichier ?" -STRING_NOTSAVED, "Le fichier « %s »\na été modifié\n\n \ +STRING_NOTSAVED, "Le fichier « %s » a été modifié\n\n\ Voulez-vous enregistrer vos modifications ?" STRING_NOTFOUND, "« %s » non trouvé." STRING_OUT_OF_MEMORY, "Pas assez de mémoire pour terminer cette \ diff --git a/programs/notepad/Ko.rc b/programs/notepad/Ko.rc index 56167de8674..94f1d10760b 100644 --- a/programs/notepad/Ko.rc +++ b/programs/notepad/Ko.rc @@ -127,9 +127,9 @@ STRING_UNICODE_LE, " STRING_UNICODE_BE, "À¯´ÏÄÚµå (UTF-16 ºò-¿£µð¾ð)" STRING_LOSS_OF_UNICODE_CHARACTERS, "%s\n\ -À¯´ÏÄÚµå ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ÀÌ ÆÄÀÏÀº ¸¸¾à ´ç½ÅÀÌ %s ÀÎÄÚµùÀ¸·Î \n\ +À¯´ÏÄÚµå ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ÀÌ ÆÄÀÏÀº ¸¸¾à ´ç½ÅÀÌ %s ÀÎÄÚµùÀ¸·Î\n\ ÆÄÀÏÀ» ÀúÀåÇÏ¸é ¹®ÀÚÀÇ ¼Õ½ÇÀÌ ÀÖÀ» °ÍÀÔ´Ï´Ù.\n\ -ÀÌ ¹®ÀÚ¸¦ º¸Á¸ÇÏ·Á¸é Ãë¼Ò¸¦ Ŭ¸¯ÇÏ°í, ÀÎÄÚµù µå·Ó´Ù¿î¸ñ·ÏÀÇ À¯´ÏÄÚµå \n\ +ÀÌ ¹®ÀÚ¸¦ º¸Á¸ÇÏ·Á¸é Ãë¼Ò¸¦ Ŭ¸¯ÇÏ°í, ÀÎÄÚµù µå·Ó´Ù¿î¸ñ·ÏÀÇ À¯´ÏÄÚµå\n\ ¿É¼Ç ÁßÀÇ Çϳª¸¦ ¼±ÅÃÇϽʽÿÀt.\n\ °è¼ÓÇϽðڽÀ´Ï±î?" } diff --git a/programs/notepad/Ru.rc b/programs/notepad/Ru.rc dissimilarity index 61% index 6e9f64ed64e..814b7fcd8fc 100644 --- a/programs/notepad/Ru.rc +++ b/programs/notepad/Ru.rc @@ -1,120 +1,139 @@ -/* - * Notepad (Russian resources) - * - * Copyright 2003 Igor Stepin - * - * 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 "notepad_res.h" - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -MAIN_MENU MENU -{ - POPUP "&Ôàéë" { - MENUITEM "Ñîçä&àòü\tCtrl+N", CMD_NEW - MENUITEM "&Îòêðûòü...\tCtrl+O", CMD_OPEN - MENUITEM "&Ñîõðàíèòü\tCtrl+S", CMD_SAVE - MENUITEM "Ñîõðàíèòü &êàê...", CMD_SAVE_AS - MENUITEM SEPARATOR - MENUITEM "&Ïå÷àòàòü...\tCtrl+P", CMD_PRINT - MENUITEM "Ïàðà&ìåòðû ñòðàíèöû...", CMD_PAGE_SETUP - MENUITEM "&Íàñòðîéêà ïðèíòåðà...", CMD_PRINTER_SETUP - MENUITEM SEPARATOR - MENUITEM "Â&ûõîä", CMD_EXIT - } -POPUP "&Ïðàâêà" { - MENUITEM "&Îòìåíèòü\tCtrl+Z", CMD_UNDO - MENUITEM SEPARATOR - MENUITEM "&Âûðåçàòü\tCtrl+X", CMD_CUT - MENUITEM "&Êîïèðîâàòü\tCtrl+C", CMD_COPY - MENUITEM "Âñò&àâèòü\tCtrl+V", CMD_PASTE - MENUITEM "&Óäàëèòü\tDel", CMD_DELETE - MENUITEM SEPARATOR - MENUITEM "Âûäåëèòü â&ñå", CMD_SELECT_ALL - MENUITEM "Âðåì&ÿ è äàòà\tF5", CMD_TIME_DATE - MENUITEM SEPARATOR - MENUITEM "&Ïåðåíîñ ïî ñëîâàì", CMD_WRAP - MENUITEM "&Øðèôò...", CMD_FONT - } -POPUP "Ï&îèñê" { - MENUITEM "&Íàéòè...", CMD_SEARCH - MENUITEM "Íàéòè &äàëåå\tF3", CMD_SEARCH_NEXT - } -POPUP "&Ñïðàâêà" { - MENUITEM "&Ñîäåðæàíèå", CMD_HELP_CONTENTS - MENUITEM "&Ïîèñê...", CMD_HELP_SEARCH - MENUITEM "&Èñïîëüçîâàíèå ñïðàâêè", CMD_HELP_ON_HELP - MENUITEM SEPARATOR - MENUITEM "&Î Notepad", CMD_HELP_ABOUT_NOTEPAD - } -} - -/* Dialog `Page setup' */ - -DIALOG_PAGESETUP DIALOG 0, 0, 225, 95 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -FONT 8, "MS Shell Dlg" -CAPTION "Ïàðàìåòðû ñòðàíèöû" -{ -LTEXT "Â&åðõíèé êîëîíòèòóë:", 0x140, 10, 07, 40, 15 -EDITTEXT IDC_PAGESETUP_HEADERVALUE, 60, 05,110, 12, WS_BORDER | WS_TABSTOP -LTEXT "Í&èæíèé êîëîíòèòóë:", 0x142, 10, 24, 40, 15 -EDITTEXT IDC_PAGESETUP_FOOTERVALUE, 60, 22,110, 12, WS_BORDER | WS_TABSTOP - -GROUPBOX "Ïîëÿ (ìì):", 0x144, 10, 43,160, 45 -LTEXT "&Ëåâîå:", 0x145, 20, 55, 30, 10, WS_CHILD -EDITTEXT IDC_PAGESETUP_LEFTVALUE, 50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP -LTEXT "&Âåðõíåå:", 0x148, 20, 73, 30, 10, WS_CHILD -EDITTEXT IDC_PAGESETUP_TOPVALUE, 50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP -LTEXT "&Ïðàâîå:", 0x14B, 100, 55, 30, 10, WS_CHILD -EDITTEXT IDC_PAGESETUP_RIGHTVALUE, 130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP -LTEXT "&Íèæíåå:", 0x14E,100, 73, 30, 10, WS_CHILD -EDITTEXT IDC_PAGESETUP_BOTTOMVALUE, 130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP - -DEFPUSHBUTTON "OK", IDOK, 180, 3, 40, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 180, 21, 40, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", IDHELP, 180, 39, 40, 15, WS_TABSTOP -} - -STRINGTABLE DISCARDABLE -{ -STRING_PAGESETUP_HEADERVALUE, "&f" -STRING_PAGESETUP_FOOTERVALUE, "Ñòðàíèöà &p" - -STRING_NOTEPAD, "Áëîêíîò" -STRING_ERROR, "ÎØÈÁÊÀ" -STRING_WARNING, "ÂÍÈÌÀÍÈÅ" -STRING_INFO, "Èíôîðìàöèÿ" - -STRING_UNTITLED, "(áåç çàãîëîâêà)" - -STRING_ALL_FILES, "Âñå ôàéëû (*.*)" -STRING_TEXT_FILES_TXT, "Òåêñòîâûå ôàéëû (*.txt)" - -STRING_TOOLARGE, "Ôàéë '%s' ñëèøêîì áîëüøîé äëÿ áëîêíîòà.\n \ -Èñïîëüçóéòå äðóãîé ðåäàêòîð." -STRING_NOTEXT, "Âû íå ââåëè íèêàêîãî òåêñòà. \ -\nÂâåäèòå ÷òî-íèáóäü è ïîïðîáóéòå åùå." -STRING_DOESNOTEXIST, "Ôàéë '%s'\níå ñóùåñòâóåò\n\n \ -Õîòèòå ñîçäàòü íîâûé ôàéë?" -STRING_NOTSAVED, "Ôàéë '%s'\náûë èçìåíåí\n\n \ -Õîòèòå ñîõðàíèòü èçìåíåíèÿ?" -STRING_NOTFOUND, "'%s' íå íàéäåí." -STRING_OUT_OF_MEMORY, "Íåäîñòàòî÷íî ïàìÿòè äëÿ çàâåðøåíèÿ ýòîé îïåðàöèè \ -\nÇàêðîéòå îäíî èëè íåñêîëüêî ïðèëîæåíèé è ïîâòîðèòå ïîïûòêó." - -} +/* + * Notepad (Russian resources) + * + * Copyright 2003 Igor Stepin + * + * 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 "notepad_res.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +MAIN_MENU MENU +{ + POPUP "&Файл" { + MENUITEM "Созд&ать\tCtrl+N", CMD_NEW + MENUITEM "&Открыть...\tCtrl+O", CMD_OPEN + MENUITEM "&Сохранить\tCtrl+S", CMD_SAVE + MENUITEM "Сохранить &как...", CMD_SAVE_AS + MENUITEM SEPARATOR + MENUITEM "&Печатать...\tCtrl+P", CMD_PRINT + MENUITEM "Пара&метры страницы...", CMD_PAGE_SETUP + MENUITEM "&Настройка принтера...", CMD_PRINTER_SETUP + MENUITEM SEPARATOR + MENUITEM "В&ыход", CMD_EXIT + } +POPUP "&Правка" { + MENUITEM "&Отменить\tCtrl+Z", CMD_UNDO + MENUITEM SEPARATOR + MENUITEM "&Вырезать\tCtrl+X", CMD_CUT + MENUITEM "&Копировать\tCtrl+C", CMD_COPY + MENUITEM "Вст&авить\tCtrl+V", CMD_PASTE + MENUITEM "&Удалить\tDel", CMD_DELETE + MENUITEM SEPARATOR + MENUITEM "Выделить в&се", CMD_SELECT_ALL + MENUITEM "Врем&я и дата\tF5", CMD_TIME_DATE + MENUITEM SEPARATOR + MENUITEM "&Перенос по словам", CMD_WRAP + MENUITEM "&Шрифт...", CMD_FONT + } +POPUP "П&оиск" { + MENUITEM "&Найти...", CMD_SEARCH + MENUITEM "Найти &далее\tF3", CMD_SEARCH_NEXT + } +POPUP "&Справка" { + MENUITEM "&Содержание", CMD_HELP_CONTENTS + MENUITEM "&Поиск...", CMD_HELP_SEARCH + MENUITEM "&Использование справки", CMD_HELP_ON_HELP + MENUITEM SEPARATOR + MENUITEM "&О Notepad", CMD_HELP_ABOUT_NOTEPAD + } +} + +/* Dialog `Page setup' */ + +DIALOG_PAGESETUP DIALOG 0, 0, 225, 95 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Параметры страницы" +{ +LTEXT "В&ерхний колонтитул:", 0x140, 10, 07, 40, 15 +EDITTEXT IDC_PAGESETUP_HEADERVALUE, 60, 05,110, 12, WS_BORDER | WS_TABSTOP +LTEXT "Н&ижний колонтитул:", 0x142, 10, 24, 40, 15 +EDITTEXT IDC_PAGESETUP_FOOTERVALUE, 60, 22,110, 12, WS_BORDER | WS_TABSTOP + +GROUPBOX "Поля (мм):", 0x144, 10, 43,160, 45 +LTEXT "&Левое:", 0x145, 20, 55, 30, 10, WS_CHILD +EDITTEXT IDC_PAGESETUP_LEFTVALUE, 50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP +LTEXT "&Верхнее:", 0x148, 20, 73, 30, 10, WS_CHILD +EDITTEXT IDC_PAGESETUP_TOPVALUE, 50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP +LTEXT "&Правое:", 0x14B, 100, 55, 30, 10, WS_CHILD +EDITTEXT IDC_PAGESETUP_RIGHTVALUE, 130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP +LTEXT "&Нижнее:", 0x14E,100, 73, 30, 10, WS_CHILD +EDITTEXT IDC_PAGESETUP_BOTTOMVALUE, 130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP + +DEFPUSHBUTTON "OK", IDOK, 180, 3, 40, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 180, 21, 40, 15, WS_TABSTOP +PUSHBUTTON "&Справка", IDHELP, 180, 39, 40, 15, WS_TABSTOP +} + +IDD_OFN_TEMPLATE DIALOG DISCARDABLE 50,50,300,15 +STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Кодировка:", -1, 5,0, 50,12 + COMBOBOX IDC_OFN_ENCCOMBO, 53,0, 156,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST +END + +STRINGTABLE DISCARDABLE +{ +STRING_PAGESETUP_HEADERVALUE, "&f" +STRING_PAGESETUP_FOOTERVALUE, "Страница &p" + +STRING_NOTEPAD, "Блокнот" +STRING_ERROR, "ОШИБКА" +STRING_WARNING, "ВНИМАНИЕ" +STRING_INFO, "Информация" + +STRING_UNTITLED, "(без заголовка)" + +STRING_ALL_FILES, "Все файлы (*.*)" +STRING_TEXT_FILES_TXT, "Текстовые файлы (*.txt)" + +STRING_TOOLARGE, "Файл '%s' слишком большой для блокнота.\n \ +Используйте другой редактор." +STRING_NOTEXT, "Вы не ввели никакого текста. \ +\nВведите что-нибудь и попробуйте еще." +STRING_DOESNOTEXIST, "Файл '%s'\nне существует\n\n \ +Хотите создать новый файл?" +STRING_NOTSAVED, "Файл '%s'\nбыл изменен\n\n \ +Хотите сохранить изменения?" +STRING_NOTFOUND, "'%s' не найден." +STRING_OUT_OF_MEMORY, "Недостаточно памяти для завершения этой операции \ +\nЗакройте одно или несколько приложений и повторите попытку." + +STRING_UNICODE_LE, "Юникод (UTF-16)" +STRING_UNICODE_BE, "Юникод (UTF-16 big-endian)" + +STRING_LOSS_OF_UNICODE_CHARACTERS, "%s\n\ +Этот файл содержит текст в формате Юникод, который будет потерян, если вы сохраните этот файл как файл в кодировке %s.\n\ +Чтобы сохранить данные в формате Юникод, нажмите кнопку \"Отмена\" и выберите\n\ +один из вариантов сохранения в формате Юникод.\n\ +Продолжить?" +} diff --git a/programs/oleview/Ru.rc b/programs/oleview/Ru.rc index ab8f6b6cc81..ec3e17f1241 100644 --- a/programs/oleview/Ru.rc +++ b/programs/oleview/Ru.rc @@ -21,21 +21,24 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_RUSSIAN IDM_MENU MENU { - POPUP "&Ôàéë" + POPUP "&Файл" { - MENUITEM "Ï&ðèâÿçàòü ê ôàéëó...", IDM_BIND - MENUITEM "&Ïðîñìîòð TypeLib...", IDM_TYPELIB + MENUITEM "П&ривязать к файлу...", IDM_BIND + MENUITEM "&Просмотр TypeLib...", IDM_TYPELIB MENUITEM SEPARATOR - MENUITEM "&Êîíôèãóðàöèÿ ñèñòåìû...", IDM_SYSCONF - MENUITEM "&Çàïóñòèòü Ðåäàêòîð ðååñòðà", IDM_REGEDIT + MENUITEM "&Конфигурация системы...", IDM_SYSCONF + MENUITEM "&Запустить Редактор реестра", IDM_REGEDIT MENUITEM SEPARATOR - MENUITEM "&Âûõîä", IDM_EXIT + MENUITEM "&Выход", IDM_EXIT } - POPUP "&Îáüåêò" + POPUP "&Обьект" { POPUP "&CoCreateInstance Flag" { @@ -45,47 +48,47 @@ IDM_MENU MENU MENUITEM "CLSCTX_&REMOTE_SERVER", IDM_FLAG_REMSERV } MENUITEM SEPARATOR - MENUITEM "Ïðîñìîòð &Type info", IDM_TYPEINFO, GRAYED + MENUITEM "Просмотр &Type info", IDM_TYPEINFO, GRAYED MENUITEM SEPARATOR MENUITEM "Create &Instance", IDM_CREATEINST, GRAYED MENUITEM "Create Instance &On...", IDM_CREATEINSTON, GRAYED MENUITEM "&Release Instance", IDM_RELEASEINST, GRAYED MENUITEM SEPARATOR - MENUITEM "Êîïèðîâàòü C&LSID â áóôåð", IDM_COPYCLSID, GRAYED - MENUITEM "Êîïèðîâàòü &HTML object Tag â áóôåð", IDM_HTMLTAG, GRAYED + MENUITEM "Копировать C&LSID в буфер", IDM_COPYCLSID, GRAYED + MENUITEM "Копировать &HTML object Tag в буфер", IDM_HTMLTAG, GRAYED MENUITEM SEPARATOR - MENUITEM "&Âèä...", IDM_VIEW, GRAYED + MENUITEM "&Вид...", IDM_VIEW, GRAYED } - POPUP "&Âèä" + POPUP "&Вид" { - MENUITEM "&Ðåæèì ýêñïåðòà", IDM_EXPERT,CHECKED + MENUITEM "&Режим эксперта", IDM_EXPERT,CHECKED MENUITEM SEPARATOR MENUITEM "&Hidden component categories", IDM_HIDDEN, GRAYED MENUITEM SEPARATOR - MENUITEM "&Ïàíåëü èíñòðóìåíòîâ", IDM_TOOLBAR,CHECKED - MENUITEM "&Ñòðîêà ñîñòîÿíèÿ", IDM_STATUSBAR,CHECKED + MENUITEM "&Панель инструментов", IDM_TOOLBAR,CHECKED + MENUITEM "&Строка состояния", IDM_STATUSBAR,CHECKED MENUITEM SEPARATOR - MENUITEM "&Îáíîâèòü\tF5", IDM_REFRESH + MENUITEM "&Обновить\tF5", IDM_REFRESH } - POPUP "&Ïîìîùü" + POPUP "&Помощь" { - MENUITEM "&Î ïðîãðàììå...", IDM_ABOUT + MENUITEM "&О программе...", IDM_ABOUT } } IDM_TYPELIB MENU { - POPUP "&Ôàéë" + POPUP "&Файл" { - MENUITEM "&Ñîõðàíèòü êàê...", IDM_SAVEAS - MENUITEM "&Çàêðûòü", IDM_CLOSE + MENUITEM "&Сохранить как...", IDM_SAVEAS + MENUITEM "&Закрыть", IDM_CLOSE } - POPUP "&Âèä" + POPUP "&Вид" { MENUITEM "&Group by type kind", IDM_GROUP MENUITEM SEPARATOR - MENUITEM "&Ïàíåëü èíñòðóìåíòîâ", IDM_TOOLBAR - MENUITEM "&Ñòðîêà ñîñòîÿíèÿ", IDM_STATUSBAR,CHECKED + MENUITEM "&Панель инструментов", IDM_TOOLBAR + MENUITEM "&Строка состояния", IDM_STATUSBAR,CHECKED } } @@ -93,57 +96,57 @@ STRINGTABLE { IDS_APPNAME "OleView" IDS_APPTITLE "OleView" - IDS_READY "Ãîòîâî" + IDS_READY "Готово" IDS_ABOUT "OleView - OLE/COM Object Viewer" - IDS_ABOUTVER "âåðñèÿ 1.0" + IDS_ABOUTVER "версия 1.0" IDS_TYPELIBTITLE "ITypeLib viewer" - IDS_OPEN "Îòêðûòü" - IDS_OPEN_TYPELIB_FILTER "Ôàéëû TypeLib (*.tlb;*.olb;*.dll;*.ocx;*.exe)\0*.tlb;*.olb;*.dll;*.ocx;*.exe\0All Files (*.*)\0*.*\0\0" + IDS_OPEN "Открыть" + IDS_OPEN_TYPELIB_FILTER "Файлы TypeLib (*.tlb;*.olb;*.dll;*.ocx;*.exe)\0*.tlb;*.olb;*.dll;*.ocx;*.exe\0All Files (*.*)\0*.*\0\0" IDM_BIND, "Bind to file via a File Moniker" IDM_TYPELIB, "Open a TypeLib file and view the contents" IDM_SYSCONF, "Change machine wide Distributed COM settings" - IDM_REGEDIT, "Çàïóñòèòü Ðåäàêòîð ðååñòðà Wine" - IDM_EXIT, "Âûéòè èç ïðèëîæåíèÿ ñ ïðåäëîæåíèåì ñîõðàíèòü èçìåíåíèÿ" + IDM_REGEDIT, "Запустить Редактор реестра Wine" + IDM_EXIT, "Выйти из приложения с предложением сохранить изменения" IDM_CREATEINST, "Create an instance of the selected object" IDM_CREATEINSTON, "Create an instance of the selected object on a specific machine" IDM_RELEASEINST, "Release the currently selected object instance" - IDM_COPYCLSID, "Êîïèðîâàòü GUID âûäåëåííîãî ýëåìåíòà â áóôåð" + IDM_COPYCLSID, "Копировать GUID выделенного элемента в буфер" IDM_VIEW, "Display the viewer for the selected item" - IDM_FLAG_INSERV, "Èñïîëüçîâàòü CLSCTX_INPROC_SERVER ïðè âûçîâå CoGetClassObject" - IDM_FLAG_INHANDL, "Èñïîëüçîâàòü CLSCTX_INPROC_HANDLER ïðè âûçîâå CoGetClassObject" - IDM_FLAG_LOCSERV, "Èñïîëüçîâàòü CLSCTX_LOCAL_SERVER ïðè âûçîâå CoGetClassObject" - IDM_FLAG_REMSERV, "Èñïîëüçîâàòü CLSCTX_REMOTE_SERVER ïðè âûçîâå CoGetClassObject" - IDM_EXPERT, "Ïåðåêëþ÷èòüñÿ ìåæäó ðåæèìîì ýêñïåðò/íîâè÷îê" + IDM_FLAG_INSERV, "Использовать CLSCTX_INPROC_SERVER при вызове CoGetClassObject" + IDM_FLAG_INHANDL, "Использовать CLSCTX_INPROC_HANDLER при вызове CoGetClassObject" + IDM_FLAG_LOCSERV, "Использовать CLSCTX_LOCAL_SERVER при вызове CoGetClassObject" + IDM_FLAG_REMSERV, "Использовать CLSCTX_REMOTE_SERVER при вызове CoGetClassObject" + IDM_EXPERT, "Переключиться между режимом эксперт/новичок" IDM_HIDDEN, "Toggle the display of component categories that are not meant to be visible" - IDM_TOOLBAR, "Ïîêàçàòü/ñêðûòü ïàíåëü èíñòðóìåíòîâ" - IDM_STATUSBAR, "Ïîêàçàòü/ñêðûòü ñòðîêó ñîñòîÿíèÿ" - IDM_REFRESH, "Îáíîâèòü âñå ñïèñêè" - IDM_ABOUT, "Îòîáðàçèòü èíôîðìàöèþ î ïðîãðàììå, íîìåð âåðñèè è êîïèðàéò" + IDM_TOOLBAR, "Показать/скрыть панель инструментов" + IDM_STATUSBAR, "Показать/скрыть строку состояния" + IDM_REFRESH, "Обновить все списки" + IDM_ABOUT, "Отобразить информацию о программе, номер версии и копирайт" - IDM_SAVEAS, "Ñîõðàíèòü êàê .IDL èëè .H ôàéë" - IDM_CLOSE, "Çàêðûòü îêíî" + IDM_SAVEAS, "Сохранить как .IDL или .H файл" + IDM_CLOSE, "Закрыть окно" IDM_GROUP, "Group typeinfos by kind" IDS_TREE_OC, "ObjectClasses" IDS_TREE_GBCC, "Grouped by Component Category" - IDS_TREE_O1O, "Îáúåêòû OLE 1.0" - IDS_TREE_CLO, "Îáúåêòû áèáëèîòåêè COM" - IDS_TREE_AO, "Âñå îáúåêòû" - IDS_TREE_AID, "ID ïðèëîæåíèÿ" + IDS_TREE_O1O, "Объекты OLE 1.0" + IDS_TREE_CLO, "Объекты библиотеки COM" + IDS_TREE_AO, "Все объекты" + IDS_TREE_AID, "ID приложения" IDS_TREE_TL, "Type Libraries" - IDS_TL_VER, "âåð." - IDS_TREE_I, "Èíòåðôåéñû" + IDS_TL_VER, "вер." + IDS_TREE_I, "Интерфейсы" - IDS_TAB_REG, "Ðååñòð" + IDS_TAB_REG, "Реестр" IDS_TAB_IMPL, "Implementation" IDS_TAB_ACTIV, "Activation" IDS_CGCOFAIL, "CoGetClassObject failed." - IDS_ERROR_UNKN, "Íåèçâåñòíàÿ îøèáêà" + IDS_ERROR_UNKN, "Неизвестная ошибка" IDS_TRUE, "True" IDS_FALSE, "False" - IDS_BYTES, "áàéò" + IDS_BYTES, "байт" IDS_ERROR_LOADTYPELIB, "LoadTypeLib( %s ) failed ($%x)" IDS_INHERITINTERFACES, "Inherited Interfaces" @@ -151,26 +154,26 @@ STRINGTABLE DLG_CREATEINSTON DIALOG DISCARDABLE 0, 0, 250, 41 STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU -CAPTION "Ïîäêëþ÷èòüñÿ ê äðóãîìó êîìïüþòåðó" +CAPTION "Подключиться к другому компьютеру" FONT 8, "MS Shell Dlg" { - LTEXT "&Èìÿ êîìïüþòåðà:", -1, 5, 6, 190, 8 + LTEXT "&Имя компьютера:", -1, 5, 6, 190, 8 EDITTEXT IDC_MACHINE, 5, 16, 190, 12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL DEFPUSHBUTTON "&OK", IDOK, 200, 5, 45, 14 - PUSHBUTTON "&Îòìåíà", IDCANCEL, 200, 22, 45, 14 + PUSHBUTTON "&Отмена", IDCANCEL, 200, 22, 45, 14 } DLG_SYSCONF DIALOG DISCARDABLE 0, 0, 170, 100 STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU -CAPTION "Êîíôèãóðàöèÿ ñèñòåìû" +CAPTION "Конфигурация системы" FONT 8, "MS Shell Dlg" { - LTEXT "Íàñòðîéêè ñèñòåìû", -1, 5, 6, 160, 8 - CHECKBOX "&Ðàçðåøèòü ðàñïðåäåëåííûé COM", IDC_ENABLEDCOM, 5, 20, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX - CHECKBOX "Ðàçðåøèòü &óäàëåííûå ïîäêëþ÷åíèÿ (òîëüêî Win95)", IDC_ENABLEREMOTE, 5, 35, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX - LTEXT "Ýòè íàñòðîéêè èçìåíÿþò òîëüêî çíà÷åíèÿ ðååñòðà è íå îêàçûâàþò âëèÿíèÿ íà ïðîèçâîäèòåëüíîñòü Wine.", -1, 5, 50, 160, 40 + LTEXT "Настройки системы", -1, 5, 6, 160, 8 + CHECKBOX "&Разрешить распределенный COM", IDC_ENABLEDCOM, 5, 20, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX + CHECKBOX "Разрешить &удаленные подключения (только Win95)", IDC_ENABLEREMOTE, 5, 35, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX + LTEXT "Эти настройки изменяют только значения реестра и не оказывают влияния на производительность Wine.", -1, 5, 50, 160, 40 DEFPUSHBUTTON "&OK", IDOK, 70, 80, 45, 14 - PUSHBUTTON "&Îòìåíà", IDCANCEL, 120, 80, 45, 14 + PUSHBUTTON "&Отмена", IDCANCEL, 120, 80, 45, 14 } DLG_DEFAULT_IV DIALOG DISCARDABLE 0, 0, 280, 50 @@ -178,11 +181,11 @@ STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU CAPTION "Default Interface Viewer" FONT 8, "MS Shell Dlg" { - LTEXT "Èíòåðôåéñ", -1, 5, 6, 50, 8 + LTEXT "Интерфейс", -1, 5, 6, 50, 8 LTEXT "", IDC_LABEL, 60, 6, 145, 8 LTEXT "IID:", -1, 5, 16, 50, 8 LTEXT "", IDC_IDENTIFIER, 60, 16, 165, 8 - DEFPUSHBUTTON "&Çàêðûòü", IDCANCEL, 230, 6, 45, 14 + DEFPUSHBUTTON "&Закрыть", IDCANCEL, 230, 6, 45, 14 PUSHBUTTON "&View Type Info", IDC_VIEWTYPEINFO, 6, 31, 70, 14, WS_DISABLED } @@ -191,11 +194,11 @@ STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU CAPTION "IPersist Interface Viewer" FONT 8, "MS Shell Dlg" { - LTEXT "Èìÿ êëàññà:", -1, 5, 6, 50, 8 + LTEXT "Имя класса:", -1, 5, 6, 50, 8 LTEXT "", IDC_LABEL, 60, 6, 145, 8 LTEXT "CLSID:", -1, 5, 16, 50, 8 LTEXT "", IDC_IDENTIFIER, 60, 16, 165, 8 - DEFPUSHBUTTON "&Çàêðûòü", IDCANCEL, 230, 6, 45, 14 + DEFPUSHBUTTON "&Закрыть", IDCANCEL, 230, 6, 45, 14 } DLG_IPERSISTSTREAM_IV DIALOG DISCARDABLE 0, 0, 280, 68 @@ -203,11 +206,11 @@ STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU CAPTION "IPersistStream Interface Viewer" FONT 8, "MS Shell Dlg" { - LTEXT "Èìÿ êëàññà:", -1, 5, 6, 50, 8 + LTEXT "Имя класса:", -1, 5, 6, 50, 8 LTEXT "", IDC_LABEL, 60, 6, 145, 8 LTEXT "CLSID:", -1, 5, 16, 50, 8 LTEXT "", IDC_IDENTIFIER, 60, 16, 165, 8 - DEFPUSHBUTTON "&Çàêðûòü", IDCANCEL, 230, 6, 45, 14 + DEFPUSHBUTTON "&Закрыть", IDCANCEL, 230, 6, 45, 14 PUSHBUTTON "&IsDirty", IDC_ISDIRTY_BUTTON, 6, 31, 50, 14 LTEXT "???", IDC_ISDIRTY, 60, 34, 145, 8 PUSHBUTTON "&GetSizeMax", IDC_GETSIZEMAX_BUTTON, 6, 49, 50, 14 diff --git a/programs/progman/Ru.rc b/programs/progman/Ru.rc index 7d6121b44d7..709b02ca48c 100644 --- a/programs/progman/Ru.rc +++ b/programs/progman/Ru.rc @@ -21,45 +21,50 @@ #include "progman.h" +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + /* Menu */ -MAIN_MENU MENU LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +MAIN_MENU MENU { - POPUP "&Ôàéë" { - MENUITEM "&Ñîçäàòü", PM_NEW - MENUITEM "Î&òêðûòü...\tEnter", PM_OPEN - MENUITEM "&Ïåðåìåñòèòü...\tF7", PM_MOVE, GRAYED - MENUITEM "&Êîïèðîâàòü...\tF8", PM_COPY, GRAYED - MENUITEM "&Óäàëèòü\tEntf", PM_DELETE - MENUITEM "&Àòðèáóòû...\tAlt+Enter", PM_ATTRIBUTES + POPUP "&Файл" { + MENUITEM "&Создать", PM_NEW + MENUITEM "О&ткрыть...\tEnter", PM_OPEN + MENUITEM "&Переместить...\tF7", PM_MOVE, GRAYED + MENUITEM "&Копировать...\tF8", PM_COPY, GRAYED + MENUITEM "&Удалить\tEntf", PM_DELETE + MENUITEM "&Атрибуты...\tAlt+Enter", PM_ATTRIBUTES MENUITEM SEPARATOR - MENUITEM "&Çàïóñòèòü...", PM_EXECUTE + MENUITEM "&Запустить...", PM_EXECUTE MENUITEM SEPARATOR - MENUITEM "Âû&õîä èç Wine...", PM_EXIT + MENUITEM "Вы&ход из Wine...", PM_EXIT } - POPUP "&Ïàðàìåòðû" { - MENUITEM "&Àâòîóïîðÿäî÷åíèå", PM_AUTO_ARRANGE - MENUITEM "&Ñâåðíóòü ïðè çàïóñêå", PM_MIN_ON_RUN - MENUITEM "&Ñîõðàíÿòü íàñòðîéêè ïðè âûõîäå", PM_SAVE_SETTINGS + POPUP "&Параметры" { + MENUITEM "&Автоупорядочение", PM_AUTO_ARRANGE + MENUITEM "&Свернуть при запуске", PM_MIN_ON_RUN + MENUITEM "&Сохранять настройки при выходе", PM_SAVE_SETTINGS } - POPUP "&Îêíà" { - MENUITEM "&Êàñêàä\tShift+F5", PM_OVERLAP - MENUITEM "&Ìîçàèêà\tShift+F4", PM_SIDE_BY_SIDE - MENUITEM "&Óïîðÿäî÷èòü ïðè âûõîäå", PM_ARRANGE + POPUP "&Окна" { + MENUITEM "&Каскад\tShift+F5", PM_OVERLAP + MENUITEM "&Мозаика\tShift+F4", PM_SIDE_BY_SIDE + MENUITEM "&Упорядочить при выходе", PM_ARRANGE } -POPUP "&Ñïðàâêà" { - MENUITEM "&Ñîäåðæàíèå", PM_CONTENTS - MENUITEM "&Ïîèñê...", PM_SEARCH +POPUP "&Справка" { + MENUITEM "&Содержание", PM_CONTENTS + MENUITEM "&Поиск...", PM_SEARCH MENUITEM SEPARATOR - MENUITEM "&Èñïîëüçîâàíèå ñïðàâêè", PM_HELPONHELP - MENUITEM "&Ðóêîâîäñòâî", PM_TUTORIAL + MENUITEM "&Использование справки", PM_HELPONHELP + MENUITEM "&Руководство", PM_TUTORIAL MENUITEM SEPARATOR - POPUP "&Ñâåäåíèÿ..." { - MENUITEM "&Ëèöåíçèÿ", PM_LICENSE - MENUITEM "&ÁÅÇ ÃÀÐÀÍÒÈÉ", PM_NO_WARRANTY - MENUITEM "&Î Wine", PM_ABOUT_WINE + POPUP "&Сведения..." { + MENUITEM "&Лицензия", PM_LICENSE + MENUITEM "&БЕЗ ГАРАНТИЙ", PM_NO_WARRANTY + MENUITEM "&О Wine", PM_ABOUT_WINE } } } @@ -67,157 +72,150 @@ POPUP "& /* Dialog `New' */ DIALOG_NEW DIALOG 0, 0, 170, 65 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ñîçäàòü ïðîãðàììíûé îáúåêò" +CAPTION "Создать программный объект" { RADIOBUTTON "", PM_NEW_GROUP, 10, 15, 10, 15 -LTEXT "&Ãðóïïó ïðîãðàìì", -1, 20, 18, 80, 15 +LTEXT "&Группу программ", -1, 20, 18, 80, 15 RADIOBUTTON "", PM_NEW_PROGRAM, 10, 35, 10, 15 -LTEXT "&Ïðîãðàììíûé ýëåìåíò", -1, 20, 38, 80, 15 +LTEXT "&Программный элемент", -1, 20, 38, 80, 15 DEFPUSHBUTTON "OK", IDOK, 105, 5, 60, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 105, 25, 60, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", PM_HELP, 105, 45, 60, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 105, 25, 60, 15, WS_TABSTOP +PUSHBUTTON "&Справка", PM_HELP, 105, 45, 60, 15, WS_TABSTOP } /* Dialog `Move' */ DIALOG_MOVE DIALOG 0, 0, 250, 65 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ïåðåìåñòèòü ïðîãðàììó" +CAPTION "Переместить программу" { -LTEXT "Ïåðåìåñòèòü ïðîãðàììó:", -1, 5, 5, 90, 15 +LTEXT "Переместить программу:", -1, 5, 5, 90, 15 LTEXT "", PM_PROGRAM, 95, 5, 90, 15 -LTEXT "Èç ãðóïïû:", -1, 5, 13, 90, 15 +LTEXT "Из группы:", -1, 5, 13, 90, 15 LTEXT "", PM_FROM_GROUP, 95, 13, 90, 15 -LTEXT "& ãðóïïó:", PM_TO_GROUP_TXT, 5, 28, 140, 15 +LTEXT "&В группу:", PM_TO_GROUP_TXT, 5, 28, 140, 15 COMBOBOX PM_TO_GROUP, 5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST DEFPUSHBUTTON "OK", IDOK, 185, 5, 60, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 185, 25, 60, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", PM_HELP, 185, 45, 60, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 185, 25, 60, 15, WS_TABSTOP +PUSHBUTTON "&Справка", PM_HELP, 185, 45, 60, 15, WS_TABSTOP } /* Dialog `Copy' */ DIALOG_COPY DIALOG 0, 0, 250, 65 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Êîïèðîâàòü ïðîãðàììó" +CAPTION "Копировать программу" { -LTEXT "Êîïèðîâàòü ïðîãðàììó:", -1, 5, 5, 90, 15 +LTEXT "Копировать программу:", -1, 5, 5, 90, 15 LTEXT "", PM_PROGRAM, 95, 5, 90, 15 -LTEXT "Èç ãðóïïû:", -1, 5, 13, 90, 15 +LTEXT "Из группы:", -1, 5, 13, 90, 15 LTEXT "", PM_FROM_GROUP, 95, 13, 90, 15 -LTEXT "& ãðóïïó:", PM_TO_GROUP_TXT, 5, 28, 140, 15 +LTEXT "&В группу:", PM_TO_GROUP_TXT, 5, 28, 140, 15 COMBOBOX PM_TO_GROUP, 5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST DEFPUSHBUTTON "OK", IDOK, 185, 5, 60, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 185, 25, 60, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", PM_HELP, 185, 45, 60, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 185, 25, 60, 15, WS_TABSTOP +PUSHBUTTON "&Справка", PM_HELP, 185, 45, 60, 15, WS_TABSTOP } /* Dialog `Group attributes' */ DIALOG_GROUP DIALOG 0, 0, 230, 65 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Àòðèáóòû ïðîãðàììíîé ãðóïïû" +CAPTION "Атрибуты программной группы" { -LTEXT "&Îïèñàíèå:", PM_DESCRIPTION_TXT, 05, 18, 50, 10 +LTEXT "&Описание:", PM_DESCRIPTION_TXT, 05, 18, 50, 10 EDITTEXT PM_DESCRIPTION, 60, 18, 90, 15, WS_TABSTOP -LTEXT "&Ôàéë ãðóïïû:", PM_FILE_TXT, 05, 38, 50, 10 +LTEXT "&Файл группы:", PM_FILE_TXT, 05, 38, 50, 10 EDITTEXT PM_FILE, 60, 38, 90, 15, WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 155, 5, 60, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 155, 25, 60, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", PM_HELP, 155, 45, 60, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 155, 25, 60, 15, WS_TABSTOP +PUSHBUTTON "&Справка", PM_HELP, 155, 45, 60, 15, WS_TABSTOP } /* Dialog `Program attributes' */ DIALOG_PROGRAM DIALOG 0, 0, 250, 105 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Àòðèáóòû ïðîãðàììû" +CAPTION "Атрибуты программы" { -LTEXT "&Îïèñàíèå:", PM_DESCRIPTION_TXT, 05, 10, 60, 10 +LTEXT "&Описание:", PM_DESCRIPTION_TXT, 05, 10, 60, 10 EDITTEXT PM_DESCRIPTION, 80, 10, 90, 15, WS_TABSTOP -LTEXT "&Êîìàíäíàÿ ñòðîêà:", PM_COMMAND_LINE_TXT, 05, 25, 60, 10 +LTEXT "&Командная строка:", PM_COMMAND_LINE_TXT, 05, 25, 60, 10 EDITTEXT PM_COMMAND_LINE, 80, 25, 90, 15, WS_TABSTOP -LTEXT "&Ðàáî÷àÿ ïàïêà:", PM_DIRECTORY_TXT, 05, 40, 60, 10 +LTEXT "&Рабочая папка:", PM_DIRECTORY_TXT, 05, 40, 60, 10 EDITTEXT PM_DIRECTORY, 80, 40, 90, 15, WS_TABSTOP -LTEXT "&Êîìáèíàöèÿ êëàâèø:", PM_HOT_KEY_TXT, 05, 55, 60, 10 +LTEXT "&Комбинация клавиш:", PM_HOT_KEY_TXT, 05, 55, 60, 10 EDITTEXT PM_HOT_KEY, 80, 55, 90, 15, WS_TABSTOP ICON "", PM_ICON, 20, 70 CHECKBOX "", PM_SYMBOL, 80, 75, 10, 10, WS_TABSTOP -LTEXT " âèäå &çíà÷êà", -1, 95, 75, 75, 10 +LTEXT "В виде &значка", -1, 95, 75, 75, 10 DEFPUSHBUTTON "OK", IDOK, 185, 5, 60, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 185, 25, 60, 15, WS_TABSTOP -PUSHBUTTON "&Îáçîð...", PM_BROWSE, 185, 45, 60, 15, WS_TABSTOP -PUSHBUTTON "&Äðóãîé çíà÷îê...", PM_OTHER_SYMBOL, 185, 65, 60, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", PM_HELP, 185, 85, 60, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 185, 25, 60, 15, WS_TABSTOP +PUSHBUTTON "&Обзор...", PM_BROWSE, 185, 45, 60, 15, WS_TABSTOP +PUSHBUTTON "&Другой значок...", PM_OTHER_SYMBOL, 185, 65, 60, 15, WS_TABSTOP +PUSHBUTTON "&Справка", PM_HELP, 185, 85, 60, 15, WS_TABSTOP } /* Dialog `Symbol' */ DIALOG_SYMBOL DIALOG 0, 0, 200, 85 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Âûáðàòü çíà÷îê" +CAPTION "Выбрать значок" { -LTEXT "&Èìÿ ôàéëà:", PM_ICON_FILE_TXT, 5, 15, 40, 10 +LTEXT "&Имя файла:", PM_ICON_FILE_TXT, 5, 15, 40, 10 EDITTEXT PM_ICON_FILE, 45, 15, 85, 15, WS_TABSTOP -LTEXT "&Òåêóùèé çíà÷îê:", PM_SYMBOL_LIST_TXT, 5, 30, 125, 10 +LTEXT "&Текущий значок:", PM_SYMBOL_LIST_TXT, 5, 30, 125, 10 COMBOBOX PM_SYMBOL_LIST, 5, 40, 125, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_OWNERDRAWFIXED | WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 135, 5, 60, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 135, 25, 60, 15, WS_TABSTOP -PUSHBUTTON "&Îáçîð...", PM_BROWSE, 135, 45, 60, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", PM_HELP, 135, 65, 60, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 135, 25, 60, 15, WS_TABSTOP +PUSHBUTTON "&Обзор...", PM_BROWSE, 135, 45, 60, 15, WS_TABSTOP +PUSHBUTTON "&Справка", PM_HELP, 135, 65, 60, 15, WS_TABSTOP } /* Dialog `Execute' */ DIALOG_EXECUTE DIALOG 0, 0, 200, 85 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Çàïóñòèòü ïðîãðàììó" +CAPTION "Запустить программу" { -LTEXT "&Êîìàíäíàÿ ñòðîêà:", -1, 05, 15, 120, 10 +LTEXT "&Командная строка:", -1, 05, 15, 120, 10 EDITTEXT PM_COMMAND, 05, 25, 120, 15, WS_TABSTOP CHECKBOX "", PM_SYMBOL, 05, 45, 10, 10, WS_TABSTOP -LTEXT " âèäå &çíà÷êà", -1, 20, 45, 120, 10 +LTEXT "В виде &значка", -1, 20, 45, 120, 10 DEFPUSHBUTTON "OK", IDOK, 135, 5, 60, 15, WS_TABSTOP -PUSHBUTTON "Îòìåíà", IDCANCEL, 135, 25, 60, 15, WS_TABSTOP -PUSHBUTTON "&Îáçîð...", PM_BROWSE, 135, 45, 60, 15, WS_TABSTOP -PUSHBUTTON "&Ñïðàâêà", PM_HELP, 135, 65, 60, 15, WS_TABSTOP +PUSHBUTTON "Отмена", IDCANCEL, 135, 25, 60, 15, WS_TABSTOP +PUSHBUTTON "&Обзор...", PM_BROWSE, 135, 45, 60, 15, WS_TABSTOP +PUSHBUTTON "&Справка", PM_HELP, 135, 65, 60, 15, WS_TABSTOP } /* Strings */ -STRINGTABLE DISCARDABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +STRINGTABLE DISCARDABLE { -IDS_PROGRAM_MANAGER, "Äèñïåò÷åð ïðîãðàìì" -IDS_ERROR, "ÎØÈÁÊÀ" -IDS_WARNING, "ÂÍÈÌÀÍÈÅ" -IDS_INFO, "Ñâåäåíèÿ" -IDS_DELETE, "Óäàëèòü" -IDS_DELETE_GROUP_s, "Óäàëèòü ãðóïïó `%s' ?" -IDS_DELETE_PROGRAM_s, "Óäàëèòü ïðîãðàììó `%s' ?" -IDS_NOT_IMPLEMENTED, "Åù¸ íå ðåàëèçîâàíî" -IDS_FILE_READ_ERROR_s, "Îøèáêà ÷òåíèÿ `%s'." -IDS_FILE_WRITE_ERROR_s, "Îøèáêà çàïèñè `%s'." +IDS_PROGRAM_MANAGER, "Диспетчер программ" +IDS_ERROR, "ОШИБКА" +IDS_WARNING, "ВНИМАНИЕ" +IDS_INFO, "Сведения" +IDS_DELETE, "Удалить" +IDS_DELETE_GROUP_s, "Удалить группу `%s' ?" +IDS_DELETE_PROGRAM_s, "Удалить программу `%s' ?" +IDS_NOT_IMPLEMENTED, "Ещё не реализовано" +IDS_FILE_READ_ERROR_s, "Ошибка чтения `%s'." +IDS_FILE_WRITE_ERROR_s, "Ошибка записи `%s'." IDS_GRPFILE_READ_ERROR_s, "\ -Ôàéë ãðóïïû `%s' íå ìîæåò áûòü îòêðûò.\n\ -Íàäî ëè â ñëåäóþùèé ðàç ïûòàòüñÿ ýòî ñäåëàòü?" -IDS_OUT_OF_MEMORY, "Ìàëî ïàìÿòè." -IDS_WINHELP_ERROR, "Ñïðàâêà íå äîñòóïíà." -IDS_UNKNOWN_FEATURE_s, "Íåèçâåñòíîå ñâîéñòâî â %s" -IDS_FILE_NOT_OVERWRITTEN_s, "Ôàéë `%s' ñóùåñòâóåò. Îí íå áûë ïåðåçàïèñàí." -IDS_SAVE_GROUP_AS_s, "Ãðóïïà ñîõðàíÿåòñÿ ïîä èìåíåì `%s' âî èçáåæàíèå ïåðåçàïèñè îðèãèíàëà." -IDS_NO_HOT_KEY, "Íåò" -IDS_ALL_FILES, "Âñå ôàéëû (*.*)" -IDS_PROGRAMS, "Ïðîãðàììû" -IDS_LIBRARIES_DLL, "Áèáëèîòåêè (*.dll)" -IDS_SYMBOL_FILES, "Ôàéëû çíà÷êîâ" -IDS_SYMBOLS_ICO, "Çíà÷êè (*.ico)" +Файл группы `%s' не может быть открыт.\n\ +Надо ли в следующий раз пытаться это сделать?" +IDS_OUT_OF_MEMORY, "Мало памяти." +IDS_WINHELP_ERROR, "Справка не доступна." +IDS_UNKNOWN_FEATURE_s, "Неизвестное свойство в %s" +IDS_FILE_NOT_OVERWRITTEN_s, "Файл `%s' существует. Он не был перезаписан." +IDS_SAVE_GROUP_AS_s, "Группа сохраняется под именем `%s' во избежание перезаписи оригинала." +IDS_NO_HOT_KEY, "Нет" +IDS_ALL_FILES, "Все файлы (*.*)" +IDS_PROGRAMS, "Программы" +IDS_LIBRARIES_DLL, "Библиотеки (*.dll)" +IDS_SYMBOL_FILES, "Файлы значков" +IDS_SYMBOLS_ICO, "Значки (*.ico)" } diff --git a/programs/reg/Ru.rc b/programs/reg/Ru.rc index 8e07c4c296e..cac53a3ce43 100644 --- a/programs/reg/Ru.rc +++ b/programs/reg/Ru.rc @@ -20,12 +20,15 @@ #include "reg.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, 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_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" } diff --git a/programs/regedit/Lt.rc b/programs/regedit/Lt.rc index 79a577de137..a2dffef60f0 100644 --- a/programs/regedit/Lt.rc +++ b/programs/regedit/Lt.rc @@ -291,16 +291,16 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_ERROR "Klaida" - IDS_BAD_KEY "Nepavyko perskaityti rakto '%s'" - IDS_BAD_VALUE "Nepavyko perskaityti reikšmės '%s'" + IDS_BAD_KEY "Nepavyko perskaityti rakto „%s“" + IDS_BAD_VALUE "Nepavyko perskaityti reikšmės „%s“" IDS_UNSUPPORTED_TYPE "Šio tipo raktų redaguoti negalima (%u)" IDS_TOO_BIG_VALUE "Reikšmė per didelė (%u)" IDS_DELETE_BOX_TITLE "Reikšmės šalinimo patvirtinimas" - IDS_DELETE_BOX_TEXT "Ar tikrai norite pašalinti reikšmę '%s'?" + IDS_DELETE_BOX_TEXT "Ar tikrai norite pašalinti reikšmę „%s“?" IDS_DELETE_BOX_TEXT_MULTIPLE "Ar tikrai norite pašalinti šias reikšmes?" IDS_NEWKEY "Naujas raktas #%d" IDS_NEWVALUE "Nauja reikšmė #%d" - IDS_NOTFOUND "Ieškoma eilutė '%s' nerasta" + IDS_NOTFOUND "Ieškoma eilutė „%s“ nerasta" END STRINGTABLE DISCARDABLE @@ -313,7 +313,7 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_REGISTRY_ROOT_NAME "Kompiuteris" - IDS_REGISTRY_DEFAULT_VALUE "(Numatytoji)" + IDS_REGISTRY_DEFAULT_VALUE "(numatytoji)" IDS_REGISTRY_VALUE_NOT_SET "(reikšmė nenustatyta)" IDS_REGISTRY_VALUE_CANT_DISPLAY "(negalima parodyti reikšmės)" IDS_REGISTRY_UNKNOWN_TYPE "(nežinomas %d)" diff --git a/programs/regedit/Ru.rc b/programs/regedit/Ru.rc dissimilarity index 63% index 257b9254070..2692c991c1a 100644 --- a/programs/regedit/Ru.rc +++ b/programs/regedit/Ru.rc @@ -1,330 +1,333 @@ -/* - * Regedit (Russian resources) - * - * Copyright 2003 Igor Stepin - * - * 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_RUSSIAN, SUBLANG_DEFAULT - -/* - * Menu - */ - -IDR_REGEDIT_MENU MENU DISCARDABLE -BEGIN - POPUP "&Ðååñòð" - BEGIN - MENUITEM "&Èìïîðòèðîâàòü ôàéë ðååñòðà...", ID_REGISTRY_IMPORTREGISTRYFILE - MENUITEM "&Ýêñïîðòèðîâàòü ôàéë ðååñòðà...", ID_REGISTRY_EXPORTREGISTRYFILE - MENUITEM SEPARATOR - MENUITEM "&Ïîäêëþ÷èòü ñåòåâîé ðååñòð...", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED - MENUITEM "&Îòêëþ÷èòü ñåòåâîé ðååñòð...", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED - MENUITEM SEPARATOR - MENUITEM "&Íàïå÷àòàòü\tCtrl+P", ID_REGISTRY_PRINT, GRAYED - MENUITEM SEPARATOR - MENUITEM "Â&ûéòè", ID_REGISTRY_EXIT - END - POPUP "&Ïðàâêà" - BEGIN - MENUITEM "&Èçìåíèòü", ID_EDIT_MODIFY - MENUITEM SEPARATOR - POPUP "Ñîçä&àòü" - BEGIN - MENUITEM "Êë&þ÷", ID_EDIT_NEW_KEY - MENUITEM SEPARATOR - MENUITEM "&Ñòðîêîâîå çíà÷åíèå", ID_EDIT_NEW_STRINGVALUE - MENUITEM "&Áèíàðíîå çíà÷åíèå", ID_EDIT_NEW_BINARYVALUE - MENUITEM "&DWORD çíà÷åíèå", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Ìíîãîñòðîêîâîå çíà÷åíèå", ID_EDIT_NEW_MULTI_STRINGVALUE - END - MENUITEM SEPARATOR - MENUITEM "&Óäàëèòü\tDel", ID_EDIT_DELETE - MENUITEM "&Ïåðåèìåíîâàòü\tF2", ID_EDIT_RENAME - MENUITEM SEPARATOR - MENUITEM "Ñ&êîïèðîâàòü èìÿ êëþ÷à", ID_EDIT_COPYKEYNAME - MENUITEM SEPARATOR - MENUITEM "&Íàéòè\tCtrl+F", ID_EDIT_FIND, GRAYED - MENUITEM "Íàéòè &äàëåå\tF3", ID_EDIT_FINDNEXT, GRAYED - END - POPUP "&Âèä" - BEGIN - MENUITEM "Ñòðîêà &ñîñòîÿíèÿ", ID_VIEW_STATUSBAR - MENUITEM SEPARATOR - MENUITEM "&Ðàçäåëèòü", ID_VIEW_SPLIT - MENUITEM SEPARATOR - MENUITEM "&Îáíîâèòü\tF5", ID_VIEW_REFRESH - END - POPUP "&Èçáðàííîå" - BEGIN - MENUITEM "&Äîáàâèòü â èçáðàííîå...", ID_FAVORITES_ADDTOFAVORITES - MENUITEM "&Óäàëèòü èç èçáðàííîãî...", ID_FAVORITES_REMOVEFAVORITE - END - POPUP "&Ñïðàâêà" - BEGIN - MENUITEM "&Ñîäåðæàíèå", ID_HELP_HELPTOPICS - MENUITEM SEPARATOR - MENUITEM "&Î ðåäàêòîðå ðååñòðà", ID_HELP_ABOUT - END -END - -IDR_POPUP_MENUS MENU DISCARDABLE -BEGIN - POPUP "" - BEGIN - MENUITEM "&Èçìåíèòü", ID_EDIT_MODIFY - MENUITEM "Èçìåíèòü &áèíàðíîå çíà÷åíèå", ID_EDIT_MODIFY_BIN - MENUITEM SEPARATOR - MENUITEM "&Óäàëèòü\tDel", ID_EDIT_DELETE - MENUITEM "&Ïåðåèìåíîâàòü", ID_EDIT_RENAME - END - POPUP "" - BEGIN - POPUP "Ñîçä&àòü" - BEGIN - MENUITEM "Êë&þ÷", ID_EDIT_NEW_KEY - MENUITEM SEPARATOR - MENUITEM "&Ñòðîêîâîå çíà÷åíèå", ID_EDIT_NEW_STRINGVALUE - MENUITEM "&Áèíàðíîå çíà÷åíèå", ID_EDIT_NEW_BINARYVALUE - MENUITEM "&DWORD çíà÷åíèå", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Ìíîãîñòðîêîâîå çíà÷åíèå", ID_EDIT_NEW_MULTI_STRINGVALUE - END - MENUITEM SEPARATOR - MENUITEM "&Óäàëèòü\tDel", ID_EDIT_DELETE - MENUITEM "&Ïåðåèìåíîâàòü\tF2", ID_EDIT_RENAME - MENUITEM SEPARATOR - MENUITEM "&Ýêñïîðòèðîâàòü...", ID_EDIT_EXPORT - MENUITEM "Ñ&êîïèðîâàòü èìÿ êëþ÷à", ID_EDIT_COPYKEYNAME - MENUITEM SEPARATOR - MENUITEM "&Íàéòè\tCtrl+F", ID_EDIT_FIND, GRAYED - END -END - - -/* - * Dialog - */ - -IDD_EXPORT_TEMPLATE DIALOG DISCARDABLE 50, 50, 278, 54 -STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | - WS_BORDER -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Ýêñïîðò ðååñòðà", IDC_EXPORT_BASE, 6, 6, 266, 42, WS_GROUP - AUTORADIOBUTTON "&Âåñü ðååñòð", IDC_EXPORT_ALL, 12, 15, 244, 12 - AUTORADIOBUTTON "Â&ûáðàííóþ âåòêó:", IDC_EXPORT_SELECTED, 12, 30, 80, 12 - EDITTEXT IDC_EXPORT_PATH, 92, 30, 174, 12 -END - -IDD_FIND DIALOG DISCARDABLE 22, 17, 210, 85 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Ïîèñê" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Íàéòè:",IDC_STATIC,5,7,119,8 - EDITTEXT IDC_VALUE_NAME,40,5,120,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Èñêàòü â:",IDC_STATIC,5, 22, 119, 8 - CHECKBOX "Êëþ÷àõ", IDC_FIND_KEYS, 5, 34, 90, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX - CHECKBOX "Íàçâàíèÿõ çíà÷åíèé", IDC_FIND_VALUES, 5, 46, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX - CHECKBOX "Ñîäåðæèìîì", IDC_FIND_CONTENT, 5, 58, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX - CHECKBOX "Âñþ ñòðîêó öåëèêîì", IDC_FIND_WHOLE, 5, 70, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX - DEFPUSHBUTTON "Èñêàòü",IDOK,170,5,35,11,WS_GROUP - PUSHBUTTON "Çàêðûòü",IDCANCEL,170,22,35,11, WS_GROUP -END - -IDD_ADDFAVORITE DIALOG DISCARDABLE 22, 17, 210, 55 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Äîáàâèòü èçáðàííîå" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Èìÿ:",IDC_STATIC,5,5,119,8 - EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL - DEFPUSHBUTTON "OK",IDOK,130,40,30,11,WS_GROUP - PUSHBUTTON "Îòìåíèòü",IDCANCEL,165,40,40,11, WS_GROUP -END - -IDD_DELFAVORITE DIALOG DISCARDABLE 22, 17, 210, 90 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Óäàëèòü èçáðàííîå" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Èìÿ:",IDC_STATIC,5,5,119,8 - LISTBOX IDC_NAME_LIST,5,15,200,52, WS_BORDER | WS_TABSTOP | LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL - DEFPUSHBUTTON "OK",IDOK,130,73,30,11,WS_GROUP - PUSHBUTTON "Îòìåíèòü",IDCANCEL,165,73,40,11, WS_GROUP -END - -IDD_EDIT_STRING DIALOG DISCARDABLE 22, 17, 210, 75 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Èçìåíèòü ñòðîêó" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Íàçâàíèå çíà÷åíèÿ:",IDC_STATIC,5,5,119,8 - EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED - LTEXT "Äàííûå:",IDC_STATIC,5,30,119,8 - EDITTEXT IDC_VALUE_DATA,5,40,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL - DEFPUSHBUTTON "OK",IDOK,130,60,30,11,WS_GROUP - PUSHBUTTON "Îòìåíèòü",IDCANCEL,165,60,40,11,WS_GROUP -END - -IDD_EDIT_DWORD DIALOG DISCARDABLE 22, 17, 210, 100 -STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU -CAPTION "Èçìåíèòü DWORD" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Íàçâàíèå çíà÷åíèÿ:",IDC_STATIC,5,5,119,8 - EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED - LTEXT "Äàííûå:",IDC_STATIC,5,30,90,8 - EDITTEXT IDC_VALUE_DATA,5,40,90,12, WS_BORDER | WS_TABSTOP - GROUPBOX "Èñ÷èñëåíèå", IDC_DWORD_BASE, 120, 30, 85, 37, BS_GROUPBOX - AUTORADIOBUTTON "16-òè ðè÷íîå", IDC_DWORD_HEX, 130, 40, 60, 10, WS_TABSTOP - AUTORADIOBUTTON "Äåñÿòè÷íîå", IDC_DWORD_DEC, 130, 52, 60, 10, WS_TABSTOP - DEFPUSHBUTTON "OK",IDOK,130,80,30,11,WS_GROUP - PUSHBUTTON "Îòìåíèòü",IDCANCEL,165,80,40,11,WS_GROUP -END - -IDD_EDIT_BINARY DIALOG DISCARDABLE 22, 17, 210, 100 -STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU -CAPTION "Èçìåíèòü áèíàðíûå äàííûå" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Íàçâàíèå çíà÷åíèÿ:",IDC_STATIC,5,5,119,8 - EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED - LTEXT "Äàííûå:",IDC_STATIC,5,30,90,8 - CONTROL "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,4,40,160,40 - DEFPUSHBUTTON "OK",IDOK,130,80,30,11,WS_GROUP - PUSHBUTTON "Îòìåíèòü",IDCANCEL,165,80,40,11,WS_GROUP -END - -IDD_EDIT_MULTI_STRING DIALOG DISCARDABLE 22, 17, 210, 175 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Èçìåíèòü ìíîãîñòðîêîâûå äàííûå" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Íàçâàíèå çíà÷åíèÿ:",IDC_STATIC,5,5,119,8 - EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED - LTEXT "Äàííûå:",IDC_STATIC,5,30,119,8 - EDITTEXT IDC_VALUE_DATA,5,40,200,112, WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN - DEFPUSHBUTTON "OK",IDOK,130,160,30,11,WS_GROUP - PUSHBUTTON "Îòìåíèòü",IDCANCEL,165,160,40,11,WS_GROUP -END - -/* - * String Table - */ - -STRINGTABLE DISCARDABLE -BEGIN - IDS_LIST_COLUMN_NAME "Èìÿ" - IDS_LIST_COLUMN_TYPE "Òèï" - IDS_LIST_COLUMN_DATA "Äàííûå" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_APP_TITLE "Ðåäàêòîð ðååñòðà" -END - -STRINGTABLE DISCARDABLE -BEGIN - ID_REGISTRY_MENU "Ñîäåðæèò êîìàíäû äëÿ ðàáîòû ñ ðååñòðîì â öåëîì" - ID_EDIT_MENU "Ñîäåðæèò êîìàíäû äëÿ ðåäàêòèðîâàíèÿ çíà÷åíèé èëè êëþ÷åé" - ID_VIEW_MENU "Ñîäåðæèò êîìàíäû äëÿ íàñòðîéêè îêíà ðååñòðà" - ID_FAVORITES_MENU "Ñîäåðæèò êîìàíäû äëÿ äîñòóïà ê ÷àñòî èñïîëüçóåìûì êëþ÷àì" - ID_HELP_MENU "Ñîäåðæèò êîìàíäû äëÿ îòîáðàæåíèÿ ñïðàâêè è èíôîðìàöèè î ðåäàêòîðå ðååñòðà" - ID_EDIT_NEW_MENU "Ñîäåðæèò êîìàíäû äëÿ ñîçäàíèÿ íîâûõ êëþ÷åé èëè çíà÷åíèé" -END - -STRINGTABLE DISCARDABLE -BEGIN - ID_EDIT_MODIFY "Èçìåíÿåò çíà÷åíèå ïàðàìåòðà" - ID_EDIT_NEW_KEY "Äîáàâëÿåò íîâûé êëþ÷" - ID_EDIT_NEW_STRINGVALUE "Äîáàâëÿåò íîâîå ñòðîêîâîå çíà÷åíèå" - ID_EDIT_NEW_BINARYVALUE "Äîáàâëÿåò íîâîå áèíàðíîå çíà÷åíèå" - ID_EDIT_NEW_DWORDVALUE "Äîáàâëÿåò íîâîå DWORD-çíà÷åíèå" - ID_EDIT_NEW_MULTI_STRINGVALUE "Äîáàâëÿåò íîâîå ìíîãîñòðîêîâîå çíà÷åíèå" - ID_REGISTRY_IMPORTREGISTRYFILE "Èìïîðòèðóåò òåêñòîâîé ôàéë â ðååñòð" - ID_REGISTRY_EXPORTREGISTRYFILE - "Ýêñïîðòèðóåò âåñü ðååñòð èëè åãî ÷àñòü â òåêñòîâîé ôàéë" - ID_REGISTRY_CONNECTNETWORKREGISTRY - "Ïîäêëþ÷àåòñÿ ê ðååñòðó óäàë¸ííîãî êîìïüþòåðà" - ID_REGISTRY_DISCONNECTNETWORKREGISTRY - "Îòêëþ÷àåòñÿ îò ðååñòðà óäàë¸ííîãî êîìïüþòåðà" - ID_REGISTRY_PRINT "Ïå÷àòàåò âåñü ðååñòð èëè åãî ÷àñòü" -/* ID_HELP_HELPTOPICS "Opens registry editor help" */ - ID_HELP_ABOUT "Îòîáðàæàåò èíôîðìàöèþ î ïðîãðàììå, íîìåð âåðñèè è ñïèñîê àâòîðîâ" -END - -STRINGTABLE DISCARDABLE -BEGIN - ID_REGISTRY_EXIT "Âûõîä èç ðåäàêòîðà ðååñòðà" - ID_FAVORITES_ADDTOFAVORITES "Äîáàâèòü êëþ÷ â èçáðàííîå" - ID_FAVORITES_REMOVEFAVORITE "Óäàëèòü êëþ÷ èç èçáðàííîãî" - ID_VIEW_STATUSBAR "Ïîêàçàòü èëè ñêðûòü ñòðîêó ñîñòîÿíèÿ" - ID_VIEW_SPLIT "Èçìåíèòü ïîçèöèþ ðàçäåëèòåëÿ ìåæäó äâóìÿ ïàíåëÿìè" - ID_VIEW_REFRESH "Îáíîâëÿåò îêíî" - ID_EDIT_DELETE "Óäàëÿåò âûäåëåíèå" - ID_EDIT_RENAME "Ïåðåèìåíîâûâàåò âûäåëåíèå" - ID_EDIT_COPYKEYNAME "Êîïèðóåò èìÿ âûäåëåííîãî êëþ÷à â áóôåð îáìåíà" - ID_EDIT_FIND "Èùåò òåêñòîâóþ ñòðîêó â êëþ÷å, çíà÷åíèè èëè äàííûõ" - ID_EDIT_FINDNEXT "Èùåò ñëåäóþùåå ñîâïàäåíèå òåêñòà, çàäàííîãî â ïðåäûäóùåì ïîèñêå" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_ERROR "Îøèáêà" - IDS_BAD_KEY "Íåâîçìîæíî çàïðîñèòü êëþ÷ '%s'" - IDS_BAD_VALUE "Íåâîçìîæíî çàïðîñèòü çíà÷åíèå '%s'" - IDS_UNSUPPORTED_TYPE "Ðåäàêòèðîâàíèå êëþ÷åé òèïà (%u) íå ïîääåðæèâàåòñÿ" - IDS_TOO_BIG_VALUE "Çíà÷åíèå ñëèøêîì âåëèêî (%u)" - IDS_DELETE_BOX_TITLE "Ïîäòâåðæäåíèå" - IDS_DELETE_BOX_TEXT "Óäàëèòü çíà÷åíèå '%s'?" - IDS_DELETE_BOX_TEXT_MULTIPLE "Are you sure you want to delete these values?" - IDS_NEWKEY "Íîâûé êëþ÷ #%d" - IDS_NEWVALUE "Íîâîå çíà÷åíè #%d" - IDS_NOTFOUND "Èñêîìàÿ ñòðîêà '%s' íå íàéäåíà" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_FILEDIALOG_IMPORT_TITLE "Èìïîðò ôàéëà ðååñòðà" - IDS_FILEDIALOG_EXPORT_TITLE "Ýêñïîðò ôàéëà ðååñòðà" - IDS_FILEDIALOG_FILTER "Âñå ôàéëû ðååñòðà\0*.reg\0Ôàéëû ðååñòðà äëÿ Win9x/NT4 (REGEDIT4)\0*.reg\0Âñå ôàéëû (*.*)\0*.*\0\0" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_REGISTRY_ROOT_NAME "Ìîé Êîìïüþòåð" - IDS_REGISTRY_DEFAULT_VALUE "(Ïî óìîë÷àíèþ)" - IDS_REGISTRY_VALUE_NOT_SET "(çíà÷åíèå íå çàäàíî)" - IDS_REGISTRY_VALUE_CANT_DISPLAY "(íåâîçìîæíî îòîáðàçèòü)" - IDS_REGISTRY_UNKNOWN_TYPE "(íåèçâåñòíî %d)" -END - -/*****************************************************************/ - -/* - * TEXTINCLUDE - */ - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resource.h\0" -END - -/*****************************************************************/ +/* + * Regedit (Russian resources) + * + * Copyright 2003 Igor Stepin + * + * 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" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +/* + * Menu + */ + +IDR_REGEDIT_MENU MENU DISCARDABLE +BEGIN + POPUP "&Реестр" + BEGIN + MENUITEM "&Импортировать файл реестра...", ID_REGISTRY_IMPORTREGISTRYFILE + MENUITEM "&Экспортировать файл реестра...", ID_REGISTRY_EXPORTREGISTRYFILE + MENUITEM SEPARATOR + MENUITEM "&Подключить сетевой реестр...", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED + MENUITEM "&Отключить сетевой реестр...", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Напечатать\tCtrl+P", ID_REGISTRY_PRINT, GRAYED + MENUITEM SEPARATOR + MENUITEM "В&ыйти", ID_REGISTRY_EXIT + END + POPUP "&Правка" + BEGIN + MENUITEM "&Изменить", ID_EDIT_MODIFY + MENUITEM SEPARATOR + POPUP "Созд&ать" + BEGIN + MENUITEM "Кл&юч", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Строковое значение", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Бинарное значение", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD значение", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Многостроковое значение", ID_EDIT_NEW_MULTI_STRINGVALUE + END + MENUITEM SEPARATOR + MENUITEM "&Удалить\tDel", ID_EDIT_DELETE + MENUITEM "&Переименовать\tF2", ID_EDIT_RENAME + MENUITEM SEPARATOR + MENUITEM "С&копировать имя ключа", ID_EDIT_COPYKEYNAME + MENUITEM SEPARATOR + MENUITEM "&Найти\tCtrl+F", ID_EDIT_FIND, GRAYED + MENUITEM "Найти &далее\tF3", ID_EDIT_FINDNEXT, GRAYED + END + POPUP "&Вид" + BEGIN + MENUITEM "Строка &состояния", ID_VIEW_STATUSBAR + MENUITEM SEPARATOR + MENUITEM "&Разделить", ID_VIEW_SPLIT + MENUITEM SEPARATOR + MENUITEM "&Обновить\tF5", ID_VIEW_REFRESH + END + POPUP "&Избранное" + BEGIN + MENUITEM "&Добавить в избранное...", ID_FAVORITES_ADDTOFAVORITES + MENUITEM "&Удалить из избранного...", ID_FAVORITES_REMOVEFAVORITE + END + POPUP "&Справка" + BEGIN + MENUITEM "&Содержание", ID_HELP_HELPTOPICS + MENUITEM SEPARATOR + MENUITEM "&О редакторе реестра", ID_HELP_ABOUT + END +END + +IDR_POPUP_MENUS MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Изменить", ID_EDIT_MODIFY + MENUITEM "Изменить &бинарное значение", ID_EDIT_MODIFY_BIN + MENUITEM SEPARATOR + MENUITEM "&Удалить\tDel", ID_EDIT_DELETE + MENUITEM "&Переименовать", ID_EDIT_RENAME + END + POPUP "" + BEGIN + POPUP "Созд&ать" + BEGIN + MENUITEM "Кл&юч", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Строковое значение", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Бинарное значение", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD значение", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Многостроковое значение", ID_EDIT_NEW_MULTI_STRINGVALUE + END + MENUITEM SEPARATOR + MENUITEM "&Удалить\tDel", ID_EDIT_DELETE + MENUITEM "&Переименовать\tF2", ID_EDIT_RENAME + MENUITEM SEPARATOR + MENUITEM "&Экспортировать...", ID_EDIT_EXPORT + MENUITEM "С&копировать имя ключа", ID_EDIT_COPYKEYNAME + MENUITEM SEPARATOR + MENUITEM "&Найти\tCtrl+F", ID_EDIT_FIND, GRAYED + END +END + + +/* + * Dialog + */ + +IDD_EXPORT_TEMPLATE DIALOG DISCARDABLE 50, 50, 278, 54 +STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | + WS_BORDER +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Экспорт реестра", IDC_EXPORT_BASE, 6, 6, 266, 42, WS_GROUP + AUTORADIOBUTTON "&Весь реестр", IDC_EXPORT_ALL, 12, 15, 244, 12 + AUTORADIOBUTTON "В&ыбранную ветку:", IDC_EXPORT_SELECTED, 12, 30, 80, 12 + EDITTEXT IDC_EXPORT_PATH, 92, 30, 174, 12 +END + +IDD_FIND DIALOG DISCARDABLE 22, 17, 210, 85 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Поиск" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Найти:",IDC_STATIC,5,7,119,8 + EDITTEXT IDC_VALUE_NAME,40,5,120,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Искать в:",IDC_STATIC,5, 22, 119, 8 + CHECKBOX "Ключах", IDC_FIND_KEYS, 5, 34, 90, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX + CHECKBOX "Названиях значений", IDC_FIND_VALUES, 5, 46, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX + CHECKBOX "Содержимом", IDC_FIND_CONTENT, 5, 58, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX + CHECKBOX "Всю строку целиком", IDC_FIND_WHOLE, 5, 70, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX + DEFPUSHBUTTON "Искать",IDOK,170,5,35,11,WS_GROUP + PUSHBUTTON "Закрыть",IDCANCEL,170,22,35,11, WS_GROUP +END + +IDD_ADDFAVORITE DIALOG DISCARDABLE 22, 17, 210, 55 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Добавить избранное" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Имя:",IDC_STATIC,5,5,119,8 + EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,130,40,30,11,WS_GROUP + PUSHBUTTON "Отменить",IDCANCEL,165,40,40,11, WS_GROUP +END + +IDD_DELFAVORITE DIALOG DISCARDABLE 22, 17, 210, 90 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Удалить избранное" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Имя:",IDC_STATIC,5,5,119,8 + LISTBOX IDC_NAME_LIST,5,15,200,52, WS_BORDER | WS_TABSTOP | LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL + DEFPUSHBUTTON "OK",IDOK,130,73,30,11,WS_GROUP + PUSHBUTTON "Отменить",IDCANCEL,165,73,40,11, WS_GROUP +END + +IDD_EDIT_STRING DIALOG DISCARDABLE 22, 17, 210, 75 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Изменить строку" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Название значения:",IDC_STATIC,5,5,119,8 + EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED + LTEXT "Данные:",IDC_STATIC,5,30,119,8 + EDITTEXT IDC_VALUE_DATA,5,40,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,130,60,30,11,WS_GROUP + PUSHBUTTON "Отменить",IDCANCEL,165,60,40,11,WS_GROUP +END + +IDD_EDIT_DWORD DIALOG DISCARDABLE 22, 17, 210, 100 +STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU +CAPTION "Изменить DWORD" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Название значения:",IDC_STATIC,5,5,119,8 + EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED + LTEXT "Данные:",IDC_STATIC,5,30,90,8 + EDITTEXT IDC_VALUE_DATA,5,40,90,12, WS_BORDER | WS_TABSTOP + GROUPBOX "Исчисление", IDC_DWORD_BASE, 120, 30, 85, 37, BS_GROUPBOX + AUTORADIOBUTTON "16-ти ричное", IDC_DWORD_HEX, 130, 40, 60, 10, WS_TABSTOP + AUTORADIOBUTTON "Десятичное", IDC_DWORD_DEC, 130, 52, 60, 10, WS_TABSTOP + DEFPUSHBUTTON "OK",IDOK,130,80,30,11,WS_GROUP + PUSHBUTTON "Отменить",IDCANCEL,165,80,40,11,WS_GROUP +END + +IDD_EDIT_BINARY DIALOG DISCARDABLE 22, 17, 210, 100 +STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU +CAPTION "Изменить бинарные данные" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Название значения:",IDC_STATIC,5,5,119,8 + EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED + LTEXT "Данные:",IDC_STATIC,5,30,90,8 + CONTROL "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,4,40,160,40 + DEFPUSHBUTTON "OK",IDOK,130,80,30,11,WS_GROUP + PUSHBUTTON "Отменить",IDCANCEL,165,80,40,11,WS_GROUP +END + +IDD_EDIT_MULTI_STRING DIALOG DISCARDABLE 22, 17, 210, 175 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Изменить многостроковые данные" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Название значения:",IDC_STATIC,5,5,119,8 + EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED + LTEXT "Данные:",IDC_STATIC,5,30,119,8 + EDITTEXT IDC_VALUE_DATA,5,40,200,112, WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN + DEFPUSHBUTTON "OK",IDOK,130,160,30,11,WS_GROUP + PUSHBUTTON "Отменить",IDCANCEL,165,160,40,11,WS_GROUP +END + +/* + * String Table + */ + +STRINGTABLE DISCARDABLE +BEGIN + IDS_LIST_COLUMN_NAME "Имя" + IDS_LIST_COLUMN_TYPE "Тип" + IDS_LIST_COLUMN_DATA "Данные" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "Редактор реестра" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_REGISTRY_MENU "Содержит команды для работы с реестром в целом" + ID_EDIT_MENU "Содержит команды для редактирования значений или ключей" + ID_VIEW_MENU "Содержит команды для настройки окна реестра" + ID_FAVORITES_MENU "Содержит команды для доступа к часто используемым ключам" + ID_HELP_MENU "Содержит команды для отображения справки и информации о редакторе реестра" + ID_EDIT_NEW_MENU "Содержит команды для создания новых ключей или значений" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_EDIT_MODIFY "Изменяет значение параметра" + ID_EDIT_NEW_KEY "Добавляет новый ключ" + ID_EDIT_NEW_STRINGVALUE "Добавляет новое строковое значение" + ID_EDIT_NEW_BINARYVALUE "Добавляет новое бинарное значение" + ID_EDIT_NEW_DWORDVALUE "Добавляет новое DWORD-значение" + ID_EDIT_NEW_MULTI_STRINGVALUE "Добавляет новое многостроковое значение" + ID_REGISTRY_IMPORTREGISTRYFILE "Импортирует текстовой файл в реестр" + ID_REGISTRY_EXPORTREGISTRYFILE + "Экспортирует весь реестр или его часть в текстовой файл" + ID_REGISTRY_CONNECTNETWORKREGISTRY + "Подключается к реестру удалённого компьютера" + ID_REGISTRY_DISCONNECTNETWORKREGISTRY + "Отключается от реестра удалённого компьютера" + ID_REGISTRY_PRINT "Печатает весь реестр или его часть" +/* ID_HELP_HELPTOPICS "Opens registry editor help" */ + ID_HELP_ABOUT "Отображает информацию о программе, номер версии и список авторов" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_REGISTRY_EXIT "Выход из редактора реестра" + ID_FAVORITES_ADDTOFAVORITES "Добавить ключ в избранное" + ID_FAVORITES_REMOVEFAVORITE "Удалить ключ из избранного" + ID_VIEW_STATUSBAR "Показать или скрыть строку состояния" + ID_VIEW_SPLIT "Изменить позицию разделителя между двумя панелями" + ID_VIEW_REFRESH "Обновляет окно" + ID_EDIT_DELETE "Удаляет выделение" + ID_EDIT_RENAME "Переименовывает выделение" + ID_EDIT_COPYKEYNAME "Копирует имя выделенного ключа в буфер обмена" + ID_EDIT_FIND "Ищет текстовую строку в ключе, значении или данных" + ID_EDIT_FINDNEXT "Ищет следующее совпадение текста, заданного в предыдущем поиске" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ERROR "Ошибка" + IDS_BAD_KEY "Невозможно запросить ключ '%s'" + IDS_BAD_VALUE "Невозможно запросить значение '%s'" + IDS_UNSUPPORTED_TYPE "Редактирование ключей типа (%u) не поддерживается" + IDS_TOO_BIG_VALUE "Значение слишком велико (%u)" + IDS_DELETE_BOX_TITLE "Подтверждение" + IDS_DELETE_BOX_TEXT "Удалить значение '%s'?" + IDS_DELETE_BOX_TEXT_MULTIPLE "Вы уверены что хотите удалить эти значения?" + IDS_NEWKEY "Новый ключ #%d" + IDS_NEWVALUE "Новое значени #%d" + IDS_NOTFOUND "Искомая строка '%s' не найдена" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_FILEDIALOG_IMPORT_TITLE "Импорт файла реестра" + IDS_FILEDIALOG_EXPORT_TITLE "Экспорт файла реестра" + IDS_FILEDIALOG_FILTER "Все файлы реестра\0*.reg\0Файлы реестра для Win9x/NT4 (REGEDIT4)\0*.reg\0Все файлы (*.*)\0*.*\0\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_REGISTRY_ROOT_NAME "Мой Компьютер" + IDS_REGISTRY_DEFAULT_VALUE "(По умолчанию)" + IDS_REGISTRY_VALUE_NOT_SET "(значение не задано)" + IDS_REGISTRY_VALUE_CANT_DISPLAY "(невозможно отобразить)" + IDS_REGISTRY_UNKNOWN_TYPE "(неизвестно %d)" +END + +/*****************************************************************/ + +/* + * TEXTINCLUDE + */ + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +/*****************************************************************/ diff --git a/programs/start/Lt.rc b/programs/start/Lt.rc index 8f0e52b3418..c25cce0fa37 100644 --- a/programs/start/Lt.rc +++ b/programs/start/Lt.rc @@ -44,7 +44,7 @@ Parametrai:\n\ start.exe versija 0.2 (C) 2003, Dan Kegel\n\ Start pateikiama BE JOKIŲ GARANTIJŲ; detales rasite paleidę su /L parametru.\n\ Ši programa yra laisva programinė įranga; galite ją platinti\n\ -tam tikromis sąlygomis; paleiskite 'start /L' išsamiai informacijai gauti.\n\ +tam tikromis sąlygomis; paleiskite „start /L“ išsamiai informacijai gauti.\n\ " STRING_LICENSE, "start.exe versija 0.2 (C) 2003, Dan Kegel\n\ diff --git a/programs/start/Ru.rc b/programs/start/Ru.rc index f30af431e12..48248ee2963 100644 --- a/programs/start/Ru.rc +++ b/programs/start/Ru.rc @@ -20,34 +20,37 @@ #include "resources.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +STRINGTABLE DISCARDABLE { -STRING_USAGE, "Çàïóñêàåò ïðîãðàììû èëè îòêðûâàåò äîêóìåíòû ïðèëîæåíèåì,\n\ -îáû÷íî èñïîëüçóåìûì äëÿ ôàéëîâ ñ äàííûì ðàñøèðåíèåì.\n\n\ -Èñïîëüçîâàíèå:\n\ -start [options] èìÿ_ôàéëà_ïðîãðàììû [...]\n\ -start [options] èìÿ_ôàéëà_äîêóìåíòà\n\ +STRING_USAGE, "Запускает программы или открывает документы приложением,\n\ +обычно используемым для файлов с данным расширением.\n\n\ +Использование:\n\ +start [options] имя_файла_программы [...]\n\ +start [options] имя_файла_документа\n\ \n\ -Îïöèè:\n\ -/M[inimized] Çàïóñòèòü ïðîãðàììó ìèíèìèçèðîâàííîé.\n\ -/MAX[imized] Çàïóñòèòü ïðîãðàììó ìàêñèìèçèðîâàííîé.\n\ -/R[estored] Çàïóñòèòü ïðîãðàììó íîðìàëüíî (íå ìàêñèìèçèðîâàííî è íå ìèíèìèçèðîâàííî).\n\ -/W[ait] Îæèäàòü çàâåðøåíèÿ çàïóùåííîé ïðîãðàììû è âûéòè ñ êîäîì å¸ âûõîäà.\n\ -/Unix Èñïîëüçîâàòü ïóòü Unix äëÿ çàïóñêà ïðîãðàìû êàê âèíäîâñ ïðîâîäíèê.\n\ +Опции:\n\ +/M[inimized] Запустить программу минимизированной.\n\ +/MAX[imized] Запустить программу максимизированной.\n\ +/R[estored] Запустить программу нормально (не максимизированно и не минимизированно).\n\ +/W[ait] Ожидать завершения запущенной программы и выйти с кодом её выхода.\n\ +/Unix Использовать путь Unix для запуска програмы как виндовс проводник.\n\ /ProgIDOpen Open a document using the following progID.\n\ -/L Ïîêàçàòü ëèöåíçèþ êîíå÷íîãî ïîëüçîâàòåëÿ.\n\ +/L Показать лицензию конечного пользователя.\n\ \n\ -start.exe âåðñèÿ 0.2 Copyright (C) 2003, Dan Kegel\n\ -Start èäåò ÁÅÇ ÊÀÊÈÕ-ËÈÁÎ ÃÀÐÀÍÒÈÉ; ïîäðîáíîñòè ïðè çàïóñêå ñ îïöèåé /L.\n\ -Ýòî ñâîáîäíàÿ ïðîãðàììà, è âû ìîæåòå å¸ ðàñïðîñòðàíÿòü íà îïðåäåë¸ííûõ\n\ -óñëîâèÿõ; ïîäðîáíîñòè ïðè çàïóñêå ñ îïöèåé /L.\n\ +start.exe версия 0.2 Copyright (C) 2003, Dan Kegel\n\ +Start идет БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; подробности при запуске с опцией /L.\n\ +Это свободная программа, и вы можете её распространять на определённых\n\ +условиях; подробности при запуске с опцией /L.\n\ " -STRING_LICENSE, "start.exe âåðñèÿ 0.2 Copyright (C) 2003, Dan Kegel\n\ -Ýòî ïðîãðàììà ðàñïðîñòðàíÿåòñÿ ïî ëèöåíçèè GNU Lesser Public License\n\ -è ÿâëÿåòñÿ ñâîáîäíûì ïðîãðàììíûì ïðîäóêòîì.\n\ +STRING_LICENSE, "start.exe версия 0.2 Copyright (C) 2003, Dan Kegel\n\ +Это программа распространяется по лицензии GNU Lesser Public License\n\ +и является свободным программным продуктом.\n\ \n\ This program is free software; you can redistribute it and/or\n\ modify it under the terms of the GNU Lesser Public License\n\ @@ -66,7 +69,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n\ See the COPYING.LIB file for license information.\n\ " -STRING_EXECFAIL "Ïðèëîæåíèå íå ìîæåò áûòü çàïóùåíî èëè íå àññîöèèðîâàíî ïðèëîæåíèé ñ òèïîì äàííîãî äîêóìåíòà.\nÂûçîâ ShellExecuteEx ïðîâàëèëñÿ" +STRING_EXECFAIL "Приложение не может быть запущено или не ассоциировано приложений с типом данного документа.\nВызов ShellExecuteEx провалился" -STRING_UNIXFAIL "Íåâîçìîæíî ïåðåâåñòè èìÿ ïðîãðàììû UNIX â èìÿ DOS." +STRING_UNIXFAIL "Невозможно перевести имя программы UNIX в имя DOS." } diff --git a/programs/taskmgr/Lt.rc b/programs/taskmgr/Lt.rc index 17cde26af72..ac60cc5db72 100644 --- a/programs/taskmgr/Lt.rc +++ b/programs/taskmgr/Lt.rc @@ -431,7 +431,7 @@ STRINGTABLE DISCARDABLE BEGIN ID_FILE_NEW "Paleidžia naują programą" ID_OPTIONS_ALWAYSONTOP "Užduočių tvarkytuvės langas lieka priekyje visų kitų langų, nebent suskleidžiamas" - ID_OPTIONS_MINIMIZEONUSE "Užduočių tvarkytuvė yra suskleidžiama, kai įvykdoma operacija 'perjungti į'" + ID_OPTIONS_MINIMIZEONUSE "Užduočių tvarkytuvė yra suskleidžiama, kai įvykdoma operacija „perjungti į“" ID_OPTIONS_HIDEWHENMINIMIZED "Slepia užduočių tvarkytuvę, kai langas suskleidžiamas" ID_VIEW_REFRESH "Priverčia užduočių tvarkytuvę atnaujinti ekraną dabar, nepaisant atnaujinimo greičio nuostatos" ID_VIEW_LARGE "Rodo užduotis didelėmis piktogramomis" diff --git a/programs/taskmgr/No.rc b/programs/taskmgr/No.rc index cc61a180a91..598b567c70c 100644 --- a/programs/taskmgr/No.rc +++ b/programs/taskmgr/No.rc @@ -497,7 +497,7 @@ BEGIN IDS_VIEW_SMALL "S&må ikoner" IDS_VIEW_DETAILS "&Detaljer" IDS_WINDOWS "&Vinduer" - IDS_VIEW_SELECTCOLUMNS "Velg &kolonner ..." + IDS_VIEW_SELECTCOLUMNS "Velg &kolonner..." IDS_OPTIONS_SHOW16BITTASKS "Vi&s 16 bit-jobber" IDS_VIEW_CPUHISTORY "&Prosessorhistorikk" IDS_VIEW_CPUHISTORY_ONEGRAPHALL "Én graf, alle pr&osessorer" diff --git a/programs/taskmgr/Ru.rc b/programs/taskmgr/Ru.rc dissimilarity index 62% index d709513460d..a90587259eb 100644 --- a/programs/taskmgr/Ru.rc +++ b/programs/taskmgr/Ru.rc @@ -1,488 +1,567 @@ -/* - * Task Manager (Russian resources) - * - * Copyright 2008 Vladimir Pankratov - * - * - * 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_RUSSIAN, SUBLANG_DEFAULT - -/* - Menu -*/ - -IDR_TASKMANAGER MENU DISCARDABLE -BEGIN - POPUP "&Ôàéë" - BEGIN - MENUITEM "&Íîâàÿ çàäà÷à (Âûïîëíèòü...)", ID_FILE_NEW - MENUITEM SEPARATOR - MENUITEM "&Çàâåðøåíèå äèñïåò÷åðà çàäà÷", ID_FILE_EXIT - END - POPUP "&Ïàðàìåòðû" - BEGIN - MENUITEM "Ïîâå&ðõ îñòàëüíûõ îêîí", ID_OPTIONS_ALWAYSONTOP - , CHECKED - MENUITEM "&Ñâîðà÷èâàòü ïîñëå îáðàùåíèÿ", ID_OPTIONS_MINIMIZEONUSE - , CHECKED - MENUITEM "Ñ&êðûâàòü ñâåðíóòîå", ID_OPTIONS_HIDEWHENMINIMIZED - , CHECKED - MENUITEM "&Îòîáðàæàòü 16-ðàçðÿäíûå ïðîãðàììû", ID_OPTIONS_SHOW16BITTASKS - , CHECKED - END - POPUP "&Âèä" - BEGIN - MENUITEM "&Îáíîâèòü", ID_VIEW_REFRESH - POPUP "&Ñêîðîñòü îáíîâëåíèÿ" - BEGIN - MENUITEM "&Âûñîêàÿ", ID_VIEW_UPDATESPEED_HIGH - MENUITEM "&Îáû÷íàÿ", ID_VIEW_UPDATESPEED_NORMAL - , CHECKED - MENUITEM "&Íèçêàÿ", ID_VIEW_UPDATESPEED_LOW - MENUITEM "&Ïðèîñòàíîâèòü", ID_VIEW_UPDATESPEED_PAUSED - - END - MENUITEM SEPARATOR - MENUITEM "&Êðóïíûå çíà÷êè", ID_VIEW_LARGE - MENUITEM "&Ìåëêèå çíà÷êè", ID_VIEW_SMALL - MENUITEM "&Òàáëèöà", ID_VIEW_DETAILS, CHECKED - MENUITEM "Â&ûáðàòü ñòîëáöû...", ID_VIEW_SELECTCOLUMNS - POPUP "&Çàãðóçêà ÖÏ" - BEGIN - MENUITEM "&Îäèí ãðàôèê íà âñå ÖÏ", ID_VIEW_CPUHISTORY_ONEGRAPHALL - - MENUITEM "&Ïî ãðàôèêó íà êàæäûé ÖÏ", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU - , CHECKED - END - MENUITEM "&Âûâîä âðåìåíè ÿäðà", ID_VIEW_SHOWKERNELTIMES - END - POPUP "&Îêíà" - BEGIN - MENUITEM "Ñ&ëåâà íàïðàâî", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Ñ&âåðõó âíèç", ID_WINDOWS_TILEVERTICALLY - MENUITEM "&Ñâåðíóòü", ID_WINDOWS_MINIMIZE - MENUITEM "&Ðàçâåðíóòü", ID_WINDOWS_MAXIMIZE - MENUITEM "&Êàñêàäîì", ID_WINDOWS_CASCADE - MENUITEM "&Íà ïåðåäíèé ïëàí", ID_WINDOWS_BRINGTOFRONT - END - POPUP "&Ñïðàâêà" - BEGIN - MENUITEM "&Âûçîâ ñïðàâêè", ID_HELP_TOPICS - MENUITEM SEPARATOR - MENUITEM "&Î ïðîãðàììå", ID_HELP_ABOUT - END -END - -IDR_WINDOWSMENU MENU DISCARDABLE -BEGIN - MENUITEM "Ñ&ëåâà íàïðàâî", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Ñ&âåðõó âíèç", ID_WINDOWS_TILEVERTICALLY - MENUITEM "&Ñâåðíóòü", ID_WINDOWS_MINIMIZE - MENUITEM "&Ðàçâåðíóòü", ID_WINDOWS_MAXIMIZE - MENUITEM "&Êàñêàäîì", ID_WINDOWS_CASCADE - MENUITEM "&Íà ïåðåäíèé ïëàí", ID_WINDOWS_BRINGTOFRONT -END - -IDR_APPLICATION_PAGE_CONTEXT1 MENU DISCARDABLE -BEGIN - POPUP "DUMMY" - BEGIN - MENUITEM "&Íîâàÿ çàäà÷à (Âûïîëíèòü...)", ID_FILE_NEW - MENUITEM SEPARATOR - MENUITEM "&Êðóïíûå çíà÷êè", ID_VIEW_LARGE - MENUITEM "&Ìåëêèå çíà÷êè", ID_VIEW_SMALL - MENUITEM "&Òàáëèöà", ID_VIEW_DETAILS, CHECKED - END -END - -IDR_APPLICATION_PAGE_CONTEXT2 MENU DISCARDABLE -BEGIN - POPUP "DUMMY" - BEGIN - MENUITEM "&Ïåðåêëþ÷èòüñÿ", ID_APPLICATION_PAGE_SWITCHTO - MENUITEM "&Íà ïåðåäíèé ïëàí", ID_WINDOWS_BRINGTOFRONT - MENUITEM SEPARATOR - MENUITEM "Ñ&ëåâà íàïðàâî", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Ñ&âåðõó âíèç", ID_WINDOWS_TILEVERTICALLY - MENUITEM "&Ñâåðíóòü", ID_WINDOWS_MINIMIZE - MENUITEM "&Ðàçâåðíóòü", ID_WINDOWS_MAXIMIZE - MENUITEM "&Êàñêàäîì", ID_WINDOWS_CASCADE - MENUITEM SEPARATOR - MENUITEM "Ñíÿòü &çàäà÷ó", ID_APPLICATION_PAGE_ENDTASK - MENUITEM "&Ïåðåéòè ê ïðîöåññàì", ID_APPLICATION_PAGE_GOTOPROCESS - END -END - -IDR_TRAY_POPUP MENU DISCARDABLE -BEGIN - POPUP "DUMMY" - BEGIN - MENUITEM "&Âîññòàíîâèòü", ID_RESTORE - MENUITEM "&Çàêðûòü", ID_FILE_EXIT - MENUITEM SEPARATOR - MENUITEM "Ïîâå&ðõ îñòàëüíûõ îêîí", ID_OPTIONS_ALWAYSONTOP - END -END - -IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE -BEGIN - POPUP "DUMMY" - BEGIN - MENUITEM "&Çàâåðøèòü ïðîöåññ", ID_PROCESS_PAGE_ENDPROCESS - MENUITEM "Çàâåðøèòü &äåðåâî ïðîöåññîâ", ID_PROCESS_PAGE_ENDPROCESSTREE - - MENUITEM "&Îòëàäêà", ID_PROCESS_PAGE_DEBUG - MENUITEM SEPARATOR - POPUP "&Ïðèîðèòåò" - BEGIN - MENUITEM "&Ðåàëüíîãî âðåìåíè", ID_PROCESS_PAGE_SETPRIORITY_REALTIME - - MENUITEM "&Âûñîêèé", ID_PROCESS_PAGE_SETPRIORITY_HIGH - - MENUITEM "Â&ûøå ñðåäíåãî", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL - - MENUITEM "&Ñðåäíèé", ID_PROCESS_PAGE_SETPRIORITY_NORMAL - - MENUITEM "Í&èæå ñðåäíåãî", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL - - MENUITEM "&Íèçêèé", ID_PROCESS_PAGE_SETPRIORITY_LOW - - END - MENUITEM "Çàäàòü &ñîîòâåòñòâèå...", ID_PROCESS_PAGE_SETAFFINITY - MENUITEM "Ðåäàêòèðîâàòü &êàíàëû îòëàäêè...", ID_PROCESS_PAGE_DEBUGCHANNELS - END -END - -/* - Dialog -*/ - -IDD_TASKMGR_DIALOG DIALOG DISCARDABLE 0, 0, 264, 246 -STYLE DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | - WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | - WS_THICKFRAME -CAPTION "Äèñïåò÷åð çàäà÷" -MENU IDR_TASKMANAGER -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,3,3,257,228 -END - -IDD_APPLICATION_PAGE DIALOG DISCARDABLE 0, 0, 247, 210 -STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "List2",IDC_APPLIST,"SysListView32",LVS_REPORT | - LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,233,177 - PUSHBUTTON "&Íîâàÿ çàäà÷à...",IDC_NEWTASK,177,189,63,14 - PUSHBUTTON "Ï&åðåêëþ÷èòüñÿ",IDC_SWITCHTO,111,189,63,14,WS_DISABLED - PUSHBUTTON "Ñíÿòü &çàäà÷ó",IDC_ENDTASK,45,189,63,14,WS_DISABLED -END - -IDD_PROCESS_PAGE DIALOG DISCARDABLE 0, 0, 247, 210 -STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT | - LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | - WS_BORDER | WS_TABSTOP,7,7,233,177 - PUSHBUTTON "&Çàâåðøèòü ïðîöåññ",IDC_ENDPROCESS,171,189,69,14 - CONTROL "&Îòîáðàæàòü ïðîöåññû âñåõ ïîëüçîâàòåëåé",IDC_SHOWALLPROCESSES, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,191,157,10 -END - -/*IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210*/ -IDD_PERFORMANCE_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 -STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Çàãðóçêà ÖÏ",IDC_CPU_USAGE_FRAME,5,5,60,54,WS_TABSTOP, WS_EX_TRANSPARENT - GROUPBOX "Ôàéë ïîäêà÷êè",IDC_MEM_USAGE_FRAME,5,63,60,54,BS_LEFTTEXT, WS_EX_TRANSPARENT - GROUPBOX "Âñåãî",IDC_TOTALS_FRAME,5,122,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "Âûäåëåíèå ïàìÿòè (ÊÁ)",IDC_COMMIT_CHARGE_FRAME,5,166,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "Ôèçè÷åñêàÿ ïàìÿòü (ÊÁ)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "Ïàìÿòü ÿäðà (ÊÁ)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT - LTEXT "Äåñêðèïòîðîâ",IDS_TOTALS_HANDLE_COUNT,12,131,80,8 - LTEXT "Ïîòîêîâ",IDS_TOTALS_THREAD_COUNT,12,140,27,8 - LTEXT "Ïðîöåññîâ",IDS_TOTALS_PROCESS_COUNT,12,149,35,8 - EDITTEXT IDC_TOTALS_HANDLE_COUNT,65,131,45,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_TOTALS_THREAD_COUNT,65,140,45,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_TOTALS_PROCESS_COUNT,65,149,45,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - LTEXT "Âñåãî",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 - LTEXT "Ïðåäåë",IDS_COMMIT_CHARGE_LIMIT,12,184,50,8 - LTEXT "Ïèê",IDS_COMMIT_CHARGE_PEAK,12,193,34,8 - EDITTEXT IDC_COMMIT_CHARGE_TOTAL,65,174,45,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_COMMIT_CHARGE_LIMIT,65,184,45,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_COMMIT_CHARGE_PEAK,65,193,45,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - LTEXT "Âñåãî",IDS_PHYSICAL_MEMORY_TOTAL,137,131,27,8 - LTEXT "Äîñòóïíî",IDS_PHYSICAL_MEMORY_AVAILABLE,137,140,31,8 - LTEXT "Ñèñòåìíûé êåø",IDS_PHYSICAL_MEMORY_SYSTEM_CACHE,137,149,46,8 - EDITTEXT IDC_PHYSICAL_MEMORY_TOTAL,185,131,48,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_PHYSICAL_MEMORY_AVAILABLE,185,140,48,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - LTEXT "Âñåãî",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8 - LTEXT "Âûãðóæàåìàÿ",IDS_KERNEL_MEMORY_PAGED,137,184,70,8 - LTEXT "Íåâûãðóæ.",IDS_KERNEL_MEMORY_NONPAGED,137,193,70,8 - EDITTEXT IDC_KERNEL_MEMORY_TOTAL,185,174,48,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_KERNEL_MEMORY_PAGED,185,184,48,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - EDITTEXT IDC_KERNEL_MEMORY_NONPAGED,185,193,48,8,ES_RIGHT | - ES_READONLY | ES_NUMBER | NOT WS_BORDER - GROUPBOX "Õðîíîëîãèÿ çàãðóçêè ÖÏ",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT - GROUPBOX "Õðîíîëîãèÿ èñïîëüçîâàíèÿ ôàéëà ïîäêà÷êè",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT - PUSHBUTTON "Õðîíîëîãèÿ çàãðóçêè ÖÏ",IDC_CPU_USAGE_GRAPH,12,17,47,37,0, - WS_EX_CLIENTEDGE - PUSHBUTTON "Ôàéë ïîäêà÷êè",IDC_MEM_USAGE_GRAPH,12,75,47,37,0, - WS_EX_CLIENTEDGE - PUSHBUTTON "Õðîíîëîãèÿ çàãðóçêè ÖÏ",IDC_CPU_USAGE_HISTORY_GRAPH,81,17, - 153,37,0,WS_EX_CLIENTEDGE - PUSHBUTTON "Ôàéë ïîäêà÷êè",IDC_MEM_USAGE_HISTORY_GRAPH,81,75, - 153,37,0,WS_EX_CLIENTEDGE -END - -IDD_DEBUG_CHANNELS_DIALOG DIALOG DISCARDABLE 0, 0, 247, 210 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Êàíàëû îòëàäêè" -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "List2",IDC_DEBUG_CHANNELS_LIST,"SysListView32",LVS_REPORT | - LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | - LVS_SORTASCENDING,7,7,233,177 - PUSHBUTTON "Çàêðûòü",IDOK,171,189,69,14 -END - -IDD_AFFINITY_DIALOG DIALOG DISCARDABLE 0, 0, 231, 154 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ñîîòâåòñòâèå ïðîöåññîðîâ" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON "OK",IDOK,120,133,50,14 - PUSHBUTTON "Îòìåíà",IDCANCEL,174,133,50,14 - LTEXT "Ñîîòâåòñòâèå ïðîöåññîðîâ îïðåäåëÿåò, êàêîé ÖÏ ðàçðåøåíî èñïîëüçîâàòü ïðîöåññó.", - IDC_STATIC,5,5,220,16 - CONTROL "ÖÏ 0",IDC_CPU0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, - 11,28,37,10 - CONTROL "ÖÏ 1",IDC_CPU1,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,11,41,37,10 - CONTROL "ÖÏ 2",IDC_CPU2,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,11,54,37,10 - CONTROL "ÖÏ 3",IDC_CPU3,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,11,67,37,10 - CONTROL "ÖÏ 4",IDC_CPU4,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,11,80,37,10 - CONTROL "ÖÏ 5",IDC_CPU5,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,11,93,37,10 - CONTROL "ÖÏ 6",IDC_CPU6,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,11,106,37,10 - CONTROL "ÖÏ 7",IDC_CPU7,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,11,119,37,10 - CONTROL "ÖÏ 8",IDC_CPU8,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,61,28,37,10 - CONTROL "ÖÏ 9",IDC_CPU9,"Button",BS_AUTOCHECKBOX | WS_DISABLED | - WS_TABSTOP,61,41,37,10 - CONTROL "ÖÏ 10",IDC_CPU10,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,61,54,41,10 - CONTROL "ÖÏ 11",IDC_CPU11,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,61,67,41,10 - CONTROL "ÖÏ 12",IDC_CPU12,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,61,80,41,10 - CONTROL "ÖÏ 13",IDC_CPU13,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,61,93,41,10 - CONTROL "ÖÏ 14",IDC_CPU14,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,61,106,41,10 - CONTROL "ÖÏ 15",IDC_CPU15,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,61,119,41,10 - CONTROL "ÖÏ 16",IDC_CPU16,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,28,41,10 - CONTROL "ÖÏ 17",IDC_CPU17,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,41,41,10 - CONTROL "ÖÏ 18",IDC_CPU18,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,54,41,10 - CONTROL "ÖÏ 19",IDC_CPU19,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,67,41,10 - CONTROL "ÖÏ 20",IDC_CPU20,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,80,41,10 - CONTROL "ÖÏ 21",IDC_CPU21,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,93,41,10 - CONTROL "ÖÏ 22",IDC_CPU22,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,106,41,10 - CONTROL "ÖÏ 23",IDC_CPU23,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,116,119,41,10 - CONTROL "ÖÏ 24",IDC_CPU24,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,28,41,10 - CONTROL "ÖÏ 25",IDC_CPU25,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,41,41,10 - CONTROL "ÖÏ 26",IDC_CPU26,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,54,41,10 - CONTROL "ÖÏ 27",IDC_CPU27,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,67,41,10 - CONTROL "ÖÏ 28",IDC_CPU28,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,80,41,10 - CONTROL "ÖÏ 29",IDC_CPU29,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,93,41,10 - CONTROL "ÖÏ 30",IDC_CPU30,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,106,41,10 - CONTROL "ÖÏ 31",IDC_CPU31,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,175,119,41,10 -END - -IDD_COLUMNS_DIALOG DIALOG DISCARDABLE 20, 20, 244, 199 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Âûáîð ñòîëáöîâ" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON "OK",IDOK,132,176,50,14 - PUSHBUTTON "Îòìåíà",IDCANCEL,186,176,50,14 - LTEXT "Âûáåðèòå ñòîëáöû, êîòîðûå ïîÿâÿòñÿ íà ñòðàíèöå ïðîöåññîâ äèñïåò÷åðà çàäà÷.", - IDC_STATIC,7,4,227,19 - CONTROL "&Èìÿ îáðàçà",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX | - WS_DISABLED | WS_TABSTOP,7,26,105,10 - CONTROL "Èäåíòè&ô. ïðîöåññà (PID)",IDC_PID,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,7,37,105,10 - CONTROL "&Çàãðóçêà ÖÏ",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,48,105,10 - CONTROL "&Âðåìÿ ÖÏ",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,59,105,10 - CONTROL "&Ïàìÿòü - èñïîëüçîâàíèå",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,70,105,10 - CONTROL "Ïàìÿòü - èçìå&íåíèå",IDC_MEMORYUSAGEDELTA,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,7,81,105,10 - CONTROL "Ïàìÿòü - &ìàêñèìóì",IDC_PEAKMEMORYUSAGE,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,7,92,105,10 - CONTROL "&Îøèáîê ñòðàíèöû",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,103,105,10 - CONTROL "Îá&úåêòû USER",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,114,105,10 - CONTROL "×èñëî ÷òåíèé",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,125,105,10 - CONTROL "Ïðî÷èòàíî áàéò",IDC_IOREADBYTES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,7,136,105,10 - CONTROL "Êîä ñå&àíñà",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,147,105,10 - CONTROL "Èì&ÿ ïîëüçîâàòåëÿ",IDC_USERNAME,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,158,105,10 - CONTROL "Îøèáîê &ñòðàíèöû - èçìåíåíèå",IDC_PAGEFAULTSDELTA,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,118,26,120,10 - CONTROL "Îáúåì âèðòó&àëüíîé ïàìÿòè",IDC_VIRTUALMEMORYSIZE,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,118,37,120,10 - CONTROL "Âû&ãðóæàåìûé ïóë",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,118,48,120,10 - CONTROL "Íåâûãðóæàåìûé ï&óë",IDC_NONPAGEDPOOL,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,118,59,120,10 - CONTROL "&Áàçîâûé ïðèîðèòåò",IDC_BASEPRIORITY,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,118,70,120,10 - CONTROL "Ñ÷åò÷èê &äåñêðèïòîðîâ",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,118,81,120,10 - CONTROL "Ñ&÷åò÷èê ïîòîêîâ",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,118,92,120,10 - CONTROL "Îáú&åêòû GDI",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,118,103,120,10 - CONTROL "×èñëî çàïèñåé",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,118,114,120,10 - CONTROL "Çàïèñàíî áàéò",IDC_IOWRITEBYTES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,118,125,120,10 - CONTROL "Ïðî÷èé ââîä-âûâîä",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,118,136,120,10 - CONTROL "Ïðî÷èõ áàéò ïðè ââîäå-âûâîäå",IDC_IOOTHERBYTES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,118,147,120,10 -END - -/* - String Table -*/ - -STRINGTABLE DISCARDABLE -BEGIN - IDS_APP_TITLE "Äèñïåò÷åð çàäà÷" - IDC_TASKMGR "Äèñïåò÷åð çàäà÷" - IDS_RUNDLG_CAPTION "Ñîçäàòü íîâóþ çàäà÷ó" -END - -STRINGTABLE DISCARDABLE -BEGIN - ID_FILE_NEW "Çàïóñêàåò íîâóþ ïðîãðàììó" - ID_OPTIONS_ALWAYSONTOP "Îêíî Äèñïåò÷åðà çàäà÷ îòîáðàæàåòñÿ ïîâåðõ äðóãèõ îêîí, åñëè íå ñâåðíóòî" - ID_OPTIONS_MINIMIZEONUSE - "Îêíî Äèñïåò÷åðà çàäà÷ ñâåðòûâàåòñÿ ïðè âûïîëíåíèè ïåðåêëþ÷åíèÿ" - ID_OPTIONS_HIDEWHENMINIMIZED "Ñêðûâàåò ñâåðíóòîå îêíî Äèñïåò÷åðà çàäà÷" - ID_VIEW_REFRESH "Âûçûâàåò íåìåäëåííîå îáíîâëåíèå îêíà Äèñïåò÷åðà çàäà÷" - ID_VIEW_LARGE "Îòîáðàæàåò çàäà÷è â âèäå êðóïíûõ çíà÷êîâ" - ID_VIEW_SMALL "Îòîáðàæàåò çàäà÷è â âèäå ìåëêèõ çíà÷êîâ" - ID_VIEW_DETAILS "Îòîáðàæàåò äîïîëíèòåëüíóþ èíôîðìàöèþ î çàäà÷àõ" - ID_VIEW_UPDATESPEED_HIGH "Îáíîâëÿåò èçîáðàæåíèå äâà ðàçà â ñåêóíäó" - ID_VIEW_UPDATESPEED_NORMAL "Îáíîâëÿåò èçîáðàæåíèå îäèí ðàç â äâå ñåêóíäû" - ID_VIEW_UPDATESPEED_LOW "Îáíîâëÿåò èçîáðàæåíèå îäèí ðàç â ÷åòûðå ñåêóíäû" -END - -STRINGTABLE DISCARDABLE -BEGIN -ID_VIEW_UPDATESPEED_PAUSED "Èçîáðàæåíèå íå îáíîâëÿåòñÿ àâòîìàòè÷åñêè" - ID_WINDOWS_TILEHORIZONTALLY - "Ðàçìåùàåò âûáðàííûå îêíà ñëåâà íàïðàâî" - ID_WINDOWS_TILEVERTICALLY "Ðàçìåùàåò âûáðàííûå îêíà îäíî íàä äðóãèì" - ID_WINDOWS_MINIMIZE "Ñâåðòûâàåò îêíà âûáðàííûõ çàäà÷" - ID_WINDOWS_MAXIMIZE "Ðàçâåðòûâàåò îêíà íà âåñü ðàáî÷èé ñòîë" - ID_WINDOWS_CASCADE "Ðàçìåùàåò âûáðàííûå îêíà êàñêàäîì" - ID_WINDOWS_BRINGTOFRONT "Ïåðåìåùàåò îêíî íà ïåðåäíèé ïëàí, íî íå àêòèâèçèðóåò åãî" - ID_HELP_TOPICS "Îòêðûâàåò îêíî âñòðîåííîé ñïðàâêè Äèñïåò÷åðà çàäà÷" - ID_HELP_ABOUT "Âûâîä ñâåäåíèé î ïðîãðàììå, åå âåðñèè è àâòîðñêèõ ïðàâàõ" - ID_FILE_EXIT "Çàâåðøàåò Äèñïåò÷åð çàäà÷" - ID_OPTIONS_SHOW16BITTASKS - "Îòîáðàæàåò 16-ðàçðÿäíûå çàäà÷è, îáðàáàòûâàåìûå ntvdm.exe" - ID_VIEW_SELECTCOLUMNS "Îïðåäåëÿåò ñïèñîê ñòîëáöîâ, îòîáðàæàåìûõ íà âêëàäêå Ïðîöåññû" - ID_VIEW_SHOWKERNELTIMES "Îòîáðàæàåò âðåìÿ ÿäðà íà ãðàôèêàõ çàãðóæåííîñòè" - ID_VIEW_CPUHISTORY_ONEGRAPHALL - "Îäèí õðîíîëîãè÷åñêèé ãðàôèê îáùåé çàãðóçêè ÖÏ" - ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "Êàæäîìó ÖÏ ñîîòâåòñòâóåò ñâîé ãðàôèê" - ID_APPLICATION_PAGE_SWITCHTO - "Ïåðåìåùàåò çàäà÷è íà ïåðåäíèé ïëàí è ïåðåäàåò èì óïðàâëåíèå" -END - -STRINGTABLE DISCARDABLE -BEGIN - ID_ENDTASK "Çàâåðøàåò âûáðàííûé ïðîöåññ" - ID_GOTOPROCESS "Ïåðåêëþ÷àåò ôîêóñ íà ïðîöåññ âûáðàííîé çàäà÷è" - ID_RESTORE "Âîññòàíàâëèâàåò ñêðûòîå îêíî Äèñïåò÷åðà çàäà÷" - ID_PROCESS_PAGE_ENDPROCESS "Óäàëÿåò ïðîöåññ èç ñèñòåìû" - ID_PROCESS_PAGE_ENDPROCESSTREE - "Óäàëÿåò èç ñèñòåìû ýòîò ïðîöåññ è âñåõ åãî ïîòîìêîâ." - ID_PROCESS_PAGE_DEBUG "Ïðèìåíÿåò îòëàä÷èê ê ýòîìó ïðîöåññó" - ID_PROCESS_PAGE_SETAFFINITY - "Óñòàíàâëèâàåò, êàêèå ÖÏ ìîæåò èñïîëüçîâàòü ïðîöåññ" - ID_PROCESS_PAGE_SETPRIORITY_REALTIME - "Óñòàíàâëèâàåò êëàññ ïðèîðèòåòà ÐÅÀËÜÍÎÃÎ ÂÐÅÌÅÍÈ äëÿ ïðîöåññà" - ID_PROCESS_PAGE_SETPRIORITY_HIGH "Óñòàíàâëèâàåò êëàññ ïðèîðèòåòà ÂÛÑÎÊÈÉ äëÿ ïðîöåññà" - ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL - "Óñòàíàâëèâàåò êëàññ ïðèîðèòåòà ÂÛØÅ ÑÐÅÄÍÅÃÎ äëÿ ïðîöåññà" - ID_PROCESS_PAGE_SETPRIORITY_NORMAL - "Óñòàíàâëèâàåò êëàññ ïðèîðèòåòà ÑÐÅÄÍÈÉ äëÿ ïðîöåññà" - ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL - "Óñòàíàâëèâàåò êëàññ ïðèîðèòåòà ÍÈÆÅ ÑÐÅÄÍÅÃÎ äëÿ ïðîöåññà" - ID_PROCESS_PAGE_SETPRIORITY_LOW "Óñòàíàâëèâàåò êëàññ ïðèîðèòåòà ÍÈÇÊÈÉ äëÿ ïðîöåññà" -END +/* + * Task Manager (Russian resources) + * + * Copyright 2008 Vladimir Pankratov + * + * + * 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" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +/* + Menu +*/ + +IDR_TASKMANAGER MENU DISCARDABLE +BEGIN + POPUP "&Файл" + BEGIN + MENUITEM "&Новая задача (Выполнить...)", ID_FILE_NEW + MENUITEM SEPARATOR + MENUITEM "&Завершение диспетчера задач", ID_FILE_EXIT + END + POPUP "&Параметры" + BEGIN + MENUITEM "Пове&рх остальных окон", ID_OPTIONS_ALWAYSONTOP + , CHECKED + MENUITEM "&Сворачивать после обращения", ID_OPTIONS_MINIMIZEONUSE + , CHECKED + MENUITEM "С&крывать свернутое", ID_OPTIONS_HIDEWHENMINIMIZED + , CHECKED + MENUITEM "&Отображать 16-разрядные программы", ID_OPTIONS_SHOW16BITTASKS + , CHECKED + END + POPUP "&Вид" + BEGIN + MENUITEM "&Обновить", ID_VIEW_REFRESH + POPUP "&Скорость обновления" + BEGIN + MENUITEM "&Высокая", ID_VIEW_UPDATESPEED_HIGH + MENUITEM "&Обычная", ID_VIEW_UPDATESPEED_NORMAL + , CHECKED + MENUITEM "&Низкая", ID_VIEW_UPDATESPEED_LOW + MENUITEM "&Приостановить", ID_VIEW_UPDATESPEED_PAUSED + + END + MENUITEM SEPARATOR + MENUITEM "&Крупные значки", ID_VIEW_LARGE + MENUITEM "&Мелкие значки", ID_VIEW_SMALL + MENUITEM "&Таблица", ID_VIEW_DETAILS, CHECKED + MENUITEM "В&ыбрать столбцы...", ID_VIEW_SELECTCOLUMNS + POPUP "&Загрузка ЦП" + BEGIN + MENUITEM "&Один график на все ЦП", ID_VIEW_CPUHISTORY_ONEGRAPHALL + + MENUITEM "&По графику на каждый ЦП", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU + , CHECKED + END + MENUITEM "&Вывод времени ядра", ID_VIEW_SHOWKERNELTIMES + END + POPUP "&Окна" + BEGIN + MENUITEM "С&лева направо", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "С&верху вниз", ID_WINDOWS_TILEVERTICALLY + MENUITEM "&Свернуть", ID_WINDOWS_MINIMIZE + MENUITEM "&Развернуть", ID_WINDOWS_MAXIMIZE + MENUITEM "&Каскадом", ID_WINDOWS_CASCADE + MENUITEM "&На передний план", ID_WINDOWS_BRINGTOFRONT + END + POPUP "&Справка" + BEGIN + MENUITEM "&Вызов справки", ID_HELP_TOPICS + MENUITEM SEPARATOR + MENUITEM "&О программе", ID_HELP_ABOUT + END +END + +IDR_WINDOWSMENU MENU DISCARDABLE +BEGIN + MENUITEM "С&лева направо", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "С&верху вниз", ID_WINDOWS_TILEVERTICALLY + MENUITEM "&Свернуть", ID_WINDOWS_MINIMIZE + MENUITEM "&Развернуть", ID_WINDOWS_MAXIMIZE + MENUITEM "&Каскадом", ID_WINDOWS_CASCADE + MENUITEM "&На передний план", ID_WINDOWS_BRINGTOFRONT +END + +IDR_APPLICATION_PAGE_CONTEXT1 MENU DISCARDABLE +BEGIN + POPUP "DUMMY" + BEGIN + MENUITEM "&Новая задача (Выполнить...)", ID_FILE_NEW + MENUITEM SEPARATOR + MENUITEM "&Крупные значки", ID_VIEW_LARGE + MENUITEM "&Мелкие значки", ID_VIEW_SMALL + MENUITEM "&Таблица", ID_VIEW_DETAILS, CHECKED + END +END + +IDR_APPLICATION_PAGE_CONTEXT2 MENU DISCARDABLE +BEGIN + POPUP "DUMMY" + BEGIN + MENUITEM "&Переключиться", ID_APPLICATION_PAGE_SWITCHTO + MENUITEM "&На передний план", ID_WINDOWS_BRINGTOFRONT + MENUITEM SEPARATOR + MENUITEM "С&лева направо", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "С&верху вниз", ID_WINDOWS_TILEVERTICALLY + MENUITEM "&Свернуть", ID_WINDOWS_MINIMIZE + MENUITEM "&Развернуть", ID_WINDOWS_MAXIMIZE + MENUITEM "&Каскадом", ID_WINDOWS_CASCADE + MENUITEM SEPARATOR + MENUITEM "Снять &задачу", ID_APPLICATION_PAGE_ENDTASK + MENUITEM "&Перейти к процессам", ID_APPLICATION_PAGE_GOTOPROCESS + END +END + +IDR_TRAY_POPUP MENU DISCARDABLE +BEGIN + POPUP "DUMMY" + BEGIN + MENUITEM "&Восстановить", ID_RESTORE + MENUITEM "&Закрыть", ID_FILE_EXIT + MENUITEM SEPARATOR + MENUITEM "Пове&рх остальных окон", ID_OPTIONS_ALWAYSONTOP + END +END + +IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE +BEGIN + POPUP "DUMMY" + BEGIN + MENUITEM "&Завершить процесс", ID_PROCESS_PAGE_ENDPROCESS + MENUITEM "Завершить &дерево процессов", ID_PROCESS_PAGE_ENDPROCESSTREE + + MENUITEM "&Отладка", ID_PROCESS_PAGE_DEBUG + MENUITEM SEPARATOR + POPUP "&Приоритет" + BEGIN + MENUITEM "&Реального времени", ID_PROCESS_PAGE_SETPRIORITY_REALTIME + + MENUITEM "&Высокий", ID_PROCESS_PAGE_SETPRIORITY_HIGH + + MENUITEM "В&ыше среднего", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL + + MENUITEM "&Средний", ID_PROCESS_PAGE_SETPRIORITY_NORMAL + + MENUITEM "Н&иже среднего", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL + + MENUITEM "&Низкий", ID_PROCESS_PAGE_SETPRIORITY_LOW + + END + MENUITEM "Задать &соответствие...", ID_PROCESS_PAGE_SETAFFINITY + MENUITEM "Редактировать &каналы отладки...", ID_PROCESS_PAGE_DEBUGCHANNELS + END +END + +/* + Dialog +*/ + +IDD_TASKMGR_DIALOG DIALOG DISCARDABLE 0, 0, 270, 246 +STYLE DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | + WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +CAPTION "Диспетчер задач" +MENU IDR_TASKMANAGER +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,3,3,257,228 +END + +IDD_APPLICATION_PAGE DIALOG DISCARDABLE 0, 0, 247, 210 +STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "List2",IDC_APPLIST,"SysListView32",LVS_REPORT | + LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,233,177 + PUSHBUTTON "&Новая задача...",IDC_NEWTASK,177,189,63,14 + PUSHBUTTON "П&ереключиться",IDC_SWITCHTO,111,189,63,14,WS_DISABLED + PUSHBUTTON "Снять &задачу",IDC_ENDTASK,45,189,63,14,WS_DISABLED +END + +IDD_PROCESS_PAGE DIALOG DISCARDABLE 0, 0, 247, 210 +STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | + WS_BORDER | WS_TABSTOP,7,7,233,177 + PUSHBUTTON "&Завершить процесс",IDC_ENDPROCESS,171,189,75,14 + CONTROL "&Отображать процессы всех пользователей",IDC_SHOWALLPROCESSES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,191,160,10 +END + +/*IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210*/ +IDD_PERFORMANCE_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 +STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Загрузка ЦП",IDC_CPU_USAGE_FRAME,5,5,60,54,WS_TABSTOP, WS_EX_TRANSPARENT + GROUPBOX "Файл подкачки",IDC_MEM_USAGE_FRAME,5,63,60,54,BS_LEFTTEXT, WS_EX_TRANSPARENT + GROUPBOX "Всего",IDC_TOTALS_FRAME,5,122,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "Выделение памяти (КБ)",IDC_COMMIT_CHARGE_FRAME,5,166,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "Физическая память (КБ)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "Память ядра (КБ)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT + LTEXT "Дескрипторов",IDS_TOTALS_HANDLE_COUNT,12,131,80,8 + LTEXT "Потоков",IDS_TOTALS_THREAD_COUNT,12,140,27,8 + LTEXT "Процессов",IDS_TOTALS_PROCESS_COUNT,12,149,35,8 + EDITTEXT IDC_TOTALS_HANDLE_COUNT,65,131,45,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_TOTALS_THREAD_COUNT,65,140,45,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_TOTALS_PROCESS_COUNT,65,149,45,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + LTEXT "Всего",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 + LTEXT "Предел",IDS_COMMIT_CHARGE_LIMIT,12,184,50,8 + LTEXT "Пик",IDS_COMMIT_CHARGE_PEAK,12,193,34,8 + EDITTEXT IDC_COMMIT_CHARGE_TOTAL,65,174,45,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_COMMIT_CHARGE_LIMIT,65,184,45,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_COMMIT_CHARGE_PEAK,65,193,45,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + LTEXT "Всего",IDS_PHYSICAL_MEMORY_TOTAL,137,131,27,8 + LTEXT "Доступно",IDS_PHYSICAL_MEMORY_AVAILABLE,137,140,31,8 + LTEXT "Системный кеш",IDS_PHYSICAL_MEMORY_SYSTEM_CACHE,137,149,46,8 + EDITTEXT IDC_PHYSICAL_MEMORY_TOTAL,185,131,48,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_PHYSICAL_MEMORY_AVAILABLE,185,140,48,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + LTEXT "Всего",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8 + LTEXT "Выгружаемая",IDS_KERNEL_MEMORY_PAGED,137,184,70,8 + LTEXT "Невыгруж.",IDS_KERNEL_MEMORY_NONPAGED,137,193,70,8 + EDITTEXT IDC_KERNEL_MEMORY_TOTAL,185,174,48,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_KERNEL_MEMORY_PAGED,185,184,48,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + EDITTEXT IDC_KERNEL_MEMORY_NONPAGED,185,193,48,8,ES_RIGHT | + ES_READONLY | ES_NUMBER | NOT WS_BORDER + GROUPBOX "Хронология загрузки ЦП",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT + GROUPBOX "Хронология использования файла подкачки",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT + PUSHBUTTON "Хронология загрузки ЦП",IDC_CPU_USAGE_GRAPH,12,17,47,37,0, + WS_EX_CLIENTEDGE + PUSHBUTTON "Файл подкачки",IDC_MEM_USAGE_GRAPH,12,75,47,37,0, + WS_EX_CLIENTEDGE + PUSHBUTTON "Хронология загрузки ЦП",IDC_CPU_USAGE_HISTORY_GRAPH,81,17, + 153,37,0,WS_EX_CLIENTEDGE + PUSHBUTTON "Файл подкачки",IDC_MEM_USAGE_HISTORY_GRAPH,81,75, + 153,37,0,WS_EX_CLIENTEDGE +END + +IDD_DEBUG_CHANNELS_DIALOG DIALOG DISCARDABLE 0, 0, 247, 210 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Каналы отладки" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "List2",IDC_DEBUG_CHANNELS_LIST,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | + LVS_SORTASCENDING,7,7,233,177 + PUSHBUTTON "Закрыть",IDOK,171,189,69,14 +END + +IDD_AFFINITY_DIALOG DIALOG DISCARDABLE 0, 0, 231, 154 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Соответствие процессоров" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,120,133,50,14 + PUSHBUTTON "Отмена",IDCANCEL,174,133,50,14 + LTEXT "Соответствие процессоров определяет, какой ЦП разрешено использовать процессу.", + IDC_STATIC,5,5,220,16 + CONTROL "ЦП 0",IDC_CPU0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 11,28,37,10 + CONTROL "ЦП 1",IDC_CPU1,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,11,41,37,10 + CONTROL "ЦП 2",IDC_CPU2,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,11,54,37,10 + CONTROL "ЦП 3",IDC_CPU3,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,11,67,37,10 + CONTROL "ЦП 4",IDC_CPU4,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,11,80,37,10 + CONTROL "ЦП 5",IDC_CPU5,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,11,93,37,10 + CONTROL "ЦП 6",IDC_CPU6,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,11,106,37,10 + CONTROL "ЦП 7",IDC_CPU7,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,11,119,37,10 + CONTROL "ЦП 8",IDC_CPU8,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,61,28,37,10 + CONTROL "ЦП 9",IDC_CPU9,"Button",BS_AUTOCHECKBOX | WS_DISABLED | + WS_TABSTOP,61,41,37,10 + CONTROL "ЦП 10",IDC_CPU10,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,61,54,41,10 + CONTROL "ЦП 11",IDC_CPU11,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,61,67,41,10 + CONTROL "ЦП 12",IDC_CPU12,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,61,80,41,10 + CONTROL "ЦП 13",IDC_CPU13,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,61,93,41,10 + CONTROL "ЦП 14",IDC_CPU14,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,61,106,41,10 + CONTROL "ЦП 15",IDC_CPU15,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,61,119,41,10 + CONTROL "ЦП 16",IDC_CPU16,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,28,41,10 + CONTROL "ЦП 17",IDC_CPU17,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,41,41,10 + CONTROL "ЦП 18",IDC_CPU18,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,54,41,10 + CONTROL "ЦП 19",IDC_CPU19,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,67,41,10 + CONTROL "ЦП 20",IDC_CPU20,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,80,41,10 + CONTROL "ЦП 21",IDC_CPU21,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,93,41,10 + CONTROL "ЦП 22",IDC_CPU22,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,106,41,10 + CONTROL "ЦП 23",IDC_CPU23,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,116,119,41,10 + CONTROL "ЦП 24",IDC_CPU24,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,28,41,10 + CONTROL "ЦП 25",IDC_CPU25,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,41,41,10 + CONTROL "ЦП 26",IDC_CPU26,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,54,41,10 + CONTROL "ЦП 27",IDC_CPU27,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,67,41,10 + CONTROL "ЦП 28",IDC_CPU28,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,80,41,10 + CONTROL "ЦП 29",IDC_CPU29,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,93,41,10 + CONTROL "ЦП 30",IDC_CPU30,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,106,41,10 + CONTROL "ЦП 31",IDC_CPU31,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,175,119,41,10 +END + +IDD_COLUMNS_DIALOG DIALOG DISCARDABLE 20, 20, 244, 199 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Выбор столбцов" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,132,176,50,14 + PUSHBUTTON "Отмена",IDCANCEL,186,176,50,14 + LTEXT "Выберите столбцы, которые появятся на странице процессов диспетчера задач.", + IDC_STATIC,7,4,227,19 + CONTROL "&Имя образа",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,7,26,105,10 + CONTROL "Иденти&ф. процесса (PID)",IDC_PID,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,7,37,105,10 + CONTROL "&Загрузка ЦП",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,48,105,10 + CONTROL "&Время ЦП",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,59,105,10 + CONTROL "&Память - использование",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,70,105,10 + CONTROL "Память - изме&нение",IDC_MEMORYUSAGEDELTA,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,7,81,105,10 + CONTROL "Память - &максимум",IDC_PEAKMEMORYUSAGE,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,7,92,105,10 + CONTROL "&Ошибок страницы",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,103,105,10 + CONTROL "Об&ъекты USER",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,114,105,10 + CONTROL "Число чтений",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,125,105,10 + CONTROL "Прочитано байт",IDC_IOREADBYTES,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,7,136,105,10 + CONTROL "Код се&анса",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,147,105,10 + CONTROL "Им&я пользователя",IDC_USERNAME,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,158,105,10 + CONTROL "Ошибок &страницы - изменение",IDC_PAGEFAULTSDELTA,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,118,26,120,10 + CONTROL "Объем вирту&альной памяти",IDC_VIRTUALMEMORYSIZE,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,118,37,120,10 + CONTROL "Вы&гружаемый пул",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,118,48,120,10 + CONTROL "Невыгружаемый п&ул",IDC_NONPAGEDPOOL,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,118,59,120,10 + CONTROL "&Базовый приоритет",IDC_BASEPRIORITY,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,118,70,120,10 + CONTROL "Счетчик &дескрипторов",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,118,81,120,10 + CONTROL "С&четчик потоков",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,118,92,120,10 + CONTROL "Объ&екты GDI",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,118,103,120,10 + CONTROL "Число записей",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,118,114,120,10 + CONTROL "Записано байт",IDC_IOWRITEBYTES,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,118,125,120,10 + CONTROL "Прочий ввод-вывод",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,118,136,120,10 + CONTROL "Прочих байт при вводе-выводе",IDC_IOOTHERBYTES,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,118,147,120,10 +END + +/* + String Table +*/ + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "Диспетчер задач" + IDC_TASKMGR "Диспетчер задач" + IDS_RUNDLG_CAPTION "Создать новую задачу" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_FILE_NEW "Запускает новую программу" + ID_OPTIONS_ALWAYSONTOP "Окно Диспетчера задач отображается поверх других окон, если не свернуто" + ID_OPTIONS_MINIMIZEONUSE + "Окно Диспетчера задач свертывается при выполнении переключения" + ID_OPTIONS_HIDEWHENMINIMIZED "Скрывает свернутое окно Диспетчера задач" + ID_VIEW_REFRESH "Вызывает немедленное обновление окна Диспетчера задач" + ID_VIEW_LARGE "Отображает задачи в виде крупных значков" + ID_VIEW_SMALL "Отображает задачи в виде мелких значков" + ID_VIEW_DETAILS "Отображает дополнительную информацию о задачах" + ID_VIEW_UPDATESPEED_HIGH "Обновляет изображение два раза в секунду" + ID_VIEW_UPDATESPEED_NORMAL "Обновляет изображение один раз в две секунды" + ID_VIEW_UPDATESPEED_LOW "Обновляет изображение один раз в четыре секунды" +END + +STRINGTABLE DISCARDABLE +BEGIN +ID_VIEW_UPDATESPEED_PAUSED "Изображение не обновляется автоматически" + ID_WINDOWS_TILEHORIZONTALLY + "Размещает выбранные окна слева направо" + ID_WINDOWS_TILEVERTICALLY "Размещает выбранные окна одно над другим" + ID_WINDOWS_MINIMIZE "Свертывает окна выбранных задач" + ID_WINDOWS_MAXIMIZE "Развертывает окна на весь рабочий стол" + ID_WINDOWS_CASCADE "Размещает выбранные окна каскадом" + ID_WINDOWS_BRINGTOFRONT "Перемещает окно на передний план, но не активизирует его" + ID_HELP_TOPICS "Открывает окно встроенной справки Диспетчера задач" + ID_HELP_ABOUT "Вывод сведений о программе, ее версии и авторских правах" + ID_FILE_EXIT "Завершает Диспетчер задач" + ID_OPTIONS_SHOW16BITTASKS + "Отображает 16-разрядные задачи, обрабатываемые ntvdm.exe" + ID_VIEW_SELECTCOLUMNS "Определяет список столбцов, отображаемых на вкладке Процессы" + ID_VIEW_SHOWKERNELTIMES "Отображает время ядра на графиках загруженности" + ID_VIEW_CPUHISTORY_ONEGRAPHALL + "Один хронологический график общей загрузки ЦП" + ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "Каждому ЦП соответствует свой график" + ID_APPLICATION_PAGE_SWITCHTO + "Перемещает задачи на передний план и передает им управление" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_ENDTASK "Завершает выбранный процесс" + ID_GOTOPROCESS "Переключает фокус на процесс выбранной задачи" + ID_RESTORE "Восстанавливает скрытое окно Диспетчера задач" + ID_PROCESS_PAGE_ENDPROCESS "Удаляет процесс из системы" + ID_PROCESS_PAGE_ENDPROCESSTREE + "Удаляет из системы этот процесс и всех его потомков." + ID_PROCESS_PAGE_DEBUG "Применяет отладчик к этому процессу" + ID_PROCESS_PAGE_SETAFFINITY + "Устанавливает, какие ЦП может использовать процесс" + ID_PROCESS_PAGE_SETPRIORITY_REALTIME + "Устанавливает класс приоритета РЕАЛЬНОГО ВРЕМЕНИ для процесса" + ID_PROCESS_PAGE_SETPRIORITY_HIGH "Устанавливает класс приоритета ВЫСОКИЙ для процесса" + ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL + "Устанавливает класс приоритета ВЫШЕ СРЕДНЕГО для процесса" + ID_PROCESS_PAGE_SETPRIORITY_NORMAL + "Устанавливает класс приоритета СРЕДНИЙ для процесса" + ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL + "Устанавливает класс приоритета НИЖЕ СРЕДНЕГО для процесса" + ID_PROCESS_PAGE_SETPRIORITY_LOW "Устанавливает класс приоритета НИЗКИЙ для процесса" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_VIEW_LARGE "&Крупные значки" + IDS_VIEW_SMALL "&Мелкие значки" + IDS_VIEW_DETAILS "&Таблица" + IDS_WINDOWS "&Окна" + IDS_VIEW_SELECTCOLUMNS "&Выбрать столбцы..." + IDS_OPTIONS_SHOW16BITTASKS "&Отображать 16-разрядные задачи" + IDS_VIEW_CPUHISTORY "&Загрузка ЦП" + IDS_VIEW_CPUHISTORY_ONEGRAPHALL "&Один график на все ЦП" + IDS_VIEW_CPUHISTORY_ONEGRAPHPERCPU "&По графику на каждый ЦП" + IDS_VIEW_SHOWKERNELTIMES "&Вывод времени ядра" + IDS_APPLICATIONS "Приложения" + IDS_PROCESSES "Процессы" + IDS_PERFORMANCE "Быстродействие" + IDS_STATUS_BAR_CPU_USAGE "Загрузка ЦП: %3d%%" + IDS_STATUS_BAR_PROCESSES "Процессов: %d" + IDS_STATUS_BAR_MEMORY_USAGE "Выделение памяти: %dK / %dK" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_IMAGENAME "Имя образа" + IDS_PID "PID" + IDS_CPUUSAGE "ЦП" + IDS_CPUTIME "Время ЦП" + IDS_MEMORYUSAGE "Память" + IDS_MEMORYUSAGEDELTA "Память (изм)" + IDS_PEAKMEMORYUSAGE "Пиковое использование памяти" + IDS_PAGEFAULTS "Ош. стр." + IDS_USEROBJECTS "Объекты USER" + IDS_IOREADS "Число чтений" + IDS_IOREADBYTES "Прочитано байт" + IDS_SESSIONID "Код сеанса" + IDS_USERNAME "Имя пользователя" + IDS_PAGEFAULTSDELTA "Ош. стр. (изм)" + IDS_VIRTUALMEMORYSIZE "Объём виртуальной памяти" + IDS_PAGEDPOOL "Выгр. п." + IDS_NONPAGEDPOOL "Н. выгр. пул." + IDS_BASEPRIORITY "Баз. пр" + IDS_HANDLECOUNT "Дескр." + IDS_THREADCOUNT "Потоков" + IDS_GDIOBJECTS "Объекты GDI" + IDS_IOWRITES "Число записей" + IDS_IOWRITEBYTES "Записано байт" + IDS_IOOTHER "Прочий ввод-вывод" + IDS_IOOTHERBYTES "Прочих байт при вводе-выводе" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_WARNING_TITLE "Предупреждение диспетчера задач" + IDS_PRIORITY_CHANGE_MESSAGE "ВНИМАНИЕ! Изменение класса приоритета этого \n\процесса может привести к нежелательным результатам, \n\в том числе к нестабильной работе системы. Вы \n\действительно хотите изменить класс приоритета?" + IDS_PRIORITY_UNABLE2CHANGE "Невозможно сменить приоритет." + IDS_TERMINATE_MESSAGE "ВНИМАНИЕ! Завершение процесса может \nпривести к нежелательным результатам, в том числе \nк потере данных или к нестабильной работе системы. \nВы действительно хотите завершить процесс?" + IDS_TERMINATE_UNABLE2TERMINATE "Невозможно завершить процесс" + IDS_DEBUG_MESSAGE "ВНИМАНИЕ! Отладка этого процесса может привести к потере данных.\nВы действительно хотите использовать отладчик?" + IDS_AFFINITY_ERROR_MESSAGE "Процессу должен соответствовать хотя бы один ЦП." + IDS_AFFINITY_ERROR_TITLE "Неправильный параметр" + IDS_AFFINITY_UNABLE2ACCESS "Невозможно получить доступ или установить соответствие процесса" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_SYSTEM_IDLE_PROCESS "Бездействие системы" + IDS_APPLICATION_NOT_RESPONDING "Не отвечает" + IDS_APPLICATION_RUNNING "Работает" + IDS_APPLICATION_TASK "Задача" + IDS_APPLICATION_STATUS "Состояние" + IDS_DEBUG_CHANNEL "Каналы отладки" + IDS_DEBUG_CHANNEL_FIXME "Fixme" + IDS_DEBUG_CHANNEL_ERR "Err" + IDS_DEBUG_CHANNEL_WARN "Warn" + IDS_DEBUG_CHANNEL_TRACE "Trace" +END diff --git a/programs/uninstaller/Lt.rc b/programs/uninstaller/Lt.rc index 7cf0dc26486..89b42be0dfd 100644 --- a/programs/uninstaller/Lt.rc +++ b/programs/uninstaller/Lt.rc @@ -27,5 +27,5 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE { IDS_APPNAME, "Wine programų šalinimo programa" - IDS_UNINSTALLFAILED, "Nepavyko įvykdyti programos pašalinimo komandos '%s', greičiausiai dėl trūkstamo vykdomojo failo.\r\nAr norite pašalinti programos šalinimo įrašą iš registro?" + IDS_UNINSTALLFAILED, "Nepavyko įvykdyti programos pašalinimo komandos „%s“, greičiausiai dėl trūkstamo vykdomojo failo.\r\nAr norite pašalinti programos šalinimo įrašą iš registro?" } diff --git a/programs/uninstaller/Ru.rc b/programs/uninstaller/Ru.rc index 512b8f6a2c7..4e74ee835b5 100644 --- a/programs/uninstaller/Ru.rc +++ b/programs/uninstaller/Ru.rc @@ -20,9 +20,12 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE { - IDS_APPNAME, "Óäàëåíèå ïðèëîæåíèé WINE" - IDS_UNINSTALLFAILED, "Îøèáêà âûïîëíåíèÿ êîìàíäû óäàëåíèÿ '%s', âîçìîæíî èç-çà ïîòåðè ôàéëîâ ïðèëîæåíèÿ.\r\nÓäàëèòü èíôîðìàöèþ îá óñòàíîâêå èç ðååñòðà?" + IDS_APPNAME, "Удаление приложений WINE" + IDS_UNINSTALLFAILED, "Ошибка выполнения команды удаления '%s', возможно из-за потери файлов приложения.\r\nУдалить информацию об установке из реестра?" } diff --git a/programs/view/Ru.rc b/programs/view/Ru.rc index 9d4d39e8f63..c914434185c 100644 --- a/programs/view/Ru.rc +++ b/programs/view/Ru.rc @@ -20,6 +20,9 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT /* @@ -30,19 +33,19 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT VIEW MENU BEGIN - POPUP "&Ôàéë" + POPUP "&Файл" BEGIN - MENUITEM "&Îòêðûòü", IDM_OPEN - MENUITEM "Â&ûõîä", IDM_EXIT + MENUITEM "&Открыть", IDM_OPEN + MENUITEM "В&ыход", IDM_EXIT END - POPUP "&Ïîëîæåíèå" + POPUP "&Положение" BEGIN - MENUITEM "&Ðàñøèðèòü ïî îêíó", IDM_SET_EXT_TO_WIN + MENUITEM "&Расширить по окну", IDM_SET_EXT_TO_WIN MENUITEM SEPARATOR - MENUITEM "Â&ëåâî", IDM_LEFT - MENUITEM "Â&ïðàâî", IDM_RIGHT - MENUITEM "Â&âåðõ", IDM_UP - MENUITEM "Â&íèç", IDM_DOWN + MENUITEM "В&лево", IDM_LEFT + MENUITEM "В&право", IDM_RIGHT + MENUITEM "В&верх", IDM_UP + MENUITEM "В&низ", IDM_DOWN END END @@ -67,5 +70,5 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_DESCRIPTION "Ïðîñìîòîðùèê îáû÷íûõ ìåòàôàéëîâ" + IDS_DESCRIPTION "Просмоторщик обычных метафайлов" END diff --git a/programs/wineboot/wineboot_Ru.rc b/programs/wineboot/wineboot_Ru.rc index b1ab0ca87c9..ef777bcb885 100644 --- a/programs/wineboot/wineboot_Ru.rc +++ b/programs/wineboot/wineboot_Ru.rc @@ -21,17 +21,20 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT IDD_ENDTASK DIALOG DISCARDABLE 0, 0, 186, 71 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Îæèäàíèå ïðîãðàììû" +CAPTION "Ожидание программы" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "Îòìåíà",IDCANCEL,129,49,50,15 - PUSHBUTTON "Çàâåðøèòü Ïðîöåññ",IDOK,51,49,71,15 - LTEXT "Ïðîèñõîäèò ñìåíà ïîëüçîâàòåëÿ èëè âûêëþ÷åíèå, íî ýòà ïðîãðàììà íå îòâå÷àåò.", + DEFPUSHBUTTON "Отмена",IDCANCEL,129,49,50,15 + PUSHBUTTON "Завершить Процесс",IDOK,51,49,71,15 + LTEXT "Происходит смена пользователя или выключение, но эта программа не отвечает.", IDC_STATIC,7,7,172,19 - LTEXT "Åñëè çàêðûòü ïðîãðàììó ïðÿìî ñåé÷àñ, òî ìîæíî ïîòåðÿòü âñå íåñîõðàíåííûå äàííûå.", + LTEXT "Если закрыть программу прямо сейчас, то можно потерять все несохраненные данные.", IDC_STATIC,7,28,172,15 END diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc index 2d3dc5c18b3..0ceb60efef1 100644 --- a/programs/winecfg/En.rc +++ b/programs/winecfg/En.rc @@ -264,7 +264,7 @@ BEGIN IDS_CONFIRM_DELETE_C "Are you sure you want to delete drive C?\n\nMost Windows applications expect drive C to exist, and will die messily if it doesn't. If you proceed remember to recreate it!" IDS_COL_DRIVELETTER "Letter" IDS_COL_DRIVEMAPPING "Drive Mapping" - IDS_NO_DRIVE_C "You don't have a drive C. This is not so great.\n\nRemember to click ‘Add’ in the Drives tab to create one!\n" + IDS_NO_DRIVE_C "You don't have a drive C. This is not so great.\n\nRemember to click 'Add' in the Drives tab to create one!\n" END STRINGTABLE DISCARDABLE @@ -289,7 +289,7 @@ BEGIN IDS_DEVICES_MIDIIN "MIDI In Devices" IDS_DEVICES_AUX "Aux Devices" IDS_DEVICES_MIXER "Mixer Devices" - IDS_UNAVAILABLE_DRIVER "Found driver in registry that is not available!\n\nRemove “%s” from registry?" + IDS_UNAVAILABLE_DRIVER "Found driver in registry that is not available!\n\nRemove '%s' from registry?" IDS_WARNING "Warning" END diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc index 2683a82f354..6c43883814f 100644 --- a/programs/winecfg/Nl.rc +++ b/programs/winecfg/Nl.rc @@ -5,6 +5,7 @@ * Copyright 2004 Rein Klazes * Copyright 2005-2006 Paul Vriens * Copyright 2007 Maarten Lankhorst + * Copyright 2009 Vincent Beers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -56,7 +57,7 @@ STYLE WS_CHILD | WS_DISABLED FONT 8, "MS Shell Dlg" BEGIN GROUPBOX " Toepassingsinstellingen ",IDC_STATIC, 8,4,244,240 - LTEXT "Wine geeft de mogelijkheid om per toepassing de Windowsversie in te stellen. Deze tab is gekoppeld aan de Libraries en Graphics tabs om zowel systeemwijde als applicatie specifieke instellingen in deze tabs mogelijk te maken.", + LTEXT "Wine geeft de mogelijkheid om per toepassing de Windowsversie in te stellen. Deze tab is gekoppeld aan de Libraries en Graphics tabs om zowel systeemwijde als applicatiespecifieke instellingen in deze tabs mogelijk te maken.", IDC_STATIC,15,20,227,40 CONTROL "Toepassingen",IDC_APP_LISTVIEW,"SysListView32",WS_BORDER | WS_TABSTOP | LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS, 15,60,230,140 @@ -70,7 +71,7 @@ IDD_GRAPHCFG DIALOG DISCARDABLE 0, 0, 260, 250 STYLE WS_CHILD | WS_DISABLED FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX " Venster-instellingen ",IDC_STATIC,8,4,244,84 + GROUPBOX " Vensterinstellingen ",IDC_STATIC,8,4,244,84 CONTROL "Een DirectX programma kan de muis in een venster vasthouden.",IDC_DX_MOUSE_GRAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,20,230,8 CONTROL "Laat de window manager de vensters &decoreren",IDC_ENABLE_DECORATED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,32,230,8 CONTROL "Laat de window manager de vensters beheren",IDC_ENABLE_MANAGED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,44,230,8 @@ -86,11 +87,11 @@ BEGIN COMBOBOX IDC_D3D_VSHADER_MODE,120,108,125,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Pixel Shader toestaan (indien ondersteund door de hardware)",IDC_D3D_PSHADER_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,126,230,10 - GROUPBOX " Scherm &Resolutie ",IDC_STATIC,8,151,244,93 + GROUPBOX " Scherm&resolutie ",IDC_STATIC,8,151,244,93 CONTROL "", IDC_RES_TRACKBAR, "msctls_trackbar32",WS_TABSTOP,12,161,187,15 EDITTEXT IDC_RES_DPIEDIT,204,161,23,13,ES_NUMBER|WS_TABSTOP LTEXT "dpi",IDC_STATIC,235,163,10,8 - LTEXT "Dit is een tekst voorbeeld in Tahoma met puntgrootte 10",IDC_RES_FONT_PREVIEW,15,181,230,55 + LTEXT "Dit is een tekstvoorbeeld in Tahoma met puntgrootte 10",IDC_RES_FONT_PREVIEW,15,181,230,55 END IDD_DLLCFG DIALOG DISCARDABLE 0, 0, 260, 250 @@ -114,14 +115,14 @@ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "Edit Override" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX " Laad volgorde ",IDC_STATIC,8,4,94,66 + GROUPBOX " Laadvolgorde ",IDC_STATIC,8,4,94,66 CONTROL "&Builtin (Wine)",IDC_RAD_BUILTIN,"Button", BS_AUTORADIOBUTTON | WS_GROUP,16,14,75,10 CONTROL "&Native (Windows)",IDC_RAD_NATIVE,"Button", BS_AUTORADIOBUTTON,16,24,75,10 CONTROL "Bui<in dan Native",IDC_RAD_BUILTIN_NATIVE,"Button", BS_AUTORADIOBUTTON,16,34,75,10 CONTROL "Nati&ve dan Builtin",IDC_RAD_NATIVE_BUILTIN,"Button", BS_AUTORADIOBUTTON,16,44,75,10 CONTROL "&Uitzetten",IDC_RAD_DISABLE,"Button", BS_AUTORADIOBUTTON,16,54,75,10 DEFPUSHBUTTON "OK",IDOK,8,74,45,14,WS_GROUP - PUSHBUTTON "Afbreken",IDCANCEL,57,74,45,14,WS_GROUP + PUSHBUTTON "Annuleren",IDCANCEL,57,74,45,14,WS_GROUP END IDD_DRIVECFG DIALOG DISCARDABLE 0, 0, 260, 250 @@ -129,7 +130,7 @@ STYLE WS_CHILD | WS_DISABLED FONT 8, "MS Shell Dlg" BEGIN GROUPBOX " Stations ",IDC_STATIC,8,4,244,240 - LTEXT "Failed to connect to the mount manager, the drive configuration cannot be edited.", IDC_STATIC_MOUNTMGR_ERROR, 15,30,220,76 + LTEXT "Kon niet verbinden met de mount manager, de schijfconfiguratie kan niet worden bewerkt.", IDC_STATIC_MOUNTMGR_ERROR, 15,30,220,76 CONTROL "Listview",IDC_LIST_DRIVES,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,18,232,76 PUSHBUTTON "&Toevoegen",IDC_BUTTON_ADD,15,98,54,14 @@ -146,7 +147,7 @@ BEGIN LTEXT "Naam en serienummer",IDC_LABELSERIAL_STATIC,15,155,131,10 - PUSHBUTTON "Toon &Uitgebreid",IDC_BUTTON_SHOW_HIDE_ADVANCED,183,136,65,13 + PUSHBUTTON "&Geavanceerd...",IDC_BUTTON_SHOW_HIDE_ADVANCED,183,136,65,13 CONTROL "Automatisch detecteren van apparaat:",IDC_RADIO_AUTODETECT,"Button", BS_AUTORADIOBUTTON,15,166,150,10 EDITTEXT IDC_EDIT_DEVICE,27,176,174,13,ES_AUTOHSCROLL @@ -156,29 +157,29 @@ BEGIN LTEXT "&Naam:",IDC_STATIC_LABEL,33,208,60,12 EDITTEXT IDC_EDIT_LABEL,94,205,78,13,ES_AUTOHSCROLL | WS_TABSTOP - LTEXT "S&erie nummer:",IDC_STATIC_SERIAL,33,225,60,12 + LTEXT "S&erienummer:",IDC_STATIC_SERIAL,33,225,60,12 EDITTEXT IDC_EDIT_SERIAL,94,221,78,13,ES_AUTOHSCROLL | WS_TABSTOP - CONTROL "Toon \".\" files",IDC_SHOW_DOT_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,260,230,8 + CONTROL "Toon \".\" bestanden",IDC_SHOW_DOT_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,260,230,8 END IDD_AUDIOCFG DIALOG DISCARDABLE 0, 0, 260, 250 STYLE WS_CHILD | WS_DISABLED FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX " Stuurprogramma selectie ",IDC_STATIC,8,4,244,195 - LTEXT "Selecteer een geluids-stuurprogramma door het aanvinken van het gewenste stuurprogramma. Zet het geluid uit door geen stuurprogramma te selecteren. Het selecteren van meerdere stuurprogramma's wordt niet aanbevolen. Configureer een stuurprogramma d.m.v. een rechter muisklik hierop.",IDC_STATIC,15,20,227,45 + GROUPBOX " Stuurprogrammaselectie ",IDC_STATIC,8,4,244,195 + LTEXT "Selecteer een geluidsstuurprogramma door het gewenste stuurprogramma aan te vinken. Zet het geluid uit door geen stuurprogramma te selecteren. Het selecteren van meerdere stuurprogramma's wordt niet aanbevolen. Rechtsklik op een stuurprogramma om het te configureren.",IDC_STATIC,15,20,227,45 CONTROL "Apparaten",IDC_AUDIO_TREE,"SysTreeView32",WS_BORDER | WS_TABSTOP,15,65,140,125 PUSHBUTTON "Geluidstest",IDC_AUDIO_TEST,165,65,79,14 PUSHBUTTON "Configuratiescherm",IDC_AUDIO_CONTROL_PANEL,165,85,79,14 GROUPBOX " DirectSound ",IDC_STATIC,8,205,244,60 LTEXT "Hardwareversnelling: ",IDC_STATIC,15,215,90,10 COMBOBOX IDC_DSOUND_HW_ACCEL,100,213,150,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Monsterfrequentie:",IDC_STATIC,15,232,70,8 + LTEXT "Samplefrequentie:",IDC_STATIC,15,232,70,8 COMBOBOX IDC_DSOUND_RATES,90,230,42,76,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Bits per monster:",IDC_STATIC,157,232,60,8 + LTEXT "Bits per sample:",IDC_STATIC,157,232,60,8 COMBOBOX IDC_DSOUND_BITS,220,230,30,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Stuurprogramma emulatie",IDC_DSOUND_DRV_EMUL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,250,230,10 + CONTROL "Stuurprogramma-emulatie",IDC_DSOUND_DRV_EMUL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,250,230,10 END IDD_DESKTOP_INTEGRATION DIALOG DISCARDABLE 0, 0, 260, 250 @@ -202,7 +203,7 @@ BEGIN CONTROL "",IDC_SYSPARAM_SIZE_UD,UPDOWN_CLASS,UDS_SETBUDDYINT | WS_DISABLED,187,74,15,13 PUSHBUTTON "Font",IDC_SYSPARAM_FONT,208,74,37,13,WS_DISABLED GROUPBOX " Shell Folder ",IDC_STATIC,8,114,244,100 /* FIXME */ - CONTROL "Listview",IDC_LIST_SFPATHS,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | + CONTROL "Lijstweergave",IDC_LIST_SFPATHS,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,126,230,64 CONTROL "Verwijs naar:",IDC_LINK_SFPATH,"Button",BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED,15,195,60,13 EDITTEXT IDC_EDIT_SFPATH,75,195,125,13,ES_AUTOHSCROLL|WS_TABSTOP|WS_DISABLED @@ -226,7 +227,7 @@ BEGIN IDS_WINECFG_TITLE_APP "Wine configuratie voor %s" IDS_THEMEFILE "Thema-bestanden" IDS_THEMEFILE_SELECT "Thema-bestanden kiezen" - IDS_AUDIO_MISSING "Op dit moment is er geen stuurprogramma voor geluid gespecificeerd in de registry.\n\nEen aanbevolen stuurbestand is voor u geselecteerd.\nU kunt dit stuurbestand gebruiken of (indien beschikbaar) een ander selecteren.\n\nKlik op 'Toepassen' om deze selectie te activeren." + IDS_AUDIO_MISSING "Op dit moment is er geen stuurprogramma voor geluid gespecificeerd in het register.\n\nEen aanbevolen stuurprogramma is voor u geselecteerd.\nU kunt dit stuurprogramma gebruiken of (indien beschikbaar) een ander selecteren.\n\nKlik op Toepassen om deze selectie te activeren." IDS_SHELL_FOLDER "Persoonlijke map" IDS_LINKS_TO "Verwijst naar" END @@ -235,12 +236,12 @@ STRINGTABLE DISCARDABLE BEGIN IDS_DLL_WARNING "Veranderen van de laadvolgorde van deze bibliotheek wordt niet aanbevolen\n. Weet u zeker dat u dit wilt doen?" IDS_DLL_WARNING_CAPTION "Waarschuwing: systeembibliotheek" - IDS_DLL_NATIVE "Native (Windows)" - IDS_DLL_BUILTIN "Builtin (Wine)" - IDS_DLL_NATIVE_BUILTIN "Native dan builtin" - IDS_DLL_BUILTIN_NATIVE "Builtin dan native" - IDS_DLL_DISABLED "Uitgeschakeld" - IDS_DEFAULT_SETTINGS "Standaard instellingen" + IDS_DLL_NATIVE "native" + IDS_DLL_BUILTIN "builtin" + IDS_DLL_NATIVE_BUILTIN "native, builtin" + IDS_DLL_BUILTIN_NATIVE "builtin, native" + IDS_DLL_DISABLED "uitgeschakeld" + IDS_DEFAULT_SETTINGS "Standaardinstellingen" IDS_EXECUTABLE_FILTER "Wine toepassingen (*.exe,*.exe.so)\0*.exe;*.exe.so\0" IDS_USE_GLOBAL_SETTINGS "Gebruike globale instellingen" IDS_SELECT_EXECUTABLE "Selecteer een uitvoerbaar bestand" @@ -283,13 +284,13 @@ BEGIN IDS_DRIVER_COREAUDIO "CoreAudio Stuurprogramma" IDS_OPEN_DRIVER_ERROR "%s kon niet worden geopend!" IDS_SOUNDDRIVERS "Stuurprogramma's voor geluid" - IDS_DEVICES_WAVEOUT "Wave Out apparaten" - IDS_DEVICES_WAVEIN "Wave In apparaten" - IDS_DEVICES_MIDIOUT "MIDI Out apparaten" - IDS_DEVICES_MIDIIN "MIDI In apparaten" - IDS_DEVICES_AUX "Aux apparaten" - IDS_DEVICES_MIXER "Mixer apparaten" - IDS_UNAVAILABLE_DRIVER "Stuurprogramma in de registry is niet beschikbaar!\n\nVerwijder \"%s\" uit de registry?" + IDS_DEVICES_WAVEOUT "Wave Out Apparaten" + IDS_DEVICES_WAVEIN "Wave In Apparaten" + IDS_DEVICES_MIDIOUT "MIDI Out Apparaten" + IDS_DEVICES_MIDIIN "MIDI In Apparaten" + IDS_DEVICES_AUX "Aux Apparaten" + IDS_DEVICES_MIXER "Mixer Apparaten" + IDS_UNAVAILABLE_DRIVER "Stuurprogramma in het register is niet beschikbaar!\n\nVerwijder \"%s\" uit het register?" IDS_WARNING "Waarschuwing" END @@ -305,24 +306,24 @@ BEGIN IDC_SYSPARAMS_SELECTION_TEXT "Selectie Tekst" IDC_SYSPARAMS_TOOLTIP "ToolTip Achtergrond" IDC_SYSPARAMS_TOOLTIP_TEXT "ToolTip Tekst" - IDC_SYSPARAMS_WINDOW "Window Achtergrond" - IDC_SYSPARAMS_WINDOW_TEXT "Window Tekst" - IDC_SYSPARAMS_ACTIVE_TITLE "Actieve Titel Balk" - IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Actieve Titel Tekst" - IDC_SYSPARAMS_INACTIVE_TITLE "Inactieve Titel Balk" - IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Inactieve Title Tekst" - IDC_SYSPARAMS_MSGBOX_TEXT "Melding Window Tekst" + IDC_SYSPARAMS_WINDOW "Venster Achtergrond" + IDC_SYSPARAMS_WINDOW_TEXT "Venster Tekst" + IDC_SYSPARAMS_ACTIVE_TITLE "Actieve Titelbalk" + IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Actieve Titeltekst" + IDC_SYSPARAMS_INACTIVE_TITLE "Inactieve Titelbalk" + IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Inactieve Titeltekst" + IDC_SYSPARAMS_MSGBOX_TEXT "Meldingsvenster Tekst" IDC_SYSPARAMS_APPWORKSPACE "Applicatie Werkruimte" - IDC_SYSPARAMS_WINDOW_FRAME "Window Raamwerk" + IDC_SYSPARAMS_WINDOW_FRAME "Vensterraamwerk" IDC_SYSPARAMS_ACTIVE_BORDER "Actieve Rand" IDC_SYSPARAMS_INACTIVE_BORDER "Inactieve Rand" - IDC_SYSPARAMS_BUTTON_SHADOW "Knoppen Schaduw" + IDC_SYSPARAMS_BUTTON_SHADOW "Knopschaduw" IDC_SYSPARAMS_GRAY_TEXT "Grijze Tekst" IDC_SYSPARAMS_BUTTON_HILIGHT "Knoppen Gemarkeerd" IDC_SYSPARAMS_BUTTON_DARK_SHADOW "Knoppen Donkere Schaduw" IDC_SYSPARAMS_BUTTON_LIGHT "Knoppen Licht" IDC_SYSPARAMS_BUTTON_ALTERNATE "Knoppen Alternatieve Achtergrond" - IDC_SYSPARAMS_HOT_TRACKING "'Hot-Tracked' Onderdeel" + IDC_SYSPARAMS_HOT_TRACKING "Hot-Tracked Onderdeel" IDC_SYSPARAMS_ACTIVE_TITLE_GRADIENT "Actieve Titelbalk Verloop" IDC_SYSPARAMS_INACTIVE_TITLE_GRADIENT "Inactieve Titelbalk Verloop" IDC_SYSPARAMS_MENU_HILIGHT "Menu Gemarkeerd" diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc index b4d76c65631..503fc969051 100644 --- a/programs/winecfg/Pt.rc +++ b/programs/winecfg/Pt.rc @@ -260,7 +260,7 @@ BEGIN PUSHBUTTON "Auto&detectar...",IDC_BUTTON_AUTODETECT,190,98,56,14 /* editing drive details */ - LTEXT "&Localização:",IDC_STATIC,15,123,20,9 + LTEXT "&Localização:",IDC_STATIC_PATH,15,123,20,9 EDITTEXT IDC_EDIT_PATH,41,120,160,13,ES_AUTOHSCROLL | WS_TABSTOP PUSHBUTTON "&Procurar...",IDC_BUTTON_BROWSE_PATH,206,120,40,13 diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc dissimilarity index 64% index 7962c98bda7..7112a13b13c 100644 --- a/programs/winecfg/Ru.rc +++ b/programs/winecfg/Ru.rc @@ -1,332 +1,335 @@ -/* - * WineCfg resources - * Russian Language Support - * - * Copyright 2003 Igor Stepin - * Copyright 2006 Vitaliy Margolen - * - * 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 "config.h" /* Needed for the PACKAGE_STRING definition */ -#include "resource.h" - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -IDR_WINECFG MENU DISCARDABLE -BEGIN - POPUP "" - BEGIN - MENUITEM "Configure", IDC_AUDIO_CONFIGURE - END -END - -IDD_ABOUTCFG DIALOGEX 0, 0, 260, 270 -STYLE WS_CHILD -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT PACKAGE_STRING,IDC_STATIC,119,17,120,8 - CONTROL IDB_WINE,IDC_STATIC,"Static",SS_BITMAP ,15,17,157,111 - LTEXT "http://www.winehq.org/",IDC_STATIC,119,31,106,8 -/* - LTEXT "Ýòà áèáëèîòåêà ÿâëÿåòñÿ ñâîáîäíûì ïðîãðàììíûì îáåñïå÷åíèåì; âû ìîæåòå ðàñïðîñòðàíÿòü å¸ è/èëè ìîäèôèöèðîâàòü ñîãëàñíî óñëîâèÿì ëèöåíçèè GNU Lesser General Public License, îïóáëèêîâàííîé Free Software Foundation; âåðñèè 2.1 ëèöåíçèè èëè (íà âàøå óñìîòðåíèå) ëþáîé áîëåå ïîçäíåé.", -*/ - LTEXT "This program 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.", - IDC_STATIC,119,44,124,72 - GROUPBOX " Ðåãèñòðàöèîííàÿ èíôîðìàöèÿ Windows ", IDC_STATIC, 15, 110, 230, 55 - LTEXT "Èìÿ:", IDC_STATIC, 22, 126, 40, 20 - EDITTEXT IDC_ABT_OWNER, 75, 126, 160, 13, ES_AUTOHSCROLL | WS_TABSTOP - LTEXT "Îðãàíèçàöèÿ:", IDC_STATIC, 22, 140, 50, 20 - EDITTEXT IDC_ABT_ORG, 75, 140, 160, 13, ES_AUTOHSCROLL | WS_TABSTOP -END - -IDD_APPCFG DIALOG DISCARDABLE 0, 0, 260, 250 -STYLE WS_CHILD | WS_DISABLED -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX " Íàñòðîéêà ïðèëîæåíèé ",IDC_STATIC, 8,4,244,240 - LTEXT "Wine ìîæåò èìèòèðîâàòü ëþáóþ âåðñèþ Windows äëÿ êàæäîãî ïðèëîæåíèÿ. Ýòà âêëàäêà ñâÿçàíà ñ âêëàäêàìè Áèáëèîòåêè è Ãðàôèêà, ÷òî ïîçâîëÿåò èçìåíåíèå íàñòðîåê â ýòèõ âêëàäêàõ êàê äëÿ îïðåäåë¸ííîãî ïðèëîæåíèÿ, òàê è ãëîáàëüíî.", - IDC_STATIC,15,20,227,60 - CONTROL "Ïðèëîæåíèÿ",IDC_APP_LISTVIEW,"SysListView32",WS_BORDER | WS_TABSTOP | LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS, - 15,65,230,134 - PUSHBUTTON "&Äîáàâèòü ïðèëîæåíèå...",IDC_APP_ADDAPP, 68,204,94,14 - PUSHBUTTON "&Óäàëèòü ïðèëîæåíèå",IDC_APP_REMOVEAPP, 164,204,78,14 - LTEXT "&Âåðñèÿ Windows:",IDC_STATIC,17,226,58,8 - COMBOBOX IDC_WINVER,83,224,163,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_GRAPHCFG DIALOG DISCARDABLE 0, 0, 260, 250 -STYLE WS_CHILD | WS_DISABLED -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX " Íàñòðîéêè îêíà ",IDC_STATIC,8,4,244,84 - CONTROL "Ðàçðåøèòü ïðèëîæåíèþ DirectX óäåðæèâàòü ìûøü â ñâî¸ì îêíå",IDC_DX_MOUSE_GRAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,20,230,8 - CONTROL "Ðàçðåøèòü ìåíåäæåðó îêîí &äåêîðèðîâàòü îêíà",IDC_ENABLE_DECORATED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,32,230,8 - CONTROL "Ðàçðåøèòü ìåíåäæåðó îêîí óïðàâëÿòü îêíàìè Wine",IDC_ENABLE_MANAGED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,44,230,8 - CONTROL "Ýìóëèðîâàòü âèðòóàëüíûé ðàáî÷èé ñòîë",IDC_ENABLE_DESKTOP,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,15,56,230,8 - LTEXT "Ðàçìåð ðàáî÷åãî ñòîëà:",IDC_DESKTOP_SIZE,15,70,84,8,WS_DISABLED - LTEXT "X",IDC_DESKTOP_BY,149,70,8,8,WS_DISABLED - EDITTEXT IDC_DESKTOP_WIDTH,104,68,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED - EDITTEXT IDC_DESKTOP_HEIGHT,157,68,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED - - GROUPBOX " Direct3D ",IDC_STATIC,8,95,244,49 - LTEXT "Âåðøèííûå øåéäåðû: ",IDC_STATIC,15,110,80,32 - COMBOBOX IDC_D3D_VSHADER_MODE,100,108,145,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Âêëþ÷èòü Pixel Shader (åñëè ïîääåðæèâàåòñÿ îáîðóäîâàíèåì)",IDC_D3D_PSHADER_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,126,230,10 - - GROUPBOX " Ðàçðåøåíèå ýêðàíà ",IDC_STATIC,8,151,244,93 - CONTROL "", IDC_RES_TRACKBAR, "msctls_trackbar32",WS_TABSTOP,12,161,187,15 - EDITTEXT IDC_RES_DPIEDIT,204,161,23,13,ES_NUMBER|WS_TABSTOP - LTEXT "dpi",IDC_STATIC,235,163,10,8 - LTEXT "This is a sample text using 10 point Tahoma",IDC_RES_FONT_PREVIEW,15,181,230,55 -END - -IDD_DLLCFG DIALOG DISCARDABLE 0, 0, 260, 250 -STYLE WS_CHILD | WS_DISABLED -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX " Çàìåùåíèÿ DLL ",IDC_STATIC,8,4,244,240 - LTEXT "Çäåñü óêàçûâàåòñÿ, êàêóþ äèíàìè÷åñêè ïîäêëþ÷àåìóþ áèáëèîòåêó (DLL) èñïîëüçîâàòü: âñòðîåííóþ â Wine èëè ñòîðîííþþ (èç Windows)." - ,IDC_STATIC,16,16,220,32 - LTEXT "Íîâîå çàìåùåíèå äëÿ áèáëèîòåêè:",IDC_STATIC,16,58,160,8 - COMBOBOX IDC_DLLCOMBO,16,68,140,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | CBS_SORT | CBS_LOWERCASE - PUSHBUTTON "&Äîáàâèòü",IDC_DLLS_ADDDLL, 164,68,82,13,BS_DEFPUSHBUTTON - LTEXT "Ñóùåñòâóþùèå çàìåùåíèÿ:",IDC_STATIC,16,86,100,8 - LISTBOX IDC_DLLS_LIST,16,96,140,140,WS_BORDER | WS_TABSTOP | WS_VSCROLL - PUSHBUTTON "&Ðåäàêòèðîâàòü",IDC_DLLS_EDITDLL,164,96,82,14 - PUSHBUTTON "&Óäàëèòü",IDC_DLLS_REMOVEDLL,164,114,82,14 -END - -IDD_LOADORDER DIALOG DISCARDABLE 80, 90, 150, 92 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Ðåäàêòèðîâàòü çàìåùåíèå" -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX " Ïîðÿäîê çàãðóçêè ",IDC_STATIC,8,4,135,66 - CONTROL "&Âñòðîåííàÿ (Wine)",IDC_RAD_BUILTIN,"Button", BS_AUTORADIOBUTTON | WS_GROUP,16,14,105,10 - CONTROL "Ñ&òîðîííÿÿ (Windows)",IDC_RAD_NATIVE,"Button", BS_AUTORADIOBUTTON,16,24,105,10 - CONTROL "Â&ñòðîåííàÿ, çàòåì ñòîðîííÿÿ",IDC_RAD_BUILTIN_NATIVE,"Button", BS_AUTORADIOBUTTON,16,34,115,10 - CONTROL "Ñò&îðîííÿÿ, çàòåì âñòðîåííàÿ",IDC_RAD_NATIVE_BUILTIN,"Button", BS_AUTORADIOBUTTON,16,44,115,10 - CONTROL "&Áëîêèðîâàòü",IDC_RAD_DISABLE,"Button", BS_AUTORADIOBUTTON,16,54,105,10 - DEFPUSHBUTTON "OK",IDOK,8,74,45,14,WS_GROUP - PUSHBUTTON "Îòìåíà",IDCANCEL,57,74,45,14,WS_GROUP -END - -IDD_DRIVECFG DIALOG DISCARDABLE 0, 0, 260, 250 -STYLE WS_CHILD | WS_DISABLED -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX " Íàñòðîéêà äèñêîâ ",IDC_STATIC,8,4,244,240 - LTEXT "Failed to connect to the mount manager, the drive configuration cannot be edited.", IDC_STATIC_MOUNTMGR_ERROR, 15,30,220,76 - CONTROL "Listview",IDC_LIST_DRIVES,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | - LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,18,232,76 - PUSHBUTTON "&Äîáàâèòü...",IDC_BUTTON_ADD,15,98,45,14 - PUSHBUTTON "&Óäàëèòü",IDC_BUTTON_REMOVE,66,98,47,14 - PUSHBUTTON "&Àâòîîïðåäåëåíèå...",IDC_BUTTON_AUTODETECT,165,98,80,14 - - /* editing drive details */ - LTEXT "&Ïóòü:",IDC_STATIC_PATH,15,123,20,9 - EDITTEXT IDC_EDIT_PATH,41,120,160,13,ES_AUTOHSCROLL | WS_TABSTOP - PUSHBUTTON "&Îáçîð...",IDC_BUTTON_BROWSE_PATH,206,120,40,13 - - LTEXT "&Òèï:",IDC_STATIC_TYPE,15,138,21,10 - COMBOBOX IDC_COMBO_TYPE,41,135,77,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - - LTEXT "Ìåòêà è ñåðèéíûé íîìåð",IDC_LABELSERIAL_STATIC,15,155,95,10 - - PUSHBUTTON "Äîïîëíèòåëüíî...",IDC_BUTTON_SHOW_HIDE_ADVANCED,150,136,96,13 - CONTROL "Àâòîîïðåäåëèòü &c óñòðîéñòâà:",IDC_RADIO_AUTODETECT,"Button", - BS_AUTORADIOBUTTON,15,166,150,10 - EDITTEXT IDC_EDIT_DEVICE,27,176,174,13,ES_AUTOHSCROLL - PUSHBUTTON "Îá&çîð...",IDC_BUTTON_BROWSE_DEVICE,206,176,40,13 - CONTROL "&Íàçíà÷èòü âðó÷íóþ:",IDC_RADIO_ASSIGN,"Button", - BS_AUTORADIOBUTTON,15,195,100,10 - - LTEXT "&Ìåòêà:",IDC_STATIC_LABEL,33,208,29,12 - EDITTEXT IDC_EDIT_LABEL,103,205,118,13,ES_AUTOHSCROLL | WS_TABSTOP - LTEXT "Ñåðèéíûé íîìåð:",IDC_STATIC_SERIAL,33,225,80,12 - EDITTEXT IDC_EDIT_SERIAL,103,221,118,13,ES_AUTOHSCROLL | WS_TABSTOP - - CONTROL "Ïîêàçûâàòü ôàéëû, íà÷èíàþùèåñÿ ñ òî÷êè",IDC_SHOW_DOT_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,260,230,8 -END - -IDD_AUDIOCFG DIALOG DISCARDABLE 0, 0, 260, 250 -STYLE WS_CHILD | WS_DISABLED -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX " Âûáîð äðàéâåðà ",IDC_STATIC,8,4,244,195 - LTEXT "Çâóêîâîé äðàéâåð: ",IDC_STATIC,15,20,227,30 - CONTROL "Devices",IDC_AUDIO_TREE,"SysTreeView32",WS_BORDER | WS_TABSTOP,15,50,140,140 - PUSHBUTTON "&Ïðîâåðèòü çâóê",IDC_AUDIO_TEST,170,50,59,14 - PUSHBUTTON "Ïàíåëü óïðàâëåíèÿ",IDC_AUDIO_CONTROL_PANEL,170,70,80,14 - GROUPBOX " DirectSound ",IDC_STATIC,8,205,244,60 - LTEXT "Àïïàðàòíîå óñêîðåíèå: ",IDC_STATIC,15,215,90,10 - COMBOBOX IDC_DSOUND_HW_ACCEL,100,213,145,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "×àñòîòà (ãåðö):",IDC_STATIC,15,232,70,8 - COMBOBOX IDC_DSOUND_RATES,100,230,42,76,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Êîäèðîâàíèå (áèò):",IDC_STATIC,144,232,80,8 - COMBOBOX IDC_DSOUND_BITS,216,230,30,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Ýìóëÿöèÿ äðàéâåðà",IDC_DSOUND_DRV_EMUL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,250,230,10 -END - -IDD_DESKTOP_INTEGRATION DIALOG DISCARDABLE 0, 0, 260, 250 -STYLE WS_CHILD | WS_DISABLED -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX " Âíåøíèé âèä ",IDC_STATIC,8,4,244,106 - LTEXT "Òåìà:",IDC_STATIC,15,16,130,8 - COMBOBOX IDC_THEME_THEMECOMBO,15,24,130,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Óñòàíîâèòü òåìó...",IDC_THEME_INSTALL,152,23,93,14 - LTEXT "Öâåò:",IDC_THEME_COLORTEXT,15,40,112,8 - COMBOBOX IDC_THEME_COLORCOMBO,15,48,112,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Ðàçìåð:",IDC_THEME_SIZETEXT,135,40,110,8 - COMBOBOX IDC_THEME_SIZECOMBO,135,48,110,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Ýëåìåíò:",IDC_STATIC,15,64,112,8 - COMBOBOX IDC_SYSPARAM_COMBO,15,74,112,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Öâåò:",IDC_SYSPARAM_COLOR_TEXT,135,64,25,8,WS_DISABLED - PUSHBUTTON "",IDC_SYSPARAM_COLOR,135,74,25,13,WS_DISABLED | BS_OWNERDRAW - LTEXT "Ðàçìåð:",IDC_SYSPARAM_SIZE_TEXT,166,64,30,8,WS_DISABLED - EDITTEXT IDC_SYSPARAM_SIZE,166,74,23,13,ES_AUTOHSCROLL | WS_TABSTOP | WS_DISABLED - CONTROL "",IDC_SYSPARAM_SIZE_UD,UPDOWN_CLASS,UDS_SETBUDDYINT | WS_DISABLED,187,74,15,13 - PUSHBUTTON "Øðèôò",IDC_SYSPARAM_FONT,208,74,37,13,WS_DISABLED - GROUPBOX " Ñòàíäàðòíûå ïàïêè ",IDC_STATIC,8,114,244,100 - CONTROL "Listview",IDC_LIST_SFPATHS,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | - LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,126,230,64 - CONTROL "Íàïðàâèòü â:",IDC_LINK_SFPATH,"Button",BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED,15,195,50,13 - EDITTEXT IDC_EDIT_SFPATH,65,195,145,13,ES_AUTOHSCROLL|WS_TABSTOP|WS_DISABLED - PUSHBUTTON "Îáçîð",IDC_BROWSE_SFPATH,215,195,30,13,WS_DISABLED -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TAB_APPLICATIONS "Ïðèëîæåíèÿ" - IDS_TAB_DLLS "Áèáëèîòåêè" - IDS_TAB_DRIVES "Äèñêè" - IDS_CHOOSE_PATH "Âûáåðèòå öåëåâîé êàòàëîã â ñèñòåìå:" - IDS_HIDE_ADVANCED "Ñêðûòü äîïîëíèòåëüíûå" - IDS_SHOW_ADVANCED "Ïîêàçàòü äîïîëíèòåëüíûå" - IDS_NOTHEME "(áåç òåìû)" - IDS_TAB_GRAPHICS "Ãðàôèêà" - IDS_TAB_DESKTOP_INTEGRATION "Âèä è èíòåãðàöèÿ" - IDS_TAB_AUDIO "Àóäèî" - IDS_TAB_ABOUT "Î ïðîãðàììå" - IDS_WINECFG_TITLE "Íàñòðîéêà Wine" - IDS_WINECFG_TITLE_APP "Íàñòðîéêà Wine äëÿ %s" - IDS_THEMEFILE "Ôàéëû òåì" - IDS_THEMEFILE_SELECT "Âûáåðèòå ôàéë ñ òåìîé" - IDS_AUDIO_MISSING "Êîíôèãóðàöèÿ çâóêîâîãî äðàéâåðà íå íàéäåíà.\n\nÂûáðàí äðàéâåð ïî óìîë÷àíèþ. Ïðè íåîáõîäèìîñòè ìîæíî âûáðàòü äðóãîé äðàéâåð èç ñïèñêà äîñòóïíûõ.\n\nÄëÿ ñîõðàíåíèÿ èçìåíåíèé íàæìèòå êíîïêó Ïðèìåíèòü." - IDS_SHELL_FOLDER "Ñòàíäàðòíûå ïàïêè" - IDS_LINKS_TO "Ñâÿçàíî ñ" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_DLL_WARNING "Èçìåíåíèå ïîðÿäêà çàãðóçêè ýòîé áèáëèîòåêè íå ðåêîìåíäóåòñÿ.\nÂû äåéñòâèòåëüíî õîòèòå èçìåíèòü ïîðÿäîê?" - IDS_DLL_WARNING_CAPTION "Âíèìàíèå: ñèñòåìíàÿ áèáëèîòåêà" - IDS_DLL_NATIVE "ñòîðîííÿÿ" - IDS_DLL_BUILTIN "âñòðîåííàÿ" - IDS_DLL_NATIVE_BUILTIN "ñòîðîííÿÿ, âñòðîåííàÿ" - IDS_DLL_BUILTIN_NATIVE "âñòðîåííàÿ, ñòîðîííÿÿ" - IDS_DLL_DISABLED "îòêëþ÷åíà" - IDS_DEFAULT_SETTINGS "Óñòàíîâêè ïî óìîë÷àíèþ" - IDS_EXECUTABLE_FILTER "Ïðîãðàììû Wine (*.exe,*.exe.so)\0*.exe;*.exe.so\0" - IDS_USE_GLOBAL_SETTINGS "Èñïîëüçîâàòü ïî óìîë÷àíèþ" - IDS_SELECT_EXECUTABLE "Âûáåðèòå èñïîëíÿåìûé ôàéë" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_SHADER_MODE_HARDWARE "Âêëþ÷åíû" - IDS_SHADER_MODE_NONE "Âûêëþ÷åíû" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_DRIVE_UNKNOWN "Àâòîîïðåäåëåíèå" - IDS_DRIVE_FIXED "Ƹñòêèé äèñê" - IDS_DRIVE_REMOTE "Ñåòåâîé äèñê" - IDS_DRIVE_REMOVABLE "Äèñêîâîä" - IDS_DRIVE_CDROM "CD-ROM" - IDS_DRIVE_LETTERS_EXCEEDED "Íåâîçìîæíî ñîçäàòü íîâûé äèñê.\n\nÓ êàæäîãî äèñêà äîëæíà áûòü áóêâà - îò A äî Z, è ó Âàñ óæå 26 äèñêîâ." - IDS_SYSTEM_DRIVE_LABEL "Ñèñòåìíûé äèñê" - IDS_CONFIRM_DELETE_C "Äåéñòâèòåëüíî óäàëèòü äèñê C?\n\nÁîëüøèíñòâî Windows-ïðîãðàìì ïåðåñòàíóò ðàáîòàòü áåç äèñêà C. Åñëè Âû âñ¸ æå ðåøèëè óäàëèòü äèñê, íå çàáóäüòå ñîçäàòü íîâûé!" - IDS_COL_DRIVELETTER "Äèñê" - IDS_COL_DRIVEMAPPING "Ïóòü" - IDS_NO_DRIVE_C "Âû íå íàçíà÷èëè äèñê C.\n\nÍå çàáóäüòå åãî ñîçäàòü!\n" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_ACCEL_FULL "Ïîëíîå" - IDS_ACCEL_STANDARD "Ñòàíäàðòíîå" - IDS_ACCEL_BASIC "Ìèíèìàëüíîå" - IDS_ACCEL_EMULATION "Ýìóëÿöèÿ" - IDS_DRIVER_PULSE "PulseAudio äðàéâåð" - IDS_DRIVER_ALSA "ALSA äðàéâåð" - IDS_DRIVER_ESOUND "EsounD äðàéâåð" - IDS_DRIVER_OSS "OSS äðàéâåð" - IDS_DRIVER_JACK "JACK äðàéâåð" - IDS_DRIVER_NAS "NAS äðàéâåð" - IDS_DRIVER_AUDIOIO "Audio IO (Solaris) äðàéâåð" - IDS_DRIVER_COREAUDIO "CoreAudio äðàéâåð" - IDS_OPEN_DRIVER_ERROR "Íåâîçìîæíî îòêðûòü %s!" - IDS_SOUNDDRIVERS "Àóäèî äðàéâåðà" - IDS_DEVICES_WAVEOUT "Óñòðîéñòâî âûâîäà çâóêà" - IDS_DEVICES_WAVEIN "Óñòðîéñòâî ââîäà çâóêà" - IDS_DEVICES_MIDIOUT "Óñòðîéñòâî âûâîäà MIDI" - IDS_DEVICES_MIDIIN "Óñòðîéñòâî ââîäà MIDI" - IDS_DEVICES_AUX "Äîïîëíèòåëüíîå óñòðîéñòâî" - IDS_DEVICES_MIXER "Óñòðîéñòâî ìèêøèðîâàíèÿ" - IDS_UNAVAILABLE_DRIVER "Äðàéâåð, óêàçàííûé â ðååñòðå, íå íàéäåí!\n\nÓäàëèòü \"%s\" èç ðååñòðà?" - IDS_WARNING "Âíèìàíèå" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDC_SYSPARAMS_BUTTON "Ýëåìåíòû óïðàâëåíèÿ - ôîí" - IDC_SYSPARAMS_BUTTON_TEXT "Ýëåìåíòû óïðàâëåíèÿ - òåêñò" - IDC_SYSPARAMS_DESKTOP "Ñòîë" - IDC_SYSPARAMS_MENU "Ìåíþ - ôîí" - IDC_SYSPARAMS_MENU_TEXT "Ìåíþ - òåêñò" - IDC_SYSPARAMS_SCROLLBAR "Ïîëîñà ïðîêðóòêè" - IDC_SYSPARAMS_SELECTION "Âûäåëåíèå - ôîí" - IDC_SYSPARAMS_SELECTION_TEXT "Âûäåëåíèå - òåêñò" - IDC_SYSPARAMS_TOOLTIP "Ïîäñêàçêà - ôîí" - IDC_SYSPARAMS_TOOLTIP_TEXT "Ïîäñêàçêà - òåêñò" - IDC_SYSPARAMS_WINDOW "Ñîäåðæèìîå îêíà - ôîí" - IDC_SYSPARAMS_WINDOW_TEXT "Ñîäåðæèìîå îêíà - òåêñò" - IDC_SYSPARAMS_ACTIVE_TITLE "Àêòèâíîå îêíî" - IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Àêòèâíîå îêíî - òåêñò" - IDC_SYSPARAMS_INACTIVE_TITLE "Ïàññèâíîå îêíî" - IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Ïàññèâíîå îêíî - òåêñò" - IDC_SYSPARAMS_MSGBOX_TEXT "Îêíî ñîîáùåíèÿ - òåêñò" - IDC_SYSPARAMS_APPWORKSPACE "Ñîäåðæèìîå îêíà MDI - ôîí" - IDC_SYSPARAMS_WINDOW_FRAME "Îêíî - ðàìêà" - IDC_SYSPARAMS_ACTIVE_BORDER "Àêòèâíîå îêíî - ðàìêà" - IDC_SYSPARAMS_INACTIVE_BORDER "Ïàññèâíîå îêíî - ðàìêà" - IDC_SYSPARAMS_BUTTON_SHADOW "Ýëåìåíòû óïðàâëåíèÿ - òåíü" - IDC_SYSPARAMS_GRAY_TEXT "Íåäîñòóïíûé ýëåìåíò" - IDC_SYSPARAMS_BUTTON_HILIGHT "Ýëåìåíòû óïðàâëåíèÿ - ñâåòëàÿ ðàìêà" - IDC_SYSPARAMS_BUTTON_DARK_SHADOW "Ýëåìåíòû óïðàâëåíèÿ - òåìíàÿ òåíü" - IDC_SYSPARAMS_BUTTON_LIGHT "Ýëåìåíòû óïðàâëåíèÿ - ñâåò" - IDC_SYSPARAMS_BUTTON_ALTERNATE "Ýëåìåíòû óïðàâëåíèÿ - ôîí 2" - IDC_SYSPARAMS_HOT_TRACKING "Ññûëêà, Ïîäñâåòêà" - IDC_SYSPARAMS_ACTIVE_TITLE_GRADIENT "Ãðàäèåíò àêòèâíîãî îêíà" - IDC_SYSPARAMS_INACTIVE_TITLE_GRADIENT "Ãðàäèåíò ïàññèâíîãî îêíà" - IDC_SYSPARAMS_MENU_HILIGHT "Ïëîñêîå ìåíþ - ïîäñâåòêà" - IDC_SYSPARAMS_MENUBAR "Ïëîñêîå ìåíþ - ôîí" -END +/* + * WineCfg resources + * Russian Language Support + * + * Copyright 2003 Igor Stepin + * Copyright 2006 Vitaliy Margolen + * + * 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 "config.h" /* Needed for the PACKAGE_STRING definition */ +#include "resource.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +IDR_WINECFG MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "Настроить", IDC_AUDIO_CONFIGURE + END +END + +IDD_ABOUTCFG DIALOGEX 0, 0, 260, 270 +STYLE WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT PACKAGE_STRING,IDC_STATIC,119,17,120,8 + CONTROL IDB_WINE,IDC_STATIC,"Static",SS_BITMAP ,15,17,157,111 + LTEXT "http://www.winehq.org/",IDC_STATIC,119,31,106,8 +/* + LTEXT "Эта библиотека является свободным программным обеспечением; вы можете распространять её и/или модифицировать согласно условиям лицензии GNU Lesser General Public License, опубликованной Free Software Foundation; версии 2.1 лицензии или (на ваше усмотрение) любой более поздней.", +*/ + LTEXT "This program 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.", + IDC_STATIC,119,44,124,72 + GROUPBOX " Регистрационная информация Windows ", IDC_STATIC, 15, 110, 230, 55 + LTEXT "Имя:", IDC_STATIC, 22, 126, 40, 20 + EDITTEXT IDC_ABT_OWNER, 75, 126, 160, 13, ES_AUTOHSCROLL | WS_TABSTOP + LTEXT "Организация:", IDC_STATIC, 22, 140, 50, 20 + EDITTEXT IDC_ABT_ORG, 75, 140, 160, 13, ES_AUTOHSCROLL | WS_TABSTOP +END + +IDD_APPCFG DIALOG DISCARDABLE 0, 0, 260, 250 +STYLE WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX " Настройка приложений ",IDC_STATIC, 8,4,244,240 + LTEXT "Wine может имитировать любую версию Windows для каждого приложения. Эта вкладка связана с вкладками Библиотеки и Графика, что позволяет изменение настроек в этих вкладках как для определённого приложения, так и глобально.", + IDC_STATIC,15,20,227,60 + CONTROL "Приложения",IDC_APP_LISTVIEW,"SysListView32",WS_BORDER | WS_TABSTOP | LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS, + 15,65,230,134 + PUSHBUTTON "&Добавить приложение...",IDC_APP_ADDAPP, 68,204,94,14 + PUSHBUTTON "&Удалить приложение",IDC_APP_REMOVEAPP, 164,204,78,14 + LTEXT "&Версия Windows:",IDC_STATIC,17,226,58,8 + COMBOBOX IDC_WINVER,83,224,163,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_GRAPHCFG DIALOG DISCARDABLE 0, 0, 260, 250 +STYLE WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX " Настройки окна ",IDC_STATIC,8,4,244,84 + CONTROL "Разрешить приложению DirectX удерживать мышь в своём окне",IDC_DX_MOUSE_GRAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,20,230,8 + CONTROL "Разрешить менеджеру окон &декорировать окна",IDC_ENABLE_DECORATED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,32,230,8 + CONTROL "Разрешить менеджеру окон управлять окнами Wine",IDC_ENABLE_MANAGED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,44,230,8 + CONTROL "Эмулировать виртуальный рабочий стол",IDC_ENABLE_DESKTOP,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,15,56,230,8 + LTEXT "Размер рабочего стола:",IDC_DESKTOP_SIZE,15,70,84,8,WS_DISABLED + LTEXT "X",IDC_DESKTOP_BY,149,70,8,8,WS_DISABLED + EDITTEXT IDC_DESKTOP_WIDTH,104,68,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED + EDITTEXT IDC_DESKTOP_HEIGHT,157,68,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED + + GROUPBOX " Direct3D ",IDC_STATIC,8,95,244,49 + LTEXT "Вершинные шейдеры: ",IDC_STATIC,15,110,80,32 + COMBOBOX IDC_D3D_VSHADER_MODE,100,108,145,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Включить Pixel Shader (если поддерживается оборудованием)",IDC_D3D_PSHADER_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,126,230,10 + + GROUPBOX " Разрешение экрана ",IDC_STATIC,8,151,244,93 + CONTROL "", IDC_RES_TRACKBAR, "msctls_trackbar32",WS_TABSTOP,12,161,187,15 + EDITTEXT IDC_RES_DPIEDIT,204,161,23,13,ES_NUMBER|WS_TABSTOP + LTEXT "dpi",IDC_STATIC,235,163,10,8 + LTEXT "This is a sample text using 10 point Tahoma",IDC_RES_FONT_PREVIEW,15,181,230,55 +END + +IDD_DLLCFG DIALOG DISCARDABLE 0, 0, 260, 250 +STYLE WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX " Замещения DLL ",IDC_STATIC,8,4,244,240 + LTEXT "Здесь указывается, какую динамически подключаемую библиотеку (DLL) использовать: встроенную в Wine или стороннюю (из Windows)." + ,IDC_STATIC,16,16,220,32 + LTEXT "Новое замещение для библиотеки:",IDC_STATIC,16,58,160,8 + COMBOBOX IDC_DLLCOMBO,16,68,140,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | CBS_SORT | CBS_LOWERCASE + PUSHBUTTON "&Добавить",IDC_DLLS_ADDDLL, 164,68,82,13,BS_DEFPUSHBUTTON + LTEXT "Существующие замещения:",IDC_STATIC,16,86,100,8 + LISTBOX IDC_DLLS_LIST,16,96,140,140,WS_BORDER | WS_TABSTOP | WS_VSCROLL + PUSHBUTTON "&Редактировать",IDC_DLLS_EDITDLL,164,96,82,14 + PUSHBUTTON "&Удалить",IDC_DLLS_REMOVEDLL,164,114,82,14 +END + +IDD_LOADORDER DIALOG DISCARDABLE 80, 90, 150, 92 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Редактировать замещение" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX " Порядок загрузки ",IDC_STATIC,8,4,135,66 + CONTROL "&Встроенная (Wine)",IDC_RAD_BUILTIN,"Button", BS_AUTORADIOBUTTON | WS_GROUP,16,14,105,10 + CONTROL "С&торонняя (Windows)",IDC_RAD_NATIVE,"Button", BS_AUTORADIOBUTTON,16,24,105,10 + CONTROL "В&строенная, затем сторонняя",IDC_RAD_BUILTIN_NATIVE,"Button", BS_AUTORADIOBUTTON,16,34,115,10 + CONTROL "Ст&оронняя, затем встроенная",IDC_RAD_NATIVE_BUILTIN,"Button", BS_AUTORADIOBUTTON,16,44,115,10 + CONTROL "&Блокировать",IDC_RAD_DISABLE,"Button", BS_AUTORADIOBUTTON,16,54,105,10 + DEFPUSHBUTTON "OK",IDOK,8,74,45,14,WS_GROUP + PUSHBUTTON "Отмена",IDCANCEL,57,74,45,14,WS_GROUP +END + +IDD_DRIVECFG DIALOG DISCARDABLE 0, 0, 260, 250 +STYLE WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX " Настройка дисков ",IDC_STATIC,8,4,244,240 + LTEXT "Невозможно соединиться с mount manager! Конфигурация дисков не будет редактироваться.", IDC_STATIC_MOUNTMGR_ERROR, 15,30,220,76 + CONTROL "Listview",IDC_LIST_DRIVES,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | + LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,18,232,76 + PUSHBUTTON "&Добавить...",IDC_BUTTON_ADD,15,98,45,14 + PUSHBUTTON "&Удалить",IDC_BUTTON_REMOVE,66,98,47,14 + PUSHBUTTON "&Автоопределение...",IDC_BUTTON_AUTODETECT,165,98,80,14 + + /* editing drive details */ + LTEXT "&Путь:",IDC_STATIC_PATH,15,123,20,9 + EDITTEXT IDC_EDIT_PATH,41,120,160,13,ES_AUTOHSCROLL | WS_TABSTOP + PUSHBUTTON "&Обзор...",IDC_BUTTON_BROWSE_PATH,206,120,40,13 + + LTEXT "&Тип:",IDC_STATIC_TYPE,15,138,21,10 + COMBOBOX IDC_COMBO_TYPE,41,135,77,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + + LTEXT "Метка и серийный номер",IDC_LABELSERIAL_STATIC,15,155,95,10 + + PUSHBUTTON "Дополнительно...",IDC_BUTTON_SHOW_HIDE_ADVANCED,150,136,96,13 + CONTROL "Автоопределить &c устройства:",IDC_RADIO_AUTODETECT,"Button", + BS_AUTORADIOBUTTON,15,166,150,10 + EDITTEXT IDC_EDIT_DEVICE,27,176,174,13,ES_AUTOHSCROLL + PUSHBUTTON "Об&зор...",IDC_BUTTON_BROWSE_DEVICE,206,176,40,13 + CONTROL "&Назначить вручную:",IDC_RADIO_ASSIGN,"Button", + BS_AUTORADIOBUTTON,15,195,100,10 + + LTEXT "&Метка:",IDC_STATIC_LABEL,33,208,29,12 + EDITTEXT IDC_EDIT_LABEL,103,205,118,13,ES_AUTOHSCROLL | WS_TABSTOP + LTEXT "Серийный номер:",IDC_STATIC_SERIAL,33,225,80,12 + EDITTEXT IDC_EDIT_SERIAL,103,221,118,13,ES_AUTOHSCROLL | WS_TABSTOP + + CONTROL "Показывать файлы, начинающиеся с точки",IDC_SHOW_DOT_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,260,230,8 +END + +IDD_AUDIOCFG DIALOG DISCARDABLE 0, 0, 260, 250 +STYLE WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX " Выбор драйвера ",IDC_STATIC,8,4,244,195 + LTEXT "Звуковой драйвер: ",IDC_STATIC,15,20,227,30 + CONTROL "Devices",IDC_AUDIO_TREE,"SysTreeView32",WS_BORDER | WS_TABSTOP,15,50,140,140 + PUSHBUTTON "&Проверить звук",IDC_AUDIO_TEST,170,50,59,14 + PUSHBUTTON "Панель управления",IDC_AUDIO_CONTROL_PANEL,170,70,80,14 + GROUPBOX " DirectSound ",IDC_STATIC,8,205,244,60 + LTEXT "Аппаратное ускорение: ",IDC_STATIC,15,215,90,10 + COMBOBOX IDC_DSOUND_HW_ACCEL,100,213,145,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Частота (герц):",IDC_STATIC,15,232,70,8 + COMBOBOX IDC_DSOUND_RATES,100,230,42,76,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Кодирование (бит):",IDC_STATIC,144,232,80,8 + COMBOBOX IDC_DSOUND_BITS,216,230,30,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Эмуляция драйвера",IDC_DSOUND_DRV_EMUL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,250,230,10 +END + +IDD_DESKTOP_INTEGRATION DIALOG DISCARDABLE 0, 0, 260, 250 +STYLE WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX " Внешний вид ",IDC_STATIC,8,4,244,106 + LTEXT "Тема:",IDC_STATIC,15,16,130,8 + COMBOBOX IDC_THEME_THEMECOMBO,15,24,130,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Установить тему...",IDC_THEME_INSTALL,152,23,93,14 + LTEXT "Цвет:",IDC_THEME_COLORTEXT,15,40,112,8 + COMBOBOX IDC_THEME_COLORCOMBO,15,48,112,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Размер:",IDC_THEME_SIZETEXT,135,40,110,8 + COMBOBOX IDC_THEME_SIZECOMBO,135,48,110,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Элемент:",IDC_STATIC,15,64,112,8 + COMBOBOX IDC_SYSPARAM_COMBO,15,74,112,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT + LTEXT "Цвет:",IDC_SYSPARAM_COLOR_TEXT,135,64,25,8,WS_DISABLED + PUSHBUTTON "",IDC_SYSPARAM_COLOR,135,74,25,13,WS_DISABLED | BS_OWNERDRAW + LTEXT "Размер:",IDC_SYSPARAM_SIZE_TEXT,166,64,30,8,WS_DISABLED + EDITTEXT IDC_SYSPARAM_SIZE,166,74,23,13,ES_AUTOHSCROLL | WS_TABSTOP | WS_DISABLED + CONTROL "",IDC_SYSPARAM_SIZE_UD,UPDOWN_CLASS,UDS_SETBUDDYINT | WS_DISABLED,187,74,15,13 + PUSHBUTTON "Шрифт",IDC_SYSPARAM_FONT,208,74,37,13,WS_DISABLED + GROUPBOX " Стандартные папки ",IDC_STATIC,8,114,244,100 + CONTROL "Listview",IDC_LIST_SFPATHS,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | + LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,126,230,64 + CONTROL "Направить в:",IDC_LINK_SFPATH,"Button",BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED,15,195,50,13 + EDITTEXT IDC_EDIT_SFPATH,65,195,145,13,ES_AUTOHSCROLL|WS_TABSTOP|WS_DISABLED + PUSHBUTTON "Обзор",IDC_BROWSE_SFPATH,215,195,30,13,WS_DISABLED +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_TAB_APPLICATIONS "Приложения" + IDS_TAB_DLLS "Библиотеки" + IDS_TAB_DRIVES "Диски" + IDS_CHOOSE_PATH "Выберите целевой каталог в системе:" + IDS_HIDE_ADVANCED "Скрыть дополнительные" + IDS_SHOW_ADVANCED "Показать дополнительные" + IDS_NOTHEME "(без темы)" + IDS_TAB_GRAPHICS "Графика" + IDS_TAB_DESKTOP_INTEGRATION "Вид и интеграция" + IDS_TAB_AUDIO "Аудио" + IDS_TAB_ABOUT "О программе" + IDS_WINECFG_TITLE "Настройка Wine" + IDS_WINECFG_TITLE_APP "Настройка Wine для %s" + IDS_THEMEFILE "Файлы тем" + IDS_THEMEFILE_SELECT "Выберите файл с темой" + IDS_AUDIO_MISSING "Конфигурация звукового драйвера не найдена.\n\nВыбран драйвер по умолчанию. При необходимости можно выбрать другой драйвер из списка доступных.\n\nДля сохранения изменений нажмите кнопку Применить." + IDS_SHELL_FOLDER "Стандартные папки" + IDS_LINKS_TO "Связано с" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DLL_WARNING "Изменение порядка загрузки этой библиотеки не рекомендуется.\nВы действительно хотите изменить порядок?" + IDS_DLL_WARNING_CAPTION "Внимание: системная библиотека" + IDS_DLL_NATIVE "сторонняя" + IDS_DLL_BUILTIN "встроенная" + IDS_DLL_NATIVE_BUILTIN "сторонняя, встроенная" + IDS_DLL_BUILTIN_NATIVE "встроенная, сторонняя" + IDS_DLL_DISABLED "отключена" + IDS_DEFAULT_SETTINGS "Установки по умолчанию" + IDS_EXECUTABLE_FILTER "Программы Wine (*.exe,*.exe.so)\0*.exe;*.exe.so\0" + IDS_USE_GLOBAL_SETTINGS "Использовать по умолчанию" + IDS_SELECT_EXECUTABLE "Выберите исполняемый файл" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_SHADER_MODE_HARDWARE "Включены" + IDS_SHADER_MODE_NONE "Выключены" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DRIVE_UNKNOWN "Автоопределение" + IDS_DRIVE_FIXED "Жёсткий диск" + IDS_DRIVE_REMOTE "Сетевой диск" + IDS_DRIVE_REMOVABLE "Дисковод" + IDS_DRIVE_CDROM "CD-ROM" + IDS_DRIVE_LETTERS_EXCEEDED "Невозможно создать новый диск.\n\nУ каждого диска должна быть буква - от A до Z, и у Вас уже 26 дисков." + IDS_SYSTEM_DRIVE_LABEL "Системный диск" + IDS_CONFIRM_DELETE_C "Действительно удалить диск C?\n\nБольшинство Windows-программ перестанут работать без диска C. Если Вы всё же решили удалить диск, не забудьте создать новый!" + IDS_COL_DRIVELETTER "Диск" + IDS_COL_DRIVEMAPPING "Путь" + IDS_NO_DRIVE_C "Вы не назначили диск C.\n\nНе забудьте его создать!\n" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ACCEL_FULL "Полное" + IDS_ACCEL_STANDARD "Стандартное" + IDS_ACCEL_BASIC "Минимальное" + IDS_ACCEL_EMULATION "Эмуляция" + IDS_DRIVER_PULSE "PulseAudio драйвер" + IDS_DRIVER_ALSA "ALSA драйвер" + IDS_DRIVER_ESOUND "EsounD драйвер" + IDS_DRIVER_OSS "OSS драйвер" + IDS_DRIVER_JACK "JACK драйвер" + IDS_DRIVER_NAS "NAS драйвер" + IDS_DRIVER_AUDIOIO "Audio IO (Solaris) драйвер" + IDS_DRIVER_COREAUDIO "CoreAudio драйвер" + IDS_OPEN_DRIVER_ERROR "Невозможно открыть %s!" + IDS_SOUNDDRIVERS "Аудио драйвера" + IDS_DEVICES_WAVEOUT "Устройство вывода звука" + IDS_DEVICES_WAVEIN "Устройство ввода звука" + IDS_DEVICES_MIDIOUT "Устройство вывода MIDI" + IDS_DEVICES_MIDIIN "Устройство ввода MIDI" + IDS_DEVICES_AUX "Дополнительное устройство" + IDS_DEVICES_MIXER "Устройство микширования" + IDS_UNAVAILABLE_DRIVER "Драйвер, указанный в реестре, не найден!\n\nУдалить \"%s\" из реестра?" + IDS_WARNING "Внимание" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDC_SYSPARAMS_BUTTON "Элементы управления - фон" + IDC_SYSPARAMS_BUTTON_TEXT "Элементы управления - текст" + IDC_SYSPARAMS_DESKTOP "Стол" + IDC_SYSPARAMS_MENU "Меню - фон" + IDC_SYSPARAMS_MENU_TEXT "Меню - текст" + IDC_SYSPARAMS_SCROLLBAR "Полоса прокрутки" + IDC_SYSPARAMS_SELECTION "Выделение - фон" + IDC_SYSPARAMS_SELECTION_TEXT "Выделение - текст" + IDC_SYSPARAMS_TOOLTIP "Подсказка - фон" + IDC_SYSPARAMS_TOOLTIP_TEXT "Подсказка - текст" + IDC_SYSPARAMS_WINDOW "Содержимое окна - фон" + IDC_SYSPARAMS_WINDOW_TEXT "Содержимое окна - текст" + IDC_SYSPARAMS_ACTIVE_TITLE "Активное окно" + IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Активное окно - текст" + IDC_SYSPARAMS_INACTIVE_TITLE "Пассивное окно" + IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Пассивное окно - текст" + IDC_SYSPARAMS_MSGBOX_TEXT "Окно сообщения - текст" + IDC_SYSPARAMS_APPWORKSPACE "Содержимое окна MDI - фон" + IDC_SYSPARAMS_WINDOW_FRAME "Окно - рамка" + IDC_SYSPARAMS_ACTIVE_BORDER "Активное окно - рамка" + IDC_SYSPARAMS_INACTIVE_BORDER "Пассивное окно - рамка" + IDC_SYSPARAMS_BUTTON_SHADOW "Элементы управления - тень" + IDC_SYSPARAMS_GRAY_TEXT "Недоступный элемент" + IDC_SYSPARAMS_BUTTON_HILIGHT "Элементы управления - светлая рамка" + IDC_SYSPARAMS_BUTTON_DARK_SHADOW "Элементы управления - темная тень" + IDC_SYSPARAMS_BUTTON_LIGHT "Элементы управления - свет" + IDC_SYSPARAMS_BUTTON_ALTERNATE "Элементы управления - фон 2" + IDC_SYSPARAMS_HOT_TRACKING "Ссылка, Подсветка" + IDC_SYSPARAMS_ACTIVE_TITLE_GRADIENT "Градиент активного окна" + IDC_SYSPARAMS_INACTIVE_TITLE_GRADIENT "Градиент пассивного окна" + IDC_SYSPARAMS_MENU_HILIGHT "Плоское меню - подсветка" + IDC_SYSPARAMS_MENUBAR "Плоское меню - фон" +END diff --git a/programs/wineconsole/wineconsole_Ru.rc b/programs/wineconsole/wineconsole_Ru.rc index 40154a32f86..0cebb2dc341 100644 --- a/programs/wineconsole/wineconsole_Ru.rc +++ b/programs/wineconsole/wineconsole_Ru.rc @@ -20,78 +20,81 @@ #include "wineconsole_res.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE BEGIN -IDS_EDIT, "&Ïðàâêà" -IDS_DEFAULT, "Ïî &óìîë÷àíèþ" -IDS_PROPERTIES, "Ñ&âîéñòâà" -IDS_MARK, "&Âûäåëèòü" -IDS_COPY, "&Êîïèðîâàòü" -IDS_PASTE, "&Âñòàâèòü" -IDS_SELECTALL, "Âûäåëèòü â&ñå" -IDS_SCROLL, "Ïðîê&ðóòèòü" -IDS_SEARCH, "Ïî&èñê" -IDS_FNT_DISPLAY, "Êàæäûé ñèìâîë %ld ïèêñåëåé â øèðèíó è %ld ïèêñåëåé â âûñîòó" -IDS_FNT_PREVIEW_1, "Ýòî òåñò" +IDS_EDIT, "&Правка" +IDS_DEFAULT, "По &умолчанию" +IDS_PROPERTIES, "С&войства" +IDS_MARK, "&Выделить" +IDS_COPY, "&Копировать" +IDS_PASTE, "&Вставить" +IDS_SELECTALL, "Выделить в&се" +IDS_SCROLL, "Прок&рутить" +IDS_SEARCH, "По&иск" +IDS_FNT_DISPLAY, "Каждый символ %ld пикселей в ширину и %ld пикселей в высоту" +IDS_FNT_PREVIEW_1, "Это тест" IDS_FNT_PREVIEW_2, "This is a test" -IDS_DLG_TIT_DEFAULT, "Íàñòðîéêà - Óñòàíîâêè ïî óìîë÷àíèþ" -IDS_DLG_TIT_CURRENT, "Íàñòðîéêà - Òåêóùèå óñòàíîâêè" -IDS_DLG_TIT_ERROR, "Îøèáêà íàñòðîéêè" -IDS_DLG_ERR_SBWINSIZE, "Ðàçìåð áóôåðà ýêðàíà äîëæåí áûòü íå ìåíåå áóôåðà îêíà" - -IDS_CMD_INVALID_EVENT_ID "wineconsole: Íå âåðíî óêàçàí êîä ñîáûòèÿ\n" -IDS_CMD_INVALID_BACKEND "wineconsole: Íå èçâåñòíûé backend\n" -IDS_CMD_INVALID_OPTION "wineconsole: Óêàçàííàÿ îïöèÿ íå íàéäåíà\n" -IDS_CMD_ABOUT "Çàïóñê ïðîãðàììû â êîíñîëè Wine\n" -IDS_CMD_LAUNCH_FAILED "wineconsole: Íå óäàëñÿ çàïóñê ïðîãðàììû '%s'.\n"\ - "Íå âåðíî óêàçàííà êîìàíäà.\n" - -IDS_USAGE_HEADER "\nÂûçîâ:\n wineconsole [îïöèè] <êîìàíà>\n\nÎïöèè:\n" -IDS_USAGE_BACKEND " --backend={user|curses} Âûáîð 'user' îòêðîåò íîâîå îêíî ñ ïîëíîé ïîääåðæêîé\n"\ - " âñåõ ðåæèìîâ ðàáîòû êîíñîëè. 'curses' - èñïîëüçóåò\n"\ - " òåêóùåå îêíî ñ îãðàíè÷åííîé ôóíêöèîíàëüíîñòüþ\n"\ -IDS_USAGE_COMMAND " <êîìàíäà> Èìÿ ïðîãðàììû äëÿ çàïóñêà â êîíñîëè Wine\n" -IDS_USAGE_FOOTER "\nÍàïðèìåð:\n wineconsole cmd\nÇàïóñòèòü êîìàíäíûé ïðîöåññîð Wine â êîíñîëè Wine\n\n" +IDS_DLG_TIT_DEFAULT, "Настройка - Установки по умолчанию" +IDS_DLG_TIT_CURRENT, "Настройка - Текущие установки" +IDS_DLG_TIT_ERROR, "Ошибка настройки" +IDS_DLG_ERR_SBWINSIZE, "Размер буфера экрана должен быть не менее буфера окна" + +IDS_CMD_INVALID_EVENT_ID "wineconsole: Не верно указан код события\n" +IDS_CMD_INVALID_BACKEND "wineconsole: Не известный backend\n" +IDS_CMD_INVALID_OPTION "wineconsole: Указанная опция не найдена\n" +IDS_CMD_ABOUT "Запуск программы в консоли Wine\n" +IDS_CMD_LAUNCH_FAILED "wineconsole: Не удался запуск программы '%s'.\n"\ + "Не верно указанна команда.\n" + +IDS_USAGE_HEADER "\nВызов:\n wineconsole [опции] <команда>\n\nОпции:\n" +IDS_USAGE_BACKEND " --backend={user|curses} Выбор 'user' откроет новое окно с полной поддержкой\n"\ + " всех режимов работы консоли. 'curses' - использует\n"\ + " текущее окно с ограниченной функциональностью\n"\ +IDS_USAGE_COMMAND " <команда> Имя программы для запуска в консоли Wine\n" +IDS_USAGE_FOOTER "\nНапример:\n wineconsole cmd\nЗапустить командный процессор Wine в консоли Wine\n\n" END IDD_OPTION DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION " Îïöèè " +CAPTION " Опции " FONT 8, "MS Shell Dlg" { - GROUPBOX "Ðàçìåð êóðñîðà", -1, 10, 11, 60, 54, BS_GROUPBOX - AUTORADIOBUTTON "&Ìàëåíüêèé", IDC_OPT_CURSOR_SMALL, 14, 23, 52, 10, WS_TABSTOP - AUTORADIOBUTTON "&Ñðåäíèé", IDC_OPT_CURSOR_MEDIUM, 14, 33, 52, 10, WS_TABSTOP - AUTORADIOBUTTON "&Áîëüøîé", IDC_OPT_CURSOR_LARGE, 14, 43, 52, 10, WS_TABSTOP - - GROUPBOX "Óïðàâëåíèå", -1, 75, 11, 123, 54, BS_GROUPBOX - LTEXT "Âñïëûâàþùåå ìåíþ", -1, 79, 23, 50, 20 - AUTOCHECKBOX "&Ñtrl", IDC_OPT_CONF_CTRL, 144, 23, 52, 10, WS_TABSTOP + GROUPBOX "Размер курсора", -1, 10, 11, 60, 54, BS_GROUPBOX + AUTORADIOBUTTON "&Маленький", IDC_OPT_CURSOR_SMALL, 14, 23, 52, 10, WS_TABSTOP + AUTORADIOBUTTON "&Средний", IDC_OPT_CURSOR_MEDIUM, 14, 33, 52, 10, WS_TABSTOP + AUTORADIOBUTTON "&Большой", IDC_OPT_CURSOR_LARGE, 14, 43, 52, 10, WS_TABSTOP + + GROUPBOX "Управление", -1, 75, 11, 123, 54, BS_GROUPBOX + LTEXT "Всплывающее меню", -1, 79, 23, 50, 20 + AUTOCHECKBOX "&Сtrl", IDC_OPT_CONF_CTRL, 144, 23, 52, 10, WS_TABSTOP AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 144, 33, 52, 10, WS_TABSTOP - LTEXT "Áûñòðîå ðåäàêòèðîâàíèå", -1, 79, 43, 60, 20 - AUTOCHECKBOX "&âêëþ÷èòü", IDC_OPT_QUICK_EDIT, 144, 51, 52, 10, WS_TABSTOP + LTEXT "Быстрое редактирование", -1, 79, 43, 60, 20 + AUTOCHECKBOX "&включить", IDC_OPT_QUICK_EDIT, 144, 51, 52, 10, WS_TABSTOP - GROUPBOX "Èñòîðèÿ êîìàíä", -1, 10, 67, 189, 35, BS_GROUPBOX - LTEXT "&Èñòîðèÿ êîìàíä:", -1, 14, 77, 78, 18 + GROUPBOX "История команд", -1, 10, 67, 189, 35, BS_GROUPBOX + LTEXT "&История команд:", -1, 14, 77, 78, 18 EDITTEXT IDC_OPT_HIST_SIZE, 82, 79, 31, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER CONTROL "", IDC_OPT_HIST_SIZE_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0 - AUTOCHECKBOX "&Óäàëÿòü äóáëèðóþùèåñÿ", IDC_OPT_HIST_NODOUBLE, 120, 77, 70, 18, WS_TABSTOP|BS_MULTILINE + AUTOCHECKBOX "&Удалять дублирующиеся", IDC_OPT_HIST_NODOUBLE, 120, 77, 70, 18, WS_TABSTOP|BS_MULTILINE } IDD_FONT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION " Øðèôò " +CAPTION " Шрифт " FONT 8, "MS Shell Dlg" { - LTEXT "&Øðèôò", -1, 5, 5, 24, 8 + LTEXT "&Шрифт", -1, 5, 5, 24, 8 LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL - LTEXT "&Öâåò", -1, 100, 5, 50, 8 + LTEXT "&Цвет", -1, 100, 5, 50, 8 CONTROL "", IDC_FNT_COLOR_FG, "WineConColorPreview", 0L, 100, 18, 48, 16 CONTROL "", IDC_FNT_COLOR_BK, "WineConColorPreview", 0L, 100, 40, 48, 16 - LTEXT "&Ðàçìåð", -1, 158, 5, 40, 8 + LTEXT "&Размер", -1, 158, 5, 40, 8 LISTBOX IDC_FNT_LIST_SIZE, 158, 18, 40, 60, WS_VSCROLL CONTROL "", IDC_FNT_PREVIEW, "WineConFontPreview", 0L, 5, 60, 109, 40 LTEXT "", IDC_FNT_FONT_INFO, 128, 71, 80, 25 @@ -99,41 +102,41 @@ FONT 8, "MS Shell Dlg" IDD_CONFIG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION " Íàñòðîéêà " +CAPTION " Настройка " FONT 8, "MS Shell Dlg" { - GROUPBOX "Çîíà áóôåðà", -1, 10, 11, 100, 42, BS_GROUPBOX - LTEXT "&Øèðèíà :", -1, 14, 25, 54, 9 + GROUPBOX "Зона буфера", -1, 8, 11, 100, 42, BS_GROUPBOX + LTEXT "&Ширина :", -1, 14, 25, 54, 9 EDITTEXT IDC_CNF_SB_WIDTH, 68, 23, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER CONTROL "", IDC_CNF_SB_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0 - LTEXT "&Âûñîòà :", -1, 14, 39, 54, 9 + LTEXT "&Высота :", -1, 14, 39, 54, 9 EDITTEXT IDC_CNF_SB_HEIGHT, 68, 37, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER CONTROL "", IDC_CNF_SB_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0 - GROUPBOX "Ðàçìåð îêíà", -1, 10, 55, 100, 42 - LTEXT "Ø&èðèíà :", -1, 14, 69, 54, 9 + GROUPBOX "Размер окна", -1, 8, 55, 100, 42 + LTEXT "Ш&ирина :", -1, 14, 69, 54, 9 EDITTEXT IDC_CNF_WIN_WIDTH, 68, 67, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER CONTROL "", IDC_CNF_WIN_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0 - LTEXT "Â&ûñîòà :", -1, 14, 83, 54, 9 + LTEXT "В&ысота :", -1, 14, 83, 54, 9 EDITTEXT IDC_CNF_WIN_HEIGHT, 68, 81, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER CONTROL "", IDC_CNF_WIN_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0 - GROUPBOX "Çàâåðøåíèå ïðîãðàììû", -1, 115, 11, 85, 42, BS_GROUPBOX - AUTOCHECKBOX "&Çàêðûâàòü êîíñîëü", IDC_CNF_CLOSE_EXIT, 119, 25, 75, 20, WS_TABSTOP + GROUPBOX "Завершение программы", -1, 112, 11, 90, 43, BS_GROUPBOX + AUTOCHECKBOX "&Закрывать консоль", IDC_CNF_CLOSE_EXIT, 119, 25, 79, 20, WS_TABSTOP - GROUPBOX "Ðåäàêòèðîâàíèå", -1, 115, 55, 85, 42 + GROUPBOX "Редактирование", -1, 112, 55, 90, 42 COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 75, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP } IDD_SAVE_SETTINGS DIALOG LOADONCALL MOVEABLE DISCARDABLE 20, 20, 198, 70 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION -CAPTION "Ïàðàìåòðû êîíñîëè" +CAPTION "Параметры консоли" FONT 8, "MS Shell Dlg" { GROUPBOX "", -1, 10, 10, 178, 31, BS_GROUPBOX - AUTORADIOBUTTON "Ñîõðàíèòü ýòè íàñòðîéêè äëÿ áóäóùèõ ñåññèé", IDC_SAV_SAVE, 14, 27, 170, 10, WS_TABSTOP - AUTORADIOBUTTON "Èçìåíèòü òîëüêî òåêóùóþ ñåññèþ", IDC_SAV_SESSION, 14, 15, 170, 10, WS_TABSTOP + AUTORADIOBUTTON "Сохранить эти настройки для будущих сессий", IDC_SAV_SAVE, 14, 27, 170, 10, WS_TABSTOP + AUTORADIOBUTTON "Изменить только текущую сессию", IDC_SAV_SESSION, 14, 15, 170, 10, WS_TABSTOP PUSHBUTTON "OK", IDOK, 40, 50, 50, 14 - PUSHBUTTON "Îòìåíà", IDCANCEL, 110, 50, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 110, 50, 50, 14 } diff --git a/programs/winedbg/Makefile.in b/programs/winedbg/Makefile.in index fa13abf149c..f23298c2394 100644 --- a/programs/winedbg/Makefile.in +++ b/programs/winedbg/Makefile.in @@ -37,6 +37,7 @@ RC_SRCS = \ rsrc_Ko.rc \ rsrc_Lt.rc \ rsrc_Nl.rc \ + rsrc_Pt.rc \ rsrc_Ru.rc \ rsrc_Sv.rc diff --git a/programs/winedbg/rsrc_Ru.rc b/programs/winedbg/rsrc_Pt.rc similarity index 52% copy from programs/winedbg/rsrc_Ru.rc copy to programs/winedbg/rsrc_Pt.rc index 622ff7b4d76..c00c3c18d71 100644 --- a/programs/winedbg/rsrc_Ru.rc +++ b/programs/winedbg/rsrc_Pt.rc @@ -1,7 +1,7 @@ /* - * Russian Language Support + * Portuguese Language Support * - * Copyright 2009 Vladimir Pankratov + * Copyright 2009 Ricardo Filipe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,36 +20,38 @@ #include "resource.h" -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(65001) + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE IDM_DEBUG_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "&Îòëàäêà", ID_DEBUG + MENUITEM "&Depuração", ID_DEBUG END END IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Îøèáêà ïðîãðàììû" +CAPTION "Erro no programa" FONT 8, "Tahoma" BEGIN LTEXT "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0 - LTEXT " ïðîãðàììå %s îáíàðóæåíà ñåðü¸çíàÿ îøèáêà è îíà äîëæíà áûòü \ - çàêðûòà. Ïðèíîñèì èçâèíåíèÿ çà íåóäîáñòâî.", + LTEXT "O programa %s encontrou um problema sério e precisa \ + ser encerrado. Pedimos desculpa pelo incómodo.", IDC_STATIC_TXT1,27,10,224,30 - LTEXT "Îøèáêà ìîãëà áûòü âûçâàíà ïðîáëåìîé â ïðîãðàììå èëè íåäîðàáîòêîé â Wine. \ - Âû ìîæåòå ïîñåòèòü http://appdb.winehq.org è ïîèñêàòü ñîâåòû î çàïóñêå \ - ýòîé ïðîãðàììû.\n\n\ - Åñëè ýòà ïðîáëåìà íå ïðèñóòñòâóåò ïîä Windows è åù¸ íå áûëà çàðåãèñòðèðîâàíà, \ - âû ìîæåòå ñîîáùèòü î íåé íà http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 - DEFPUSHBUTTON "Çàêðûòü", IDOK, 205, 151, 60, 16, WS_TABSTOP + LTEXT "Isto pode ter sido causado por um problema no programa ou no Wine. \ + Pode querer visitar http://appdb.winehq.org para dicas de como correr \ + esta aplicação.\n\n\ + Se este problema não existe no Windows e não foi reportado ainda \ + você pode fazê-lo em http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + DEFPUSHBUTTON "Fechar", IDOK, 205, 151, 60, 16, WS_TABSTOP END STRINGTABLE BEGIN - IDS_AUTO_CAPTION "Îøèáêà Wine" - IDS_INVALID_PARAMS "Âíóòðåííèå îøèáêè - ïîëó÷åíû íåâåðíûå ïàðàìåòðû" - IDS_UNIDENTIFIED "(íåîïðåäåëåíî)" + IDS_AUTO_CAPTION "Erro num programa no Wine" + IDS_INVALID_PARAMS "Erros Internos - recebidos parâmetros inválidos" + IDS_UNIDENTIFIED "(não identificado)" END diff --git a/programs/winedbg/rsrc_Ru.rc b/programs/winedbg/rsrc_Ru.rc index 622ff7b4d76..281537bf9c3 100644 --- a/programs/winedbg/rsrc_Ru.rc +++ b/programs/winedbg/rsrc_Ru.rc @@ -20,36 +20,39 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT IDM_DEBUG_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "&Îòëàäêà", ID_DEBUG + MENUITEM "&Отладка", ID_DEBUG END END IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Îøèáêà ïðîãðàììû" +CAPTION "Ошибка программы" FONT 8, "Tahoma" BEGIN LTEXT "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0 - LTEXT " ïðîãðàììå %s îáíàðóæåíà ñåðü¸çíàÿ îøèáêà è îíà äîëæíà áûòü \ - çàêðûòà. Ïðèíîñèì èçâèíåíèÿ çà íåóäîáñòâî.", + LTEXT "В программе %s обнаружена серьёзная ошибка и она должна быть \ + закрыта. Приносим извинения за неудобство.", IDC_STATIC_TXT1,27,10,224,30 - LTEXT "Îøèáêà ìîãëà áûòü âûçâàíà ïðîáëåìîé â ïðîãðàììå èëè íåäîðàáîòêîé â Wine. \ - Âû ìîæåòå ïîñåòèòü http://appdb.winehq.org è ïîèñêàòü ñîâåòû î çàïóñêå \ - ýòîé ïðîãðàììû.\n\n\ - Åñëè ýòà ïðîáëåìà íå ïðèñóòñòâóåò ïîä Windows è åù¸ íå áûëà çàðåãèñòðèðîâàíà, \ - âû ìîæåòå ñîîáùèòü î íåé íà http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 - DEFPUSHBUTTON "Çàêðûòü", IDOK, 205, 151, 60, 16, WS_TABSTOP + LTEXT "Ошибка могла быть вызвана проблемой в программе или недоработкой в Wine. \ + Вы можете посетить http://appdb.winehq.org и поискать советы о запуске \ + этой программы.\n\n\ + Если эта проблема не присутствует под Windows и ещё не была зарегистрирована, \ + вы можете сообщить о ней на http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + DEFPUSHBUTTON "Закрыть", IDOK, 205, 151, 60, 16, WS_TABSTOP END STRINGTABLE BEGIN - IDS_AUTO_CAPTION "Îøèáêà Wine" - IDS_INVALID_PARAMS "Âíóòðåííèå îøèáêè - ïîëó÷åíû íåâåðíûå ïàðàìåòðû" - IDS_UNIDENTIFIED "(íåîïðåäåëåíî)" + IDS_AUTO_CAPTION "Ошибка Wine" + IDS_INVALID_PARAMS "Внутренние ошибки - получены неверные параметры" + IDS_UNIDENTIFIED "(неопределено)" END diff --git a/programs/winefile/Ru.rc b/programs/winefile/Ru.rc dissimilarity index 61% index ef8c657f63b..6969f360e10 100644 --- a/programs/winefile/Ru.rc +++ b/programs/winefile/Ru.rc @@ -1,259 +1,262 @@ -/* - * WineFile (Russian resources) - * - * Copyright 2003 Igor Stepin - * Copyright 2007 Konstantin Kondratyuk (Etersoft) - * - * 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_RUSSIAN, SUBLANG_DEFAULT - -/* Menu */ - -IDM_WINEFILE MENU FIXED IMPURE -{ - POPUP "&Ôàéë" { - MENUITEM "&Îòêðûòü\tEnter", ID_ACTIVATE - MENUITEM "&Ïåðåìåñòèòü...\tF7", ID_FILE_MOVE - MENUITEM "&Êîïèðîâàòü...\tF8", ID_FILE_COPY - MENUITEM "& áóôåð îáìåíà...\tF9", 118 - MENUITEM "&Óäàëèòü\tDel", ID_FILE_DELETE - MENUITEM "Ïåðåèìåíîâàòü...", 109 - MENUITEM "Ñâîéñòâà...\tAlt+Enter", ID_EDIT_PROPERTIES - MENUITEM SEPARATOR - MENUITEM "Àðõèâèðîâàòü...", 119 - MENUITEM "Ðàñïàêîâàòü...", 120 - MENUITEM SEPARATOR - MENUITEM "&Çàïóñòèòü...", ID_EXECUTE - MENUITEM "&Ïå÷àòàòü...", 102 - MENUITEM "Àññîöèèðîâàòü...", 103 - MENUITEM SEPARATOR - MENUITEM "Ñîçäàòü äèðåêòîðèþ...", 111 - MENUITEM "Ïîèñê...", 104 - MENUITEM "&Âûäåëèòü ôàéëû...", 116 - MENUITEM SEPARATOR -#ifndef _NO_EXTENSIONS - MENUITEM "Âûõîä\tAlt+X", ID_FILE_EXIT -#else - MENUITEM "Âûõîä", ID_FILE_EXIT -#endif - } - - POPUP "&Äèñê" { - MENUITEM "&Êîïèðîâàòü äèñê...", 201 - MENUITEM "&Ìåòêà òîìà...", 202 - MENUITEM SEPARATOR - MENUITEM "&Ôîðìàòèðîâàòü...", ID_FORMAT_DISK -#ifdef _WIN95 - MENUITEM "&Ñîçäàòü ñèñòåìíûé äèñê...", -1 /*TODO*/ -#endif - MENUITEM SEPARATOR - MENUITEM "Ïîäêëþ&÷èòü ñåòåâîé äèñê", ID_CONNECT_NETWORK_DRIVE - MENUITEM "Îòê&ëþ÷èòü ñåòåâîé äèñê", ID_DISCONNECT_NETWORK_DRIVE - MENUITEM SEPARATOR - MENUITEM "Ñäåëàòü î&áùèì êàê...", 254 - MENUITEM "&Çàêðûòü îáùèé äîñòóï...", 255 - MENUITEM SEPARATOR - MENUITEM "&Âûáðàòü äèñê...", 251 - } - - POPUP "&Ïàïêè" { - MENUITEM "Ñ&ëåäóþùèé óðîâåíü\t+", 301 - MENUITEM "&Ðàçâåðíóòü äåðåâî\t*", 302 - MENUITEM "Ðàçâåðíóòü â&ñå\tStrg+*", 303 - MENUITEM "&Ñâåðíóòü äåðåâî\t-", 304 - MENUITEM SEPARATOR - MENUITEM "&Îòìåòèòü âåòâè", 505 - } - - POPUP "&Âèä" { - MENUITEM "Äåðåâî &è ïàïêà", 413 - MENUITEM "Òîëüêî &äåðåâî", 411 - MENUITEM "Òîëüêî &ïàïêà", 412 - MENUITEM SEPARATOR - MENUITEM "Ðàç&áèòü", ID_VIEW_SPLIT - MENUITEM SEPARATOR - MENUITEM "È&ìÿ", ID_VIEW_NAME - MENUITEM "Â&ñå ïîäðîáíîñòè î ôàéëå", ID_VIEW_ALL_ATTRIBUTES, CHECKED - MENUITEM "&Âûáîðî÷íî î ôàéëå...", ID_VIEW_SELECTED_ATTRIBUTES - MENUITEM SEPARATOR - MENUITEM "&Ñîðòèðîâàòü ïî èìåíè", ID_VIEW_SORT_NAME - MENUITEM "Ñîðòèðîâàòü ïî &òèïó", ID_VIEW_SORT_TYPE - MENUITEM "Ñîðòèðîâàòü ïî &ðàçìåðó", ID_VIEW_SORT_SIZE - MENUITEM "Ñîðòèðîâàòü ïî ä&àòå", ID_VIEW_SORT_DATE - MENUITEM SEPARATOR - MENUITEM "Ñîðòèðîâàòü ïî &...", ID_VIEW_FILTER - } - - POPUP "&Íàñòðîéêè" { - MENUITEM "Ïîä&òâåðæäåíèÿ...", 501 - MENUITEM "&Øðèôò...", ID_SELECT_FONT - MENUITEM "&Íàñòðîèòü ïàíåëü èíñòðóìåíòîâ...", 512 - MENUITEM SEPARATOR - MENUITEM "&Ïàíåëü èíñòðóìåíòîâ", ID_VIEW_TOOL_BAR, CHECKED - MENUITEM "Ïàíåëü &äèñêîâ", ID_VIEW_DRIVE_BAR, CHECKED - MENUITEM "&Ñòðîêà ñîñòîÿíèÿ", ID_VIEW_STATUSBAR, CHECKED -#ifndef _NO_EXTENSIONS - MENUITEM "Ï&îëíûé ýêðàí\tCtrl+Shift+S", ID_VIEW_FULLSCREEN -#endif - MENUITEM SEPARATOR - MENUITEM "&Çíà÷îê â ñïèñîê ïðîãðàìì", 504 - MENUITEM "Ñî&õðàíÿòü íàñòðîéêè ïðè âûõîäå",511 - } - - - POPUP "&Áåçîïàñíîñòü" { - MENUITEM "&Äîñòóï...", 605 - MENUITEM "&Ïðîòîêîëû...", 606 - MENUITEM "&Âëàäåëåö...", 607 - } - - POPUP "&Îêíî" { - MENUITEM "Íîâîå &îêíî", ID_WINDOW_NEW - MENUITEM "Îêíà &êàñêàäîì\tCtrl+F5", ID_WINDOW_CASCADE - MENUITEM "Îêíà ñ&âåðõó âíèç", ID_WINDOW_TILE_HORZ - MENUITEM "Îêíà ñ&ëåâà íàïðàâî\tCtrl+F4",ID_WINDOW_TILE_VERT -#ifndef _NO_EXTENSIONS - MENUITEM "Ðàñïîëîæèòü &àâòîìàòè÷åñêè", ID_WINDOW_AUTOSORT -#endif - MENUITEM "&Ðàñïîëîæèòü", ID_WINDOW_ARRANGE - MENUITEM "Î&áíîâèòü\tF5", ID_REFRESH - } - - POPUP "&Ñïðàâêà" { - MENUITEM "&Ñîäåðæàíèå\tF1", ID_HELP - MENUITEM "&Ïîèñê...\tF1", ID_HELP - MENUITEM "&Èñïîëüçîâàíèå ñïðàâêè\tF1", ID_HELP_USING - MENUITEM SEPARATOR - MENUITEM "&Î Winefile...", ID_ABOUT - } -} - - -IDD_EXECUTE DIALOG FIXED IMPURE 15, 13, 210, 63 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Âûïîëíèòü" -FONT 8, "MS Shell Dlg" -{ - CONTROL "", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10 - CONTROL "&Êîìàíäà:", -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10 - EDITTEXT 201, 3, 29, 134, 12, ES_AUTOHSCROLL - CONTROL "Êàê &ñèìâîë", 214, "Button", BS_AUTOCHECKBOX|WS_TABSTOP,3, 45, 71, 12 - DEFPUSHBUTTON "OK", 1, 158, 6, 47, 14 - PUSHBUTTON "Îòìåíà", 2, 158, 23, 47, 14 - PUSHBUTTON "&Ñïðàâêà", 254, 158, 43, 47, 14 -} -IDD_SELECT_DESTINATION DIALOG FIXED IMPURE 15, 13, 210, 63 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Âûáåðèòå ïóòü íàçíà÷åíèÿ" -FONT 8, "MS Shell Dlg" -{ - CONTROL "", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10 - CONTROL "&Ïóòü:", -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10 - EDITTEXT 201, 3, 29, 134, 12, ES_AUTOHSCROLL - DEFPUSHBUTTON "OK", 1, 158, 6, 47, 14 - PUSHBUTTON "Îòìåíà", 2, 158, 23, 47, 14 - PUSHBUTTON "&Îáçîð", 254, 158, 43, 47, 14 -} - -IDD_DIALOG_VIEW_TYPE DIALOG DISCARDABLE 15, 13, 161, 97 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ïî òèïó ôàéëîâ" -FONT 8, "MS Sans Serif" -BEGIN - LTEXT "&Èìÿ:",-1,7,8,22,10 - EDITTEXT IDC_VIEW_PATTERN,31,7,63,12,ES_AUTOHSCROLL - GROUPBOX "Òèï ôàéëà",-1,7,23,87,56 - CONTROL "&Êàòàëîãè",IDC_VIEW_TYPE_DIRECTORIES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,13,32,70,10 - CONTROL "&Ïðîãðàììû",IDC_VIEW_TYPE_PROGRAMS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,13,43,70,10 - CONTROL "&Äîêóìåíòû",IDC_VIEW_TYPE_DOCUMENTS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,13,54,70,10 - CONTROL "Äðóãèå &ôàéëû",IDC_VIEW_TYPE_OTHERS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,13,65,70,10 - CONTROL "Ïîêàçàòü ñêðûòûå/&ñèñòåìíûå ôàéëû",IDC_VIEW_TYPE_HIDDEN, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,81,106,9 - DEFPUSHBUTTON "OK",IDOK,104,7,50,14 - PUSHBUTTON "Îòìåíà",IDCANCEL,104,24,50,14 -END - -IDD_DIALOG_PROPERTIES DIALOG DISCARDABLE 0, 0, 248, 215 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Ñâîéñòâà %s" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,191,7,50,14 - PUSHBUTTON "Îòìåíà",IDCANCEL,191,29,50,14 - LTEXT "Èìÿ &ôàéëà:",-1,7,7,59,9 - EDITTEXT IDC_STATIC_PROP_FILENAME,71,7,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP - LTEXT "&Ïîëíûé ïóòü:",-1,7,18,59,9 - EDITTEXT IDC_STATIC_PROP_PATH,71,18,120,9, ES_READONLY | NOT WS_BORDER | WS_TABSTOP - LTEXT "Ïîñëåäíåå èçìåíåíèå:",-1,7,29,59,9 - EDITTEXT IDC_STATIC_PROP_LASTCHANGE,71,29,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP - LTEXT "Âåðñèÿ:",-1,7,40,59,9 - EDITTEXT IDC_STATIC_PROP_VERSION,71,40,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP - LTEXT "Cop&yright:",-1,7,51,59,9 - EDITTEXT IDC_STATIC_PROP_COPYRIGHT,71,51,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP - LTEXT "Ðàçìåð:",-1,7,62,59,9 - EDITTEXT IDC_STATIC_PROP_SIZE,71,62,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP - GROUPBOX "Àòðèáóòû",-1,7,79,158,46 - CONTROL "&Òîëüêî äëÿ ÷òåíèÿ",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,91,68,9 - CONTROL "Ñ&êðûòûé",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,91,68,9 - CONTROL "&Archive",IDC_CHECK_ARCHIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,101,68,9 - CONTROL "&Ñèñòåìíûé",IDC_CHECK_SYSTEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,101,68,9 - CONTROL "Ñ&æàòûé",IDC_CHECK_COMPRESSED,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,17,111,68,9 - GROUPBOX "&Èíôîðìàöèÿ î âåðñèè",-1,7,129,234,79 - LISTBOX IDC_LIST_PROP_VERSION_TYPES,13,139,107,63,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_LIST_PROP_VERSION_VALUES,123,139,111,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL -END - - -STRINGTABLE -{ - IDS_FONT_SEL_DLG_NAME "Ïðèìåíåíèå ïàðàìåòðîâ íàñòðîéêè øðèôòà" - IDS_FONT_SEL_ERROR "Îøèáêà ïðè âûáîðå íîâîãî øðèôòà." -} - -STRINGTABLE -{ - IDS_WINEFILE "Winefile" - IDS_ERROR "Îøèáêà" - IDS_ROOT_FS "Êîðíåâàÿ ôàéëîâàÿ ñèñòåìà" - IDS_UNIXFS "Îñíîâíàÿ ôàéëîâàÿ ñèñòåìà" - IDS_DESKTOP "Ðàáî÷èé ñòîë" - IDS_SHELL "Shell" - IDS_TITLEFMT "%s - %s" - IDS_NO_IMPL "Åù¸ íå ðåàëèçîâàíî" - IDS_WINE_FILE "Wine File" -} - -STRINGTABLE -{ - IDS_COL_NAME "Èìÿ" - IDS_COL_SIZE "Ðàçìåð" - IDS_COL_CDATE "Äàòà ñîçäàíèÿ" - IDS_COL_ADATE "Äàòà ïîñëåäíåãî äîñòóïà" - IDS_COL_MDATE "Äàòà ïîñëåäíåãî èçìåíåíèÿ" - IDS_COL_IDX "Index/Inode" - IDS_COL_LINKS "Ññûëêè" - IDS_COL_ATTR "Àòðèáóòû" - IDS_COL_SEC "Áåçîïàñíîñòü" - - IDS_FREE_SPACE_FMT "%s èç %s ñâîáîäíî" -} +/* + * WineFile (Russian resources) + * + * Copyright 2003 Igor Stepin + * Copyright 2007 Konstantin Kondratyuk (Etersoft) + * + * 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" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +/* Menu */ + +IDM_WINEFILE MENU FIXED IMPURE +{ + POPUP "&Файл" { + MENUITEM "&Открыть\tEnter", ID_ACTIVATE + MENUITEM "&Переместить...\tF7", ID_FILE_MOVE + MENUITEM "&Копировать...\tF8", ID_FILE_COPY + MENUITEM "&В буфер обмена...\tF9", 118 + MENUITEM "&Удалить\tDel", ID_FILE_DELETE + MENUITEM "Переименовать...", 109 + MENUITEM "Свойства...\tAlt+Enter", ID_EDIT_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "Архивировать...", 119 + MENUITEM "Распаковать...", 120 + MENUITEM SEPARATOR + MENUITEM "&Запустить...", ID_EXECUTE + MENUITEM "&Печатать...", 102 + MENUITEM "Ассоциировать...", 103 + MENUITEM SEPARATOR + MENUITEM "Создать директорию...", 111 + MENUITEM "Поиск...", 104 + MENUITEM "&Выделить файлы...", 116 + MENUITEM SEPARATOR +#ifndef _NO_EXTENSIONS + MENUITEM "Выход\tAlt+X", ID_FILE_EXIT +#else + MENUITEM "Выход", ID_FILE_EXIT +#endif + } + + POPUP "&Диск" { + MENUITEM "&Копировать диск...", 201 + MENUITEM "&Метка тома...", 202 + MENUITEM SEPARATOR + MENUITEM "&Форматировать...", ID_FORMAT_DISK +#ifdef _WIN95 + MENUITEM "&Создать системный диск...", -1 /*TODO*/ +#endif + MENUITEM SEPARATOR + MENUITEM "Подклю&чить сетевой диск", ID_CONNECT_NETWORK_DRIVE + MENUITEM "Отк&лючить сетевой диск", ID_DISCONNECT_NETWORK_DRIVE + MENUITEM SEPARATOR + MENUITEM "Сделать о&бщим как...", 254 + MENUITEM "&Закрыть общий доступ...", 255 + MENUITEM SEPARATOR + MENUITEM "&Выбрать диск...", 251 + } + + POPUP "&Папки" { + MENUITEM "С&ледующий уровень\t+", 301 + MENUITEM "&Развернуть дерево\t*", 302 + MENUITEM "Развернуть в&се\tStrg+*", 303 + MENUITEM "&Свернуть дерево\t-", 304 + MENUITEM SEPARATOR + MENUITEM "&Отметить ветви", 505 + } + + POPUP "&Вид" { + MENUITEM "Дерево &и папка", 413 + MENUITEM "Только &дерево", 411 + MENUITEM "Только &папка", 412 + MENUITEM SEPARATOR + MENUITEM "Раз&бить", ID_VIEW_SPLIT + MENUITEM SEPARATOR + MENUITEM "И&мя", ID_VIEW_NAME + MENUITEM "В&се подробности о файле", ID_VIEW_ALL_ATTRIBUTES, CHECKED + MENUITEM "&Выборочно о файле...", ID_VIEW_SELECTED_ATTRIBUTES + MENUITEM SEPARATOR + MENUITEM "&Сортировать по имени", ID_VIEW_SORT_NAME + MENUITEM "Сортировать по &типу", ID_VIEW_SORT_TYPE + MENUITEM "Сортировать по &размеру", ID_VIEW_SORT_SIZE + MENUITEM "Сортировать по д&ате", ID_VIEW_SORT_DATE + MENUITEM SEPARATOR + MENUITEM "Сортировать по &...", ID_VIEW_FILTER + } + + POPUP "&Настройки" { + MENUITEM "Под&тверждения...", 501 + MENUITEM "&Шрифт...", ID_SELECT_FONT + MENUITEM "&Настроить панель инструментов...", 512 + MENUITEM SEPARATOR + MENUITEM "&Панель инструментов", ID_VIEW_TOOL_BAR, CHECKED + MENUITEM "Панель &дисков", ID_VIEW_DRIVE_BAR, CHECKED + MENUITEM "&Строка состояния", ID_VIEW_STATUSBAR, CHECKED +#ifndef _NO_EXTENSIONS + MENUITEM "П&олный экран\tCtrl+Shift+S", ID_VIEW_FULLSCREEN +#endif + MENUITEM SEPARATOR + MENUITEM "&Значок в список программ", 504 + MENUITEM "Со&хранять настройки при выходе",511 + } + + + POPUP "&Безопасность" { + MENUITEM "&Доступ...", 605 + MENUITEM "&Протоколы...", 606 + MENUITEM "&Владелец...", 607 + } + + POPUP "&Окно" { + MENUITEM "Новое &окно", ID_WINDOW_NEW + MENUITEM "Окна &каскадом\tCtrl+F5", ID_WINDOW_CASCADE + MENUITEM "Окна с&верху вниз", ID_WINDOW_TILE_HORZ + MENUITEM "Окна с&лева направо\tCtrl+F4",ID_WINDOW_TILE_VERT +#ifndef _NO_EXTENSIONS + MENUITEM "Расположить &автоматически", ID_WINDOW_AUTOSORT +#endif + MENUITEM "&Расположить", ID_WINDOW_ARRANGE + MENUITEM "О&бновить\tF5", ID_REFRESH + } + + POPUP "&Справка" { + MENUITEM "&Содержание\tF1", ID_HELP + MENUITEM "&Поиск...\tF1", ID_HELP + MENUITEM "&Использование справки\tF1", ID_HELP_USING + MENUITEM SEPARATOR + MENUITEM "&О Winefile...", ID_ABOUT + } +} + + +IDD_EXECUTE DIALOG FIXED IMPURE 15, 13, 210, 63 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Выполнить" +FONT 8, "MS Shell Dlg" +{ + CONTROL "", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10 + CONTROL "&Команда:", -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10 + EDITTEXT 201, 3, 29, 134, 12, ES_AUTOHSCROLL + CONTROL "Как &символ", 214, "Button", BS_AUTOCHECKBOX|WS_TABSTOP,3, 45, 71, 12 + DEFPUSHBUTTON "OK", 1, 158, 6, 47, 14 + PUSHBUTTON "Отмена", 2, 158, 23, 47, 14 + PUSHBUTTON "&Справка", 254, 158, 43, 47, 14 +} +IDD_SELECT_DESTINATION DIALOG FIXED IMPURE 15, 13, 210, 63 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Выберите путь назначения" +FONT 8, "MS Shell Dlg" +{ + CONTROL "", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10 + CONTROL "&Путь:", -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10 + EDITTEXT 201, 3, 29, 134, 12, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 158, 6, 47, 14 + PUSHBUTTON "Отмена", 2, 158, 23, 47, 14 + PUSHBUTTON "&Обзор", 254, 158, 43, 47, 14 +} + +IDD_DIALOG_VIEW_TYPE DIALOG DISCARDABLE 15, 13, 161, 97 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "По типу файлов" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Имя:",-1,7,8,22,10 + EDITTEXT IDC_VIEW_PATTERN,31,7,63,12,ES_AUTOHSCROLL + GROUPBOX "Тип файла",-1,7,23,87,56 + CONTROL "&Каталоги",IDC_VIEW_TYPE_DIRECTORIES,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,13,32,70,10 + CONTROL "&Программы",IDC_VIEW_TYPE_PROGRAMS,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,13,43,70,10 + CONTROL "&Документы",IDC_VIEW_TYPE_DOCUMENTS,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,13,54,70,10 + CONTROL "Другие &файлы",IDC_VIEW_TYPE_OTHERS,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,13,65,70,10 + CONTROL "Показать скрытые/&системные файлы",IDC_VIEW_TYPE_HIDDEN, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,81,106,9 + DEFPUSHBUTTON "OK",IDOK,104,7,50,14 + PUSHBUTTON "Отмена",IDCANCEL,104,24,50,14 +END + +IDD_DIALOG_PROPERTIES DIALOG DISCARDABLE 0, 0, 248, 215 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Свойства %s" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,191,7,50,14 + PUSHBUTTON "Отмена",IDCANCEL,191,29,50,14 + LTEXT "Имя &файла:",-1,7,7,59,9 + EDITTEXT IDC_STATIC_PROP_FILENAME,71,7,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP + LTEXT "&Полный путь:",-1,7,18,59,9 + EDITTEXT IDC_STATIC_PROP_PATH,71,18,120,9, ES_READONLY | NOT WS_BORDER | WS_TABSTOP + LTEXT "Последнее изменение:",-1,7,29,59,9 + EDITTEXT IDC_STATIC_PROP_LASTCHANGE,71,29,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP + LTEXT "Версия:",-1,7,40,59,9 + EDITTEXT IDC_STATIC_PROP_VERSION,71,40,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP + LTEXT "Cop&yright:",-1,7,51,59,9 + EDITTEXT IDC_STATIC_PROP_COPYRIGHT,71,51,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP + LTEXT "Размер:",-1,7,62,59,9 + EDITTEXT IDC_STATIC_PROP_SIZE,71,62,120,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP + GROUPBOX "Атрибуты",-1,7,79,158,46 + CONTROL "&Только для чтения",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,91,68,9 + CONTROL "С&крытый",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,91,68,9 + CONTROL "&Archive",IDC_CHECK_ARCHIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,101,68,9 + CONTROL "&Системный",IDC_CHECK_SYSTEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,101,68,9 + CONTROL "С&жатый",IDC_CHECK_COMPRESSED,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,17,111,68,9 + GROUPBOX "&Информация о версии",-1,7,129,234,79 + LISTBOX IDC_LIST_PROP_VERSION_TYPES,13,139,107,63,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_LIST_PROP_VERSION_VALUES,123,139,111,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL +END + + +STRINGTABLE +{ + IDS_FONT_SEL_DLG_NAME "Применение параметров настройки шрифта" + IDS_FONT_SEL_ERROR "Ошибка при выборе нового шрифта." +} + +STRINGTABLE +{ + IDS_WINEFILE "Winefile" + IDS_ERROR "Ошибка" + IDS_ROOT_FS "Корневая файловая система" + IDS_UNIXFS "Основная файловая система" + IDS_DESKTOP "Рабочий стол" + IDS_SHELL "Shell" + IDS_TITLEFMT "%s - %s" + IDS_NO_IMPL "Ещё не реализовано" + IDS_WINE_FILE "Wine File" +} + +STRINGTABLE +{ + IDS_COL_NAME "Имя" + IDS_COL_SIZE "Размер" + IDS_COL_CDATE "Дата создания" + IDS_COL_ADATE "Дата последнего доступа" + IDS_COL_MDATE "Дата последнего изменения" + IDS_COL_IDX "Index/Inode" + IDS_COL_LINKS "Ссылки" + IDS_COL_ATTR "Атрибуты" + IDS_COL_SEC "Безопасность" + + IDS_FREE_SPACE_FMT "%s из %s свободно" +} diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c index 1eaa53031b6..15ce483f287 100644 --- a/programs/winemenubuilder/winemenubuilder.c +++ b/programs/winemenubuilder/winemenubuilder.c @@ -692,11 +692,20 @@ static unsigned short crc16(const char* string) return crc; } +static char *strdupA( const char *str ) +{ + char *ret; + + if (!str) return NULL; + if ((ret = HeapAlloc( GetProcessHeap(), 0, strlen(str) + 1 ))) strcpy( ret, str ); + return ret; +} + static char* heap_printf(const char *format, ...) { va_list args; int size = 4096; - char *buffer; + char *buffer, *ret; int n; va_start(args, format); @@ -715,7 +724,9 @@ static char* heap_printf(const char *format, ...) HeapFree(GetProcessHeap(), 0, buffer); } va_end(args); - return buffer; + ret = HeapReAlloc(GetProcessHeap(), 0, buffer, strlen(buffer) + 1 ); + if (!ret) ret = buffer; + return ret; } static BOOL create_directories(char *directory) @@ -1429,8 +1440,8 @@ static BOOL add_mimes(const char *xdg_data_dir, struct list *mime_types) if (mime_type_entry) { *pos = 0; - mime_type_entry->mimeType = heap_printf("%s", line); - mime_type_entry->glob = heap_printf("%s", pos + 1); + mime_type_entry->mimeType = strdupA(line); + mime_type_entry->glob = strdupA(pos + 1); if (mime_type_entry->mimeType && mime_type_entry->glob) list_add_tail(mime_types, &mime_type_entry->entry); else @@ -1480,7 +1491,7 @@ static BOOL build_native_mime_types(const char *xdg_data_home, struct list **mim if (xdg_data_dirs == NULL) xdg_data_dirs = heap_printf("/usr/local/share/:/usr/share/"); else - xdg_data_dirs = heap_printf("%s", xdg_data_dirs); + xdg_data_dirs = strdupA(xdg_data_dirs); if (xdg_data_dirs) { @@ -1543,7 +1554,7 @@ static BOOL match_glob(struct list *native_mime_types, const char *extension, if (*match != NULL) { - *match = heap_printf("%s", *match); + *match = strdupA(*match); if (*match == NULL) return FALSE; } @@ -2664,7 +2675,7 @@ static BOOL init_xdg(void) { create_directories(xdg_config_dir); if (getenv("XDG_DATA_HOME")) - xdg_data_dir = heap_printf("%s", getenv("XDG_DATA_HOME")); + xdg_data_dir = strdupA(getenv("XDG_DATA_HOME")); else xdg_data_dir = heap_printf("%s/.local/share", getenv("HOME")); if (xdg_data_dir) diff --git a/programs/winemine/Lt.rc b/programs/winemine/Lt.rc index de09a45b4fb..908e776b1e5 100644 --- a/programs/winemine/Lt.rc +++ b/programs/winemine/Lt.rc @@ -42,7 +42,7 @@ MENU_WINEMINE MENU DISCARDABLE MENUITEM "P&radedantis", IDM_BEGINNER MENUITEM "&Pažengęs", IDM_ADVANCED MENUITEM "Ek&spertas", IDM_EXPERT - MENUITEM "Pasirin&ktas", IDM_CUSTOM + MENUITEM "Pasirin&ktas...", IDM_CUSTOM MENUITEM SEPARATOR MENUITEM "Iš&eiti\tAlt+X", IDM_EXIT } diff --git a/programs/winemine/Ru.rc b/programs/winemine/Ru.rc index e323e246446..d990fe5643f 100644 --- a/programs/winemine/Ru.rc +++ b/programs/winemine/Ru.rc @@ -21,6 +21,9 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE { @@ -31,33 +34,33 @@ STRINGTABLE { MENU_WINEMINE MENU DISCARDABLE { - POPUP "&Èãðà" { - MENUITEM "&Íîâàÿ èãðà\tF2", IDM_NEW + POPUP "&Игра" { + MENUITEM "&Новая игра\tF2", IDM_NEW MENUITEM SEPARATOR - MENUITEM "&Âîïðîñèòåëüíûå çíàêè", IDM_MARKQ + MENUITEM "&Вопросительные знаки", IDM_MARKQ MENUITEM SEPARATOR - MENUITEM "Íîâè&÷îê", IDM_BEGINNER - MENUITEM "&Ìàñòåð", IDM_ADVANCED - MENUITEM "&Ýêñïåðò", IDM_EXPERT - MENUITEM "Íåñòàíäàðòíûå &ïàðàìåòðû", IDM_CUSTOM + MENUITEM "Нови&чок", IDM_BEGINNER + MENUITEM "&Мастер", IDM_ADVANCED + MENUITEM "&Эксперт", IDM_EXPERT + MENUITEM "Нестандартные &параметры", IDM_CUSTOM MENUITEM SEPARATOR - MENUITEM "&Çàêðûòü\tAlt+X", IDM_EXIT + MENUITEM "&Закрыть\tAlt+X", IDM_EXIT } - POPUP "&Ñïðàâêà" { - MENUITEM "&Ëó÷øåå âðåìÿ", IDM_TIMES - MENUITEM "&Î ïðîãðàììå", IDM_ABOUT + POPUP "&Справка" { + MENUITEM "&Лучшее время", IDM_TIMES + MENUITEM "&О программе", IDM_ABOUT } } DLG_TIMES DIALOG DISCARDABLE 0, 0, 160, 80 STYLE DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP -CAPTION "Ëó÷øåå âðåìÿ" +CAPTION "Лучшее время" { - GROUPBOX "Ëó÷øåå âðåìÿ", -1, 10, 10, 140, 45 - LTEXT "Íîâè÷îê", -1, 20, 20, 40, 8 - LTEXT "Ìàñòåð", -1, 20, 30, 40, 8 - LTEXT "Ýêñïåðò", -1, 20, 40, 40, 8 + 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 @@ -70,9 +73,9 @@ CAPTION " DLG_CONGRATS DIALOG DISCARDABLE 0, 0, 160, 60 STYLE DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP -CAPTION "Ïîçäðàâëÿþ!" +CAPTION "Поздравляю!" { - LTEXT "Ïîæàëóéñòà, ââåäèòå Âàøå èìÿ", -1, 10, 10, 150, 10 + LTEXT "Пожалуйста, введите Ваше имя", -1, 10, 10, 150, 10 EDITTEXT IDC_EDITNAME, 25, 20, 110, 12 DEFPUSHBUTTON "OK", IDOK, 60, 40, 40, 15 } @@ -80,14 +83,14 @@ CAPTION " DLG_CUSTOM DIALOG DISCARDABLE 0, 0, 140, 100 STYLE DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP -CAPTION "Íåñòàíäàðòíûå ïàðàìåòðû" +CAPTION "Нестандартные параметры" { - LTEXT "Ïî âåðòèêàëè", -1, 5, 5, 70, 10 - LTEXT "Ïî ãîðèçîíòàëè", -1, 5, 35, 70, 10 - LTEXT "×èñëî ìèí", -1, 5, 65, 70, 10 + LTEXT "По вертикали", -1, 5, 5, 70, 10 + LTEXT "По горизонтали", -1, 5, 35, 70, 10 + LTEXT "Число мин", -1, 5, 65, 70, 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 "OK", IDOK, 80, 30, 50, 15 - PUSHBUTTON "Îòìåíà", IDCANCEL, 80, 50, 50, 15 + PUSHBUTTON "Отмена", IDCANCEL, 80, 50, 50, 15 } diff --git a/programs/winhlp32/Pt.rc b/programs/winhlp32/Pt.rc index 9a12e58f096..28933a22a6f 100644 --- a/programs/winhlp32/Pt.rc +++ b/programs/winhlp32/Pt.rc @@ -6,7 +6,8 @@ * Portuguese translation by Gustavo Junior Alves * Copyright 2002 Sylvain Petreolle * Copyright 2003 Marcelo Duarte - * Copyright 2004,2007 Américo José Melo + * Copyright 2004,2007 Américo José Melo + * Copyright 2009 Ricardo Filipe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,6 +26,8 @@ #include "winhelp_res.h" +#pragma code_page(65001) + /* Menu */ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN @@ -65,9 +68,9 @@ MAIN_MENU MENU } POPUP "Aj&uda" { MENUITEM "Ajuda &na ajuda", MNID_HELP_HELPON - MENUITEM "Sempre &visível", MNID_HELP_HELPTOP + MENUITEM "Sempre &visível", MNID_HELP_HELPTOP MENUITEM SEPARATOR - MENUITEM "&Informações...", MNID_HELP_ABOUT + MENUITEM "&Informações...", MNID_HELP_ABOUT #ifdef WINELIB MENUITEM "&Sobre WINE", MNID_HELP_WINE #endif @@ -94,33 +97,49 @@ MAIN_MENU MENU POPUP "In&dicador" { MENUITEM "&Definir...", MNID_BKMK_DEFINE } - POPUP "&Options" { - POPUP "Help always visible" + POPUP "&Opções" { + POPUP "Ajuda sempre visível" BEGIN - MENUITEM "Default", MNID_OPTS_HELP_DEFAULT - MENUITEM "Visible", MNID_OPTS_HELP_VISIBLE - MENUITEM "Non visible", MNID_OPTS_HELP_NONVISIBLE + MENUITEM "Omissão", MNID_OPTS_HELP_DEFAULT + MENUITEM "Visível", MNID_OPTS_HELP_VISIBLE + MENUITEM "Invisível", MNID_OPTS_HELP_NONVISIBLE END - MENUITEM "History", MNID_OPTS_HISTORY - POPUP "Fonts" + MENUITEM "Histórico", MNID_OPTS_HISTORY + POPUP "Tipos de Letra" BEGIN - MENUITEM "Small", MNID_OPTS_FONTS_SMALL + MENUITEM "Pequeno", MNID_OPTS_FONTS_SMALL MENUITEM "Normal", MNID_OPTS_FONTS_NORMAL - MENUITEM "Large", MNID_OPTS_FONTS_LARGE + MENUITEM "Grande", MNID_OPTS_FONTS_LARGE END - MENUITEM "Use system colors", MNID_OPTS_SYSTEM_COLORS + MENUITEM "Usar cores do sistema", MNID_OPTS_SYSTEM_COLORS } POPUP "Aj&uda" { MENUITEM "Ajuda &na ajuda", MNID_HELP_HELPON - MENUITEM "Sempre &visível", MNID_HELP_HELPTOP + MENUITEM "Sempre &visível", MNID_HELP_HELPTOP MENUITEM SEPARATOR - MENUITEM "&Informações...", MNID_HELP_ABOUT + MENUITEM "&Informações...", MNID_HELP_ABOUT #ifdef WINELIB MENUITEM "&Acerca do WINE", MNID_HELP_WINE #endif } } +IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Índice" +{ + LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER +} + +IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Procura" +{ + LTEXT "Ainda não implementado", -1, 10, 10, 180, 150 +} + /* Strings */ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN @@ -130,10 +149,10 @@ STRINGTABLE DISCARDABLE STID_WINE_HELP, "Ajuda WINE" STID_WHERROR, "ERRO" STID_WARNING, "AVISO" -STID_INFO, "Informação" -STID_NOT_IMPLEMENTED, "Não implementado" +STID_INFO, "Informação" +STID_NOT_IMPLEMENTED, "Não implementado" STID_HLPFILE_ERROR_s, "Erro encontrado na leitura do arquivo de ajuda '%s'" -STID_INDEX, "&Conteúdo" +STID_INDEX, "&Conteúdo" STID_CONTENTS, "Summary" STID_BACK, "&Voltar" STID_ALL_FILES, "Todos os arquivos (*.*)" @@ -150,15 +169,38 @@ STRINGTABLE DISCARDABLE STID_WINE_HELP, "Ajuda WINE" STID_WHERROR, "ERRO" STID_WARNING, "AVISO" -STID_INFO, "Informação" -STID_NOT_IMPLEMENTED, "Não implementado" +STID_INFO, "Informação" +STID_NOT_IMPLEMENTED, "Não implementado" STID_HLPFILE_ERROR_s, "Erro encontrado na leitura do ficheiro de ajuda '%s'" -STID_INDEX, "&Conteúdo" -STID_CONTENTS, "Summary" +STID_INDEX, "&Conteúdo" +STID_CONTENTS, "Sumário" STID_BACK, "&Voltar" STID_ALL_FILES, "Todos os ficheiros (*.*)" STID_HELP_FILES_HLP, "Ficheiros de ajuda (*.hlp)" -STID_FILE_NOT_FOUND_s "Não é possível encontrar '%s'. Deseja procurar este ficheiro você mesmo?" -STID_NO_RICHEDIT "Cannot find a richedit implementation... Aborting" -STID_PSH_INDEX, "Help topics: " +STID_FILE_NOT_FOUND_s "Não é possível encontrar '%s'. Deseja procurar este ficheiro você mesmo?" +STID_NO_RICHEDIT "Não foi possível encontrar uma implementação do richedit... A abortar" +STID_PSH_INDEX, "Tópicos de ajuda: " } + +CONTEXT_MENU MENU LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE +BEGIN + POPUP "" + BEGIN + MENUITEM "Anotação...", MNID_CTXT_ANNOTATE + MENUITEM "Copiar", MNID_CTXT_COPY + MENUITEM "Imprimir...", MNID_CTXT_PRINT + POPUP "Tipos de letra" + BEGIN + MENUITEM "Pequeno", MNID_CTXT_FONTS_SMALL + MENUITEM "Normal", MNID_CTXT_FONTS_NORMAL + MENUITEM "Grande", MNID_CTXT_FONTS_LARGE + END + POPUP "Ajuda sempre visível" + BEGIN + MENUITEM "Omissão", MNID_CTXT_HELP_DEFAULT + MENUITEM "Visível", MNID_CTXT_HELP_VISIBLE + MENUITEM "Invisível", MNID_CTXT_HELP_NONVISIBLE + END + MENUITEM "Usar cores do sistema", MNID_CTXT_SYSTEM_COLORS + END +END diff --git a/programs/winhlp32/Ru.rc b/programs/winhlp32/Ru.rc dissimilarity index 66% index e2e6ef2f5c5..165094f4720 100644 --- a/programs/winhlp32/Ru.rc +++ b/programs/winhlp32/Ru.rc @@ -1,118 +1,123 @@ -/* - * Help Viewer (Russian resources) - * - * Copyright 2003 Igor Stepin - * - * 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 "winhelp_res.h" - -/* Menu */ - -MAIN_MENU MENU LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -{ - POPUP "&Ôàéë" { - MENUITEM "&Îòêðûòü", MNID_FILE_OPEN - MENUITEM SEPARATOR - MENUITEM "&Ïå÷àòàòü", MNID_FILE_PRINT - MENUITEM "Íàñòðîéêà &ïðèíòåðà...", MNID_FILE_SETUP - MENUITEM SEPARATOR - MENUITEM "&Âûõîä", MNID_FILE_EXIT - } - POPUP "&Ïðàâêà" { - MENUITEM "&Êîïèðîâàòü...", MNID_EDIT_COPYDLG - MENUITEM SEPARATOR - MENUITEM "&Çàìåòêè...", MNID_EDIT_ANNOTATE - } - POPUP "&Çàêëàäêà" { - MENUITEM "&Îïðåäåëèòü...", MNID_BKMK_DEFINE - } - POPUP "&Íàñòðîéêè" { - POPUP "Âèäèìîñòü îêíà ñïðàâêè" - BEGIN - MENUITEM "Ïî óìîë÷àíèþ", MNID_OPTS_HELP_DEFAULT - MENUITEM "Íàâåðõó", MNID_OPTS_HELP_VISIBLE - MENUITEM "Íå íàâåðõó", MNID_OPTS_HELP_NONVISIBLE - END - MENUITEM "Èñòîðèÿ", MNID_OPTS_HISTORY - POPUP "Øðèôò" - BEGIN - MENUITEM "Ìåëêèé", MNID_OPTS_FONTS_SMALL - MENUITEM "Îáû÷íûé", MNID_OPTS_FONTS_NORMAL - MENUITEM "Êðóïíûé", MNID_OPTS_FONTS_LARGE - END - MENUITEM "Èñïîëüçîâàòü ñèñòåìíûå öâåòà", MNID_OPTS_SYSTEM_COLORS - } - POPUP "&Ñïðàâêà" { - MENUITEM "Ïîìîùü &ïî ïîìîùè", MNID_HELP_HELPON - MENUITEM "Âñåãäà &ñâåðõó", MNID_HELP_HELPTOP - MENUITEM SEPARATOR - MENUITEM "&Èíôîðìàöèÿ...", MNID_HELP_ABOUT -#ifdef WINELIB - MENUITEM "&Î Wine", MNID_HELP_WINE -#endif - } -} - -IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -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 -} - -/* Strings */ -STRINGTABLE DISCARDABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -{ -STID_WINE_HELP, "Ñïðàâêà WINE" -STID_WHERROR, "ÎØÈÁÊÀ" -STID_WARNING, "ÂÍÈÌÀÍÈÅ" -STID_INFO, "Èíôîðìàöèÿ" -STID_NOT_IMPLEMENTED, "Íå ðåàëèçîâàííî" -STID_HLPFILE_ERROR_s, "Îøèáêà ïðè ÷òåíèè ôàéëà ïîìîùè `%s'" -STID_INDEX, "&Ñîäåðæàíèå" -STID_CONTENTS, "Íà÷àëî" -STID_BACK, "&Íàçàä" -STID_ALL_FILES, "Âñå ôàéëû (*.*)" -STID_HELP_FILES_HLP, "Ôàéëû ñïðàâêè (*.hlp)" -STID_FILE_NOT_FOUND_s "Íå ìîãó íàéòè '%s'. Âû õîòèòå íàéòè ýòîò ôàéë ñàìîñòîÿòåëüíî?" -STID_NO_RICHEDIT "Íå ìîãó íàéòè richedit" -STID_PSH_INDEX, "Ñîäåðæàíèå: " -} - -CONTEXT_MENU MENU LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -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 +/* + * Help Viewer (Russian resources) + * + * Copyright 2003 Igor Stepin + * + * 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 "winhelp_res.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +/* Menu */ + +MAIN_MENU MENU +{ + POPUP "&Файл" { + MENUITEM "&Открыть", MNID_FILE_OPEN + MENUITEM SEPARATOR + MENUITEM "&Печатать", MNID_FILE_PRINT + MENUITEM "Настройка &принтера...", MNID_FILE_SETUP + MENUITEM SEPARATOR + MENUITEM "&Выход", MNID_FILE_EXIT + } + POPUP "&Правка" { + MENUITEM "&Копировать...", MNID_EDIT_COPYDLG + MENUITEM SEPARATOR + MENUITEM "&Заметки...", MNID_EDIT_ANNOTATE + } + POPUP "&Закладка" { + MENUITEM "&Определить...", MNID_BKMK_DEFINE + } + POPUP "&Настройки" { + POPUP "Видимость окна справки" + BEGIN + MENUITEM "По умолчанию", MNID_OPTS_HELP_DEFAULT + MENUITEM "Наверху", MNID_OPTS_HELP_VISIBLE + MENUITEM "Не наверху", MNID_OPTS_HELP_NONVISIBLE + END + MENUITEM "История", MNID_OPTS_HISTORY + POPUP "Шрифт" + BEGIN + MENUITEM "Мелкий", MNID_OPTS_FONTS_SMALL + MENUITEM "Обычный", MNID_OPTS_FONTS_NORMAL + MENUITEM "Крупный", MNID_OPTS_FONTS_LARGE + END + MENUITEM "Использовать системные цвета", MNID_OPTS_SYSTEM_COLORS + } + POPUP "&Справка" { + MENUITEM "Помощь &по помощи", MNID_HELP_HELPON + MENUITEM "Всегда &сверху", MNID_HELP_HELPTOP + MENUITEM SEPARATOR + MENUITEM "&Информация...", MNID_HELP_ABOUT +#ifdef WINELIB + MENUITEM "&О Wine", MNID_HELP_WINE +#endif + } +} + +IDD_INDEX DIALOG DISCARDABLE 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 +} + +/* Strings */ +STRINGTABLE DISCARDABLE +{ +STID_WINE_HELP, "Справка WINE" +STID_WHERROR, "ОШИБКА" +STID_WARNING, "ВНИМАНИЕ" +STID_INFO, "Информация" +STID_NOT_IMPLEMENTED, "Не реализованно" +STID_HLPFILE_ERROR_s, "Ошибка при чтении файла помощи `%s'" +STID_INDEX, "&Содержание" +STID_CONTENTS, "Начало" +STID_BACK, "&Назад" +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 "Шрифт" + 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 diff --git a/programs/winhlp32/macro.c b/programs/winhlp32/macro.c index c2fc3ccc710..fdec6b3dfa5 100644 --- a/programs/winhlp32/macro.c +++ b/programs/winhlp32/macro.c @@ -446,10 +446,13 @@ static void CALLBACK MACRO_GotoMark(LPCSTR str) void CALLBACK MACRO_HelpOn(void) { - LPCSTR file; + WINHELP_WINDOW *win = MACRO_CurrentWindow(); + LPCSTR file = NULL; WINE_TRACE("()\n"); - file = MACRO_CurrentWindow()->page->file->help_on_file; + if (win && win->page && win->page->file) + file = win->page->file->help_on_file; + if (!file) file = (Globals.wVersion > 4) ? "winhlp32.hlp" : "winhelp.hlp"; diff --git a/programs/winhlp32/winhelp.c b/programs/winhlp32/winhelp.c index 56244d35aec..4c2d1ff6f94 100644 --- a/programs/winhlp32/winhelp.c +++ b/programs/winhlp32/winhelp.c @@ -167,7 +167,7 @@ BOOL WINHELP_GetOpenFileName(LPSTR lpszFile, int len) lpszFile[0]='\0'; openfilename.lStructSize = sizeof(OPENFILENAME); - openfilename.hwndOwner = NULL; + openfilename.hwndOwner = (Globals.active_win ? Globals.active_win->hMainWnd : 0); openfilename.hInstance = Globals.hInstance; openfilename.lpstrFilter = szzFilter; openfilename.lpstrCustomFilter = 0; diff --git a/programs/wordpad/Nl.rc b/programs/wordpad/Nl.rc index c9ce64a4b29..10729e41df5 100644 --- a/programs/wordpad/Nl.rc +++ b/programs/wordpad/Nl.rc @@ -180,10 +180,14 @@ END STRINGTABLE DISCARDABLE BEGIN - STRING_RICHTEXT_FILES_RTF, "Rich text formaat (*.rtf)" + STRING_ALL_FILES, "Alle documenten (*.*)" STRING_TEXT_FILES_TXT, "Tekst documenten (*.txt)" STRING_TEXT_FILES_UNICODE_TXT, "Unicode tekst document (*.txt)" - STRING_ALL_FILES, "Alle documenten (*.*)" + STRING_RICHTEXT_FILES_RTF, "Rich text formaat (*.rtf)" + STRING_NEWFILE_RICHTEXT, "Rich tekst document" + STRING_NEWFILE_TXT, "Tekst document" + STRING_NEWFILE_TXT_UNICODE, "Unicode tekst document" + STRING_PRINTER_FILES_PRN, "Printer bestanden (*.PRN)" END STRINGTABLE DISCARDABLE @@ -195,18 +199,6 @@ END STRINGTABLE DISCARDABLE BEGIN - STRING_NEWFILE_RICHTEXT, "Rich tekst document" - STRING_NEWFILE_TXT, "Tekst document" - STRING_NEWFILE_TXT_UNICODE, "Unicode tekst document" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_PRINTER_FILES_PRN, "Printer bestanden (*.PRN)" -END - -STRINGTABLE DISCARDABLE -BEGIN STRING_VIEWPROPS_TITLE, "Opties" STRING_VIEWPROPS_TEXT, "Tekst" STRING_VIEWPROPS_RICHTEXT, "Rich tekst" diff --git a/programs/wordpad/Ru.rc b/programs/wordpad/Ru.rc dissimilarity index 67% index 6428f7b1a0d..c48b16f910d 100644 --- a/programs/wordpad/Ru.rc +++ b/programs/wordpad/Ru.rc @@ -1,241 +1,244 @@ -/* - * Copyright 2006 by Phil Krylov - * - * 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 "wordpad.h" - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -IDM_MAINMENU MENU DISCARDABLE -BEGIN - POPUP "&Ôàéë" - BEGIN - MENUITEM "Ñîçä&àòü...\tCtrl+N",ID_FILE_NEW - MENUITEM "&Îòêðûòü...\tCtrl+O",ID_FILE_OPEN - MENUITEM "&Ñîõðàíèòü\tCtrl+S", ID_FILE_SAVE - MENUITEM "Ñîõðàíèòü &êàê...", ID_FILE_SAVEAS - MENUITEM SEPARATOR - MENUITEM "&Ïå÷àòü...\tCtrl+P", ID_PRINT - MENUITEM "Ïðåä&âàðèòåëüíûé ïðîñìîòð...", ID_PREVIEW - MENUITEM "&Ìàêåò ñòðàíèöû...", ID_PRINTSETUP - MENUITEM SEPARATOR - MENUITEM "Â&ûõîä", ID_FILE_EXIT - END - POPUP "&Ïðàâêà" - BEGIN - MENUITEM "&Îòìåíèòü\tCtrl+Z", ID_EDIT_UNDO - MENUITEM "&Ïîâòîðèòü\tCtrl+Y", ID_EDIT_REDO - MENUITEM SEPARATOR - MENUITEM "&Âûðåçàòü\tCtrl+X", ID_EDIT_CUT - MENUITEM "&Êîïèðîâàòü\tCtrl+C", ID_EDIT_COPY - MENUITEM "&Âñòàâèòü\tCtrl+V", ID_EDIT_PASTE - MENUITEM "&Óäàëèòü\tDEL", ID_EDIT_CLEAR - MENUITEM "Âûäåëèòü â&ñå\tCtrl+A", ID_EDIT_SELECTALL - MENUITEM SEPARATOR - MENUITEM "&Íàéòè...\tCrtl+F", ID_FIND - MENUITEM "Íà&éòè äàëåå\tF3", ID_FIND_NEXT - MENUITEM "&Çàìåíèòü...\tCtrl+H", ID_REPLACE - MENUITEM SEPARATOR - MENUITEM "&Òîëüêî äëÿ ÷òåíèÿ", ID_EDIT_READONLY - MENUITEM "&Èçìåíåí", ID_EDIT_MODIFIED - MENUITEM SEPARATOR - POPUP "&Äîïîëíèòåëüíî" - BEGIN - MENUITEM "&Èíôîðìàöèÿ î âûäåëåíèè", ID_EDIT_SELECTIONINFO - MENUITEM "&Ôîðìàò ñèìâîëîâ", ID_EDIT_CHARFORMAT - MENUITEM "Ôîðìàò ñèìâîëîâ &ïî óìîë÷àíèþ", ID_EDIT_DEFCHARFORMAT - MENUITEM "Ôîðìàò &àáçàöà", ID_EDIT_PARAFORMAT - MENUITEM "Ï&îëó÷èòü òåêñò", ID_EDIT_GETTEXT - END - END - POPUP "&Âèä" - BEGIN - MENUITEM "Ïàíåëü &èíñòðóìåíòîâ", ID_TOGGLE_TOOLBAR - MENUITEM "Ï&àíåëü ôîðìàòèðîâàíèÿ", ID_TOGGLE_FORMATBAR - MENUITEM "&Ëèíåéêà", ID_TOGGLE_RULER - MENUITEM "&Ñòðîêà ñîñòîÿíèÿ", ID_TOGGLE_STATUSBAR - MENUITEM SEPARATOR - MENUITEM "&Ïàðàìåòðû...", ID_VIEWPROPERTIES - END - POPUP "Âñò&àâêà" - BEGIN - MENUITEM "&Äàòà è âðåìÿ...", ID_DATETIME - END - POPUP "Ôîð&ìàò" - BEGIN - MENUITEM "&Øðèôò...", ID_FONTSETTINGS - MENUITEM "&Ìàðêåð" ID_BULLET - MENUITEM "&Àáçàö..." ID_PARAFORMAT - MENUITEM "&Òàáóëÿöèÿ..." ID_TABSTOPS - POPUP "&Ôîí" - BEGIN - MENUITEM "&Ñèñòåìíûé\tCtrl+1", ID_BACK_1 - MENUITEM "&Æåëòîâàòûé PostThat\tCtrl+2", ID_BACK_2 - END - END - POPUP "&Ñïðàâêà" - BEGIN - MENUITEM "&Î Wine Wordpad" ID_ABOUT - END -END - -IDM_POPUP MENU DISCARDABLE -BEGIN - POPUP "" - BEGIN - MENUITEM "&Âûðåçàòü\tCtrl+X", ID_EDIT_CUT - MENUITEM "&Êîïèðîâàòü\tCtrl+C", ID_EDIT_COPY - MENUITEM "Âñò&àâèòü", ID_EDIT_PASTE - MENUITEM SEPARATOR - MENUITEM "&Ìàðêåð" ID_BULLET - MENUITEM "&Àáçàö..." ID_PARAFORMAT - END -END - -IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Äàòà è âðåìÿ" -FONT 10, "MS Sans Serif" -BEGIN - LTEXT "Äîñòóïíûå ôîðìàòû",-1,3,2,100,15 - LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY - PUSHBUTTON "&ÎÊ",IDOK,87,12,40,12 - PUSHBUTTON "Î&òìåíà",IDCANCEL,87,26,40,12 -END - -IDD_NEWFILE DIALOG DISCARDABLE 30, 20, 140, 80 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Íîâûé äîêóìåíò" -FONT 10, "MS Sans Serif" -BEGIN - LTEXT "Òèï ñîçäàâàåìîãî äîêóìåíòà",-1,3,2,100,15 - LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT - PUSHBUTTON "&ÎÊ",IDOK,97,12,40,12 - PUSHBUTTON "Î&òìåíà",IDCANCEL,97,26,40,12 -END - -IDD_PARAFORMAT DIALOG DISCARDABLE 30, 20, 200, 110 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Àáçàö" -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Îòñòóï", -1, 10, 10, 120, 68 - LTEXT "Ñëåâà", -1, 15, 22, 40, 13 - EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13 - LTEXT "Ñïðàâà", -1, 15, 40, 40, 13 - EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13 - LTEXT "Ïåðâàÿ ñòðîêà", -1, 15, 58, 40, 13 - EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13 - LTEXT "Âûðàâíèâàíèå", -1, 15, 87, 40, 13 - COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST - PUSHBUTTON "&ÎÊ", IDOK, 137, 15, 50, 15 - PUSHBUTTON "Î&òìåíà", IDCANCEL, 137, 33, 50, 15 -END - -IDD_TABSTOPS DIALOG DISCARDABLE 30, 20, 200, 110 -STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Òàáóëÿöèÿ" -FONT 8, "MS SHell DLg" -BEGIN - GROUPBOX "Ïîçèöèè òàáóëÿöèè", -1, 10, 10, 120, 90 - COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE - DEFPUSHBUTTON "&Óñòàíîâèòü", ID_TAB_ADD, 20, 80, 45, 15 - PUSHBUTTON "Î&÷èñòèòü", ID_TAB_DEL, 72, 80, 45, 15 - PUSHBUTTON "&ÎÊ", IDOK, 137, 15, 50, 15 - PUSHBUTTON "Î&òìåíà", IDCANCEL, 137, 33, 50, 15 - PUSHBUTTON "Î÷èñòèòü &âñå", ID_TAB_EMPTY, 137, 51, 50, 15 -END - -IDD_FORMATOPTS DIALOG DISCARDABLE 0, 0, 280, 110 -STYLE DS_SYSMODAL -Caption "" -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Ïåðåíîñ ïî ñëîâàì", -1, 10, 10, 130, 85 - RADIOBUTTON "No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15 - RADIOBUTTON " ãðàíèöàõ &îêíà", IDC_PAGEFMT_WW, 18, 45, 117, 15 - RADIOBUTTON " ãðàíèöàõ &ïîëåé", IDC_PAGEFMT_WM, 18, 65, 117, 15 - GROUPBOX "Ïàíåëè", -1, 150, 10, 120, 85 - CHECKBOX "&Èíñòðóìåíòîâ", IDC_PAGEFMT_TB, 160, 20, 80, 15 - CHECKBOX "&Ôîðìàòèðîâàíèÿ", IDC_PAGEFMT_FB, 160, 38, 80, 15 - CHECKBOX "&Ëèíåéêà", IDC_PAGEFMT_RU, 160, 56, 80, 15 - CHECKBOX "&Ñòðîêà ñîñòîÿíèÿ", IDC_PAGEFMT_SB, 160, 74, 80, 15 - LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0 -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_RICHTEXT_FILES_RTF, "Ôàéëû RTF (*.rtf)" - STRING_TEXT_FILES_TXT, "Òåêñòîâûå äîêóìåíòû (*.txt)" - STRING_TEXT_FILES_UNICODE_TXT, "Äîêóìåíòû Unicode (*.txt)" - STRING_ALL_FILES, "Âñå äîêóìåíòû (*.*)" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_ALIGN_LEFT, "Ïî ëåâîìó êðàþ" - STRING_ALIGN_RIGHT, "Ïî ïðàâîìó êðàþ" - STRING_ALIGN_CENTER, "Ïî öåíòðó" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_NEWFILE_RICHTEXT, "Ôàéë RTF" - STRING_NEWFILE_TXT, "Òåêñòîâûé äîêóìåíò" - STRING_NEWFILE_TXT_UNICODE, "Äîêóìåíò â ôîðìàòå Unicode" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_PRINTER_FILES_PRN, "Ôàéëû ïðèíòåðà (*.PRN)" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_VIEWPROPS_TITLE, "Íàñòðîéêè" - STRING_VIEWPROPS_TEXT, "Òåêñò" - STRING_VIEWPROPS_RICHTEXT, "Ôàéë RTF" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_PREVIEW_PRINT, "Ïå÷àòü" - STRING_PREVIEW_NEXTPAGE, "Ñëåäóþùàÿ ñòðàíèöà" - STRING_PREVIEW_PREVPAGE, "Ïðåäûäóùàÿ ñòðàíèöà" - STRING_PREVIEW_TWOPAGES, "Two pages" - STRING_PREVIEW_ONEPAGE, "One page" - STRING_PREVIEW_CLOSE, "Çàêðûòü" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_UNITS_CM, "ñì" -END - -STRINGTABLE DISCARDABLE -BEGIN - STRING_DEFAULT_FILENAME, "Document" - STRING_PROMPT_SAVE_CHANGES, "Ñîõðàíèòü èçìåíåíèÿ â '%s'?" - STRING_SEARCH_FINISHED, "Ïîèñê â äîêóìåíòå çàâåðøåí." - STRING_LOAD_RICHED_FAILED, "Îøèáêà çàãðóçêè áèáëèîòåêè RichEdit." - STRING_SAVE_LOSEFORMATTING, "Ñîõðàíåíèå äîêóìåíòà â âèäå íåôîðìàòèðîâàííîãî òåêñòà, " \ - "ïðèâåäåò ê ïîòåðå ôîðìàòèðîâàíèÿ. Ïîäòâåðæäàåòå âûïîëíåíèå" \ - "ýòîé îïåðàöèè?" - STRING_INVALID_NUMBER, "Íåïðàâèëüíûé ÷èñëîâîé ôîðìàò" - STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage äîêóìåíòû íå ïîääåðæèâàþòñÿ" - STRING_PRINTING_NOT_IMPLEMENTED, "Ïå÷àòü íå ïîääåðæèâàåòñÿ" -END +/* + * Copyright 2006 by Phil Krylov + * + * 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 "wordpad.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +IDM_MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&Файл" + BEGIN + MENUITEM "Созд&ать...\tCtrl+N",ID_FILE_NEW + MENUITEM "&Открыть...\tCtrl+O",ID_FILE_OPEN + MENUITEM "&Сохранить\tCtrl+S", ID_FILE_SAVE + MENUITEM "Сохранить &как...", ID_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "&Печать...\tCtrl+P", ID_PRINT + MENUITEM "Пред&варительный просмотр...", ID_PREVIEW + MENUITEM "&Макет страницы...", ID_PRINTSETUP + MENUITEM SEPARATOR + MENUITEM "В&ыход", ID_FILE_EXIT + END + POPUP "&Правка" + BEGIN + MENUITEM "&Отменить\tCtrl+Z", ID_EDIT_UNDO + MENUITEM "&Повторить\tCtrl+Y", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM "&Вырезать\tCtrl+X", ID_EDIT_CUT + MENUITEM "&Копировать\tCtrl+C", ID_EDIT_COPY + MENUITEM "&Вставить\tCtrl+V", ID_EDIT_PASTE + MENUITEM "&Удалить\tDEL", ID_EDIT_CLEAR + MENUITEM "Выделить в&се\tCtrl+A", ID_EDIT_SELECTALL + MENUITEM SEPARATOR + MENUITEM "&Найти...\tCrtl+F", ID_FIND + MENUITEM "На&йти далее\tF3", ID_FIND_NEXT + MENUITEM "&Заменить...\tCtrl+H", ID_REPLACE + MENUITEM SEPARATOR + MENUITEM "&Только для чтения", ID_EDIT_READONLY + MENUITEM "&Изменен", ID_EDIT_MODIFIED + MENUITEM SEPARATOR + POPUP "&Дополнительно" + BEGIN + MENUITEM "&Информация о выделении", ID_EDIT_SELECTIONINFO + MENUITEM "&Формат символов", ID_EDIT_CHARFORMAT + MENUITEM "Формат символов &по умолчанию", ID_EDIT_DEFCHARFORMAT + MENUITEM "Формат &абзаца", ID_EDIT_PARAFORMAT + MENUITEM "П&олучить текст", ID_EDIT_GETTEXT + END + END + POPUP "&Вид" + BEGIN + MENUITEM "Панель &инструментов", ID_TOGGLE_TOOLBAR + MENUITEM "П&анель форматирования", ID_TOGGLE_FORMATBAR + MENUITEM "&Линейка", ID_TOGGLE_RULER + MENUITEM "&Строка состояния", ID_TOGGLE_STATUSBAR + MENUITEM SEPARATOR + MENUITEM "&Параметры...", ID_VIEWPROPERTIES + END + POPUP "Вст&авка" + BEGIN + MENUITEM "&Дата и время...", ID_DATETIME + END + POPUP "Фор&мат" + BEGIN + MENUITEM "&Шрифт...", ID_FONTSETTINGS + MENUITEM "&Маркер" ID_BULLET + MENUITEM "&Абзац..." ID_PARAFORMAT + MENUITEM "&Табуляция..." ID_TABSTOPS + POPUP "&Фон" + BEGIN + MENUITEM "&Системный\tCtrl+1", ID_BACK_1 + MENUITEM "&Желтоватый PostThat\tCtrl+2", ID_BACK_2 + END + END + POPUP "&Справка" + BEGIN + MENUITEM "&О Wine Wordpad" ID_ABOUT + END +END + +IDM_POPUP MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Вырезать\tCtrl+X", ID_EDIT_CUT + MENUITEM "&Копировать\tCtrl+C", ID_EDIT_COPY + MENUITEM "Вст&авить", ID_EDIT_PASTE + MENUITEM SEPARATOR + MENUITEM "&Маркер" ID_BULLET + MENUITEM "&Абзац..." ID_PARAFORMAT + END +END + +IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Дата и время" +FONT 10, "MS Sans Serif" +BEGIN + LTEXT "Доступные форматы",-1,3,2,100,15 + LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY + PUSHBUTTON "&ОК",IDOK,87,12,40,12 + PUSHBUTTON "О&тмена",IDCANCEL,87,26,40,12 +END + +IDD_NEWFILE DIALOG DISCARDABLE 30, 20, 140, 80 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Новый документ" +FONT 10, "MS Sans Serif" +BEGIN + LTEXT "Тип создаваемого документа",-1,3,2,100,15 + LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT + PUSHBUTTON "&ОК",IDOK,97,12,40,12 + PUSHBUTTON "О&тмена",IDCANCEL,97,26,40,12 +END + +IDD_PARAFORMAT DIALOG DISCARDABLE 30, 20, 200, 110 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +Caption "Абзац" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Отступ", -1, 10, 10, 120, 68 + LTEXT "Слева", -1, 15, 22, 40, 13 + EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13 + LTEXT "Справа", -1, 15, 40, 40, 13 + EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13 + LTEXT "Первая строка", -1, 15, 58, 40, 13 + EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13 + LTEXT "Выравнивание", -1, 15, 87, 40, 13 + COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST + PUSHBUTTON "&ОК", IDOK, 137, 15, 50, 15 + PUSHBUTTON "О&тмена", IDCANCEL, 137, 33, 50, 15 +END + +IDD_TABSTOPS DIALOG DISCARDABLE 30, 20, 200, 110 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +Caption "Табуляция" +FONT 8, "MS SHell DLg" +BEGIN + GROUPBOX "Позиции табуляции", -1, 10, 10, 120, 90 + COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE + DEFPUSHBUTTON "&Установить", ID_TAB_ADD, 20, 80, 45, 15 + PUSHBUTTON "О&чистить", ID_TAB_DEL, 72, 80, 45, 15 + PUSHBUTTON "&ОК", IDOK, 137, 15, 50, 15 + PUSHBUTTON "О&тмена", IDCANCEL, 137, 33, 50, 15 + PUSHBUTTON "Очистить &все", ID_TAB_EMPTY, 137, 51, 50, 15 +END + +IDD_FORMATOPTS DIALOG DISCARDABLE 0, 0, 280, 110 +STYLE DS_SYSMODAL +Caption "" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Перенос по словам", -1, 10, 10, 130, 85 + RADIOBUTTON "No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15 + RADIOBUTTON "В границах &окна", IDC_PAGEFMT_WW, 18, 45, 117, 15 + RADIOBUTTON "В границах &полей", IDC_PAGEFMT_WM, 18, 65, 117, 15 + GROUPBOX "Панели", -1, 150, 10, 120, 85 + CHECKBOX "&Инструментов", IDC_PAGEFMT_TB, 160, 20, 80, 15 + CHECKBOX "&Форматирования", IDC_PAGEFMT_FB, 160, 38, 80, 15 + CHECKBOX "&Линейка", IDC_PAGEFMT_RU, 160, 56, 80, 15 + CHECKBOX "&Строка состояния", IDC_PAGEFMT_SB, 160, 74, 80, 15 + LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0 +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_RICHTEXT_FILES_RTF, "Файлы RTF (*.rtf)" + STRING_TEXT_FILES_TXT, "Текстовые документы (*.txt)" + STRING_TEXT_FILES_UNICODE_TXT, "Документы Unicode (*.txt)" + STRING_ALL_FILES, "Все документы (*.*)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_ALIGN_LEFT, "По левому краю" + STRING_ALIGN_RIGHT, "По правому краю" + STRING_ALIGN_CENTER, "По центру" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_NEWFILE_RICHTEXT, "Файл RTF" + STRING_NEWFILE_TXT, "Текстовый документ" + STRING_NEWFILE_TXT_UNICODE, "Документ в формате Unicode" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_PRINTER_FILES_PRN, "Файлы принтера (*.PRN)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_VIEWPROPS_TITLE, "Настройки" + STRING_VIEWPROPS_TEXT, "Текст" + STRING_VIEWPROPS_RICHTEXT, "Файл RTF" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_PREVIEW_PRINT, "Печать" + STRING_PREVIEW_NEXTPAGE, "Следующая страница" + STRING_PREVIEW_PREVPAGE, "Предыдущая страница" + STRING_PREVIEW_TWOPAGES, "Two pages" + STRING_PREVIEW_ONEPAGE, "One page" + STRING_PREVIEW_CLOSE, "Закрыть" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_UNITS_CM, "см" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_DEFAULT_FILENAME, "Document" + STRING_PROMPT_SAVE_CHANGES, "Сохранить изменения в '%s'?" + STRING_SEARCH_FINISHED, "Поиск в документе завершен." + STRING_LOAD_RICHED_FAILED, "Ошибка загрузки библиотеки RichEdit." + STRING_SAVE_LOSEFORMATTING, "Сохранение документа в виде неформатированного текста, " \ + "приведет к потере форматирования. Подтверждаете выполнение" \ + "этой операции?" + STRING_INVALID_NUMBER, "Неправильный числовой формат" + STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage документы не поддерживаются" + STRING_PRINTING_NOT_IMPLEMENTED, "Печать не поддерживается" +END diff --git a/programs/write/Ru.rc b/programs/write/Ru.rc index 5824ad13f00..008011f2720 100644 --- a/programs/write/Ru.rc +++ b/programs/write/Ru.rc @@ -20,9 +20,12 @@ #include "resources.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE { - IDS_FAILED, "Íå óäàëîñü çàïóñòèòü Wordpad" + IDS_FAILED, "Не удалось запустить Wordpad" } diff --git a/programs/xcopy/Lt.rc b/programs/xcopy/Lt.rc index 182a39ab246..9d431de08fa 100644 --- a/programs/xcopy/Lt.rc +++ b/programs/xcopy/Lt.rc @@ -29,18 +29,18 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE { STRING_INVPARMS, "Neteisingas parametrų skaičius - pagalba: xcopy /?\n" - STRING_INVPARM, "Neteisingas parametras '%s' - pagalba: xcopy /?\n" + STRING_INVPARM, "Neteisingas parametras „%s“ - pagalba: xcopy /?\n" STRING_PAUSE, "Spauskite kopijavimui pradėti\n" STRING_SIMCOPY, "bus nukopijuota failų: %d\n" STRING_COPY, "nukopijuota failų: %d\n" - STRING_QISDIR, "Ar '%s' yra failas, ar katalogas,\n" \ + STRING_QISDIR, "Ar „%s“ yra failas, ar katalogas,\n" \ "ar paskirtis?\n" \ "(F - failas, K - katalogas)\n" STRING_SRCPROMPT,"%s? (Taip|Ne)\n" STRING_OVERWRITE,"Perrašyti %s? (Taip|Ne|Visus)\n" - STRING_COPYFAIL, "'%s' kopijavimas į '%s' nepavyko su r/c %d\n" - STRING_OPENFAIL, "Nepavyko atverti '%s'\n" - STRING_READFAIL, "Klaida skaitant '%s'\n" + STRING_COPYFAIL, "„%s“ kopijavimas į „%s“ nepavyko su r/c %d\n" + STRING_OPENFAIL, "Nepavyko atverti „%s“\n" + STRING_READFAIL, "Klaida skaitant „%s“\n" STRING_YES_CHAR, "T" STRING_NO_CHAR, "N" STRING_ALL_CHAR, "V" diff --git a/programs/xcopy/Ru.rc b/programs/xcopy/Ru.rc dissimilarity index 62% index 398345713f7..154c999d357 100644 --- a/programs/xcopy/Ru.rc +++ b/programs/xcopy/Ru.rc @@ -1,83 +1,86 @@ -/* - * XCOPY - Wine-compatible xcopy program - * Russian language support - * - * Copyright (C) 2007 J. Edmeades - * Copyright (C) 2007 Kirill K. Smirnov - * - * 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" - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -STRINGTABLE -{ - STRING_INVPARMS, -"Íåäîïóñòèìîå ÷èñëî ïàðàìåòðîâ - ïîïðîáóéòå 'xcopy /?' äëÿ ïîëó÷åíèÿ\n\ -ïîäðîáíîãî îïèñàíèÿ.\n" - STRING_INVPARM, -"Íåäîïóñòèìûé ïàðàìåòð '%s' - ïîïðîáóéòå 'xcopy /?' äëÿ ïîëó÷åíèÿ ïîäðîáíîãî\n\ -îïèñàíèÿ.\n" - STRING_PAUSE, "Íàæìèòå êëàâèøó , ÷òîáû íà÷àòü êîïèðîâàíèå.\n" - STRING_SIMCOPY, "%d ôàéë(îâ) áûëî áû ñêîïèðîâàíî.\n" - STRING_COPY, "%d ôàéë(îâ) ñêîïèðîâàíî.\n" - STRING_QISDIR, "'%s' ÿâëÿåòñÿ ôàéëîì èëè ïàïêîé?\n" \ - "(F - Ôàéë, D - Ïàïêà)\n" - STRING_SRCPROMPT,"%s? (Yes|No)\n" - STRING_OVERWRITE,"Ïåðåïèñàòü %s? (Yes|No|All)\n" - STRING_COPYFAIL, "Ïðè êîïèðîâàíèè '%s' â '%s' ïðîèçîøëà îøèáêà: %d\n" - STRING_OPENFAIL, "Íåâîçìîæíî îòêðûòü '%s'\n" - STRING_READFAIL, "Ïðè ÷òåíèè '%s' ïðîèçîøëà îøèáêà\n" - STRING_YES_CHAR, "Y" - STRING_NO_CHAR, "N" - STRING_ALL_CHAR, "A" - STRING_FILE_CHAR,"F" - STRING_DIR_CHAR, "D" - - STRING_HELP, -"XCOPY - Êîïèðóåò ôàéëû è äåðåâüÿ ïàïîê\n\ -\n\ -Ñèíòàêñèñ:\n\ -XCOPY source [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\ - òî ïðåäïîëàãàåòñÿ ïàïêà â êà÷åñòâå ìåñòà íàçíà÷åíèÿ.\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\ - ïðè ýòîì àòðèáóò óäàëÿåòñÿ.\n\ -[/D | /D:m-d-y] Êîïèðóåò òîëüêî íîâûå ôàéëû èëè òå, êîòîðûå áûëè èçìåíåíû\n\ - ïîñëå óêàçàííîé äàòû. Åñëè äàòà íå óêàçàíà, êîïèðóåò òîëüêî\n\ - òå ôàéëû, êîòîðûå íîâåå â èñõîäíîé ïàïêå.\n" -} +/* + * XCOPY - Wine-compatible xcopy program + * Russian language support + * + * Copyright (C) 2007 J. Edmeades + * Copyright (C) 2007 Kirill K. Smirnov + * + * 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" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +STRINGTABLE +{ + STRING_INVPARMS, +"Недопустимое число параметров - попробуйте 'xcopy /?' для получения\n\ +подробного описания.\n" + STRING_INVPARM, +"Недопустимый параметр '%s' - попробуйте 'xcopy /?' для получения подробного\n\ +описания.\n" + STRING_PAUSE, "Нажмите клавишу , чтобы начать копирование.\n" + STRING_SIMCOPY, "%d файл(ов) было бы скопировано.\n" + STRING_COPY, "%d файл(ов) скопировано.\n" + STRING_QISDIR, "'%s' является файлом или папкой?\n" \ + "(F - Файл, D - Папка)\n" + STRING_SRCPROMPT,"%s? (Yes|No)\n" + STRING_OVERWRITE,"Переписать %s? (Yes|No|All)\n" + STRING_COPYFAIL, "При копировании '%s' в '%s' произошла ошибка: %d\n" + STRING_OPENFAIL, "Невозможно открыть '%s'\n" + STRING_READFAIL, "При чтении '%s' произошла ошибка\n" + STRING_YES_CHAR, "Y" + STRING_NO_CHAR, "N" + STRING_ALL_CHAR, "A" + STRING_FILE_CHAR,"F" + STRING_DIR_CHAR, "D" + + STRING_HELP, +"XCOPY - Копирует файлы и деревья папок\n\ +\n\ +Синтаксис:\n\ +XCOPY source [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\ + то предполагается папка в качестве места назначения.\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\ + при этом атрибут удаляется.\n\ +[/D | /D:m-d-y] Копирует только новые файлы или те, которые были изменены\n\ + после указанной даты. Если дата не указана, копирует только\n\ + те файлы, которые новее в исходной папке.\n" +} diff --git a/tools/make_makefiles b/tools/make_makefiles index f23706c56a3..fb156979007 100755 --- a/tools/make_makefiles +++ b/tools/make_makefiles @@ -109,11 +109,18 @@ my %exported_wine_headers = ( my %private_idl_headers = ( "axcore.idl" => 1, "axextend.idl" => 1, + "binres.idl" => 1, + "crtrow.idl" => 1, + "dbccmd.idl" => 1, + "dbcses.idl" => 1, + "dbdsad.idl" => 1, "dbinit.idl" => 1, "dbprop.idl" => 1, "dbs.idl" => 1, "devenum.idl" => 1, "dyngraph.idl" => 1, + "opnrst.idl" => 1, + "sesprp.idl" => 1, "vmrender.idl" => 1, "wine/wined3d.idl" => 1, "wine/winedxgi.idl" => 1, diff --git a/tools/wmc/write.c b/tools/wmc/write.c index 22858b8871e..7f9784f8438 100644 --- a/tools/wmc/write.c +++ b/tools/wmc/write.c @@ -396,8 +396,13 @@ static char *make_string(WCHAR *uc, int len, int codepage) else mlen = wine_utf8_wcstombs(0, uc, unistrlen(uc)+1, NULL, 0); cc = tmp = xmalloc(mlen); - if((i = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, tmp, mlen, NULL, NULL)) < 0) - internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i); + if (cpdef) { + if((i = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, tmp, mlen, NULL, NULL)) < 0) + internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i); + } else { + if((i = wine_utf8_wcstombs(0, uc, unistrlen(uc)+1, tmp, mlen)) < 0) + internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i); + } *cptr++ = ' '; *cptr++ = '"'; for(i = b = 0; i < len; i++, cc++) -- 2.11.4.GIT